aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini4
-rw-r--r--tests/wpt/metadata/MANIFEST.json6487
-rw-r--r--tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini3
-rw-r--r--tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini13
-rw-r--r--tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini2
-rw-r--r--tests/wpt/metadata/encoding/idlharness.any.js.ini120
-rw-r--r--tests/wpt/metadata/encoding/single-byte-decoder.html.ini548
-rw-r--r--tests/wpt/metadata/encoding/streams/backpressure.any.js.ini17
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini17
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini83
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini23
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini71
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini77
-rw-r--r--tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini35
-rw-r--r--tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini47
-rw-r--r--tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini125
-rw-r--r--tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini23
-rw-r--r--tests/wpt/metadata/encoding/streams/realms.window.js.ini2
-rw-r--r--tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini11
-rw-r--r--tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini5
-rw-r--r--tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini10
-rw-r--r--tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini4
-rw-r--r--tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini10
-rw-r--r--tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini10
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini3
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini58
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini7
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini10
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini73
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini13
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini10
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini7
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini4
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini16
-rw-r--r--tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini2
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini13
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini4
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini4
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini145
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini34
-rw-r--r--tests/wpt/metadata/url/urlencoded-parser.any.js.ini20
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini10
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini9
-rw-r--r--tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini7
-rw-r--r--tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini1
-rw-r--r--tests/wpt/metadata/xhr/headers-normalize-response.htm.ini6
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html7
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html10
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html (renamed from tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html)0
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml1
-rw-r--r--tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml17
-rw-r--r--tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html1
-rw-r--r--tests/wpt/web-platform-tests/compat/webkit-appearance.html57
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html10
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html39
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html58
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html42
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html79
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/general-tests.html10
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html52
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/name-tests.html68
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html36
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/path-tests.html68
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str79
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js55
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py58
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str12
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-testbin0 -> 23 bytes
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test4
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test4
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test7
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test2
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected0
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test3
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test1
-rw-r--r--tests/wpt/web-platform-tests/cookies/http-state/value-tests.html41
-rw-r--r--tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html38
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html17
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html15
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html14
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html20
-rw-r--r--tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht17
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html17
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html32
-rw-r--r--tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html2
-rw-r--r--tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html28
-rw-r--r--tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html166
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html129
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html13
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html9
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html143
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html1
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html1
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html14
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/webkit-pseudo-element.html (renamed from tests/wpt/web-platform-tests/compat/webkit-pseudo-element.html)2
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html22
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js60
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js72
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js38
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js24
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js77
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js50
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js41
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js63
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js144
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js22
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/realms.window.js347
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js12
-rw-r--r--tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js11
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html97
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html100
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html30
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html32
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html29
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html30
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/image.jpgbin0 -> 2033 bytes
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html30
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html32
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html35
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html34
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html24
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html30
-rw-r--r--tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers1
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js5
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html88
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html86
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html30
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html30
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html37
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html37
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html89
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html30
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html89
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html31
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js7
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py2
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py14
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html28
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html28
-rw-r--r--tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html113
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html7
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html8
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html4
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html7
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html7
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html26
-rw-r--r--tests/wpt/web-platform-tests/html/META.yml1
-rw-r--r--tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html29
-rw-r--r--tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js13
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml4
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html14
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html)27
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html)25
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html9
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html10
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html25
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html27
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html11
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html16
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html7
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html11
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html (renamed from tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css18
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-default-feature-policy.https.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html)0
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers (renamed from tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers)0
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html2
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html5
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html22
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js29
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js74
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js25
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html20
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html9
-rw-r--r--tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js26
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html (renamed from tests/wpt/web-platform-tests/dom/inert/inert-does-not-match-disabled-selector.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-in-shadow-dom.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-in-shadow-dom.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-inlines.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-inlines.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-label-focus.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-label-focus.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-node-is-uneditable.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-uneditable.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unfocusable.html)0
-rw-r--r--tests/wpt/web-platform-tests/inert/inert-node-is-unselectable.tentative.html (renamed from tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unselectable.html)0
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html5
-rw-r--r--tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html4
-rw-r--r--tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js14
-rw-r--r--tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html24
-rw-r--r--tests/wpt/web-platform-tests/interfaces/background-fetch.idl12
-rw-r--r--tests/wpt/web-platform-tests/interfaces/encoding.idl36
-rw-r--r--tests/wpt/web-platform-tests/interfaces/payment-request.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/pointerevents.idl1
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webxr.idl2
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist4
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html25
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html76
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html46
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html85
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html91
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html84
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html109
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html29
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html137
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html74
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html29
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html67
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html26
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html45
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html30
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js69
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html51
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html63
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html29
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html2
-rw-r--r--tests/wpt/web-platform-tests/network-error-logging/support/lock.py12
-rw-r--r--tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html15
-rw-r--r--tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html11
-rw-r--r--tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html76
-rw-r--r--tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js46
-rw-r--r--tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html4
-rw-r--r--tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html69
-rw-r--r--tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html55
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html (renamed from tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html)18
-rw-r--r--tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html42
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers1
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js1329
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js227
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js40
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers1
-rw-r--r--tests/wpt/web-platform-tests/resources/chromium/webusb-test.js83
-rw-r--r--tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html14
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py18
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html32
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html19
-rw-r--r--tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html16
-rw-r--r--tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.any.js (renamed from tests/wpt/web-platform-tests/storage/storage-estimate-indexeddb.js)50
-rw-r--r--tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html14
-rw-r--r--tests/wpt/web-platform-tests/storage/estimate-parallel.https.any.js (renamed from tests/wpt/web-platform-tests/storage/estimate-parallel.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js (renamed from tests/wpt/web-platform-tests/storage/opaque-origin.https.html)8
-rw-r--r--tests/wpt/web-platform-tests/storage/permission-query.https.any.js10
-rw-r--r--tests/wpt/web-platform-tests/storage/persisted-worker.https.html16
-rw-r--r--tests/wpt/web-platform-tests/storage/persisted.https.any.js (renamed from tests/wpt/web-platform-tests/storage/storage-persisted.js)6
-rw-r--r--tests/wpt/web-platform-tests/storage/persisted.https.html14
-rw-r--r--tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js13
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.any.js (renamed from tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html10
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-persist.https.window.js (renamed from tests/wpt/web-platform-tests/storage/storagemanager-persist.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-persist.https.worker.js (renamed from tests/wpt/web-platform-tests/storage/resources/storagemanager-persist-worker.js)3
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html10
-rw-r--r--tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.any.js (renamed from tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.html)10
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/item.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/manifest.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/sourcefile.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/serve.py15
-rw-r--r--tests/wpt/web-platform-tests/tools/serve/test_functional.py77
-rw-r--r--tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/run.py4
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py18
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tox.ini1
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py2
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html14
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html40
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html22
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html16
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html294
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html24
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html28
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html299
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Window-TrustedTypes.tentative.html (renamed from tests/wpt/web-platform-tests/trusted-types/Window-trustedTypes.tentative.html)4
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html26
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html14
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html40
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html20
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html12
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html16
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html57
-rw-r--r--tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js56
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js121
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js7
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js94
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js22
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js34
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js53
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js10
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js15
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js50
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js86
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js170
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js7
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js25
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js66
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js81
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js87
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js9
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js11
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js114
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js220
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js86
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js46
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js7
-rw-r--r--tests/wpt/web-platform-tests/wasm/resources/frame.html18
-rw-r--r--tests/wpt/web-platform-tests/wasm/resources/service-worker.js30
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html38
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html59
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html66
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/incrementer.wasm (renamed from tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm)bin46 -> 46 bytes
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js9
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html31
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/blank.html (renamed from tests/wpt/web-platform-tests/wasm/resources/blank.html)0
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html20
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js7
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js9
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html11
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js5
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html12
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html11
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html11
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js8
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js5
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasmbin0 -> 46 bytes
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html5
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html5
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html5
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html11
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js34
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js21
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js57
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html34
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js45
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js28
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html26
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html21
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html54
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html33
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html25
-rw-r--r--tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html57
-rw-r--r--tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html19
-rw-r--r--tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html8
-rw-r--r--tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js18
-rw-r--r--tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js21
-rw-r--r--tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html23
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js14
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/audit.js35
-rw-r--r--tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html12
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html20
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html10
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html6
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html14
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html6
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html7
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html73
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html6
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html8
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html15
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html15
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html4
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html9
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html20
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html5
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html18
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html6
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html2
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html71
-rw-r--r--tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html24
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py5
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py48
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py121
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py10
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py41
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py122
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py109
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py120
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py52
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py139
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py58
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py62
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py62
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/support/inline.py9
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py40
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py74
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py25
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py68
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html43
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js10
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html10
-rw-r--r--tests/wpt/web-platform-tests/webrtc/no-media-call.html10
-rw-r--r--tests/wpt/web-platform-tests/webrtc/simplecall.https.html4
-rw-r--r--tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html1
-rw-r--r--tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js15
-rw-r--r--tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js23
-rw-r--r--tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html17
-rw-r--r--tests/wpt/web-platform-tests/webusb/usb.https.window.js26
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js33
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js23
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html61
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html35
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js345
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js45
-rw-r--r--tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js53
-rw-r--r--tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html15
-rw-r--r--tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html15
-rw-r--r--tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html15
-rw-r--r--tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html15
-rw-r--r--tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html15
-rw-r--r--tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js2
-rw-r--r--tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm23
-rw-r--r--tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html9
844 files changed, 19759 insertions, 3050 deletions
diff --git a/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini b/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini
new file mode 100644
index 00000000000..93b0cf0b169
--- /dev/null
+++ b/tests/wpt/metadata/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html.ini
@@ -0,0 +1,4 @@
+[2d.text.draw.baseline.alphabetic.html]
+ [Canvas test: 2d.text.draw.baseline.alphabetic]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 13ba2717caf..a40f5d249ca 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -11617,6 +11617,12 @@
{}
]
],
+ "fullscreen/rendering/fullscreen-root-block-scroll-manual.html": [
+ [
+ "/fullscreen/rendering/fullscreen-root-block-scroll-manual.html",
+ {}
+ ]
+ ],
"fullscreen/rendering/fullscreen-root-block-size-manual.html": [
[
"/fullscreen/rendering/fullscreen-root-block-size-manual.html",
@@ -13333,6 +13339,12 @@
{}
]
],
+ "payment-request/MerchantValidationEvent/complete-method-manual.https.html": [
+ [
+ "/payment-request/MerchantValidationEvent/complete-method-manual.https.html",
+ {}
+ ]
+ ],
"payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [
[
"/payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html",
@@ -13519,6 +13531,12 @@
{}
]
],
+ "pointerevents/extension/pointerevent_pointerrawmove-manual.html": [
+ [
+ "/pointerevents/extension/pointerevent_pointerrawmove-manual.html",
+ {}
+ ]
+ ],
"pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html": [
[
"/pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html",
@@ -19767,6 +19785,18 @@
{}
]
],
+ "css/CSS2/abspos/static-inside-table-cell.html": [
+ [
+ "/css/CSS2/abspos/static-inside-table-cell.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/abspos/table-caption-is-containing-block-001.html": [
[
"/css/CSS2/abspos/table-caption-is-containing-block-001.html",
@@ -53223,6 +53253,18 @@
{}
]
],
+ "css/CSS2/linebox/anonymous-inline-inherit-001.html": [
+ [
+ "/css/CSS2/linebox/anonymous-inline-inherit-001.html",
+ [
+ [
+ "/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/linebox/border-padding-bleed-001.xht": [
[
"/css/CSS2/linebox/border-padding-bleed-001.xht",
@@ -55347,6 +55389,18 @@
{}
]
],
+ "css/CSS2/linebox/vertical-align-nested-top-001.html": [
+ [
+ "/css/CSS2/linebox/vertical-align-nested-top-001.html",
+ [
+ [
+ "/css/CSS2/linebox/vertical-align-nested-top-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/linebox/vertical-align-sub-001.xht": [
[
"/css/CSS2/linebox/vertical-align-sub-001.xht",
@@ -75387,6 +75441,18 @@
{}
]
],
+ "css/CSS2/positioning/abspos-inline-008.xht": [
+ [
+ "/css/CSS2/positioning/abspos-inline-008.xht",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square-only.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/CSS2/positioning/abspos-overflow-001.xht": [
[
"/css/CSS2/positioning/abspos-overflow-001.xht",
@@ -107095,6 +107161,54 @@
{}
]
],
+ "css/css-break/widows-orphans-001.html": [
+ [
+ "/css/css-break/widows-orphans-001.html",
+ [
+ [
+ "/css/css-break/reference/widows-orphans-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-break/widows-orphans-002.html": [
+ [
+ "/css/css-break/widows-orphans-002.html",
+ [
+ [
+ "/css/css-break/reference/widows-orphans-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-break/widows-orphans-003.html": [
+ [
+ "/css/css-break/widows-orphans-003.html",
+ [
+ [
+ "/css/css-break/reference/widows-orphans-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-break/widows-orphans-004.html": [
+ [
+ "/css/css-break/widows-orphans-004.html",
+ [
+ [
+ "/css/css-break/reference/widows-orphans-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-cascade/all-prop-001.html": [
[
"/css/css-cascade/all-prop-001.html",
@@ -113035,6 +113149,30 @@
{}
]
],
+ "css/css-filter/blur-clip-stacking-context-001.html": [
+ [
+ "/css/css-filter/blur-clip-stacking-context-001.html",
+ [
+ [
+ "/css/css-filter/blur-clip-stacking-context-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-filter/blur-clip-stacking-context-002.html": [
+ [
+ "/css/css-filter/blur-clip-stacking-context-002.html",
+ [
+ [
+ "/css/css-filter/blur-clip-stacking-context-ref.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-filter/filtered-block-is-container.html": [
[
"/css/css-filter/filtered-block-is-container.html",
@@ -125259,6 +125397,30 @@
{}
]
],
+ "css/css-multicol/inline-block-and-column-span-all.html": [
+ [
+ "/css/css-multicol/inline-block-and-column-span-all.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "css/css-multicol/intrinsic-size-001.html": [
+ [
+ "/css/css-multicol/intrinsic-size-001.html",
+ [
+ [
+ "/css/reference/ref-filled-green-100px-square.xht",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-basic-001.html": [
[
"/css/css-multicol/multicol-basic-001.html",
@@ -184903,84 +185065,132 @@
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html",
"=="
]
],
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html",
[
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html",
"=="
]
],
@@ -186631,6 +186841,18 @@
{}
]
],
+ "infrastructure/reftest/reftest_and_mismatch.html": [
+ [
+ "/infrastructure/reftest/reftest_and_mismatch.html",
+ [
+ [
+ "/infrastructure/reftest/reftest_and_mismatch_0.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"infrastructure/reftest/reftest_match.html": [
[
"/infrastructure/reftest/reftest_match.html",
@@ -192025,6 +192247,18 @@
{}
]
],
+ "infrastructure/reftest/reftest_and_mismatch_0.html": [
+ [
+ "/infrastructure/reftest/reftest_and_mismatch_0.html",
+ [
+ [
+ "/infrastructure/reftest/reftest_and_mismatch_1.html",
+ "!="
+ ]
+ ],
+ {}
+ ]
+ ],
"infrastructure/reftest/reftest_cycle.html": [
[
"/infrastructure/reftest/reftest_cycle.html",
@@ -220674,6 +220908,11 @@
{}
]
],
+ "cookies/http-state/resources/all-tests.html.py-str": [
+ [
+ {}
+ ]
+ ],
"cookies/http-state/resources/cookie-http-state-template.js": [
[
{}
@@ -221239,6 +221478,1686 @@
{}
]
],
+ "cookies/http-state/resources/test-files/charset0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/charset0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0008-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0008-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0009-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0009-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0010-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0010-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0011-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0011-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0012-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0012-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0013-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0013-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0014-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0014-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0015-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0015-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0016-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0016-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0017-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0017-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0018-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0018-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0019-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0019-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0021-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/chromium0021-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/comma0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0020-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0020-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0022-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0022-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0023-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0023-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-path0029-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/disabled-path0029-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0008-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0008-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0009-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0009-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0010-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0010-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0011-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0011-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0012-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0012-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0013-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0013-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0014-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0014-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0015-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0015-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0016-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0016-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0017-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0017-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0018-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0018-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0019-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0019-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0020-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0020-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0021-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0021-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0022-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0022-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0023-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0023-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0024-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0024-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0025-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0025-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0026-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0026-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0027-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0027-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0028-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0028-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0029-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0029-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0031-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0031-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0033-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0033-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0034-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0034-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0035-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0035-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0036-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0036-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0037-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0037-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0038-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0038-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0039-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0039-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0040-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0040-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0041-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0041-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0042-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/domain0042-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0008-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0008-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0009-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0009-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0010-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0010-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0011-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0011-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0012-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0012-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0013-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0013-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0014-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0014-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0015-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0015-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0016-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0016-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0017-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/mozilla0017-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0008-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0008-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0009-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0009-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0010-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0010-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0011-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0011-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0012-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0012-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0013-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0013-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0014-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0014-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0015-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0015-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0016-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0016-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0017-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0017-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0018-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0018-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0019-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0019-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0020-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0020-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0021-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0021-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0022-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0022-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0023-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0023-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0024-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0024-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0025-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0025-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0026-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0026-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0027-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0027-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0028-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0028-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0029-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0029-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0030-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0030-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0031-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0031-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0032-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0032-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0033-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/name0033-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0030-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0030-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0041-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0041-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0042-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0042-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0043-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0043-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/ordering0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/ordering0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0006-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0007-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0007-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0008-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0008-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0009-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0009-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0010-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0010-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0011-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0011-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0012-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0012-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0013-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0013-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0014-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0014-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0015-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0015-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0016-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0016-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0017-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0017-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0018-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0018-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0019-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0019-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0020-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0020-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0021-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0021-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0022-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0022-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0023-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0023-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0024-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0024-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0025-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0025-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0026-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0026-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0027-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0027-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0028-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0028-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0029-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0029-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0030-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0030-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0031-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0031-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0032-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/path0032-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0001-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0001-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0002-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0002-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0003-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0003-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0004-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0004-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0005-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0005-test": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0006-expected": [
+ [
+ {}
+ ]
+ ],
+ "cookies/http-state/resources/test-files/value0006-test": [
+ [
+ {}
+ ]
+ ],
"cookies/resources/cookie-helper.sub.js": [
[
{}
@@ -230614,6 +232533,11 @@
{}
]
],
+ "css/CSS2/linebox/anonymous-inline-inherit-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/CSS2/linebox/border-padding-bleed-001-ref.xht": [
[
{}
@@ -230929,6 +232853,11 @@
{}
]
],
+ "css/CSS2/linebox/vertical-align-nested-top-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/CSS2/linebox/vertical-align-sub-001-ref.xht": [
[
{}
@@ -244644,6 +246573,11 @@
{}
]
],
+ "css/css-break/reference/widows-orphans-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-cascade/META.yml": [
[
{}
@@ -245609,6 +247543,11 @@
{}
]
],
+ "css/css-filter/blur-clip-stacking-context-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-filter/filtered-block-is-container-ref.html": [
[
{}
@@ -276479,6 +278418,16 @@
{}
]
],
+ "encoding/streams/resources/readable-stream-from-array.js": [
+ [
+ {}
+ ]
+ ],
+ "encoding/streams/resources/readable-stream-to-array.js": [
+ [
+ {}
+ ]
+ ],
"encrypted-media/META.yml": [
[
{}
@@ -277004,12 +278953,7 @@
{}
]
],
- "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers": [
- [
- {}
- ]
- ],
- "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers": [
+ "feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers": [
[
{}
]
@@ -277179,6 +279123,61 @@
{}
]
],
+ "feature-policy/reporting/camera-reporting.https.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/document-write-reporting.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/fullscreen-reporting.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/geolocation-reporting.https.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/image.jpg": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/microphone-reporting.https.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/midi-reporting.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/payment-reporting.https.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/sync-xhr-reporting.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/unsized-media-reporting.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "feature-policy/reporting/usb-reporting.https.html.headers": [
+ [
+ {}
+ ]
+ ],
"feature-policy/resources/autoplay.js": [
[
{}
@@ -285579,57 +287578,87 @@
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html": [
[
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html": [
+ [
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css": [
[
{}
]
@@ -285969,6 +287998,16 @@
{}
]
],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers": [
+ [
+ {}
+ ]
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers": [
+ [
+ {}
+ ]
+ ],
"html/semantics/embedded-content/media-elements/contains.json": [
[
{}
@@ -288814,16 +290853,6 @@
{}
]
],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html": [
- [
- {}
- ]
- ],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html": [
- [
- {}
- ]
- ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011-1.html": [
[
{}
@@ -288914,11 +290943,21 @@
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html": [
+ [
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/set-document-domain.html": [
[
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [
+ [
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/type-argument-plaintext-subframe.txt": [
[
{}
@@ -289429,6 +291468,11 @@
{}
]
],
+ "infrastructure/reftest/reftest_and_mismatch_1.html": [
+ [
+ {}
+ ]
+ ],
"infrastructure/reftest/reftest_ref_timeout-ref.html": [
[
{}
@@ -290994,6 +293038,11 @@
{}
]
],
+ "mediacapture-image/resources/imagecapture-helpers.js": [
+ [
+ {}
+ ]
+ ],
"mediacapture-record/META.yml": [
[
{}
@@ -295444,6 +297493,21 @@
{}
]
],
+ "resources/chromium/image_capture-mojom.js.headers": [
+ [
+ {}
+ ]
+ ],
+ "resources/chromium/image_capture.mojom.js": [
+ [
+ {}
+ ]
+ ],
+ "resources/chromium/mock-imagecapture.js": [
+ [
+ {}
+ ]
+ ],
"resources/chromium/mojo_bindings.js": [
[
{}
@@ -295514,6 +297578,16 @@
{}
]
],
+ "resources/chromium/webusb-child-test.js": [
+ [
+ {}
+ ]
+ ],
+ "resources/chromium/webusb-child-test.js.headers": [
+ [
+ {}
+ ]
+ ],
"resources/chromium/webusb-test.js": [
[
{}
@@ -299624,11 +301698,6 @@
{}
]
],
- "service-workers/service-worker/resources/update-top-level-worker.py": [
- [
- {}
- ]
- ],
"service-workers/service-worker/resources/update-worker.py": [
[
{}
@@ -299829,26 +301898,6 @@
{}
]
],
- "storage/resources/storagemanager-persist-worker.js": [
- [
- {}
- ]
- ],
- "storage/resources/storagemanager-persisted-worker.js": [
- [
- {}
- ]
- ],
- "storage/storage-estimate-indexeddb.js": [
- [
- {}
- ]
- ],
- "storage/storage-persisted.js": [
- [
- {}
- ]
- ],
"streams/META.yml": [
[
{}
@@ -302039,6 +304088,11 @@
{}
]
],
+ "tools/serve/test_functional.py": [
+ [
+ {}
+ ]
+ ],
"tools/serve/test_serve.py": [
[
{}
@@ -307029,6 +309083,11 @@
{}
]
],
+ "tools/wpt/tests/test_run.py": [
+ [
+ {}
+ ]
+ ],
"tools/wpt/tests/test_wpt.py": [
[
{}
@@ -308844,6 +310903,11 @@
{}
]
],
+ "wasm/jsapi/table/assertions.js": [
+ [
+ {}
+ ]
+ ],
"wasm/jsapi/wasm-constants.js": [
[
{}
@@ -308854,37 +310918,112 @@
{}
]
],
- "wasm/resources/blank.html": [
+ "wasm/resources/load_wasm.js": [
[
{}
]
],
- "wasm/resources/frame.html": [
+ "wasm/serialization/incrementer.wasm": [
[
{}
]
],
- "wasm/resources/incrementer.wasm": [
+ "wasm/serialization/resources/blank.html": [
[
{}
]
],
- "wasm/resources/load_wasm.js": [
+ "wasm/serialization/resources/broadcastchannel-iframe.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/broadcastchannel-sharedworker.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/broadcastchannel-worker.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/create-empty-wasm-module.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/echo-iframe.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/echo-worker.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/incrementer-iframe-domain.sub.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/incrementer-iframe.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/incrementer-popup.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/incrementer-worker-with-channel.js": [
[
{}
]
],
- "wasm/resources/service-worker.js": [
+ "wasm/serialization/resources/incrementer-worker.js": [
[
{}
]
],
- "wasm/wasm_serialization_tests.js": [
+ "wasm/serialization/resources/incrementer.wasm": [
[
{}
]
],
- "wasm/wasm_serialization_worker.js": [
+ "wasm/serialization/resources/nested-iframe-1.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/nested-iframe-2.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/nested-iframe-3.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/nested-iframe-4-incrementer.html": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/serviceworker-failure.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/sharedworker-failure.js": [
+ [
+ {}
+ ]
+ ],
+ "wasm/serialization/resources/test-incrementer.js": [
[
{}
]
@@ -309539,11 +311678,26 @@
{}
]
],
+ "webdriver/tests/get_element_attribute/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/get_element_css_value/__init__.py": [
+ [
+ {}
+ ]
+ ],
"webdriver/tests/get_element_property/__init__.py": [
[
{}
]
],
+ "webdriver/tests/get_element_rect/__init__.py": [
+ [
+ {}
+ ]
+ ],
"webdriver/tests/get_element_tag_name/__init__.py": [
[
{}
@@ -309584,6 +311738,11 @@
{}
]
],
+ "webdriver/tests/is_element_enabled/__init__.py": [
+ [
+ {}
+ ]
+ ],
"webdriver/tests/is_element_selected/__init__.py": [
[
{}
@@ -309709,6 +311868,16 @@
{}
]
],
+ "webdriver/tests/take_element_screenshot/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/take_screenshot/__init__.py": [
+ [
+ {}
+ ]
+ ],
"webgl/META.yml": [
[
{}
@@ -309824,6 +311993,11 @@
{}
]
],
+ "webrtc/RTCQuicTransport-helper.js": [
+ [
+ {}
+ ]
+ ],
"webrtc/RTCRtpCapabilities-helper.js": [
[
{}
@@ -310199,6 +312373,11 @@
{}
]
],
+ "webusb/resources/open-in-worker.js": [
+ [
+ {}
+ ]
+ ],
"webusb/resources/usb-allowed-by-feature-policy-worker.js": [
[
{}
@@ -314726,12 +316905,6 @@
{}
]
],
- "2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html": [
- [
- "/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html",
- {}
- ]
- ],
"2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html": [
[
"/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.NaN.html",
@@ -318050,6 +320223,12 @@
{}
]
],
+ "2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html": [
+ [
+ "/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html",
+ {}
+ ]
+ ],
"2dcontext/text-styles/2d.text.draw.baseline.bottom.html": [
[
"/2dcontext/text-styles/2d.text.draw.baseline.bottom.html",
@@ -323750,9 +325929,9 @@
{}
]
],
- "compat/webkit-pseudo-element.html": [
+ "compat/webkit-appearance.html": [
[
- "/compat/webkit-pseudo-element.html",
+ "/compat/webkit-appearance.html",
{}
]
],
@@ -326490,12 +328669,66 @@
{}
]
],
+ "cookies/http-state/charset-tests.html": [
+ [
+ "/cookies/http-state/charset-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/chromium-tests.html": [
+ [
+ "/cookies/http-state/chromium-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/comma-tests.html": [
+ [
+ "/cookies/http-state/comma-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/domain-tests.html": [
+ [
+ "/cookies/http-state/domain-tests.html",
+ {}
+ ]
+ ],
"cookies/http-state/general-tests.html": [
[
"/cookies/http-state/general-tests.html",
{}
]
],
+ "cookies/http-state/mozilla-tests.html": [
+ [
+ "/cookies/http-state/mozilla-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/name-tests.html": [
+ [
+ "/cookies/http-state/name-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/ordering-tests.html": [
+ [
+ "/cookies/http-state/ordering-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/path-tests.html": [
+ [
+ "/cookies/http-state/path-tests.html",
+ {}
+ ]
+ ],
+ "cookies/http-state/value-tests.html": [
+ [
+ "/cookies/http-state/value-tests.html",
+ {}
+ ]
+ ],
"cookies/meta-blocked.html": [
[
"/cookies/meta-blocked.html",
@@ -326622,12 +328855,6 @@
{}
]
],
- "cookies/secure/create-cookie-http.html": [
- [
- "/cookies/secure/create-cookie-http.html",
- {}
- ]
- ],
"cookies/secure/set-from-dom.https.sub.html": [
[
"/cookies/secure/set-from-dom.https.sub.html",
@@ -338310,6 +340537,18 @@
{}
]
],
+ "css/selectors/webkit-pseudo-element.html": [
+ [
+ "/css/selectors/webkit-pseudo-element.html",
+ {}
+ ]
+ ],
+ "css/selectors/x-pseudo-element.html": [
+ [
+ "/css/selectors/x-pseudo-element.html",
+ {}
+ ]
+ ],
"custom-elements/CustomElementRegistry.html": [
[
"/custom-elements/CustomElementRegistry.html",
@@ -339042,12 +341281,6 @@
{}
]
],
- "dom/inert/inert-does-not-match-disabled-selector.html": [
- [
- "/dom/inert/inert-does-not-match-disabled-selector.html",
- {}
- ]
- ],
"dom/interface-objects.html": [
[
"/dom/interface-objects.html",
@@ -348714,6 +350947,192 @@
}
]
],
+ "encoding/streams/backpressure.any.js": [
+ [
+ "/encoding/streams/backpressure.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/backpressure.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/backpressure.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/backpressure.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-bad-chunks.any.js": [
+ [
+ "/encoding/streams/decode-bad-chunks.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-bad-chunks.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-bad-chunks.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-bad-chunks.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-ignore-bom.any.js": [
+ [
+ "/encoding/streams/decode-ignore-bom.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-ignore-bom.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-ignore-bom.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-ignore-bom.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-incomplete-input.any.js": [
+ [
+ "/encoding/streams/decode-incomplete-input.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-incomplete-input.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-incomplete-input.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-incomplete-input.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-non-utf8.any.js": [
+ [
+ "/encoding/streams/decode-non-utf8.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-non-utf8.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-non-utf8.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-non-utf8.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-split-character.any.js": [
+ [
+ "/encoding/streams/decode-split-character.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-split-character.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-split-character.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-split-character.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/decode-utf8.any.js": [
+ [
+ "/encoding/streams/decode-utf8.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-utf8.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-utf8.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/decode-utf8.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/encode-bad-chunks.any.js": [
+ [
+ "/encoding/streams/encode-bad-chunks.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-bad-chunks.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-bad-chunks.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-bad-chunks.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/encode-utf8.any.js": [
+ [
+ "/encoding/streams/encode-utf8.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-utf8.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-utf8.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/encode-utf8.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/readable-writable-properties.any.js": [
+ [
+ "/encoding/streams/readable-writable-properties.any.html",
+ {}
+ ],
+ [
+ "/encoding/streams/readable-writable-properties.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/readable-writable-properties.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/encoding/streams/readable-writable-properties.any.worker.html",
+ {}
+ ]
+ ],
+ "encoding/streams/realms.window.js": [
+ [
+ "/encoding/streams/realms.window.html",
+ {}
+ ]
+ ],
"encoding/textdecoder-byte-order-marks.any.js": [
[
"/encoding/textdecoder-byte-order-marks.any.html",
@@ -349912,49 +352331,21 @@
{}
]
],
- "feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
- [
- "/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html",
- {
- "testdriver": true
- }
- ]
- ],
- "feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [
- [
- "/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html",
- {
- "testdriver": true
- }
- ]
- ],
- "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html": [
- [
- "/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html",
- {
- "testdriver": true
- }
- ]
- ],
- "feature-policy/autoplay-default-feature-policy.https.sub.html": [
+ "feature-policy/experimental-features/document-write.tentative.html": [
[
- "/feature-policy/autoplay-default-feature-policy.https.sub.html",
- {
- "testdriver": true
- }
+ "/feature-policy/experimental-features/document-write.tentative.html",
+ {}
]
],
- "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html": [
+ "feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html": [
[
- "/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html",
- {
- "testdriver": true
- }
+ "/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html",
+ {}
]
],
- "feature-policy/experimental-features/document-write.tentative.html": [
+ "feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html": [
[
- "/feature-policy/experimental-features/document-write.tentative.html",
+ "/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html",
{}
]
],
@@ -350118,6 +352509,66 @@
}
]
],
+ "feature-policy/reporting/camera-reporting.https.html": [
+ [
+ "/feature-policy/reporting/camera-reporting.https.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/document-write-reporting.html": [
+ [
+ "/feature-policy/reporting/document-write-reporting.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/fullscreen-reporting.html": [
+ [
+ "/feature-policy/reporting/fullscreen-reporting.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/geolocation-reporting.https.html": [
+ [
+ "/feature-policy/reporting/geolocation-reporting.https.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/microphone-reporting.https.html": [
+ [
+ "/feature-policy/reporting/microphone-reporting.https.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/midi-reporting.html": [
+ [
+ "/feature-policy/reporting/midi-reporting.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/payment-reporting.https.html": [
+ [
+ "/feature-policy/reporting/payment-reporting.https.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/sync-xhr-reporting.html": [
+ [
+ "/feature-policy/reporting/sync-xhr-reporting.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/unsized-media-reporting.html": [
+ [
+ "/feature-policy/reporting/unsized-media-reporting.html",
+ {}
+ ]
+ ],
+ "feature-policy/reporting/usb-reporting.https.html": [
+ [
+ "/feature-policy/reporting/usb-reporting.https.html",
+ {}
+ ]
+ ],
"fetch/api/abort/cache.https.html": [
[
"/fetch/api/abort/cache.https.html",
@@ -350188,6 +352639,24 @@
{}
]
],
+ "fetch/api/basic/header-value-null-byte.any.js": [
+ [
+ "/fetch/api/basic/header-value-null-byte.any.html",
+ {}
+ ],
+ [
+ "/fetch/api/basic/header-value-null-byte.any.serviceworker.html",
+ {}
+ ],
+ [
+ "/fetch/api/basic/header-value-null-byte.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/fetch/api/basic/header-value-null-byte.any.worker.html",
+ {}
+ ]
+ ],
"fetch/api/basic/integrity.sub.any.js": [
[
"/fetch/api/basic/integrity.sub.any.html",
@@ -351546,57 +354015,33 @@
{}
]
],
- "fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html": [
- [
- "/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html",
- {}
- ]
- ],
- "fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html": [
- [
- "/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html",
- {}
- ]
- ],
- "fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html": [
- [
- "/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html",
- {}
- ]
- ],
- "fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html": [
- [
- "/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html",
- {}
- ]
- ],
- "fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html": [
+ "fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html": [
[
- "/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html",
+ "/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html",
{}
]
],
- "fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html": [
+ "fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [
[
- "/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html",
+ "/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html",
{}
]
],
- "fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html": [
+ "fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
[
- "/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html",
+ "/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html",
{}
]
],
- "fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html": [
+ "fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html": [
[
- "/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html",
+ "/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html",
{}
]
],
- "fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html": [
+ "fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html": [
[
- "/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html",
+ "/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html",
{}
]
],
@@ -354688,52 +357133,6 @@
{}
]
],
- "html/editing/focus/inert/inert-does-not-match-disabled-selector.html": [
- [
- "/html/editing/focus/inert/inert-does-not-match-disabled-selector.html",
- {}
- ]
- ],
- "html/editing/focus/inert/inert-in-shadow-dom.html": [
- [
- "/html/editing/focus/inert/inert-in-shadow-dom.html",
- {}
- ]
- ],
- "html/editing/focus/inert/inert-inlines.html": [
- [
- "/html/editing/focus/inert/inert-inlines.html",
- {
- "testdriver": true
- }
- ]
- ],
- "html/editing/focus/inert/inert-label-focus.html": [
- [
- "/html/editing/focus/inert/inert-label-focus.html",
- {
- "testdriver": true
- }
- ]
- ],
- "html/editing/focus/inert/inert-node-is-uneditable.html": [
- [
- "/html/editing/focus/inert/inert-node-is-uneditable.html",
- {}
- ]
- ],
- "html/editing/focus/inert/inert-node-is-unfocusable.html": [
- [
- "/html/editing/focus/inert/inert-node-is-unfocusable.html",
- {}
- ]
- ],
- "html/editing/focus/inert/inert-node-is-unselectable.html": [
- [
- "/html/editing/focus/inert/inert-node-is-unselectable.html",
- {}
- ]
- ],
"html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html": [
[
"/html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html",
@@ -355208,87 +357607,99 @@
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html",
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html",
+ {}
+ ]
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html",
{}
]
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html": [
[
- "/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html",
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html",
{}
]
],
@@ -355716,6 +358127,46 @@
{}
]
],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
+ [
+ "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [
+ [
+ "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html": [
+ [
+ "/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html": [
+ [
+ "/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html": [
+ [
+ "/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
"html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [
[
"/html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html",
@@ -364266,12 +366717,6 @@
{}
]
],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html": [
- [
- "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html",
- {}
- ]
- ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011.html": [
[
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011.html",
@@ -364398,6 +366843,12 @@
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js": [
+ [
+ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.html",
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js": [
[
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.html",
@@ -364428,6 +366879,18 @@
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js": [
+ [
+ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.html",
+ {}
+ ]
+ ],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js": [
+ [
+ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.html",
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js": [
[
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.html",
@@ -364458,6 +366921,12 @@
{}
]
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js": [
+ [
+ "/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.html",
+ {}
+ ]
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js": [
[
"/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.html",
@@ -365114,6 +367583,52 @@
{}
]
],
+ "inert/inert-does-not-match-disabled-selector.tentative.html": [
+ [
+ "/inert/inert-does-not-match-disabled-selector.tentative.html",
+ {}
+ ]
+ ],
+ "inert/inert-in-shadow-dom.tentative.html": [
+ [
+ "/inert/inert-in-shadow-dom.tentative.html",
+ {}
+ ]
+ ],
+ "inert/inert-inlines.tentative.html": [
+ [
+ "/inert/inert-inlines.tentative.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "inert/inert-label-focus.tentative.html": [
+ [
+ "/inert/inert-label-focus.tentative.html",
+ {
+ "testdriver": true
+ }
+ ]
+ ],
+ "inert/inert-node-is-uneditable.tentative.html": [
+ [
+ "/inert/inert-node-is-uneditable.tentative.html",
+ {}
+ ]
+ ],
+ "inert/inert-node-is-unfocusable.tentative.html": [
+ [
+ "/inert/inert-node-is-unfocusable.tentative.html",
+ {}
+ ]
+ ],
+ "inert/inert-node-is-unselectable.tentative.html": [
+ [
+ "/inert/inert-node-is-unselectable.tentative.html",
+ {}
+ ]
+ ],
"infrastructure/assumptions/html-elements.html": [
[
"/infrastructure/assumptions/html-elements.html",
@@ -365262,9 +367777,9 @@
}
]
],
- "input-device-capabilities/interfaces.html": [
+ "input-device-capabilities/idlharness.window.js": [
[
- "/input-device-capabilities/interfaces.html",
+ "/input-device-capabilities/idlharness.window.html",
{}
]
],
@@ -366314,12 +368829,120 @@
{}
]
],
+ "mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html": [
+ [
+ "/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/ImageCapture-creation.https.html": [
+ [
+ "/mediacapture-image/ImageCapture-creation.https.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/ImageCapture-grabFrame.html": [
+ [
+ "/mediacapture-image/ImageCapture-grabFrame.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-fast.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-reject.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-applyConstraints.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-getCapabilities-fast.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-getCapabilities.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-getCapabilities.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-getConstraints-fast.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-getConstraints-fast.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-getSettings-fast.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-getSettings-fast.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/MediaStreamTrack-getSettings.html": [
+ [
+ "/mediacapture-image/MediaStreamTrack-getSettings.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/detached-HTMLCanvasElement.html": [
+ [
+ "/mediacapture-image/detached-HTMLCanvasElement.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/getPhotoCapabilities.html": [
+ [
+ "/mediacapture-image/getPhotoCapabilities.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/getPhotoSettings.html": [
+ [
+ "/mediacapture-image/getPhotoSettings.html",
+ {}
+ ]
+ ],
"mediacapture-image/idlharness.window.js": [
[
"/mediacapture-image/idlharness.window.html",
{}
]
],
+ "mediacapture-image/setOptions-reject.html": [
+ [
+ "/mediacapture-image/setOptions-reject.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/takePhoto-with-PhotoSettings.html": [
+ [
+ "/mediacapture-image/takePhoto-with-PhotoSettings.html",
+ {}
+ ]
+ ],
+ "mediacapture-image/takePhoto.html": [
+ [
+ "/mediacapture-image/takePhoto.html",
+ {}
+ ]
+ ],
"mediacapture-record/BlobEvent-constructor.html": [
[
"/mediacapture-record/BlobEvent-constructor.html",
@@ -378200,6 +380823,18 @@
{}
]
],
+ "payment-request/MerchantValidationEvent/constructor.http.html": [
+ [
+ "/payment-request/MerchantValidationEvent/constructor.http.html",
+ {}
+ ]
+ ],
+ "payment-request/MerchantValidationEvent/constructor.https.html": [
+ [
+ "/payment-request/MerchantValidationEvent/constructor.https.html",
+ {}
+ ]
+ ],
"payment-request/PaymentItem/type_member.https.html": [
[
"/payment-request/PaymentItem/type_member.https.html",
@@ -378308,6 +380943,12 @@
{}
]
],
+ "payment-request/onmerchantvalidation-attribute.https.html": [
+ [
+ "/payment-request/onmerchantvalidation-attribute.https.html",
+ {}
+ ]
+ ],
"payment-request/onpaymentmenthodchange-attribute.https.html": [
[
"/payment-request/onpaymentmenthodchange-attribute.https.html",
@@ -379048,9 +381689,15 @@
{}
]
],
- "quirks/unitless-length/excluded-properties.html": [
+ "quirks/unitless-length/excluded-properties-001.html": [
[
- "/quirks/unitless-length/excluded-properties.html",
+ "/quirks/unitless-length/excluded-properties-001.html",
+ {}
+ ]
+ ],
+ "quirks/unitless-length/excluded-properties-002.html": [
+ [
+ "/quirks/unitless-length/excluded-properties-002.html",
{}
]
],
@@ -389978,12 +392625,6 @@
{}
]
],
- "service-workers/service-worker/update-top-level.https.html": [
- [
- "/service-workers/service-worker/update-top-level.https.html",
- {}
- ]
- ],
"service-workers/service-worker/update.https.html": [
[
"/service-workers/service-worker/update.https.html",
@@ -390648,21 +393289,23 @@
{}
]
],
- "storage/estimate-indexeddb-worker.https.html": [
+ "storage/estimate-indexeddb.https.any.js": [
[
- "/storage/estimate-indexeddb-worker.https.html",
+ "/storage/estimate-indexeddb.https.any.html",
{}
- ]
- ],
- "storage/estimate-indexeddb.https.html": [
+ ],
[
- "/storage/estimate-indexeddb.https.html",
+ "/storage/estimate-indexeddb.https.any.worker.html",
{}
]
],
- "storage/estimate-parallel.https.html": [
+ "storage/estimate-parallel.https.any.js": [
+ [
+ "/storage/estimate-parallel.https.any.html",
+ {}
+ ],
[
- "/storage/estimate-parallel.https.html",
+ "/storage/estimate-parallel.https.any.worker.html",
{}
]
],
@@ -390676,51 +393319,61 @@
{}
]
],
- "storage/opaque-origin.https.html": [
+ "storage/opaque-origin.https.window.js": [
[
- "/storage/opaque-origin.https.html",
+ "/storage/opaque-origin.https.window.html",
{}
]
],
- "storage/persisted-worker.https.html": [
+ "storage/permission-query.https.any.js": [
[
- "/storage/persisted-worker.https.html",
+ "/storage/permission-query.https.any.html",
{}
- ]
- ],
- "storage/persisted.https.html": [
+ ],
[
- "/storage/persisted.https.html",
+ "/storage/permission-query.https.any.worker.html",
{}
]
],
- "storage/storagemanager-estimate.https.html": [
+ "storage/persisted.https.any.js": [
+ [
+ "/storage/persisted.https.any.html",
+ {}
+ ],
[
- "/storage/storagemanager-estimate.https.html",
+ "/storage/persisted.https.any.worker.html",
{}
]
],
- "storage/storagemanager-persist-worker.https.html": [
+ "storage/storagemanager-estimate.https.any.js": [
[
- "/storage/storagemanager-persist-worker.https.html",
+ "/storage/storagemanager-estimate.https.any.html",
+ {}
+ ],
+ [
+ "/storage/storagemanager-estimate.https.any.worker.html",
{}
]
],
- "storage/storagemanager-persist.https.html": [
+ "storage/storagemanager-persist.https.window.js": [
[
- "/storage/storagemanager-persist.https.html",
+ "/storage/storagemanager-persist.https.window.html",
{}
]
],
- "storage/storagemanager-persisted-worker.https.html": [
+ "storage/storagemanager-persist.https.worker.js": [
[
- "/storage/storagemanager-persisted-worker.https.html",
+ "/storage/storagemanager-persist.https.worker.html",
{}
]
],
- "storage/storagemanager-persisted.https.html": [
+ "storage/storagemanager-persisted.https.any.js": [
+ [
+ "/storage/storagemanager-persisted.https.any.html",
+ {}
+ ],
[
- "/storage/storagemanager-persisted.https.html",
+ "/storage/storagemanager-persisted.https.any.worker.html",
{}
]
],
@@ -392680,21 +395333,33 @@
{}
]
],
- "trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html": [
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [
[
- "/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html",
+ "/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html",
{}
]
],
- "trusted-types/Window-open.tentative.html": [
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [
[
- "/trusted-types/Window-open.tentative.html",
+ "/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html",
{}
]
],
- "trusted-types/Window-trustedTypes.tentative.html": [
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [
+ [
+ "/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html",
+ {}
+ ]
+ ],
+ "trusted-types/Window-TrustedTypes.tentative.html": [
+ [
+ "/trusted-types/Window-TrustedTypes.tentative.html",
+ {}
+ ]
+ ],
+ "trusted-types/Window-open.tentative.html": [
[
- "/trusted-types/Window-trustedTypes.tentative.html",
+ "/trusted-types/Window-open.tentative.html",
{}
]
],
@@ -393500,6 +396165,70 @@
{}
]
],
+ "wasm/jsapi/global/constructor.any.js": [
+ [
+ "/wasm/jsapi/global/constructor.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/global/constructor.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/global/constructor.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/global/toString.any.js": [
+ [
+ "/wasm/jsapi/global/toString.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/global/toString.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/global/toString.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/global/value-set.any.js": [
+ [
+ "/wasm/jsapi/global/value-set.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/global/value-set.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/global/value-set.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/global/valueOf.any.js": [
+ [
+ "/wasm/jsapi/global/valueOf.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/global/valueOf.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/global/valueOf.any.worker.html",
+ {}
+ ]
+ ],
"wasm/jsapi/instance/constructor-bad-imports.any.js": [
[
"/wasm/jsapi/instance/constructor-bad-imports.any.html",
@@ -393532,6 +396261,38 @@
{}
]
],
+ "wasm/jsapi/instance/exports.any.js": [
+ [
+ "/wasm/jsapi/instance/exports.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/instance/exports.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/instance/exports.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/instance/toString.any.js": [
+ [
+ "/wasm/jsapi/instance/toString.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/instance/toString.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/instance/toString.any.worker.html",
+ {}
+ ]
+ ],
"wasm/jsapi/interface.any.js": [
[
"/wasm/jsapi/interface.any.html",
@@ -393548,6 +396309,22 @@
{}
]
],
+ "wasm/jsapi/memory/buffer.any.js": [
+ [
+ "/wasm/jsapi/memory/buffer.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/memory/buffer.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/memory/buffer.any.worker.html",
+ {}
+ ]
+ ],
"wasm/jsapi/memory/constructor.any.js": [
[
"/wasm/jsapi/memory/constructor.any.html",
@@ -393564,6 +396341,38 @@
{}
]
],
+ "wasm/jsapi/memory/grow.any.js": [
+ [
+ "/wasm/jsapi/memory/grow.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/memory/grow.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/memory/grow.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/memory/toString.any.js": [
+ [
+ "/wasm/jsapi/memory/toString.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/memory/toString.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/memory/toString.any.worker.html",
+ {}
+ ]
+ ],
"wasm/jsapi/module/constructor.any.js": [
[
"/wasm/jsapi/module/constructor.any.html",
@@ -393628,6 +396437,22 @@
{}
]
],
+ "wasm/jsapi/module/toString.any.js": [
+ [
+ "/wasm/jsapi/module/toString.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/module/toString.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/module/toString.any.worker.html",
+ {}
+ ]
+ ],
"wasm/jsapi/table/constructor.any.js": [
[
"/wasm/jsapi/table/constructor.any.html",
@@ -393644,21 +396469,163 @@
{}
]
],
- "wasm/wasm_local_iframe_test.html": [
+ "wasm/jsapi/table/get-set.any.js": [
+ [
+ "/wasm/jsapi/table/get-set.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/table/get-set.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/table/get-set.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/table/grow.any.js": [
+ [
+ "/wasm/jsapi/table/grow.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/table/grow.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/table/grow.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/table/length.any.js": [
+ [
+ "/wasm/jsapi/table/length.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/table/length.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/table/length.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/jsapi/table/toString.any.js": [
+ [
+ "/wasm/jsapi/table/toString.any.html",
+ {}
+ ],
+ [
+ "/wasm/jsapi/table/toString.any.js",
+ {
+ "jsshell": true
+ }
+ ],
+ [
+ "/wasm/jsapi/table/toString.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/broadcastchannel-success-and-failure.html": [
+ [
+ "/wasm/serialization/broadcastchannel-success-and-failure.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/broadcastchannel-success.html": [
+ [
+ "/wasm/serialization/broadcastchannel-success.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/identity-not-preserved.html": [
+ [
+ "/wasm/serialization/identity-not-preserved.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/nested-worker-success.any.js": [
+ [
+ "/wasm/serialization/nested-worker-success.any.sharedworker.html",
+ {}
+ ],
+ [
+ "/wasm/serialization/nested-worker-success.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/no-transferring.html": [
+ [
+ "/wasm/serialization/no-transferring.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/serialization-via-history.html": [
+ [
+ "/wasm/serialization/serialization-via-history.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/serialization-via-idb.any.js": [
+ [
+ "/wasm/serialization/serialization-via-idb.any.html",
+ {}
+ ],
+ [
+ "/wasm/serialization/serialization-via-idb.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/serialization-via-notifications-api.any.js": [
+ [
+ "/wasm/serialization/serialization-via-notifications-api.any.html",
+ {}
+ ],
+ [
+ "/wasm/serialization/serialization-via-notifications-api.any.worker.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/window-domain-success.sub.html": [
+ [
+ "/wasm/serialization/window-domain-success.sub.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/window-messagechannel-success.html": [
+ [
+ "/wasm/serialization/window-messagechannel-success.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/window-serviceworker-failure.https.html": [
[
- "/wasm/wasm_local_iframe_test.html",
+ "/wasm/serialization/window-serviceworker-failure.https.html",
{}
]
],
- "wasm/wasm_serialization_tests.html": [
+ "wasm/serialization/window-sharedworker-failure.html": [
[
- "/wasm/wasm_serialization_tests.html",
+ "/wasm/serialization/window-sharedworker-failure.html",
{}
]
],
- "wasm/wasm_service_worker_test.https.html": [
+ "wasm/serialization/window-similar-but-cross-origin-success.sub.html": [
[
- "/wasm/wasm_service_worker_test.https.html",
+ "/wasm/serialization/window-similar-but-cross-origin-success.sub.html",
+ {}
+ ]
+ ],
+ "wasm/serialization/window-simple-success.html": [
+ [
+ "/wasm/serialization/window-simple-success.html",
{}
]
],
@@ -396510,6 +399477,12 @@
{}
]
],
+ "webrtc/RTCQuicStream.https.html": [
+ [
+ "/webrtc/RTCQuicStream.https.html",
+ {}
+ ]
+ ],
"webrtc/RTCQuicTransport.https.html": [
[
"/webrtc/RTCQuicTransport.https.html",
@@ -399102,6 +402075,26 @@
{}
]
],
+ "webusb/usbAlternateInterface.https.any.js": [
+ [
+ "/webusb/usbAlternateInterface.https.any.html",
+ {}
+ ],
+ [
+ "/webusb/usbAlternateInterface.https.any.worker.html",
+ {}
+ ]
+ ],
+ "webusb/usbConfiguration.https.any.js": [
+ [
+ "/webusb/usbConfiguration.https.any.html",
+ {}
+ ],
+ [
+ "/webusb/usbConfiguration.https.any.worker.html",
+ {}
+ ]
+ ],
"webusb/usbConnectionEvent.https.any.js": [
[
"/webusb/usbConnectionEvent.https.any.html",
@@ -399118,6 +402111,12 @@
{}
]
],
+ "webusb/usbDevice-worker.https.html": [
+ [
+ "/webusb/usbDevice-worker.https.html",
+ {}
+ ]
+ ],
"webusb/usbDevice.https.any.js": [
[
"/webusb/usbDevice.https.any.html",
@@ -399128,6 +402127,16 @@
{}
]
],
+ "webusb/usbEndpoint.https.any.js": [
+ [
+ "/webusb/usbEndpoint.https.any.html",
+ {}
+ ],
+ [
+ "/webusb/usbEndpoint.https.any.worker.html",
+ {}
+ ]
+ ],
"webusb/usbInTransferResult.https.any.js": [
[
"/webusb/usbInTransferResult.https.any.html",
@@ -399138,6 +402147,16 @@
{}
]
],
+ "webusb/usbInterface.https.any.js": [
+ [
+ "/webusb/usbInterface.https.any.html",
+ {}
+ ],
+ [
+ "/webusb/usbInterface.https.any.worker.html",
+ {}
+ ]
+ ],
"webusb/usbIsochronousInTransferPacket.https.any.js": [
[
"/webusb/usbIsochronousInTransferPacket.https.any.html",
@@ -401060,6 +404079,36 @@
{}
]
],
+ "worklets/audio-worklet-credentials.https.html": [
+ [
+ "/worklets/audio-worklet-credentials.https.html",
+ {}
+ ]
+ ],
+ "worklets/audio-worklet-csp.https.html": [
+ [
+ "/worklets/audio-worklet-csp.https.html",
+ {}
+ ]
+ ],
+ "worklets/audio-worklet-import.https.html": [
+ [
+ "/worklets/audio-worklet-import.https.html",
+ {}
+ ]
+ ],
+ "worklets/audio-worklet-referrer.https.html": [
+ [
+ "/worklets/audio-worklet-referrer.https.html",
+ {}
+ ]
+ ],
+ "worklets/audio-worklet-service-worker-interception.https.html": [
+ [
+ "/worklets/audio-worklet-service-worker-interception.https.html",
+ {}
+ ]
+ ],
"worklets/idlharness.worker.js": [
[
"/worklets/idlharness.worker.html",
@@ -423588,6 +426637,20 @@
{}
]
],
+ "webdriver/tests/get_element_css_value/get.py": [
+ [
+ "/webdriver/tests/get_element_css_value/get.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/get_element_css_value/user_prompts.py": [
+ [
+ "/webdriver/tests/get_element_css_value/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/get_element_property/get.py": [
[
"/webdriver/tests/get_element_property/get.py",
@@ -423602,6 +426665,20 @@
}
]
],
+ "webdriver/tests/get_element_rect/get.py": [
+ [
+ "/webdriver/tests/get_element_rect/get.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/get_element_rect/user_prompts.py": [
+ [
+ "/webdriver/tests/get_element_rect/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/get_element_tag_name/get.py": [
[
"/webdriver/tests/get_element_tag_name/get.py",
@@ -423690,6 +426767,20 @@
}
]
],
+ "webdriver/tests/is_element_enabled/enabled.py": [
+ [
+ "/webdriver/tests/is_element_enabled/enabled.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/is_element_enabled/user_prompts.py": [
+ [
+ "/webdriver/tests/is_element_enabled/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/is_element_selected/selected.py": [
[
"/webdriver/tests/is_element_selected/selected.py",
@@ -423832,6 +426923,14 @@
{}
]
],
+ "webdriver/tests/set_timeouts/user_prompts.py": [
+ [
+ "/webdriver/tests/set_timeouts/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/set_window_rect/set.py": [
[
"/webdriver/tests/set_window_rect/set.py",
@@ -423871,6 +426970,34 @@
"/webdriver/tests/switch_to_window/switch.py",
{}
]
+ ],
+ "webdriver/tests/take_element_screenshot/screenshot.py": [
+ [
+ "/webdriver/tests/take_element_screenshot/screenshot.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/take_element_screenshot/user_prompts.py": [
+ [
+ "/webdriver/tests/take_element_screenshot/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "webdriver/tests/take_screenshot/screenshot.py": [
+ [
+ "/webdriver/tests/take_screenshot/screenshot.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/take_screenshot/user_prompts.py": [
+ [
+ "/webdriver/tests/take_screenshot/user_prompts.py",
+ {
+ "timeout": "long"
+ }
+ ]
]
}
},
@@ -424971,10 +428098,6 @@
"b087a2f9b71f95a461bafc292a896fe5b50622eb",
"testharness"
],
- "2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html": [
- "f070d0d5b7f3255802df2932716b40de46ec63e7",
- "testharness"
- ],
"2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic-manual.html": [
"5a4be6d371474e3113a6e927f2f950f31c12031c",
"manual"
@@ -425068,7 +428191,7 @@
"testharness"
],
"2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html": [
- "0af5a213cd345e099cde8bf981cb4b7cd42b7e8d",
+ "ed8c04d0ab791b2aba4b58fdc42935fb936f0bc5",
"testharness"
],
"2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html": [
@@ -425076,7 +428199,7 @@
"testharness"
],
"2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html": [
- "19b939e63b743c74c2505634ed6a6d2a11b30230",
+ "36087e7b035020c51504f9efddb130fda66f4ebd",
"testharness"
],
"2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html": [
@@ -427651,6 +430774,10 @@
"e2a37b4ed09d1ef25118ffa05f78619642a66c95",
"testharness"
],
+ "2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html": [
+ "f070d0d5b7f3255802df2932716b40de46ec63e7",
+ "testharness"
+ ],
"2dcontext/text-styles/2d.text.draw.baseline.bottom.html": [
"3cff44d7a0c90c8ae01d367b66cbdc426cf86dde",
"testharness"
@@ -427856,7 +430983,7 @@
"support"
],
"2dcontext/tools/name2dir.yaml": [
- "479c171810cf82be78cd25f653a1b25db21f1724",
+ "40a04057881fe4e2609e7a4f48c37ce52650272d",
"support"
],
"2dcontext/tools/spec.yaml": [
@@ -427880,7 +431007,7 @@
"support"
],
"2dcontext/tools/tests2dtext.yaml": [
- "8490cd4f2b2c1f68d7fa400f8cfd5f651abaf790",
+ "f89d6d48a4f0e364086414d5869565b9358967c4",
"support"
],
"2dcontext/transformations/2d.transformation.order.html": [
@@ -434976,7 +438103,7 @@
"support"
],
"compat/css-style-declaration-alias-enumeration.html": [
- "4608af9d5fc7d382c0bbb20e513f6f1e318fa11e",
+ "cdd9cc8eaefb94218118d9e6a74727bf5c716c17",
"testharness"
],
"compat/green-ref.html": [
@@ -434991,6 +438118,10 @@
"91793af71e741ef6546d1eca37e93338ab2779f7",
"testharness"
],
+ "compat/webkit-appearance.html": [
+ "210944522a9a7dd6797d8b01f33c76e19b0b320b",
+ "testharness"
+ ],
"compat/webkit-background-origin-text-ref.html": [
"d1f183874c09d7984d461e577151008e5b363b2c",
"support"
@@ -435015,10 +438146,6 @@
"579d88220610e4f2ea7e884018b655cf1c5c8dca",
"reftest"
],
- "compat/webkit-pseudo-element.html": [
- "8f69477489a8eee76a6b379f07dcbcafda539c5a",
- "testharness"
- ],
"compat/webkit-text-fill-color-currentColor.html": [
"f4912c93450edf03b43b220d205460cc82ef9ba2",
"testharness"
@@ -455340,23 +458467,59 @@
"support"
],
"cookies/http-state/attribute-tests.html": [
- "6e7d5feabb2722d895590cdb66ee552d78a3add7",
+ "1d2141d38c48d13e0f9da0937920c49f6d88a915",
+ "testharness"
+ ],
+ "cookies/http-state/charset-tests.html": [
+ "9d9ef1bb08790ea6fec389325bfcd4607064f98c",
+ "testharness"
+ ],
+ "cookies/http-state/chromium-tests.html": [
+ "e5d745e03909d0595a69c9849d1bf39ba15f4e8e",
+ "testharness"
+ ],
+ "cookies/http-state/comma-tests.html": [
+ "f71bb8d9610439b26339ea8dc7460ff0ceb7fb85",
+ "testharness"
+ ],
+ "cookies/http-state/domain-tests.html": [
+ "85c8cd00a447cbd653869af9922caf858d4b058a",
"testharness"
],
"cookies/http-state/general-tests.html": [
- "169984de6ac54913a8f7a7598301b3b474e6e2c8",
+ "1e63043ae1111a7a4791d28d7d1d6675f7e9fefd",
+ "testharness"
+ ],
+ "cookies/http-state/mozilla-tests.html": [
+ "01a5645b140282dec33c67e78aa2519037b5b45c",
+ "testharness"
+ ],
+ "cookies/http-state/name-tests.html": [
+ "9dd2781f2357c53c59ebdee2c5973d068ecf40e3",
+ "testharness"
+ ],
+ "cookies/http-state/ordering-tests.html": [
+ "53cfae452be37c3383501341f912946ce9e8774c",
"testharness"
],
+ "cookies/http-state/path-tests.html": [
+ "464f39becd9e6b00e7a90dc89064d160f1e8b789",
+ "testharness"
+ ],
+ "cookies/http-state/resources/all-tests.html.py-str": [
+ "37d630fef4fadf1f20289ca64d3f93dd4f5f2404",
+ "support"
+ ],
"cookies/http-state/resources/cookie-http-state-template.js": [
- "470d46ebc438376788b145a9fde5e41a1e5985d9",
+ "d737b38c520b83a8f9788b4c625021337fed2f12",
"support"
],
"cookies/http-state/resources/cookie-setter.py": [
- "0418f4b7630d7520c93850609249eada0e65c2b3",
+ "758b1429f7233dda535a30be5085a3c01591dabd",
"support"
],
"cookies/http-state/resources/debugging-single-test.html.py-str": [
- "d34ff872c1df48458118f5ab184ad5395bda4e90",
+ "40d9809a4bc1815b2603a117554221fa446a7782",
"support"
],
"cookies/http-state/resources/iframe-content-pushing.js": [
@@ -455799,6 +458962,1354 @@
"7f68322ee2e3710a12f3238ce2af834d1fe15164",
"support"
],
+ "cookies/http-state/resources/test-files/charset0001-expected": [
+ "8646afc636624f223fe79296a6d2b49747258d52",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0001-test": [
+ "e89a36dd89ec806738ef8615db4de0fae323cf7b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0002-expected": [
+ "fc7d2561017e86fde51bc774ce0bc07d1184e0f6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0002-test": [
+ "70ce472afa608b17e8830e6b76dd3e76f0af04d9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0003-expected": [
+ "1969bc86b97615eaeaeaa05705f556fb730cd679",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0003-test": [
+ "446e2fd29f211471cd7b090fc9660b013f030d02",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0004-expected": [
+ "1d6d952989ef943a37f92b0403024bc2802e0842",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/charset0004-test": [
+ "1564ba4fc921f2ec9f6686e90a91c2468f351ab0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0001-expected": [
+ "1022f64a2906dd854109026bbc6c3d286a5a5283",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0001-test": [
+ "4635f0e7e378a507384407cbf93197933b1f7775",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0002-expected": [
+ "64932dcffb4fe41532ab9d10ceedb4ce9ad26ad8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0002-test": [
+ "24ab0d2da56451e882799e04a629c29997e0d0d7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0003-expected": [
+ "64932dcffb4fe41532ab9d10ceedb4ce9ad26ad8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0003-test": [
+ "bac41f9928847c9d93bb08710572f5b4f0d967c8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0004-expected": [
+ "9be3e8f6435f85b7751dc6f49a3c68e18d234511",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0004-test": [
+ "45cab2f409daada7d1a4b34b64741b98258284c8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0005-expected": [
+ "9be3e8f6435f85b7751dc6f49a3c68e18d234511",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0005-test": [
+ "c2dfebd3c4431774f06cdaaf3292d7a5f6742471",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0006-expected": [
+ "8121145c18bf7aafcb53af2a18e13f0176c871b7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0006-test": [
+ "a9da26811a4ed6a05f64b0625060076984e60670",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0007-expected": [
+ "8121145c18bf7aafcb53af2a18e13f0176c871b7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0007-test": [
+ "dca20b8e7df62c2a5423c5860823a6714c6fa1ab",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0008-expected": [
+ "602c0e017c4f477bc26f449f124c807d4461b7f0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0008-test": [
+ "ece6c66f0b1169a705a55556ff8c2799427cebb0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0009-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0009-test": [
+ "eecdae60cc4cea7dd7213bb23b81a9f022bbd6eb",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0010-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0010-test": [
+ "17a18ea9272814a1f036d9f927e2380d5218f51b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0011-expected": [
+ "2062e2315564cd319d99f1b103555a9c6018ea0d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0011-test": [
+ "4000f269a495455b2f4f00925eb927759e3c9b6a",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0012-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0012-test": [
+ "b33a4e7427b99a689c4d1bade576df7c7246c2ab",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0013-expected": [
+ "5d2d06092c4fec724b7a1c257ca026b953066ea1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0013-test": [
+ "f61a087bb8fd7ef9c84329f86be8b21fb3972f04",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0014-expected": [
+ "21bfd134e54a3b488793fe8e0c159c0f27f1a687",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0014-test": [
+ "edbb7931a38048004ed83d9682c737a98d64c752",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0015-expected": [
+ "b968e7427a0711ddd3c85dee8480487ade9cf038",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0015-test": [
+ "80d32366b5d9ed794b812ed2bfafabeba75c5b25",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0016-expected": [
+ "11d8efaea2aca277e07a2030cb646cdbe09b6851",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0016-test": [
+ "8abf12026c7ec2932f0a967501a4063968554d88",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0017-expected": [
+ "6bb84483a05f5697a7d4aed4cbb7a68161114207",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0017-test": [
+ "94cce02078bec0a3b37809e7e04e0a99e03549cf",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0018-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0018-test": [
+ "145ad2c5defddcd9a19f7f44b07e302bce643635",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0019-expected": [
+ "b6df50eef282f6e6bf501259b913f35284f0f323",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0019-test": [
+ "e3bcc4a18c3da79b304ab738f445de1e1ef11732",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0021-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/chromium0021-test": [
+ "145ad2c5defddcd9a19f7f44b07e302bce643635",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0001-expected": [
+ "ab55cea018a3ced1b77c914e7a1c8e7872a9ab0f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0001-test": [
+ "5b3678de3966c455497af5034c66a68e95d6f83e",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0002-expected": [
+ "33590a084863fe7216fe1ea0f1ce7e98672de339",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0002-test": [
+ "164c0a93bfcdba58d3a84ec7c816b7ba2edc1806",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0003-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0003-test": [
+ "213d3a5f2675e83f1a5256cd9a66e56efc7da959",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0004-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0004-test": [
+ "e93f6f4062c9cacd56b40abbe88783783943a478",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0005-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0005-test": [
+ "eeb040d0a31acfe14ee7db331968ba3d1d8df75f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0006-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0006-test": [
+ "a3eaff03ba38303a243a964f2e3bfbeb53533a92",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0007-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/comma0007-test": [
+ "29fb0a2695d4fb71115ac1fc6a220216243f8dec",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0020-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0020-test": [
+ "67cefa339efce135a669e4b69cd98e867ed5b47c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0022-expected": [
+ "8ac13216032b9cafd3efede3d47b9f9747047759",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0022-test": [
+ "1a8f35ffbd849ebd836c4b41a97a9f6fa4113d4b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0023-expected": [
+ "8ac13216032b9cafd3efede3d47b9f9747047759",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-chromium0023-test": [
+ "76a8ed4e9b8725200a3e282eeac1062ce3b9c570",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-path0029-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/disabled-path0029-test": [
+ "d7219d590c6f13b8ef8aef2e5951cadab16ff17e",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0001-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0001-test": [
+ "fd8926d7b4fc22c84aa0bb247e3e50632ef71ff3",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0002-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0002-test": [
+ "a6ad2a80856c6eca623560ce640ee47ecc3777da",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0003-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0003-test": [
+ "ff051f4806c94b1e45dd58dab8f819965b4bd74c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0004-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0004-test": [
+ "f05029bb5a74f2d2b982ff5abf88c3a38e1200b6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0005-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0005-test": [
+ "697ab186fcde49bf34cf169db27ae8d0ae4927f2",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0006-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0006-test": [
+ "fe5f90df9dc00b989a4456700677573bbb6aebe4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0007-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0007-test": [
+ "1d2c6fcec6270b002960a719cdff5db8a549d675",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0008-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0008-test": [
+ "491c52de9da50c6f668007c0e6a367d049b3c019",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0009-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0009-test": [
+ "736e69fe8e5a8498c1f69fd504358c18913ab8e5",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0010-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0010-test": [
+ "5bf212f27d8e6312cad86941177a4d5e53a5eff1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0011-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0011-test": [
+ "e1c54db25eda8ba96a7adfd40ea316e1bff4aa85",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0012-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0012-test": [
+ "a189f38087a66eefba14ad25b86d6e9135f53ef6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0013-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0013-test": [
+ "8493146e767a9f57eb6ad29a8be2cbd19ca956d7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0014-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0014-test": [
+ "adccd0d3205c71ec3c6b4e8810f80595cff26033",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0015-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0015-test": [
+ "c123ba940d31f5e01322579ddd7473b72d9844a6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0016-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0016-test": [
+ "9136ac4d86a80bef4ad4b461d36b9b5a8704911d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0017-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0017-test": [
+ "8e876b8d687072ffb127d6e89b725076b41c38c6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0018-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0018-test": [
+ "3763f9625ef867ad4218de70b5ea06ecae87d0e4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0019-expected": [
+ "1f359c4850bae230784cda7633e3db91ff0f0ee0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0019-test": [
+ "f5aebfd0e10e1b4d39740d1cec7d98a6a757fd7c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0020-expected": [
+ "5eb3ac42d41ac5d9e78a50c6f9f6065651cddac6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0020-test": [
+ "1c7a61c85f6ed7d652b42c3ed23980648bf081ea",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0021-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0021-test": [
+ "895744eac5da0a574381b8be74ad96298cc47567",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0022-expected": [
+ "1f359c4850bae230784cda7633e3db91ff0f0ee0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0022-test": [
+ "6eeae00159fa2c7350427da96ffbb7b7a46ae7a4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0023-expected": [
+ "5eb3ac42d41ac5d9e78a50c6f9f6065651cddac6",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0023-test": [
+ "91a81ed003c55f597dbd15ad7cacc44e22215a67",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0024-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0024-test": [
+ "63157b9b4575bc24f424c07ce3b721a8c16ab328",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0025-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0025-test": [
+ "353c3bb63461a3599b1c630fada4b3b9173136f2",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0026-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0026-test": [
+ "3b14e3075468947ccd7ac5af4aba7c49b8725f78",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0027-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0027-test": [
+ "8b7adbd17a17717b7987be1bbc5756dd75050e0d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0028-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0028-test": [
+ "ab8f2c401ebefc02538ec906ec53ee9e29d4ce65",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0029-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0029-test": [
+ "cfab57a6e497b65866525e7adbc58c27418288ba",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0031-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0031-test": [
+ "6eccb78b8b83ff1d10c1c54ff3f64d87095d63e1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0033-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0033-test": [
+ "7fdcc8356a11456b095e7dcf230373c665b399e1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0034-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0034-test": [
+ "d3f4723fd08ee9502047190ece283fd5f173b78e",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0035-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0035-test": [
+ "967d248c25663a97f3f824c5f6b792abee88b28c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0036-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0036-test": [
+ "a618ec4dd203bb73d32ccf357aadcd96d93271e9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0037-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0037-test": [
+ "c61fe8f27629bd8dbefa8c69252ebca22d6bca76",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0038-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0038-test": [
+ "2d8fcca573141f8a08cc94f40d03fe1bef615467",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0039-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0039-test": [
+ "3225b28baacb8ebce7bbdb1a437da7b3ea4c7fa5",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0040-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0040-test": [
+ "3e32fa895c357326a566bbb2643069a09ec29f38",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0041-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0041-test": [
+ "6fbc4ad1141721adacaaaafac1083f7d68552aff",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0042-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/domain0042-test": [
+ "9258624cc56f45f386609c7244e27847e15673ce",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0001-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0001-test": [
+ "53f98e23b2a8f4f922dd379e9088851bf91d386c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0002-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0002-test": [
+ "a79c5be41f4097f08586ae1418dff94c1bab5530",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0003-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0003-test": [
+ "785c326fae4353fe09ebebb52a13643ec9b887e7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0004-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0004-test": [
+ "567134f5d3ab9f9abe16203693a08bc6f7935c5d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0005-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0005-test": [
+ "0fa350adc36062b61daf8a4e07b7e0c76849bc13",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0006-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0006-test": [
+ "567134f5d3ab9f9abe16203693a08bc6f7935c5d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0007-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0007-test": [
+ "785c326fae4353fe09ebebb52a13643ec9b887e7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0008-expected": [
+ "0f62babd8b06933069cb30ae6f44d54b73c8c534",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0008-test": [
+ "d6350d6c7b52c5c716342593fb6b94b0907ee795",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0009-expected": [
+ "555fbaf54711a5d25d5a27fc2d5c776e1da09963",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0009-test": [
+ "84944d4d50b6e492ccd12bae964920159badeaca",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0010-expected": [
+ "555fbaf54711a5d25d5a27fc2d5c776e1da09963",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0010-test": [
+ "13477a47c26834f0689da05cb7db3fa14b07ae48",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0011-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0011-test": [
+ "bba20536edd738acdc0d7fa8e5f0cf30050c961f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0012-expected": [
+ "10e669a013455bde2ae2778d138b08904764c3d9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0012-test": [
+ "9ba773f5c7457f790262d36674a8c2fd401edaf5",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0013-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0013-test": [
+ "d491267e4aa7e0f6d96b8d22de326128d0861d2d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0014-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0014-test": [
+ "4cc1f45075607181db5c693b89ffe81dbc83de21",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0015-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0015-test": [
+ "13254db6886be51c92ca8a3e2fd4149fb419d425",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0016-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0016-test": [
+ "6aab3e80d6f85043e69a2f4aae633a7e56a92288",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0017-expected": [
+ "fc9a2496c60e5c1d132f3ea17dee95e92d1d010a",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/mozilla0017-test": [
+ "b6c297cc77ddef6c4b0eae5c94a07d0827de89c7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0001-expected": [
+ "96527926e107477e66ab0386dea671d8973de695",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0001-test": [
+ "3ce5f5f9824b95711aa93a82c45e39250aa225ed",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0002-expected": [
+ "d4d3cda811bd744d741d883675d789e124c32449",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0002-test": [
+ "d6eac8a757af54e177a04bf7d3b15e14080cdc5a",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0003-expected": [
+ "0c00f45c4a479545f1272b6c7d3312f7b48d658a",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0003-test": [
+ "7ea96155bd7752a8abffb7a85093fdd3fa19fc93",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0004-expected": [
+ "b079529aa249748cdf1ada8ce4b99d12952745a7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0004-test": [
+ "99f0e61801a92ddc2034fec94fc61b02f1b2baf1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0005-expected": [
+ "a0f031bb34ed2284c99cab25c4864f7e55af6522",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0005-test": [
+ "9e33e0c8e476c24b698b7c8061ea42a585b9ed73",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0006-expected": [
+ "ee0e7d7c335d08c78793167fd581458b15e6a3ec",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0006-test": [
+ "fbd03632c61b3df902d75dd8f11dcde5a7cf8634",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0007-expected": [
+ "6d6e56ebe59b54fc030d7c88c72a142d1e5f7486",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0007-test": [
+ "d41e64b87ec3d1e45cf0a9020c2a093063f8844f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0008-expected": [
+ "a4b8c2428258033c534e7ff05ac967dbe24ed9e9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0008-test": [
+ "7afcf700376b02f3a38c12752b0067cc66f3e190",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0009-expected": [
+ "49506acc24893411e24dd9c63ed25f2b5945052d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0009-test": [
+ "f40d2c4d6b9e06be56505acb73594718724e5254",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0010-expected": [
+ "1e72557892b01144f0cd3051a9a079fcc2253e46",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0010-test": [
+ "fb4fd921be31471edd70aa0399c011aea48ee36d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0011-expected": [
+ "260d7028a0195e1c93da4cb10cac211016856e60",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0011-test": [
+ "b36b72388f2b3dc6480dd798f57d8ed5624b5ae4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0012-expected": [
+ "0a2686a15257f03f02af93c39d410cc070e408fd",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0012-test": [
+ "6927aac6fa061ad0e0be4f13f4d7c686602aef25",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0013-expected": [
+ "87dec78b62265dd3dfd115e68ce526aef5213353",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0013-test": [
+ "59ada98321c69945673b94c2504f81408224325b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0014-expected": [
+ "82bfe0e60acd0c9194bbbb5c33a0a4e95686d5fa",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0014-test": [
+ "a113e99be5e27dd6186d247d5f1fe0f197f1349f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0015-expected": [
+ "390b77b30c40d33180bbe2026b052dadd44af527",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0015-test": [
+ "60fc0746ba258f0b2ea7d20e32625d70f1ea481b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0016-expected": [
+ "7d4d9e330792bf536a304785940f865d9cd20aa3",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0016-test": [
+ "371dbcde6cab2545f54b15d3f797936d39fae3d3",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0017-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0017-test": [
+ "056143166bd1c31df501c74d13425656a744884c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0018-expected": [
+ "96527926e107477e66ab0386dea671d8973de695",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0018-test": [
+ "e86a48360cf5735c3b0389d0f2d2507ec6c44b43",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0019-expected": [
+ "8d0bc2d07d699558f0dc68690af76bd9b7f4e430",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0019-test": [
+ "d48e3f6954a690c35628e3665fa329a67fb76452",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0020-expected": [
+ "aa9cd6d435cfdb9bd2180bd163e1f1503e6deca0",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0020-test": [
+ "b84f64d17981f59c5b1e557ba33362e38594e8b8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0021-expected": [
+ "206ff76e3e324b0c652024962dce34dd7e4dcf93",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0021-test": [
+ "56b319e9d491dc99a1434b157803249fe7b4acbb",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0022-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0022-test": [
+ "cc59ff17edabb8466b416dda9b4ed3c2f42a0b80",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0023-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0023-test": [
+ "b7f9cc257d20fbc98b5c12125ee9dde8e4ae9436",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0024-expected": [
+ "5ac4f2535c81810f380414f3e72ac8d35bfa76b7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0024-test": [
+ "da7b696da9129d5762468c0ba2b98d30974664ee",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0025-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0025-test": [
+ "708f006b9c0777592199ec0e8b333f44894e90fb",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0026-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0026-test": [
+ "bbeb77a029c18442c90d81cd96a3b1eb1aa72170",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0027-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0027-test": [
+ "d222227e6de7ded31c0be0e212f4611035c7ba79",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0028-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0028-test": [
+ "1c197e3324c87aa5364224ecaf029dbf5ae0a7a4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0029-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0029-test": [
+ "44212468d449cf18fac8987c1f0ba4127e1483ee",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0030-expected": [
+ "a391380fb666180af1950103f50f584207c75138",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0030-test": [
+ "cf3ff160f451ac4f53a847942df1b7a3f29861eb",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0031-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0031-test": [
+ "9394184904027da428e718414c5ce19d0c17a6c1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0032-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0032-test": [
+ "93fc9752333920c9b70236d7e53dd82199404811",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0033-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/name0033-test": [
+ "7bbdd89566a0a01d97df5d16b34a9822abeed6e9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0030-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0030-test": [
+ "3ab75aa3a07894934f9df01f448dee383a629acb",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0041-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0041-test": [
+ "b85a6c9e43cbed1899cff10c6ca53916176d98db",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0042-expected": [
+ "8b137891791fe96927ad78e64b0aad7bded08bdc",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0042-test": [
+ "524d192b6e7e3a4ef89669267f0451ab0066d18c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0043-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/optional-domain0043-test": [
+ "506cdc46e521578b6c6ba491b499779bf05f55fc",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/ordering0001-expected": [
+ "3d819593f5365165bfa02550e48084f37c81c33f",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/ordering0001-test": [
+ "ba6e85c44cdea2aa269ef170fe2d3a4c3a14e1ce",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0001-expected": [
+ "785d0a2f5f78a5bbf63c3b00c530cc60262598a5",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0001-test": [
+ "ed81cb955f7950fd77566362f7f8af6814b66653",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0002-expected": [
+ "2314ba0d4959934a91914ba987571706a5c9aacc",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0002-test": [
+ "224932851853336d065676fc736076da634d9fd3",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0003-expected": [
+ "2314ba0d4959934a91914ba987571706a5c9aacc",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0003-test": [
+ "e4b5a4b256507b53e1c31a9a20f7e9f345dabee2",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0004-expected": [
+ "785d0a2f5f78a5bbf63c3b00c530cc60262598a5",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0004-test": [
+ "a80ea6ec01587765bfdb02381887052568091c65",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0005-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0005-test": [
+ "6447c9164f9cfdb0a6fc8f65169a74221a779e94",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0006-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0006-test": [
+ "07ecf27b82b009bdd73e37f68f48732cb106655b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0007-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0007-test": [
+ "66a54de7420a6e0dadb5bd8400b25b3455eb5be1",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0008-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0008-test": [
+ "b10012d30960832f462b18b01221ffae2a1c5c69",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0009-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0009-test": [
+ "874f21bad97d24903535b08c524fb2184982e6ea",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0010-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0010-test": [
+ "0ea62fd5ec5384c3d97a4908eff138c0a5befe99",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0011-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0011-test": [
+ "35ea0620495bb1f12f2df12c7eda5e545bbac41c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0012-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0012-test": [
+ "4c0577897bd90ba6b2c9c0bf37fa83e6265ae5c4",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0013-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0013-test": [
+ "d17b99b6b4365aae60f4aba2904e371a08a57e70",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0014-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0014-test": [
+ "a953e707b3b22b9b708b89f8e9ec36a2f807544c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0015-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0015-test": [
+ "253a9bb2fcdd16aabbe3e4fdedf49ae2e4371f7d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0016-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0016-test": [
+ "433faeb9120496a97b7b6e703b2c92280824a79d",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0017-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0017-test": [
+ "a602d7ca6fe9199ce50b6fc380a76bda5d348ca9",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0018-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0018-test": [
+ "37040dac5d32aef12ad7bd4b1facda7789f70b4e",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0019-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0019-test": [
+ "6d498600a2f4ea0268cb4af4a238b315940c0768",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0020-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0020-test": [
+ "603eded7ebd2198e5664d7c18e24540148c70526",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0021-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0021-test": [
+ "4577c510a42d8d118ca53d9b67e4176dae960e44",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0022-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0022-test": [
+ "4aade9e0145d5e71acea9ff937f65efbcfa4f970",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0023-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0023-test": [
+ "f14d683df977e47efa74bd6941e9d9d7452e6bea",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0024-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0024-test": [
+ "18a71c875b4adf92c91ad5bb538d6135fd1667a7",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0025-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0025-test": [
+ "b6c497b97158481e5da1a5b08f4cd2aa393b7e16",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0026-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0026-test": [
+ "ffc3b7a54fa34bdc163267fa86b3ebd3ca3cfc45",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0027-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0027-test": [
+ "bd021f33e2c0819a8afd2c9eb9279e8e067ecf6e",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0028-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0028-test": [
+ "3bcd6a5c657b3c39225d0d566717ac5aeddfa153",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0029-expected": [
+ "1022f64a2906dd854109026bbc6c3d286a5a5283",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0029-test": [
+ "17bd42f4212539fea41d5d402a23115bb26b1127",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0030-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0030-test": [
+ "e17a2d490b7871eb1d46d69d4dcafa19248c8100",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0031-expected": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0031-test": [
+ "3b24090b33841dd5b0ef6a3ce9770a1bdbe3dc86",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0032-expected": [
+ "e7403c4aadce372524b3ba71e480db4b6d28aa61",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/path0032-test": [
+ "db6ceb2ea0678332b9d9a9854463680f89f86e6b",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0001-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0001-test": [
+ "38b7dd296e613e2d659a7516f56ea6e00e80a507",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0002-expected": [
+ "9e96a81e3b4f787a158cd20a10e9defee7446948",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0002-test": [
+ "bed691f1809cf37eb44c8a1083e9544bf333c03a",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0003-expected": [
+ "5cc2d467ef724279da03a2af49535aa58382ee40",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0003-test": [
+ "ce1d455201dbef9b08ff18315d2cceef569d0346",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0004-expected": [
+ "400030f6f1d38f1833f1d8c960941f842b12a9e8",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0004-test": [
+ "c569216520ca270f46741ec3ad0acd20bdd77887",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0005-expected": [
+ "cad285f70867f41fdb4e4439d389b1f8171ee6ce",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0005-test": [
+ "514c0f125f1f4d9d116d5ccfef3a44998b340869",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0006-expected": [
+ "b14d4f69b58c3d9cc7ed1f363d42d625e7bdcf8c",
+ "support"
+ ],
+ "cookies/http-state/resources/test-files/value0006-test": [
+ "a939a8229149c1d2311379d1632b47dd184affd8",
+ "support"
+ ],
+ "cookies/http-state/value-tests.html": [
+ "cb09034ae8500ecf54294a0f4e58ee3c26af68bb",
+ "testharness"
+ ],
"cookies/meta-blocked.html": [
"1b86e65c87c65a78a31e0b8a1d6bfdbe333e08f6",
"testharness"
@@ -455947,10 +460458,6 @@
"1aa8e5e80bbf4319bb3903b228416a994723b4db",
"testharness"
],
- "cookies/secure/create-cookie-http.html": [
- "425f66fde5cbdc231c0c96b2e2b1d4fb3f9571ba",
- "testharness"
- ],
"cookies/secure/set-from-dom.https.sub.html": [
"46997db18ac738b5c3041e0010c0562db3813616",
"testharness"
@@ -457223,6 +461730,10 @@
"977f063bcaf6a6f8c013dbd31de597dbacde5e9f",
"reftest"
],
+ "css/CSS2/abspos/static-inside-table-cell.html": [
+ "712bfbaf1e8f2d6a7a8fdd8dfa65792770f004e3",
+ "reftest"
+ ],
"css/CSS2/abspos/table-caption-is-containing-block-001.html": [
"32ac681781c640bfc5bf498361520623197dc7ed",
"reftest"
@@ -480119,6 +484630,14 @@
"4a3318f1cdc7c7cf3edb8bcab8cfdaef655bf765",
"reftest"
],
+ "css/CSS2/linebox/anonymous-inline-inherit-001-ref.html": [
+ "e97da2169d55e5dec9a2888cb534bc7321a1c5e1",
+ "support"
+ ],
+ "css/CSS2/linebox/anonymous-inline-inherit-001.html": [
+ "77904d80e459037e029467479db2c101f0d383b8",
+ "reftest"
+ ],
"css/CSS2/linebox/border-padding-bleed-001-ref.xht": [
"10fe3e08b45a5722b27e2a16bf806b116958d9c2",
"support"
@@ -481283,6 +485802,14 @@
"6d1d7411b8efb9b04a73cf27fb1d3b0abcff733d",
"visual"
],
+ "css/CSS2/linebox/vertical-align-nested-top-001-ref.html": [
+ "1fd155e38013e555c140908310c36b1416ac2ded",
+ "support"
+ ],
+ "css/CSS2/linebox/vertical-align-nested-top-001.html": [
+ "3667ced2ca39adfdb1d90fa843ebce6249eecb4e",
+ "reftest"
+ ],
"css/CSS2/linebox/vertical-align-sub-001-ref.xht": [
"9167843266f8ba8954df276e537100fe0ac42a44",
"support"
@@ -491851,6 +496378,10 @@
"7e5880b10637e39055b428c3411d86b2c6dc0daa",
"reftest"
],
+ "css/CSS2/positioning/abspos-inline-008.xht": [
+ "9233b4373e5e4dc5beb6713a9af1de861c5cf4d9",
+ "reftest"
+ ],
"css/CSS2/positioning/abspos-overflow-001-ref.xht": [
"ba7e87c6a7c18a9335b51e07052ab47631299c9b",
"support"
@@ -519967,6 +524498,26 @@
"4d0fc7eccc45e44480b4305632ceac2068c59919",
"testharness"
],
+ "css/css-break/reference/widows-orphans-001-ref.html": [
+ "06108ac800c19c68841f2a0e8867fb05e868c1ab",
+ "support"
+ ],
+ "css/css-break/widows-orphans-001.html": [
+ "8da27f0b6594fc7ddd90bdb160be8f80a9479038",
+ "reftest"
+ ],
+ "css/css-break/widows-orphans-002.html": [
+ "cf9afe7c033438162bcfc15f527f73ae370652b4",
+ "reftest"
+ ],
+ "css/css-break/widows-orphans-003.html": [
+ "311148409267e02ccd9b8819883ac05c2e82d407",
+ "reftest"
+ ],
+ "css/css-break/widows-orphans-004.html": [
+ "3e226d9e41e42fc79a9a3ac967fc935f68f7e061",
+ "reftest"
+ ],
"css/css-cascade/META.yml": [
"96467729fe91cef54b0bf5cc82d83e9f2a5c01ed",
"support"
@@ -521656,7 +526207,7 @@
"support"
],
"css/css-contain/reference/contain-style-counters-003-ref.html": [
- "8eb67b5943fa41db2320d51e92277dced3029f6e",
+ "12f9b989fd2402d5e8af279cd03f03931856270e",
"support"
],
"css/css-contain/reference/counter-scoping-001-ref.html": [
@@ -523883,6 +528434,18 @@
"8d0683319b0fbbd1262cbdd12cdbcb727b2aa9a0",
"support"
],
+ "css/css-filter/blur-clip-stacking-context-001.html": [
+ "a96994a8afe126e474f9ee015338749f0015dc1f",
+ "reftest"
+ ],
+ "css/css-filter/blur-clip-stacking-context-002.html": [
+ "0473f12949446da04849386ffea69e7436703010",
+ "reftest"
+ ],
+ "css/css-filter/blur-clip-stacking-context-ref.html": [
+ "82b907334fd71791cd2f6530e2e85169e29afa41",
+ "support"
+ ],
"css/css-filter/filtered-block-is-container-ref.html": [
"fc9467f8717dfc722dcb6dbbbb31bfd8c2baee3b",
"support"
@@ -535916,11 +540479,11 @@
"testharness"
],
"css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html": [
- "b35b16d648da2868808213c2d16ef58c53c500a6",
+ "79dd1d4350678da4ea99cf9fdf9c965db659a897",
"testharness"
],
"css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html": [
- "4d0f506c7b6514c1e610f630309c6bf201f59427",
+ "3232913cb1328c0367f09ca8996b8c22e09cc2e0",
"testharness"
],
"css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [
@@ -538751,6 +543314,14 @@
"2433864333967f26a2354b791cd7b153d26e44f4",
"testharness"
],
+ "css/css-multicol/inline-block-and-column-span-all.html": [
+ "c968a0875cd7cc41c3c1dd83abee425ba0e639bb",
+ "reftest"
+ ],
+ "css/css-multicol/intrinsic-size-001.html": [
+ "ce8011b17f82407599ea28a2eaf543ec9d45a98b",
+ "reftest"
+ ],
"css/css-multicol/multicol-basic-001.html": [
"fca3ef47b7e4cbef7dfad8772d1d01cf67e86801",
"reftest"
@@ -541020,7 +545591,7 @@
"testharness"
],
"css/css-properties-values-api/property-cascade.html": [
- "97c1975cf134d45e2317f7400b15c20641d50448",
+ "5f0b7eb50c21397e0fe2995dd242fa454f78ca7c",
"testharness"
],
"css/css-properties-values-api/register-property-syntax-parsing.html": [
@@ -541068,15 +545639,15 @@
"support"
],
"css/css-properties-values-api/typedom.tentative.html": [
- "69ebf7a13d8cf3d71413259db68336368e5032e7",
+ "eb2d8549ba61c8e3f5929d9f11e84a6c6ef80079",
"testharness"
],
"css/css-properties-values-api/unit-cycles.html": [
- "c242640f2b93e7820b9d016b53f5f2279ec18eca",
+ "b5c996a442984ee8f2b8fd9a61e41bf7d194799a",
"testharness"
],
"css/css-properties-values-api/url-resolution.html": [
- "6e7c008a58c311aeb18e89edd4dd29e8a3e6c1ed",
+ "d9327896496a1f170570b132dc7797aaea5e2b1f",
"testharness"
],
"css/css-properties-values-api/var-reference-registered-properties-cycles.html": [
@@ -568164,7 +572735,7 @@
"testharness"
],
"css/cssom/computed-style-set-property.html": [
- "6567852681781fce5edcb078fcf86f9110c4ea1e",
+ "0a5e4cb0589799e19fe9fc91f134d03e42d73206",
"testharness"
],
"css/cssom/css-style-attr-decl-block.html": [
@@ -568384,7 +572955,7 @@
"testharness"
],
"css/cssom/shorthand-serialization.html": [
- "2178ba37a959fc56537c7cc164d423d14563881f",
+ "44af6737e3ef3b3c71ccd259b1d75104c4a92061",
"testharness"
],
"css/cssom/shorthand-values.html": [
@@ -571415,6 +575986,14 @@
"f0c3d93cbea2430a98e1c524910ded94567a70d7",
"testharness"
],
+ "css/selectors/webkit-pseudo-element.html": [
+ "8b4adddba8f2797512791421910ded22c00c8be2",
+ "testharness"
+ ],
+ "css/selectors/x-pseudo-element.html": [
+ "80ec44f9def9e15162e8cd06c96927d13efb0eaa",
+ "testharness"
+ ],
"css/support/1x1-green.png": [
"b98ca0ba0a03c580ac339e4a3653539cfa8edc71",
"support"
@@ -581559,10 +586138,6 @@
"921fa07b3f6de0f9a579b75b14d6509039765205",
"testharness"
],
- "dom/inert/inert-does-not-match-disabled-selector.html": [
- "74b8ac3f7dd5c3447bf47fd732fade9220497c93",
- "testharness"
- ],
"dom/interface-objects.html": [
"936d63517eada5521f814fabdbd785a57b9640b2",
"testharness"
@@ -584723,6 +589298,58 @@
"70d8fb73eadb81bdade8e4bdcefe46491cd05b96",
"testharness"
],
+ "encoding/streams/backpressure.any.js": [
+ "f17e149ed9e5b949d8b3d6a54b48093232e7da52",
+ "testharness"
+ ],
+ "encoding/streams/decode-bad-chunks.any.js": [
+ "101fb3aeb614cf66d82fb33f2c27989de3850061",
+ "testharness"
+ ],
+ "encoding/streams/decode-ignore-bom.any.js": [
+ "cbe26d71b13557285040a7e2934010e7195d27ec",
+ "testharness"
+ ],
+ "encoding/streams/decode-incomplete-input.any.js": [
+ "80dd016d4918daaa49da5b24efbcead17be03e88",
+ "testharness"
+ ],
+ "encoding/streams/decode-non-utf8.any.js": [
+ "7f39cdc04ca76b7071d3321ac068f9216b365002",
+ "testharness"
+ ],
+ "encoding/streams/decode-split-character.any.js": [
+ "6c022697da65ea10ee72da38609e8edbf695edab",
+ "testharness"
+ ],
+ "encoding/streams/decode-utf8.any.js": [
+ "34fa764bf0a682d1052550b406e8ad8dcec92825",
+ "testharness"
+ ],
+ "encoding/streams/encode-bad-chunks.any.js": [
+ "868e34b7342969b20145af44fd1d606499ec9ad1",
+ "testharness"
+ ],
+ "encoding/streams/encode-utf8.any.js": [
+ "74d1860e82b18535deb21238217c0e817bb9cc5d",
+ "testharness"
+ ],
+ "encoding/streams/readable-writable-properties.any.js": [
+ "ad7cde32f6889200e44ab840d3814f985778026d",
+ "testharness"
+ ],
+ "encoding/streams/realms.window.js": [
+ "b1cc13e0b80653161bf0e7c9a99325feab45d5c0",
+ "testharness"
+ ],
+ "encoding/streams/resources/readable-stream-from-array.js": [
+ "5c12ba8c8bba60ef52a689abae17d1f1e0bfc458",
+ "support"
+ ],
+ "encoding/streams/resources/readable-stream-to-array.js": [
+ "fda03e2264492296d9b26986d15211384a6a8b16",
+ "support"
+ ],
"encoding/textdecoder-byte-order-marks.any.js": [
"9ef0d73141a0e0ceaafba61cc101986afa32477d",
"testharness"
@@ -585911,38 +590538,22 @@
"48cb95ebf749d67b4965f5e24f20e36ede749600",
"support"
],
- "feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
- "6f11f8995b1e5c1cebd123219f9c8d34d4b108a5",
- "testharness"
- ],
- "feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [
- "59b33d7c4d2bd2c712c73ad7ff4e7c1003c244a2",
- "testharness"
- ],
- "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html": [
- "63479c0cb6f8c6c8241cc5c4a33e167b13a3888b",
+ "feature-policy/experimental-features/document-write.tentative.html": [
+ "f0148783f1246b6bd60dabd837c64fc6d903e542",
"testharness"
],
- "feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers": [
- "08461fadc2888cbcdfcda533f2928f14a52ab44e",
- "support"
- ],
- "feature-policy/autoplay-default-feature-policy.https.sub.html": [
- "763073e437d009b99a1d372c19bc1907f97e6776",
+ "feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html": [
+ "60bc00ddc3ece7f3bb1c0d6e07ffbe9be735188d",
"testharness"
],
- "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html": [
- "3dd3afbf771d5384b02bad0701aaae9224fb6399",
+ "feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html": [
+ "4a3526425d7add2eb9b144ac3f8498bcbcf7890e",
"testharness"
],
- "feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers": [
- "69ce436270a8715da3e7e4cea125824c2bbf57dc",
+ "feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers": [
+ "4fbf3f5adddbcb8ec95fc0e2192f4da841e93b8c",
"support"
],
- "feature-policy/experimental-features/document-write.tentative.html": [
- "f0148783f1246b6bd60dabd837c64fc6d903e542",
- "testharness"
- ],
"feature-policy/experimental-features/resources/async-script.js": [
"3c0ee6d02343891b0234f31c0fb229929ae1b24b",
"support"
@@ -586187,6 +590798,90 @@
"1759381fdc4141302f1b95868550ead76d9f5ca7",
"support"
],
+ "feature-policy/reporting/camera-reporting.https.html": [
+ "14b2ed1d37c6d79c9e011a35b9fece0cddc0ac76",
+ "testharness"
+ ],
+ "feature-policy/reporting/camera-reporting.https.html.headers": [
+ "2adc5e237fcec874767ff8f5ab38e3456c02cbf0",
+ "support"
+ ],
+ "feature-policy/reporting/document-write-reporting.html": [
+ "cb08b8d72d1851ca02c51abf5713519d52f1ecf4",
+ "testharness"
+ ],
+ "feature-policy/reporting/document-write-reporting.html.headers": [
+ "57102d5ee7c072e433fa44c0c13521573b32f469",
+ "support"
+ ],
+ "feature-policy/reporting/fullscreen-reporting.html": [
+ "83d97c91fab60e593cf3bf0cceff4db80552ef02",
+ "testharness"
+ ],
+ "feature-policy/reporting/fullscreen-reporting.html.headers": [
+ "d35e48ba40dc65a3b043a3e41a11332c42bfdba9",
+ "support"
+ ],
+ "feature-policy/reporting/geolocation-reporting.https.html": [
+ "22e258563b799c7d48db2452f15eb6124d1f2d0e",
+ "testharness"
+ ],
+ "feature-policy/reporting/geolocation-reporting.https.html.headers": [
+ "7e75481ea6d71080aaef8b43e774f5da9c9741e5",
+ "support"
+ ],
+ "feature-policy/reporting/image.jpg": [
+ "c059b96d97fc3701ce4325165b79948f69189135",
+ "support"
+ ],
+ "feature-policy/reporting/microphone-reporting.https.html": [
+ "7347a2332bc8184b2437a965e95b54ff5fcac22f",
+ "testharness"
+ ],
+ "feature-policy/reporting/microphone-reporting.https.html.headers": [
+ "a86e0a077851a84f704e2aa4df1d526ecd9a55b2",
+ "support"
+ ],
+ "feature-policy/reporting/midi-reporting.html": [
+ "8303b7adce4de654e3a846bbbe1cba035ac9a284",
+ "testharness"
+ ],
+ "feature-policy/reporting/midi-reporting.html.headers": [
+ "0e145978a014f08fb5faff42750e9338da0f9ede",
+ "support"
+ ],
+ "feature-policy/reporting/payment-reporting.https.html": [
+ "03eaebea58fb603f5121f6836c85c2c6773c3a5d",
+ "testharness"
+ ],
+ "feature-policy/reporting/payment-reporting.https.html.headers": [
+ "a2836778bc5389fdb65e9f6d5f83c7967200866f",
+ "support"
+ ],
+ "feature-policy/reporting/sync-xhr-reporting.html": [
+ "2c76390847be29c5bb2f3ec8605d1cb746c33e00",
+ "testharness"
+ ],
+ "feature-policy/reporting/sync-xhr-reporting.html.headers": [
+ "21a909e1fb6d84f066f42c09488f1bef032171c9",
+ "support"
+ ],
+ "feature-policy/reporting/unsized-media-reporting.html": [
+ "8bd793189501a94564044a3c2fa3757a69f13085",
+ "testharness"
+ ],
+ "feature-policy/reporting/unsized-media-reporting.html.headers": [
+ "db2dcbc1929b9e1264855e9b80f77dfbda5d4f38",
+ "support"
+ ],
+ "feature-policy/reporting/usb-reporting.https.html": [
+ "f90c602e449bd00e1d773edbce01e4fab63341e2",
+ "testharness"
+ ],
+ "feature-policy/reporting/usb-reporting.https.html.headers": [
+ "4fd1e269362c43d282ca8e3c5c35a5d648f0666b",
+ "support"
+ ],
"feature-policy/resources/autoplay.js": [
"56780cf6dc05879731bff0bbb1486c51b0b4141b",
"support"
@@ -586291,6 +590986,10 @@
"5701d6d7866b575dc162b27f70a336967c70911f",
"testharness"
],
+ "fetch/api/basic/header-value-null-byte.any.js": [
+ "9c223740c7807b43a6595ba81ef4f5b3c74c60b4",
+ "testharness"
+ ],
"fetch/api/basic/integrity.sub.any.js": [
"d487c3738ac498f4b936e269c093ca2bad581cb0",
"testharness"
@@ -587528,7 +592227,7 @@
"testharness"
],
"fetch/sec-metadata/font.tentative.https.sub.html": [
- "65432b5bacf3bddf8d5cbaad74bdbaf5e63fb44e",
+ "0a75531c405fc6db3320caec5567bec1ac38c763",
"testharness"
],
"fetch/sec-metadata/iframe.tentative.https.sub.html": [
@@ -587543,40 +592242,24 @@
"e1ac53157e023a9c6bc4806feda2e782ef4eefa5",
"testharness"
],
- "fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html": [
- "e25fd3f61d5487de6026a0204f107201f491afad",
+ "fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html": [
+ "9f497a9b62b80da4eff2e35220c1d6317e0e2817",
"testharness"
],
- "fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html": [
- "ac5982d8956c96cd638c2464ec9f8cce3f7e3a34",
+ "fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html": [
+ "fdd8733ba6d682b1f6b55fb4e3738d03a1fbbb50",
"testharness"
],
- "fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html": [
- "5b3b965f5e96d75f93796e55e77cfac94de18a52",
+ "fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html": [
+ "8fdc943f4c96c0616778c3316587f3cc598606eb",
"testharness"
],
- "fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html": [
- "ea6b167673f5e64396db4690abde56253e8af914",
+ "fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html": [
+ "dea71c3f67dca694e05f3c00db1d2d7aea5f3744",
"testharness"
],
- "fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html": [
- "430990a57c48b858fdc509653c0b689abcedcc6d",
- "testharness"
- ],
- "fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html": [
- "591cf67d18111592a5e696e346371a88770bdb32",
- "testharness"
- ],
- "fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html": [
- "8592d02c269b6afc4193f4323238b68d8fc26979",
- "testharness"
- ],
- "fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html": [
- "191dbaa7f77a3ac569b37e95e2db9f2ac4985a3e",
- "testharness"
- ],
- "fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html": [
- "11d60473981cf056ebc56b15905f27c070dad9c8",
+ "fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html": [
+ "a71163a1bfcb09196083dd1a38f4a6863f46eca8",
"testharness"
],
"fetch/sec-metadata/report.tentative.https.sub.html": [
@@ -587600,15 +592283,15 @@
"support"
],
"fetch/sec-metadata/resources/helper.js": [
- "cbd96d06863427f34d75d0621839bcfe76c7ad96",
+ "55e36d49fac39e814e10df1629e8b8fec0c8ebef",
"support"
],
"fetch/sec-metadata/resources/post-to-owner.py": [
- "fe08cd1cbcaa4585fb3be0ce0ee33e7d75759129",
+ "5472aa5b47e424bb6590d6c757df635eb4b6dd1f",
"support"
],
"fetch/sec-metadata/resources/record-header.py": [
- "06157e4cd8bd35e54b99c04f09a995185ba5686c",
+ "4c30d1e52ac8bfb24c890f790df154ea17947043",
"support"
],
"fetch/sec-metadata/resources/sharedWorker.js": [
@@ -587624,15 +592307,15 @@
"testharness"
],
"fetch/sec-metadata/serviceworker.tentative.https.sub.html": [
- "9d1fe2a3449da49b3b4e167f74e63e815ef5cf6c",
+ "cefabb20aaa40c91f5d90d180f52d596086a55cd",
"testharness"
],
"fetch/sec-metadata/sharedworker.tentative.https.sub.html": [
- "aa118e04239691f5488c4d62f3f1cf0ae59e8f1d",
+ "09017ccbb3a2b1b878d15e4199d59cad29a2277a",
"testharness"
],
"fetch/sec-metadata/style.tentative.https.sub.html": [
- "78fac567b43f3c48c81897b44237d820a6209d8a",
+ "609d5764f08ca5b3242692f4bdd94f2b364481b3",
"testharness"
],
"fetch/sec-metadata/track.tentative.https.sub.html": [
@@ -588356,11 +593039,11 @@
"manual"
],
"fullscreen/api/element-ready-check-containing-iframe-manual.html": [
- "66f99688f144779321ca511295c97b6883495ba8",
+ "8ba2ab71b158603e1af466d69b91412626ff8722",
"manual"
],
"fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html": [
- "dc0c28c78e18d7b5be3efe460802a7e1d1cf7d4e",
+ "f800093ec8ec8d6818a107dfc19a053c10583b36",
"manual"
],
"fullscreen/api/element-ready-check-fullscreen-iframe-child-manual.html": [
@@ -588416,7 +593099,7 @@
"manual"
],
"fullscreen/api/element-request-fullscreen-non-top-manual.html": [
- "06c4c1b036713cbf0c9c12a4d595525930006bd4",
+ "0764e9c8423a2f528dbfa12d4e57614d7128b4a0",
"manual"
],
"fullscreen/api/element-request-fullscreen-not-allowed.html": [
@@ -588452,11 +593135,11 @@
"manual"
],
"fullscreen/api/element-request-fullscreen-two-elements-manual.html": [
- "9611c8165663f8e633be20c2e34fb8b04378a44e",
+ "3291664c63ab4880dd844e5f75046d2f93c8f92f",
"manual"
],
"fullscreen/api/element-request-fullscreen-two-iframes-manual.html": [
- "99a7672e71c9617f1b73c87d6dcfe694f23563a4",
+ "94b38c0302a5fa32f72dd63c505cf0b73d7e6a73",
"manual"
],
"fullscreen/api/historical.html": [
@@ -588523,6 +593206,10 @@
"ccd3f0e22be91def3e2117a567c4245a7fea5720",
"support"
],
+ "fullscreen/rendering/fullscreen-root-block-scroll-manual.html": [
+ "ae57d8a9f238c0b1014a256de7f0ea814120b06b",
+ "manual"
+ ],
"fullscreen/rendering/fullscreen-root-block-size-manual.html": [
"989a85d91c4e17c6f5fd307d2fcfc810c3246738",
"manual"
@@ -589032,7 +593719,7 @@
"support"
],
"html/META.yml": [
- "d491c94e30c344f248a21da5c9605760921aa0c7",
+ "636b42b68c1046421f743b07a6764a715cabcb64",
"support"
],
"html/README.md": [
@@ -596607,34 +601294,6 @@
"d63362aaa1828f35de410b56c1ccc2d7869a111e",
"testharness"
],
- "html/editing/focus/inert/inert-does-not-match-disabled-selector.html": [
- "defc7cd6c49da58e49bff8e59a79f4a7dd4ff2c6",
- "testharness"
- ],
- "html/editing/focus/inert/inert-in-shadow-dom.html": [
- "36c962b1fc7d50cb6cb46e7d79d9435323e64ad9",
- "testharness"
- ],
- "html/editing/focus/inert/inert-inlines.html": [
- "b056c6495d2c54733bee6ab796332ba89f01b379",
- "testharness"
- ],
- "html/editing/focus/inert/inert-label-focus.html": [
- "8bbe1eca15c7d8f2f9fd5ea48c33cd0a5d5098e0",
- "testharness"
- ],
- "html/editing/focus/inert/inert-node-is-uneditable.html": [
- "b18d9912eb2d06cd072b79aa6f94002a3c209d1a",
- "testharness"
- ],
- "html/editing/focus/inert/inert-node-is-unfocusable.html": [
- "8b5de37fdcadedb9d98ec44c9c3c20aea52a0400",
- "testharness"
- ],
- "html/editing/focus/inert/inert-node-is-unselectable.html": [
- "7d5e90821bb0bd0d83711685853c78ff9fee6c4f",
- "testharness"
- ],
"html/editing/focus/processing-model/focus-fixup-rule-one-no-dialogs.html": [
"d8171abc715990a9e752c2d974acdfd7ecd34fc2",
"testharness"
@@ -596892,7 +601551,7 @@
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js": [
- "a11ccbc1f3099a6be7b4d538bcbe40292eac3ea0",
+ "8472318abd53207ec56b3f5988fb0a49d0c006a4",
"support"
],
"html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/test-incrementer.js": [
@@ -597511,134 +602170,182 @@
"59c5ca70d41cc969aed7ac6a531c1ca9a5f82f0f",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [
+ "f5b533c377160c77541187a301647e174069bd6d",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html": [
"c38944ae795807628ce1c5cd114e5832263b2ff2",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html": [
"95e2347121e26ec7cc7d080caf9db6ff253231c6",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html": [
"4d2269632c0eeeaf057b2008351ae98d4ddbdbca",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html": [
+ "9ab10159d8c0b3e23d73c5094961873dd837df7d",
+ "testharness"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html": [
"ccb755b347cbf926163e7dfaaa37c590942ca6c9",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html": [
"e7529946a49c0da964dae79831047e4a0507f119",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html": [
"f07c84f406cefc7054e8a13c2796d3d82673bdf7",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html": [
"953328982032dae2d508619b90188534179a26a8",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html": [
"5d17b91290f41db86147dcd80385aecbf19c14c7",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html": [
- "d2b1d30d8cc828496fa76cc887e01149f2a44809",
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html": [
+ "07c73554e59ccb576e590192e923de6b7100e1ae",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html": [
"cace814a8ce9f51ee4eaa1626b6e5377f528f22a",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html": [
- "7e9cf3643d00c59caa5bb37682a2fc8fa9ddee89",
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html": [
+ "bbb71dfa7027aad90392ec39112eafe1dc9abf65",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html": [
+ "05b8ca4770b18a91aaf2d9f3038d6fe4162f289f",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html": [
+ "7726947beca45ef3207a12fa63c63241f8183138",
+ "reftest"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html": [
"bdb2c2fd94686b502ed5a663b1026180283af22f",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html": [
"9fe632f7c209c42d9f24358ad6a2a56abddf97a3",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html": [
"cacbdbae00d0f7d6067323c68fc460149c524f35",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html": [
"13b262a804ab781905b3e4d3483554d9dd95b4d8",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html": [
"7bd2cedb1b6771398c808d1b7c8f68840bfb9b6f",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html": [
"3b46eb03c6c41bc616ebcc85bc6d635496e5eeed",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html": [
"8200e671944bc74644b1d9d540f9ce7496f86a63",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html": [
"df30468b0041323667946739369ec7d42bf47742",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html": [
+ "29c28ea5f89f49cbf8d35961cd29580a0bd42256",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html": [
+ "c11b466669665a29fc4f33b4bbc14c6b5598d545",
+ "reftest"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html": [
"f7511c9e4c91dbd2cb11db502789d8792f038a29",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html": [
"4e9539179739a3690aab276f2ba98c25bd4dfe9b",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html": [
+ "e6eff47e53c7a40e973b7f9dc298af2343f59941",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html": [
+ "abf3c45df71ee6617ddb8b6d402a103f54624820",
+ "reftest"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html": [
+ "689454ac493a05b28658edf549d71c6aa1c7be0e",
+ "testharness"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html": [
"914547fc6cdde3e464b28eb7cc9737d17305f9af",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html": [
"5dc68244fe0f896388ce7a0ff9d8f49397395078",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html": [
"7979e1d03ece2575ef9ec7a2a8cba96df3705d78",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html": [
"c51bca231e158db109774b6ca70cdedb9d099b3a",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html": [
"f70e952ed06c7bf07eaaaaccea251d3e54267ec3",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html": [
"edd2600d4a0749d281e7ed1b4da4aefbd7c686ba",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [
+ "ee76e93b64e1da9ab5883c328d9fff1eb865acb1",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html": [
+ "c26b50ce662cbea50a69e8e718b9b2b889568f64",
+ "reftest"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html": [
"fd6c11a00566759fbf1e749d49ad396cf1a7ee08",
"support"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html": [
"993836126143a8921e31bc8e61bef955eb302503",
"reftest"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html": [
"5f27ca5c299de72c6e8aab9275fcf70b3c4246a3",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html": [
"1cda91f32baf119b8dd827275a3ba8b10c484084",
"testharness"
],
- "html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html": [
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html": [
"92c33029701b41678f4f514d28c6260338bd8e77",
"testharness"
],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css": [
+ "b358d925a76fb571eda42292e2abbf7c1c75062f",
+ "support"
+ ],
"html/rendering/non-replaced-elements/the-hr-element-0/align-ref.html": [
"9e4283e208e17e4f2cfed05882bb1aff276028ad",
"support"
@@ -598359,6 +603066,34 @@
"257bd46289d7b62869bd2b1f31206d81b98d97c2",
"manual"
],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
+ "6f11f8995b1e5c1cebd123219f9c8d34d4b108a5",
+ "testharness"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html": [
+ "59b33d7c4d2bd2c712c73ad7ff4e7c1003c244a2",
+ "testharness"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html": [
+ "63479c0cb6f8c6c8241cc5c4a33e167b13a3888b",
+ "testharness"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers": [
+ "08461fadc2888cbcdfcda533f2928f14a52ab44e",
+ "support"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html": [
+ "763073e437d009b99a1d372c19bc1907f97e6776",
+ "testharness"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html": [
+ "3dd3afbf771d5384b02bad0701aaae9224fb6399",
+ "testharness"
+ ],
+ "html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers": [
+ "69ce436270a8715da3e7e4cea125824c2bbf57dc",
+ "support"
+ ],
"html/semantics/embedded-content/media-elements/autoplay-with-broken-track.html": [
"f687edf198dbb65064d90d4c3fc8baf4d684cde7",
"testharness"
@@ -606315,18 +611050,6 @@
"1dcb92615d085b28d3c9d2a22d744be849158d18",
"testharness"
],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html": [
- "317e13691d4a94e5861bbb85d7367591d7d1c624",
- "support"
- ],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html": [
- "ea537fcd6018fab07cb58132a2523d82cb8783de",
- "support"
- ],
- "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html": [
- "d83d24f2414b7f08229662694a7fd475560e2858",
- "testharness"
- ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/011-1.html": [
"37973fd52ec8c3b8091683e4726058ad2513c053",
"support"
@@ -606439,6 +611162,10 @@
"7fb172a141cf93330d6ec718d200e5845cd32f39",
"testharness"
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js": [
+ "0134da24f07bb4d653703d2d3d0c3575a32e8f34",
+ "testharness"
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/ignore-opens-during-unload.window.js": [
"43506a22a46da53885a2b5a0888095bc52b460ca",
"testharness"
@@ -606459,6 +611186,14 @@
"5e5ca80781809cc509a8eade7ea91e74de92f9a8",
"testharness"
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js": [
+ "0ff0bb99443677b8f8844c8ecedef22c408f2bac",
+ "testharness"
+ ],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js": [
+ "729a958700bb8d5e5f9d8717287ea114badbb662",
+ "testharness"
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/reload.window.js": [
"d6ff9dc7a45425cb688ed4b6c9ea2ab5c1c3ae5c",
"testharness"
@@ -606507,10 +611242,18 @@
"0fe189914c3727f8071c4eaaa6cc740aeb7aab93",
"support"
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html": [
+ "2404105b09a7724cf8cc5e2cf6d7bf7a8fb6f39b",
+ "support"
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/set-document-domain.html": [
"a92a7ae39f8351f97cd865dca5ebe8d4260aa229",
"support"
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html": [
+ "be483ff0aea456c3bc7f2e62d863e7f981453203",
+ "support"
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js": [
"1588f2f889227f68acba9fb1f02494ba0f80a4bd",
"testharness"
@@ -606531,6 +611274,10 @@
"e275a4987a0859b160a0f91de6c8896b90bdab31",
"testharness"
],
+ "html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js": [
+ "0c528935b52db9f2bc85cdd52659c300bfda5f5a",
+ "testharness"
+ ],
"html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url.window.js": [
"4e7c649f4533958112e6bd1dd59537619d7cc62d",
"testharness"
@@ -607275,6 +612022,34 @@
"2bb82c9834790bfeb1a65cf2ef202dc63d2ebac4",
"support"
],
+ "inert/inert-does-not-match-disabled-selector.tentative.html": [
+ "74b8ac3f7dd5c3447bf47fd732fade9220497c93",
+ "testharness"
+ ],
+ "inert/inert-in-shadow-dom.tentative.html": [
+ "36c962b1fc7d50cb6cb46e7d79d9435323e64ad9",
+ "testharness"
+ ],
+ "inert/inert-inlines.tentative.html": [
+ "b056c6495d2c54733bee6ab796332ba89f01b379",
+ "testharness"
+ ],
+ "inert/inert-label-focus.tentative.html": [
+ "8bbe1eca15c7d8f2f9fd5ea48c33cd0a5d5098e0",
+ "testharness"
+ ],
+ "inert/inert-node-is-uneditable.tentative.html": [
+ "b18d9912eb2d06cd072b79aa6f94002a3c209d1a",
+ "testharness"
+ ],
+ "inert/inert-node-is-unfocusable.tentative.html": [
+ "8b5de37fdcadedb9d98ec44c9c3c20aea52a0400",
+ "testharness"
+ ],
+ "inert/inert-node-is-unselectable.tentative.html": [
+ "7d5e90821bb0bd0d83711685853c78ff9fee6c4f",
+ "testharness"
+ ],
"infrastructure/META.yml": [
"59b44af3351e0610586709c033b15f15e1c46857",
"support"
@@ -607431,6 +612206,18 @@
"04fb9aa15176e6191ded5eccf442fcfd6cdcf566",
"reftest_node"
],
+ "infrastructure/reftest/reftest_and_mismatch.html": [
+ "b6b4847473dd548209de63e6f1f24a213411caf6",
+ "reftest"
+ ],
+ "infrastructure/reftest/reftest_and_mismatch_0.html": [
+ "f84ce6a13aa3dc9909405bb01eaccd820523f0ab",
+ "reftest_node"
+ ],
+ "infrastructure/reftest/reftest_and_mismatch_1.html": [
+ "05e905adafc06405b4f824ae720305735277790d",
+ "support"
+ ],
"infrastructure/reftest/reftest_cycle.html": [
"4a84a3b6741ee41fe6187a9bdc766d749206c83a",
"reftest_node"
@@ -607551,8 +612338,8 @@
"f7b8c74fa40203b5778f23cfde71f74a435e308d",
"support"
],
- "input-device-capabilities/interfaces.html": [
- "178ce5aa892bcd466b849b5a4f99e844314c69b1",
+ "input-device-capabilities/idlharness.window.js": [
+ "a57ae82993697695e4d05142c124ad36882becb1",
"testharness"
],
"input-events/META.yml": [
@@ -607656,7 +612443,7 @@
"support"
],
"interfaces/background-fetch.idl": [
- "6957604e7df5bed1c6ec0351ebe838d28773e3fe",
+ "92b6026f8b6dbbc4a79c1b3cdfdf73a0253aeaa6",
"support"
],
"interfaces/battery-status.idl": [
@@ -607764,7 +612551,7 @@
"support"
],
"interfaces/encoding.idl": [
- "7d55ce7e190a6944f0dbbf8194daee64224c8ec5",
+ "b805363c534feafcb606dd13701736f13497ef99",
"support"
],
"interfaces/encrypted-media.idl": [
@@ -607924,7 +612711,7 @@
"support"
],
"interfaces/payment-request.idl": [
- "3717d79476dc406639a4b339c0ae75824b01560d",
+ "7bd2ae13efd1327865ab1a0b526dea1aa47eea17",
"support"
],
"interfaces/performance-timeline.idl": [
@@ -607944,7 +612731,7 @@
"support"
],
"interfaces/pointerevents.idl": [
- "da822bba0e58e36ea0a892b008075120282d8a85",
+ "63d39a285232b0319c24ff907871fe92bd70d167",
"support"
],
"interfaces/pointerlock.idl": [
@@ -608108,7 +612895,7 @@
"support"
],
"interfaces/webxr.idl": [
- "00839eed1a2ab59842acd8ce5c873b8a57a765cd",
+ "ffa9ed4e91abde01ef1b442d2e8c5daa8a40305d",
"support"
],
"interfaces/worklets.idl": [
@@ -608416,7 +613203,7 @@
"support"
],
"lint.whitelist": [
- "8c6bb2d8fbd78a1acb41120f3cc7299b4cb4e248",
+ "7d579b6b343a23e6c039f309f362354c5aa5ba62",
"support"
],
"longtask-timing/META.yml": [
@@ -609627,14 +614414,90 @@
"c58e63ff12acefc73fc3cfa2f35836778696c827",
"testharness"
],
+ "mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html": [
+ "aae75b7e8c91b76d163404d6cc319382606e4e2e",
+ "testharness"
+ ],
+ "mediacapture-image/ImageCapture-creation.https.html": [
+ "9e8b5feeeb5cdf5686c36e3972fc9a1a8961de95",
+ "testharness"
+ ],
+ "mediacapture-image/ImageCapture-grabFrame.html": [
+ "bf5e9400a038f2432ce1bee3a3b345f3c82e5ea5",
+ "testharness"
+ ],
"mediacapture-image/META.yml": [
"1b4fef5e5a19ed3d7e61320bfa752a19da1f595a",
"support"
],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-fast.html": [
+ "75ed17a9e3302b0cb2b388846ad73d55c6d9c166",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html": [
+ "6241d599dc325d9b567eb6900c3daafaded92af3",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints-reject.html": [
+ "8f08d250fd1a569d84ecd4ce36fe5ffa29f583f7",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-applyConstraints.html": [
+ "431646eb53f030dce81f15a0130ea660142ce2ce",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-getCapabilities-fast.html": [
+ "55272d1499517a6fda0b7e06068928b4e1127b27",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-getCapabilities.html": [
+ "452b223a1b0bf3bad06d956e16b0eff22c8b6507",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-getConstraints-fast.html": [
+ "8cae4331318cb32c30e1c89339fdb37fee97a5db",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-getSettings-fast.html": [
+ "a4ecbe61181640f7f993f7f5c9cd3fd4e992f72c",
+ "testharness"
+ ],
+ "mediacapture-image/MediaStreamTrack-getSettings.html": [
+ "04fbfbfb6137cf61ee6491e2bef5786f202b43e3",
+ "testharness"
+ ],
+ "mediacapture-image/detached-HTMLCanvasElement.html": [
+ "e27950fc5edfea8357344f91198f0105775fef2c",
+ "testharness"
+ ],
+ "mediacapture-image/getPhotoCapabilities.html": [
+ "83329fcac4ad37bea6dd13930103c2fd689a77fd",
+ "testharness"
+ ],
+ "mediacapture-image/getPhotoSettings.html": [
+ "6a6184f17cb2f92c01d7bf784047ae17b1e8be66",
+ "testharness"
+ ],
"mediacapture-image/idlharness.window.js": [
"9d8f7eefb84dcc16534f1311c3b3c3d68e84572d",
"testharness"
],
+ "mediacapture-image/resources/imagecapture-helpers.js": [
+ "6d5ffa1695d807a05edeb75a21d472856bdda252",
+ "support"
+ ],
+ "mediacapture-image/setOptions-reject.html": [
+ "4deee97d7bc77859602aa25d51e547bd0290409b",
+ "testharness"
+ ],
+ "mediacapture-image/takePhoto-with-PhotoSettings.html": [
+ "58708612456fc669c5a445b76ad110fcbb0bb27d",
+ "testharness"
+ ],
+ "mediacapture-image/takePhoto.html": [
+ "49926db1cde6ee6b3e703e920e0812232eac0835",
+ "testharness"
+ ],
"mediacapture-record/BlobEvent-constructor.html": [
"3bcf4296e68aea1a7b167e570c0dcec148cc95e4",
"testharness"
@@ -609708,7 +614571,7 @@
"testharness"
],
"mediacapture-streams/MediaStream-default-feature-policy.https.html": [
- "f0f07da21228e7f8d752257e08eb6e22f084c7a5",
+ "0b45ac6f594a695b28545ee3a99c0c6a7f8bbc12",
"testharness"
],
"mediacapture-streams/MediaStream-finished-add.https.html": [
@@ -611612,7 +616475,7 @@
"support"
],
"network-error-logging/support/lock.py": [
- "8c88250bde00b4a62cc99131fdaa09e97f716369",
+ "d87b3aef0fb09a1063eb55b6f391f965833ac5a6",
"support"
],
"network-error-logging/support/nel.sub.js": [
@@ -618583,6 +623446,18 @@
"f8460d403ffa42d9dfc1bae6e0c3e500f7742fc9",
"support"
],
+ "payment-request/MerchantValidationEvent/complete-method-manual.https.html": [
+ "99a10e9dc79bd957a030f26c114f3ee51bb190d8",
+ "manual"
+ ],
+ "payment-request/MerchantValidationEvent/constructor.http.html": [
+ "8368c79a3b1dea2df26bbc804208002ec97fbf09",
+ "testharness"
+ ],
+ "payment-request/MerchantValidationEvent/constructor.https.html": [
+ "952c0f734a30f170964053bb00e55225d57cce0b",
+ "testharness"
+ ],
"payment-request/PaymentAddress/attributes-and-toJSON-method-manual.https.html": [
"65d56e7490111f6fc9e91f4470379fc89ae42972",
"manual"
@@ -618668,11 +623543,11 @@
"testharness"
],
"payment-request/allowpaymentrequest/common.sub.js": [
- "85a08461fcb0197ed2259d77035e696c1c69d6d8",
+ "a94bac064c9432980d437a98b72d4843f1b40bbe",
"support"
],
"payment-request/allowpaymentrequest/echo-PaymentRequest.html": [
- "f18b16ee31bf7e3eb868d073ab5e0fb0061bbd88",
+ "5211c7e5ce78c0621036578fef79aeb2c98f2a27",
"support"
],
"payment-request/allowpaymentrequest/no-attribute-cross-origin-bc-containers.https.html": [
@@ -618711,6 +623586,10 @@
"9a068c6d27f86a63d160b47b09a2116d5479ac72",
"testharness"
],
+ "payment-request/onmerchantvalidation-attribute.https.html": [
+ "c0ed23167ed9378ec32e769bd4f3e3afaef5040c",
+ "testharness"
+ ],
"payment-request/onpaymentmenthodchange-attribute.https.html": [
"0484eb868f983e3cdb0efceab5fe2b3c6084b4ab",
"testharness"
@@ -619031,6 +623910,10 @@
"43d0aa5d38b2ac65b5100c9ba8fa2b794ffd03ee",
"testharness"
],
+ "pointerevents/extension/pointerevent_pointerrawmove-manual.html": [
+ "0c4ccf9ad48d49c62b3d138845dfa3ac631a8e4e",
+ "manual"
+ ],
"pointerevents/extension/pointerevent_touch-action-pan-down-css_touch-manual.html": [
"592139f9f41abb2a3fe6bf1b99af87d1c5e651f3",
"manual"
@@ -619983,8 +624866,12 @@
"6b1c8a72751a6233eb0a07a8bb7df5e116fac724",
"reftest"
],
- "quirks/unitless-length/excluded-properties.html": [
- "a1de182770aafaab2ee4a8a335b34870388abacc",
+ "quirks/unitless-length/excluded-properties-001.html": [
+ "2e33cec0b33644576fb81e6fd9dbaf42bb02cf92",
+ "testharness"
+ ],
+ "quirks/unitless-length/excluded-properties-002.html": [
+ "5f98bc283ebc2b5d719815c59c3d1cd53acd2ed9",
"testharness"
],
"quirks/unitless-length/limited-quirks.html": [
@@ -628391,6 +633278,18 @@
"6805c323df5a975231648b830e33ce183c3cbbd3",
"support"
],
+ "resources/chromium/image_capture-mojom.js.headers": [
+ "6c61a34a4ec2e75096db0eb9f7748b142f0db7bb",
+ "support"
+ ],
+ "resources/chromium/image_capture.mojom.js": [
+ "1d01581e023e4655ec9d5c634aa9c8bbdf79d40b",
+ "support"
+ ],
+ "resources/chromium/mock-imagecapture.js": [
+ "a700bc97b3e055a66c80aca7cac33cfac3a2334f",
+ "support"
+ ],
"resources/chromium/mojo_bindings.js": [
"67d6a8828551c1f703ef29831592f2e4d8a42485",
"support"
@@ -628447,8 +633346,16 @@
"6805c323df5a975231648b830e33ce183c3cbbd3",
"support"
],
+ "resources/chromium/webusb-child-test.js": [
+ "add04fa58250d58d56759d242663a6510d306090",
+ "support"
+ ],
+ "resources/chromium/webusb-child-test.js.headers": [
+ "6805c323df5a975231648b830e33ce183c3cbbd3",
+ "support"
+ ],
"resources/chromium/webusb-test.js": [
- "9037a109c91610957091f73752074faa031e497b",
+ "5f9262655f3fca5ac225e2788723cc4cd05ca916",
"support"
],
"resources/chromium/webusb-test.js.headers": [
@@ -629624,7 +634531,7 @@
"support"
],
"screen-capture/getdisplaymedia.https.html": [
- "3a0444733b51bca1df22d67cd962ea350a8006ce",
+ "9b66419cb0a1eb149294419ddd3549e4ba032de5",
"testharness"
],
"screen-capture/idlharness.window.js": [
@@ -632767,10 +637674,6 @@
"8aaa5ca934457714ee0e529ad4b2b1740d9758dd",
"support"
],
- "service-workers/service-worker/resources/update-top-level-worker.py": [
- "f77ef284ac0745bd6d31e642742438766f14e32e",
- "support"
- ],
"service-workers/service-worker/resources/update-worker.py": [
"bc9b32ad3e68870d9f540524e70cd7947346e5c8",
"support"
@@ -632951,10 +637854,6 @@
"d8ed94f776650c8a40ba82df9ca5e909b460bb79",
"testharness"
],
- "service-workers/service-worker/update-top-level.https.html": [
- "e382028b44a9d19b26b3c15a3bba17fa6a0d9bcb",
- "testharness"
- ],
"service-workers/service-worker/update.https.html": [
"6717d4d7ac289c8a18b1500e21795fd16c5321e7",
"testharness"
@@ -632972,7 +637871,7 @@
"testharness"
],
"service-workers/service-worker/webvtt-cross-origin.https.html": [
- "637f494e4c1e69dac48535a14128b9bc0d5615b6",
+ "9394ff75c4a5f395d287ce7c57a13522efce9aee",
"testharness"
],
"service-workers/service-worker/windowclient-navigate.https.html": [
@@ -633739,72 +638638,48 @@
"d95c3ce8cff5d5f5428ee14c555c556c68f7f2a4",
"support"
],
- "storage/estimate-indexeddb-worker.https.html": [
- "2366760bdbed833b382a1adad350771bf3da7bb7",
+ "storage/estimate-indexeddb.https.any.js": [
+ "3e34ad19babf53da04974ceafe0fd4cb7be33621",
"testharness"
],
- "storage/estimate-indexeddb.https.html": [
- "3f5e1589d346e075e93fb08f5edf1b64d23643ec",
- "testharness"
- ],
- "storage/estimate-parallel.https.html": [
- "571b08cd5e211424035ec4fd7632d07548e4261c",
+ "storage/estimate-parallel.https.any.js": [
+ "090f004b8514bc9c99e8f85f9e8f9073dff2a263",
"testharness"
],
"storage/idlharness.https.any.js": [
"0ce4d5a0c8fccf07f6908a7a9ac9ac5ab5df6624",
"testharness"
],
- "storage/opaque-origin.https.html": [
- "563f2fea3c51627d919451cde1664703e4e87fe4",
+ "storage/opaque-origin.https.window.js": [
+ "3e101dde6759b2b8c379d6adc95190742328630f",
+ "testharness"
+ ],
+ "storage/permission-query.https.any.js": [
+ "9984bdab793219bf8b77748304f539f027a1e84f",
"testharness"
],
"storage/persist-permission-manual.https.html": [
"aa49900d69562284e35d8d1a4c4d5946586464ac",
"manual"
],
- "storage/persisted-worker.https.html": [
- "21f5c8bd92d849851994267c3d3459237f4bfa5c",
- "testharness"
- ],
- "storage/persisted.https.html": [
- "a5a91ff0b2632d07d9b5ae681f1f9786afa686e6",
- "testharness"
- ],
- "storage/resources/storagemanager-persist-worker.js": [
- "1152e4ec7349b5cfccb2cad5d267c910c85632d2",
- "support"
- ],
- "storage/resources/storagemanager-persisted-worker.js": [
- "979c8be3cd39377df9ef4e4a42a8601612a471e3",
- "support"
- ],
- "storage/storage-estimate-indexeddb.js": [
- "5f7895350ef5235099d9d0fd343578b30b47883e",
- "support"
- ],
- "storage/storage-persisted.js": [
- "5bc86fea951973180570434b572604c0fcc2eb22",
- "support"
- ],
- "storage/storagemanager-estimate.https.html": [
- "08a699adfb001a7cfded79f462d2f0261c2f5149",
+ "storage/persisted.https.any.js": [
+ "57e15f0e811de3e94652b2f16c5482a94be63c24",
"testharness"
],
- "storage/storagemanager-persist-worker.https.html": [
- "9c89a2f6712575001da0a4758d25ca6716bae3ae",
+ "storage/storagemanager-estimate.https.any.js": [
+ "d1d2e21924cd016165b02436dea994f44c193cd9",
"testharness"
],
- "storage/storagemanager-persist.https.html": [
- "61624fe272a610d3454ea2e245cdc6dbf6f59647",
+ "storage/storagemanager-persist.https.window.js": [
+ "13e17a16e14198e21b0b5984ed46c93a50daed41",
"testharness"
],
- "storage/storagemanager-persisted-worker.https.html": [
- "75004946164d59032228861cb854ae3e470723a0",
+ "storage/storagemanager-persist.https.worker.js": [
+ "fcf8175f706fe131c84ed2ac2a022e676d618c40",
"testharness"
],
- "storage/storagemanager-persisted.https.html": [
- "1d88c11bd8aace12223fb94845f1fb270a7b8877",
+ "storage/storagemanager-persisted.https.any.js": [
+ "70999406690fb26b7bc154093d826d7c0b8cf72c",
"testharness"
],
"streams/META.yml": [
@@ -638700,7 +643575,7 @@
"support"
],
"tools/manifest/item.py": [
- "61919fcc31e9c7afa8c1d5733a2723fc41bd326d",
+ "ddf046a68fa88da2f9e5ccad37dd26ec5fc7ac78",
"support"
],
"tools/manifest/log.py": [
@@ -638708,11 +643583,11 @@
"support"
],
"tools/manifest/manifest.py": [
- "42a8e1ceb23693a3e139cf6129bc82327b765182",
+ "9b2f0a18a569d0aac248487a0aa4743ee5caeed1",
"support"
],
"tools/manifest/sourcefile.py": [
- "133f8b59828dafd016df95429fe5286562b4733c",
+ "9be0d8966ece1bf56fd93e3fd606ac08c4bb1a76",
"support"
],
"tools/manifest/tests/__init__.py": [
@@ -638728,7 +643603,7 @@
"support"
],
"tools/manifest/tests/test_manifest.py": [
- "8bf7ef96c5f51248c76254af302ad6391bb2d903",
+ "f1241e044066d218f73fe806de4dcfa8a448c515",
"support"
],
"tools/manifest/tests/test_sourcefile.py": [
@@ -639220,7 +644095,11 @@
"support"
],
"tools/serve/serve.py": [
- "97a5063c1b9a3e831f6c22ac53a81f3f449a699f",
+ "968b837979ed3d68bd96058a2950e2354575e7d1",
+ "support"
+ ],
+ "tools/serve/test_functional.py": [
+ "87268ffc00d45f8bc57dc0fdd1e784eec745d288",
"support"
],
"tools/serve/test_serve.py": [
@@ -643164,7 +648043,7 @@
"support"
],
"tools/webdriver/webdriver/error.py": [
- "b2337ff3b38f57828c72d76e49ef8893d30b578c",
+ "e148e8fe800700c0c0b96abb48444063c4af6572",
"support"
],
"tools/webdriver/webdriver/protocol.py": [
@@ -643204,7 +648083,7 @@
"support"
],
"tools/wpt/run.py": [
- "6b098b41f702e0742df4a2f801eaaad3dc810ce9",
+ "aeeb22be9615e9d2d56b66a8957c997e53babedf",
"support"
],
"tools/wpt/testfiles.py": [
@@ -643215,12 +648094,16 @@
"7078a36b0c5bd5b4fe6f55f2ecf5fcbc2c535b4f",
"support"
],
+ "tools/wpt/tests/test_run.py": [
+ "097131d7ba5e9ac9c1995921c3f2702785f97096",
+ "support"
+ ],
"tools/wpt/tests/test_wpt.py": [
"b39173e64f23ea4484f75cab219e72e8c2d279d7",
"support"
],
"tools/wpt/tox.ini": [
- "e486bb221d72900b103fa56fbf18175afc5560c8",
+ "cd45a76e179861bb18adb231e86e2a74b2de972c",
"support"
],
"tools/wpt/update.py": [
@@ -643720,7 +648603,7 @@
"support"
],
"tools/wptrunner/wptrunner/tests/test_update.py": [
- "5c654c99a481c8709176ea9210508bc2388d2b2c",
+ "f8790815cf064e09926caca65c5ac1d15671be95",
"support"
],
"tools/wptrunner/wptrunner/tests/test_wpttest.py": [
@@ -644188,35 +649071,35 @@
"testharness"
],
"trusted-types/DOMParser-parseFromString.tentative.html": [
- "2fe9b31b787e1fb458a3ed8996b2d79f7e14aa35",
+ "2dfc37686bca15431c216a50d29f9f9eed2782e0",
"testharness"
],
"trusted-types/Document-write.tentative.html": [
- "3a63e923543b999b05d1fab926ad33d7d2719dfa",
+ "79247fb4d68e6724b98c62d3b62a0e6b20784f4d",
"testharness"
],
"trusted-types/Element-insertAdjacentHTML.tentative.html": [
- "599ade44ec117ecb429659a9f969a2767bd95cbb",
+ "d5db7936b1f98012ee3750f6d3056f4a5b172615",
"testharness"
],
"trusted-types/Element-outerHTML.tentative.html": [
- "a0bb6c1a5e3fef47e4351353befbfc8eb105652f",
+ "c8daddfe9955196bf0b69410263cb7c01e473e5e",
"testharness"
],
"trusted-types/HTMLElement-generic.tentative.html": [
- "cea32a5a2df1d9b255f5aaf85ac5a694fdb3a618",
+ "08d165a75d4185a61374128be8046384cc701b4e",
"testharness"
],
"trusted-types/Location-assign.tentative.html": [
- "13cca5679488d0b3e12631d5f70408565ea1b065",
+ "62f98e96d7febe6c744b882f8d196d1686fe9166",
"testharness"
],
"trusted-types/Location-href.tentative.html": [
- "d759d28593e67f25d8bc28d36cf0ff4912460dc0",
+ "bacadf6a91b1c0bc5c76293aab38f9d503cfa2b7",
"testharness"
],
"trusted-types/Location-replace.tentative.html": [
- "7d84905d19878d57634a8497b81ef86d8114b72e",
+ "4fb53d0260973ed5d714540a448909488b6e2465",
"testharness"
],
"trusted-types/META.yml": [
@@ -644224,63 +649107,71 @@
"support"
],
"trusted-types/Range-createContextualFragment.tentative.html": [
- "3d45b33486d3971c0c58180fa4034dbfae18f135",
+ "3a880a53778acb165fd5d957eeaca22685baf2b5",
"testharness"
],
- "trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html": [
- "76e6d130b05dfba00911ad42eb7a162cd29b222e",
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [
+ "b20fcf2436eac17f9f558cab0c80d1eced6bb1be",
"testharness"
],
- "trusted-types/Window-open.tentative.html": [
- "c005fbba143f66a9540deebba7988fdea9661558",
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [
+ "af6e04941c3b6206602bc7f547a3b0c9ef555a11",
+ "testharness"
+ ],
+ "trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [
+ "6d43e0bafc61f34c17d7d7b751bf69f12d035adf",
"testharness"
],
- "trusted-types/Window-trustedTypes.tentative.html": [
- "ef4487749dd0c12a00bd3ab42c1353467a6eeb8f",
+ "trusted-types/Window-TrustedTypes.tentative.html": [
+ "8e20e492e6a8484e386d1a08f854bd9b162bd6be",
+ "testharness"
+ ],
+ "trusted-types/Window-open.tentative.html": [
+ "172d566e57fc635b551b5d355661db690869b220",
"testharness"
],
"trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html": [
- "cc575dc0085bce3aa1370fb528e28003ad3c1c2b",
+ "e5959a425a2feafc95deb4f6b8b1372ad5ad1497",
"testharness"
],
"trusted-types/block-string-assignment-to-Document-write.tentative.html": [
- "28813d72e0e1833e25658e2210abb9b0a30b2137",
+ "06532c3b47948c22c5debfae511c5fbd414c64de",
"testharness"
],
"trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html": [
- "ad94b44e8fb7621ba4693ad65377872281f3e9a6",
+ "1fb3bbd994a4a6904cfc4609430f9188692eda40",
"testharness"
],
"trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html": [
- "47f1165b1a69366848dd5dd21a2ad2199b9c2e81",
+ "abb595222ba5e609cff02adc27a8a7239d44103e",
"testharness"
],
"trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html": [
- "eae52626190746ad0a8b436f74981009e400232b",
+ "7b1a5795d7c04448cd204391ba75030a87131150",
"testharness"
],
"trusted-types/block-string-assignment-to-Location-assign.tentative.html": [
- "8079335bc5861fa723691a0f884cf249e6f63e24",
+ "cd375b9d016365f01d8e6f95b50d928520c82afa",
"testharness"
],
"trusted-types/block-string-assignment-to-Location-href.tentative.html": [
- "4e393f92506e00276a4440e1023ac23e7a6138e8",
+ "14fbcb2fb3cdc6f51e957bbb047ba8900f0d0865",
"testharness"
],
"trusted-types/block-string-assignment-to-Location-replace.tentative.html": [
- "872f14e144830ed87b51e352f93c32ce85438bfe",
+ "9d00fcdeb35d36b05adeb7b67f3816169f3ad036",
"testharness"
],
"trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html": [
- "2afa2572c350071b791ee280bce0a1e5135dc2aa",
+ "ff9be06251dc7965ad1d765d49e45b4ef9f8d728",
"testharness"
],
"trusted-types/block-string-assignment-to-Window-open.tentative.html": [
- "f5712295d30d7b1d680ad6753dd401d21c0409f9",
+ "ae4b038dc0c67ab828c3531b3ac01e819114f1ed",
"testharness"
],
"trusted-types/support/helper.sub.js": [
- "b5435917bec607c97eaa5d75ee7fa2752999cb0a",
+ "617e02aa6badddd36f01f88241ac8ce7d5670597",
"support"
],
"uievents/META.yml": [
@@ -646291,40 +651182,100 @@
"86700298dfae66de6f4d026baa29e6e3584320f7",
"testharness"
],
+ "wasm/jsapi/global/constructor.any.js": [
+ "7a45cc4191c55684cde187fc73fb9741d6f5c2c5",
+ "testharness"
+ ],
+ "wasm/jsapi/global/toString.any.js": [
+ "ca025576c2b49604f053c83002f3a9cc8ef41a7b",
+ "testharness"
+ ],
+ "wasm/jsapi/global/value-set.any.js": [
+ "b4e6770f10ed9e3ad55b9ae18ee96deda3ff171e",
+ "testharness"
+ ],
+ "wasm/jsapi/global/valueOf.any.js": [
+ "176c5a784698399351eedeaac0ec305aa8ab7b81",
+ "testharness"
+ ],
"wasm/jsapi/instance/constructor-bad-imports.any.js": [
"24c51c10dc5df9d52c06bfb0715e435b17f24f7a",
"testharness"
],
"wasm/jsapi/instance/constructor.any.js": [
- "93a3ffda033729d64562a583e823fab05f35f6fe",
+ "61a8f53a014c192f28a0c25252cf3702561e7191",
+ "testharness"
+ ],
+ "wasm/jsapi/instance/exports.any.js": [
+ "31423918720543da2ba25e392267bf541b756242",
+ "testharness"
+ ],
+ "wasm/jsapi/instance/toString.any.js": [
+ "08dcb14a50d04f6db196626ddb93f2b50da8f055",
"testharness"
],
"wasm/jsapi/interface.any.js": [
- "64c1f60da1c7888be994f222af69f401402ae5f4",
+ "5d76ac56ec5fafde8dde3924df863a2694bd6691",
+ "testharness"
+ ],
+ "wasm/jsapi/memory/buffer.any.js": [
+ "b04460b6c5e56cf1fe990e3107aa9efcb4964ed5",
"testharness"
],
"wasm/jsapi/memory/constructor.any.js": [
- "33256f85e45749cc46842dccbd1ee7c40db41ae5",
+ "f9907ca6104d8ec76861e43b6b981042d86fb865",
+ "testharness"
+ ],
+ "wasm/jsapi/memory/grow.any.js": [
+ "95300399f192b7eab70dd8f07c43f4db37eebe01",
+ "testharness"
+ ],
+ "wasm/jsapi/memory/toString.any.js": [
+ "4e15d75ea20f1ebfeba5dc7c8a9a52c253dd01bf",
"testharness"
],
"wasm/jsapi/module/constructor.any.js": [
- "0f5eecf957e8ca6af851ce12f5c18266a2eb0460",
+ "32f183fac8738d30cc8a432768da315949320257",
"testharness"
],
"wasm/jsapi/module/customSections.any.js": [
- "146aa7fd332ca9b061fef51a7378d29f8c9c165e",
+ "58ac63b61c93a015bfa9d5daab39f8d5b48548da",
"testharness"
],
"wasm/jsapi/module/exports.any.js": [
- "c7ecdcf6b619b4ab93cf4e878addeb9bed736d4e",
+ "e63a885a4c34add0f6787d3642de83d9766568d1",
"testharness"
],
"wasm/jsapi/module/imports.any.js": [
- "522b262f549b9a07c0a426cd474151d3d3e02749",
+ "640da591d21d8924d261fdc58b8e7cc762187a11",
+ "testharness"
+ ],
+ "wasm/jsapi/module/toString.any.js": [
+ "d9231a132ca8bf965f69c3cc81070a2ffe179efa",
"testharness"
],
+ "wasm/jsapi/table/assertions.js": [
+ "dde2fd770904207a1f9f287fa48d82954a418f2e",
+ "support"
+ ],
"wasm/jsapi/table/constructor.any.js": [
- "4aeac10f7adc6e0ec0abc56fa66c0259102798e2",
+ "e924bdb2ba42c67bcc6d4a949c2eeb50eac63e31",
+ "testharness"
+ ],
+ "wasm/jsapi/table/get-set.any.js": [
+ "2bb43a9308d732b5b6fa689c181ac411880c3733",
+ "testharness"
+ ],
+ "wasm/jsapi/table/grow.any.js": [
+ "d3efb511e4b1db1efa089322c0a3079705dfbdbd",
+ "testharness"
+ ],
+ "wasm/jsapi/table/length.any.js": [
+ "a6a9661dbaddc800cb99b7b8e2b804cb0c8e3c62",
+ "testharness"
+ ],
+ "wasm/jsapi/table/toString.any.js": [
+ "e576477910ad3198b446b4addf89ba9a571d020b",
"testharness"
],
"wasm/jsapi/wasm-constants.js": [
@@ -646335,44 +651286,148 @@
"6e9284e773105db5751c5483ed9333a45272b180",
"support"
],
- "wasm/resources/blank.html": [
+ "wasm/resources/load_wasm.js": [
+ "512324639059da8a9d76e9d740d97fc56ebdebc4",
+ "support"
+ ],
+ "wasm/serialization/broadcastchannel-success-and-failure.html": [
+ "0d11cc595be2d16ad795be8199ed2ae7abe79974",
+ "testharness"
+ ],
+ "wasm/serialization/broadcastchannel-success.html": [
+ "cd5f8d0b56a19148dbd01b4218869f1f0c3526fd",
+ "testharness"
+ ],
+ "wasm/serialization/identity-not-preserved.html": [
+ "24bb3b16d8c50600a634d62d4c48c49dfb3b120e",
+ "testharness"
+ ],
+ "wasm/serialization/incrementer.wasm": [
+ "47afcdef2a2812acccecd0f203d30d3023593f3d",
+ "support"
+ ],
+ "wasm/serialization/nested-worker-success.any.js": [
+ "5388ebcc39b22946957250004577a1966c264a5a",
+ "testharness"
+ ],
+ "wasm/serialization/no-transferring.html": [
+ "a0bf11f01dd459b2e3abeb249f725e1e05d1532f",
+ "testharness"
+ ],
+ "wasm/serialization/resources/blank.html": [
"a3c3a4689a62b45b1e429f6b7a94690e556a1259",
"support"
],
- "wasm/resources/frame.html": [
- "d1c83e114a039a7aeefa8914340911eb2301b5e4",
+ "wasm/serialization/resources/broadcastchannel-iframe.html": [
+ "83e347b5cb35c92aa3cd96263a68b56af366f0e3",
+ "support"
+ ],
+ "wasm/serialization/resources/broadcastchannel-sharedworker.js": [
+ "310e0e9358446acaec0f13d8e2fb4437316953c2",
+ "support"
+ ],
+ "wasm/serialization/resources/broadcastchannel-worker.js": [
+ "76a8177060498547ab1661319c20d5d5288cd96f",
+ "support"
+ ],
+ "wasm/serialization/resources/create-empty-wasm-module.js": [
+ "7326710c9e47d756bbdab1ead2303b108b8f04db",
+ "support"
+ ],
+ "wasm/serialization/resources/echo-iframe.html": [
+ "c4fd5824a1c617c21fe8b92483b388d586edf06e",
+ "support"
+ ],
+ "wasm/serialization/resources/echo-worker.js": [
+ "cbbde8a73c8c2a63cc97cbe2b6cd7c6d81585b5c",
+ "support"
+ ],
+ "wasm/serialization/resources/incrementer-iframe-domain.sub.html": [
+ "d2d18de49950c2508a69545ad95a937898b04532",
+ "support"
+ ],
+ "wasm/serialization/resources/incrementer-iframe.html": [
+ "5c8bc0735e207a7c18f12d578276ae3c3b999da5",
+ "support"
+ ],
+ "wasm/serialization/resources/incrementer-popup.html": [
+ "660e472b27c086068edeb7fd2bcade536c4bd5e9",
+ "support"
+ ],
+ "wasm/serialization/resources/incrementer-worker-with-channel.js": [
+ "0323b3e52e75e894ae40ffc68e904ffc81ded024",
+ "support"
+ ],
+ "wasm/serialization/resources/incrementer-worker.js": [
+ "1779ceea520ccfd07da6d595d8a34be62de89428",
"support"
],
- "wasm/resources/incrementer.wasm": [
+ "wasm/serialization/resources/incrementer.wasm": [
"47afcdef2a2812acccecd0f203d30d3023593f3d",
"support"
],
- "wasm/resources/load_wasm.js": [
- "512324639059da8a9d76e9d740d97fc56ebdebc4",
+ "wasm/serialization/resources/nested-iframe-1.html": [
+ "fe93cc0c4b0fe5b86bf1a12de84fb3fc48ea08a5",
"support"
],
- "wasm/resources/service-worker.js": [
- "684eaf64878c22afc9ac877b79db7d26f14a3670",
+ "wasm/serialization/resources/nested-iframe-2.html": [
+ "fad52ce9de3977c077b5a22e72ee7b23837ea302",
"support"
],
- "wasm/wasm_local_iframe_test.html": [
- "0f4fbd0c7191ece3a901b0a065f147c03431a2d4",
- "testharness"
+ "wasm/serialization/resources/nested-iframe-3.html": [
+ "7971022b2cdc315d598761a3694838494c2884a8",
+ "support"
],
- "wasm/wasm_serialization_tests.html": [
- "49766c770525bcef9d66ee0b735e410bc5a7ebb8",
- "testharness"
+ "wasm/serialization/resources/nested-iframe-4-incrementer.html": [
+ "f419f4bc36cdffafa665e333a7e7bced3d153585",
+ "support"
+ ],
+ "wasm/serialization/resources/serviceworker-failure.js": [
+ "39796f9d94a39d2a13ed832544ce781373a20655",
+ "support"
],
- "wasm/wasm_serialization_tests.js": [
- "3cc4166168b08f46ce54511b6364d01f7b8cbeb9",
+ "wasm/serialization/resources/sharedworker-failure.js": [
+ "854c70b9e84e6e6fb1c59f64a06a79646a122576",
"support"
],
- "wasm/wasm_serialization_worker.js": [
- "3361ed73951770b2a6e881ef093a116d10676939",
+ "wasm/serialization/resources/test-incrementer.js": [
+ "65cb33227a37376c1a0134275d5079d442b443a9",
"support"
],
- "wasm/wasm_service_worker_test.https.html": [
- "cced4b8f6ecdaa03c6d80793c2f3650b217452a5",
+ "wasm/serialization/serialization-via-history.html": [
+ "35dc17b6701fadf920ce251ec6c63da1c26b6570",
+ "testharness"
+ ],
+ "wasm/serialization/serialization-via-idb.any.js": [
+ "1d861c3d3aa1072b1c90332fec7ac993d3b59552",
+ "testharness"
+ ],
+ "wasm/serialization/serialization-via-notifications-api.any.js": [
+ "84105651d3b53192f453b9f16bb85163165495cb",
+ "testharness"
+ ],
+ "wasm/serialization/window-domain-success.sub.html": [
+ "51d4c5cb0ea0c0c5cf69530876c2f7c19bb3830a",
+ "testharness"
+ ],
+ "wasm/serialization/window-messagechannel-success.html": [
+ "e686c8113561d94e860a774771aa69b974696716",
+ "testharness"
+ ],
+ "wasm/serialization/window-serviceworker-failure.https.html": [
+ "97c5a1decdb85317930508ece8f306fb80880ca2",
+ "testharness"
+ ],
+ "wasm/serialization/window-sharedworker-failure.html": [
+ "667e985a30b53c0ecadfd4c68f6217b87a7a5b98",
+ "testharness"
+ ],
+ "wasm/serialization/window-similar-but-cross-origin-success.sub.html": [
+ "070cf0a49a8f0c0ede81b6751e727b44f36c0043",
+ "testharness"
+ ],
+ "wasm/serialization/window-simple-success.html": [
+ "6f2ccf465e93a160c73df548fc58774a5040f0e6",
"testharness"
],
"web-animations/META.yml": [
@@ -646996,7 +652051,7 @@
"support"
],
"webaudio/resources/audionodeoptions.js": [
- "0d90a9c630013b9b46ba49c106e0daa89da7032e",
+ "df0090c6d605fc0ea5fca224de83e0f472618f9a",
"support"
],
"webaudio/resources/audioparam-testing.js": [
@@ -647008,7 +652063,7 @@
"support"
],
"webaudio/resources/audit.js": [
- "7ffa4392b05a15dfacafa7d89c902d977ed23266",
+ "b7ca020161071437087c349c0e8b59dbf132f764",
"support"
],
"webaudio/resources/biquad-filters.js": [
@@ -647060,7 +652115,7 @@
"support"
],
"webaudio/resources/start-stop-exceptions.js": [
- "9a77e67ed8634ca53237edcdbf71ca26866b23f9",
+ "0d2ea12f6db8257878087646157242cce37ed507",
"support"
],
"webaudio/resources/stereopanner-testing.js": [
@@ -647072,7 +652127,7 @@
"support"
],
"webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html": [
- "2112edeeffcf5688357d98b5161e6c3ab2d761ad",
+ "4e27f842ddeda3e2bdd78da7b8ee3f67062d1a9f",
"testharness"
],
"webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-basic.html": [
@@ -647084,7 +652139,7 @@
"testharness"
],
"webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html": [
- "b3de37f119f167469a4337d520345f820a6c4165",
+ "7ee6a2237edd209256ac2d46be6893a5305383a0",
"testharness"
],
"webaudio/the-audio-api/the-analysernode-interface/test-analyser-gain.html": [
@@ -647112,7 +652167,7 @@
"support"
],
"webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html": [
- "b71078d8f8094cdc43ba3adfc33d0f6f15931b33",
+ "e0359953d2e909f69066885515f4a3f3cc00ff02",
"testharness"
],
"webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-getChannelData.html": [
@@ -647120,11 +652175,11 @@
"testharness"
],
"webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html": [
- "07a34f07c185f4bc9dcf1b325bb51067610b430a",
+ "a2c4581c4e80069f227fe29078bc3eb6409c8b4e",
"testharness"
],
"webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html": [
- "c5aae1ad53235f7b0f10bc3535d9a3fe5150760f",
+ "9845d5eaba384cced3c63ddbf4df1400b31f4994",
"testharness"
],
"webaudio/the-audio-api/the-audiobuffersourcenode-interface/.gitkeep": [
@@ -647136,7 +652191,7 @@
"testharness"
],
"webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html": [
- "5527f44cc9c93e72214ca228fa53e830a8cfcead",
+ "f3f16c4c648166dfdb394a41881d4a515d097e86",
"testharness"
],
"webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-ended.html": [
@@ -647224,7 +652279,7 @@
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html": [
- "0a8c73160e543d6f9d382b536e5c41f7d29c6e9a",
+ "4163a8439cd08c1f8cdcb587c569653c2618e021",
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/audionode-connect-order.html": [
@@ -647236,15 +652291,15 @@
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html": [
- "c3d3fae2155602bbae7494e0e1439ea1a477b054",
+ "386614ff2e20e7abd4e511bf5e9d7d492cddfeb3",
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html": [
- "b29c09d395fc2815ee5441fdb06320ad02f2f3f5",
+ "65b93222d1002e227ab1ad2e29b6e140b65bd9e4",
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/audionode.html": [
- "14cfbff7e2754c4ee028c7ead599e87849a60922",
+ "0b57d27e8e1a7b7339d0e47641cbba27ab419612",
"testharness"
],
"webaudio/the-audio-api/the-audionode-interface/channel-mode-interp-basic.html": [
@@ -647260,7 +652315,7 @@
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html": [
- "c928b3dc165a298dc5ddfd9b7b885c2e7b9c501d",
+ "982731d33843544d2f70af72a51e9bd878bbf486",
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-exponentialRampToValueAtTime.html": [
@@ -647288,7 +652343,7 @@
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html": [
- "31405ebfcd2aa90bc8be13bd3fe856b1f6e60601",
+ "9609d5d102638251f686058683a83bbea7b5ad0a",
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurveAtTime.html": [
@@ -647304,11 +652359,11 @@
"support"
],
"webaudio/the-audio-api/the-audioparam-interface/automation-rate.html": [
- "a3c789e2f2cbdb31e540bf5cc58850786b4ed73b",
+ "a3c11994bbe37f26aa1c2eafbb4f287d559fae34",
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/event-insertion.html": [
- "eab77c494d1161083f1fe73376492b177355995f",
+ "688d0478235e202859c7939eef65ad383f7a4f36",
"testharness"
],
"webaudio/the-audio-api/the-audioparam-interface/k-rate-audioworklet.https.html": [
@@ -647412,11 +652467,11 @@
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html": [
- "7cfd423c071b9a8283e291f200615b2e0a69c797",
+ "8b7704a781b712c0129b650da898ed79baad794c",
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html": [
- "31e204cdc8d53bfaf0226c34a0e5daf42c813b61",
+ "cee9ec82c20f42a5941698fc394e6babb639ace9",
"testharness"
],
"webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-disconnected-input.https.html": [
@@ -647492,7 +652547,7 @@
"testharness"
],
"webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html": [
- "83f53aafb1980bf991f4d12c3a3a472b82df61a6",
+ "441e98a251187c3cc600299681306d29df11e618",
"testharness"
],
"webaudio/the-audio-api/the-biquadfilternode-interface/biquad-getFrequencyResponse.html": [
@@ -647544,7 +652599,7 @@
"support"
],
"webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html": [
- "f967f0699a321783fe832464b6e72a2a12021746",
+ "71a62f176f8eefd9b9168b2c222cc6d1c752d3a5",
"testharness"
],
"webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-disconnect.html": [
@@ -647560,7 +652615,7 @@
"testharness"
],
"webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html": [
- "115bd9943490ab09efbff70239167911eb83d933",
+ "0d6b45c56df0f43a0eac3f364cadca2e4669c6ed",
"testharness"
],
"webaudio/the-audio-api/the-channelsplitternode-interface/.gitkeep": [
@@ -647568,11 +652623,11 @@
"support"
],
"webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html": [
- "e0449919ad5e744065bb0257dddfe9b488511812",
+ "954c71a96b288530e6c22878fed7a91f42091dc2",
"testharness"
],
"webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html": [
- "7fa9d6fa5466d2fbfeec8bbcf0718b80b52d2298",
+ "9cbb46b6d969a6440fc5b29ee1a20d607912fc83",
"testharness"
],
"webaudio/the-audio-api/the-constantsourcenode-interface/constant-source-basic.html": [
@@ -647608,7 +652663,7 @@
"testharness"
],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html": [
- "11d6f332a1bbc943bec1ad7391610ffe776b955c",
+ "ac4f198d7c1449f38ca14963f73b0d3d90b40b5b",
"testharness"
],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-response-1-chan.html": [
@@ -647624,7 +652679,7 @@
"testharness"
],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html": [
- "31f115da5321ef52be0ee1ba078b726473694b9c",
+ "c8dbeb941bc48f4f3a92907cb140a29f96567057",
"testharness"
],
"webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-null.html": [
@@ -647636,7 +652691,7 @@
"testharness"
],
"webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html": [
- "cf818330060143078cacbecf77724244eee55cf8",
+ "935ceeb715edd2ffdeb7979d6824736fa82b6d2f",
"testharness"
],
"webaudio/the-audio-api/the-delaynode-interface/.gitkeep": [
@@ -647664,7 +652719,7 @@
"testharness"
],
"webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html": [
- "7bbff410650c3bd234c47f080697705b088bd6a4",
+ "caf2f85dfd459b2d48526b8f4c13b37b2bceaddb",
"testharness"
],
"webaudio/the-audio-api/the-delaynode-interface/delaynode-scheduling.html": [
@@ -647684,7 +652739,7 @@
"support"
],
"webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html": [
- "98d5dbfded1e2f10e32b14444279760fa2cdeec1",
+ "c2460dfa1ddd26a5c2e199873c0b28189275ff83",
"testharness"
],
"webaudio/the-audio-api/the-dynamicscompressornode-interface/dynamicscompressor-basic.html": [
@@ -647724,7 +652779,7 @@
"testharness"
],
"webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html": [
- "79c40dc084753d48970212eafd97ef531c0ae402",
+ "7828f05226151ebf7d6c7ec984cae1f90ef848d2",
"testharness"
],
"webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-getFrequencyResponse.html": [
@@ -647760,7 +652815,7 @@
"support"
],
"webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html": [
- "f480ec8ce51f929417b922adf60a2f9ede800fcd",
+ "4b6863103622c5fb248dee3e3eb20d955275d037",
"testharness"
],
"webaudio/the-audio-api/the-offlineaudiocontext-interface/current-time-block-size.html": [
@@ -647772,7 +652827,7 @@
"support"
],
"webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html": [
- "aaf77aec555b720b343a9e63adae924c730510dc",
+ "36bf604b296c63b213d99408ab38937c62a755dc",
"testharness"
],
"webaudio/the-audio-api/the-pannernode-interface/.gitkeep": [
@@ -647780,7 +652835,7 @@
"support"
],
"webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html": [
- "95e914a75f6784a76af79fcfce2e372ddb865814",
+ "98a171ad059eaf9b8e24f3f46db4658f76773f19",
"testharness"
],
"webaudio/the-audio-api/the-pannernode-interface/distance-exponential.html": [
@@ -647840,7 +652895,7 @@
"support"
],
"webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html": [
- "caa99aa4031a22f8c538e5622470560a50c4d5bc",
+ "9409f1ffce2110c177332388988d7ddb559d3ae2",
"testharness"
],
"webaudio/the-audio-api/the-stereopanner-interface/no-dezippering.html": [
@@ -648256,7 +653311,7 @@
"wdspec"
],
"webdriver/tests/execute_script/execute.py": [
- "9e220d02687e885ebcd682606f7a673cf36b6db1",
+ "2af16c1e5e8a3bed01c5703db24a1d399a0e2270",
"wdspec"
],
"webdriver/tests/execute_script/json_serialize_windowproxy.py": [
@@ -648355,10 +653410,26 @@
"f0e95d12f14e2fb4337476a8ccf883a06c0e5c5d",
"wdspec"
],
+ "webdriver/tests/get_element_attribute/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
"webdriver/tests/get_element_attribute/get.py": [
"02a155bcee6626037f424fbf387458ea46e6c206",
"wdspec"
],
+ "webdriver/tests/get_element_css_value/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/get_element_css_value/get.py": [
+ "88a56e1ad45f906f7e1b255350eada15bd549bfc",
+ "wdspec"
+ ],
+ "webdriver/tests/get_element_css_value/user_prompts.py": [
+ "529b6ae9183d3c7a343521e739cfe0b788c4b290",
+ "wdspec"
+ ],
"webdriver/tests/get_element_property/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -648371,6 +653442,18 @@
"16a098536fde814b5ac8bcb35dac01ac38649d2e",
"wdspec"
],
+ "webdriver/tests/get_element_rect/__init__.py": [
+ "abf1a91367517107b3b690466a4b570c0a3b7cab",
+ "support"
+ ],
+ "webdriver/tests/get_element_rect/get.py": [
+ "433e2f6bf8b428136a36b81138386e62eb257daf",
+ "wdspec"
+ ],
+ "webdriver/tests/get_element_rect/user_prompts.py": [
+ "ec1047bd3893d51f4b2be9597d87ba4a63b6a353",
+ "wdspec"
+ ],
"webdriver/tests/get_element_tag_name/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -648459,6 +653542,18 @@
"d049d835f2fc60df7296da08a013793ae7e398ca",
"testharness"
],
+ "webdriver/tests/is_element_enabled/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/is_element_enabled/enabled.py": [
+ "dd56084d8d0eca15b7b6d46491bbd9f0a64cef40",
+ "wdspec"
+ ],
+ "webdriver/tests/is_element_enabled/user_prompts.py": [
+ "bd8bc81bdfcce13e5cdbfec336749cd668bd68ef",
+ "wdspec"
+ ],
"webdriver/tests/is_element_selected/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -648524,7 +653619,7 @@
"wdspec"
],
"webdriver/tests/new_session/invalid_capabilities.py": [
- "83f93ea22f7ed28fa28ab05d36387df828716026",
+ "f31ce3b8b6fd5f8e4a9ff4d0137debdb7dacdea4",
"wdspec"
],
"webdriver/tests/new_session/merge.py": [
@@ -648548,7 +653643,7 @@
"support"
],
"webdriver/tests/new_session/support/create.py": [
- "85ae1cd4ea85e0a1e0d712b1a7803d6066ab8739",
+ "475fe5a424fe609f0a7e55164e56378e229e4885",
"support"
],
"webdriver/tests/new_session/timeouts.py": [
@@ -648580,7 +653675,7 @@
"support"
],
"webdriver/tests/send_alert_text/send.py": [
- "edc37d6edb483c232401676f6c11ab7512774605",
+ "6dbc03f94019abf6fc467ae2baf8fb9d21823e64",
"wdspec"
],
"webdriver/tests/set_timeouts/__init__.py": [
@@ -648588,7 +653683,11 @@
"support"
],
"webdriver/tests/set_timeouts/set.py": [
- "e603e217ec7d73bf7bc59f1d2e8687a89c818c47",
+ "a78ab2e68e82ba28c15748bb98239b3d232dc9f1",
+ "wdspec"
+ ],
+ "webdriver/tests/set_timeouts/user_prompts.py": [
+ "a98d87e9b2e2ca252a3ed7cf215a20bd1c299818",
"wdspec"
],
"webdriver/tests/set_window_rect/__init__.py": [
@@ -648616,7 +653715,7 @@
"support"
],
"webdriver/tests/support/asserts.py": [
- "44c76a96b0997100a0201a5ffafd20e9967758ec",
+ "2d305a0f3bec08d6b773541e556258416e737f7f",
"support"
],
"webdriver/tests/support/defaults.py": [
@@ -648632,7 +653731,7 @@
"support"
],
"webdriver/tests/support/inline.py": [
- "1ef379093cbc653f1e457f456896d8ff33b497a3",
+ "3bf56c84bedb47e024a88983fa15c232ddba7899",
"support"
],
"webdriver/tests/support/merge_dictionaries.py": [
@@ -648667,6 +653766,30 @@
"907be66a149e8196c87760544140636d9625bbb9",
"wdspec"
],
+ "webdriver/tests/take_element_screenshot/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/take_element_screenshot/screenshot.py": [
+ "e4d2869af4f3a50aa4da87b499d84b75254967a7",
+ "wdspec"
+ ],
+ "webdriver/tests/take_element_screenshot/user_prompts.py": [
+ "fa239999e4f3479526423498f5718a455ffde53f",
+ "wdspec"
+ ],
+ "webdriver/tests/take_screenshot/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/take_screenshot/screenshot.py": [
+ "d3153710f7b108f167a4ff82b9ef288bcfa9440c",
+ "wdspec"
+ ],
+ "webdriver/tests/take_screenshot/user_prompts.py": [
+ "4d4840f08ba6f57f3e22bda72a0071128bea9be0",
+ "wdspec"
+ ],
"webgl/META.yml": [
"8e6b680d91c9b81b85e3ce010c5fb9fe338f37bf",
"support"
@@ -649467,8 +654590,16 @@
"07e9736441285536e0549c55b110a562b49276cc",
"testharness"
],
+ "webrtc/RTCQuicStream.https.html": [
+ "1e08016d75af57307d922b9876605e8152f92768",
+ "testharness"
+ ],
+ "webrtc/RTCQuicTransport-helper.js": [
+ "50d9e6666a2d3bf8b3128f94b3c902579fabc0f5",
+ "support"
+ ],
"webrtc/RTCQuicTransport.https.html": [
- "8eaa4aa78fad878732a8fd290a7566e2bd3aa0f5",
+ "703f424a63851996b3708fe66caff63c7e0f5502",
"testharness"
],
"webrtc/RTCRtpCapabilities-helper.js": [
@@ -649604,7 +654735,7 @@
"testharness"
],
"webrtc/no-media-call.html": [
- "c4979e8521478a0f8175a5f945cd217f8c60d548",
+ "8f4f5962d4af9de8fd25b9a64aedb49c7b0a0824",
"testharness"
],
"webrtc/promises-call.html": [
@@ -649620,7 +654751,7 @@
"testharness"
],
"webrtc/simplecall.https.html": [
- "6adefe774923472f1fb1ddc4f952f44dd4247f1f",
+ "681c42d4cd855dcf53543a7add231d2665c381a9",
"testharness"
],
"webrtc/tools/.eslintrc.js": [
@@ -650888,7 +656019,11 @@
"support"
],
"webusb/resources/open-in-iframe.html": [
- "0b04a3e03aaa5e18574a56ad4959e1601f1ef432",
+ "ec80bff3c234495112d780ac975288727965021e",
+ "support"
+ ],
+ "webusb/resources/open-in-worker.js": [
+ "b715184e04dd575e1e1d5a9bb4731e58ed6eecb5",
"support"
],
"webusb/resources/usb-allowed-by-feature-policy-worker.js": [
@@ -650900,7 +656035,7 @@
"support"
],
"webusb/resources/usb-helpers.js": [
- "93740920dee8f259fc266cd4927b5972985df77e",
+ "a3a4a31ba889f719c68cd2ca4f263bc56d67b7a6",
"support"
],
"webusb/usb-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html": [
@@ -650924,7 +656059,7 @@
"testharness"
],
"webusb/usb-disabled-by-feature-policy.https.sub.html": [
- "3a8a9183591605a69081e0e29beb7a2358def75b",
+ "97e66b2a373f73de5fd705cdaabb60d5625127f5",
"testharness"
],
"webusb/usb-disabled-by-feature-policy.https.sub.html.headers": [
@@ -650936,7 +656071,7 @@
"testharness"
],
"webusb/usb.https.window.js": [
- "ee26619cf2224a31e32a393b7edb0869a0598704",
+ "8c9e676cdfc3346ec8f057f99355fb75b708e3c1",
"testharness"
],
"webusb/usb.serviceworker.https.html": [
@@ -650947,22 +656082,42 @@
"c509adfef0d4c0cd3e68cc84467ac7db1140d643",
"support"
],
+ "webusb/usbAlternateInterface.https.any.js": [
+ "e5ef3844ae44008db5424275c760572a0147a518",
+ "testharness"
+ ],
+ "webusb/usbConfiguration.https.any.js": [
+ "e7d1c7fb146dcd7b50dab6088f8a0e1f14259c99",
+ "testharness"
+ ],
"webusb/usbConnectionEvent.https.any.js": [
"9d4f60abc48733da6bf06ed7673228fb4a31d628",
"testharness"
],
"webusb/usbDevice-iframe.https.html": [
- "02b2c5010fb566a485bf6887295a05cae3822e37",
+ "75bad9e0c9f5223fe9b6427db1ea7afdb23dd727",
+ "testharness"
+ ],
+ "webusb/usbDevice-worker.https.html": [
+ "119f5d6688235e396db1d118cec8b61324e46d8a",
"testharness"
],
"webusb/usbDevice.https.any.js": [
- "da7df081b8b16c61eff714bd4302c21123d0ddc5",
+ "046de82b1bd8be1fc620535615fd7f1483653f78",
+ "testharness"
+ ],
+ "webusb/usbEndpoint.https.any.js": [
+ "e57639c3d4b9e40606978fbb17bf9d604e65337b",
"testharness"
],
"webusb/usbInTransferResult.https.any.js": [
"4cdb58e467b5770f5a08329ac59c209bde56fa60",
"testharness"
],
+ "webusb/usbInterface.https.any.js": [
+ "7fbf660bbce014f3ba2595382749ebaafef284aa",
+ "testharness"
+ ],
"webusb/usbIsochronousInTransferPacket.https.any.js": [
"ee992f998b6078d6d65dfcfd4b5e33a31dcae10f",
"testharness"
@@ -655287,6 +660442,26 @@
"33000ee860c358700a108ac98663c40a99229438",
"testharness"
],
+ "worklets/audio-worklet-credentials.https.html": [
+ "9d867db7ce0a672c3ee016937a610fb1cdbc011c",
+ "testharness"
+ ],
+ "worklets/audio-worklet-csp.https.html": [
+ "ef148a4a098472b7a76bac9ad99fb52f964b2ace",
+ "testharness"
+ ],
+ "worklets/audio-worklet-import.https.html": [
+ "cff063a4361bd0244ee7a7a352be849f1b7118a6",
+ "testharness"
+ ],
+ "worklets/audio-worklet-referrer.https.html": [
+ "f258cd5a452d57002d041211cb44ee6f27f0b3aa",
+ "testharness"
+ ],
+ "worklets/audio-worklet-service-worker-interception.https.html": [
+ "479ae176f9d4a2ff52d7a643a4943df2ef72453d",
+ "testharness"
+ ],
"worklets/idlharness.worker.js": [
"827dd02c4c53292b534677454c11264f415678a5",
"testharness"
@@ -655448,7 +660623,7 @@
"support"
],
"worklets/resources/worklet-test-utils.js": [
- "499999f22df3aad2053b7da6852f8e7aeea2bde8",
+ "797edc9e563a7e089379d6bb0947da06f205ddc7",
"support"
],
"wpt": [
@@ -655932,7 +661107,7 @@
"testharness"
],
"xhr/headers-normalize-response.htm": [
- "466b0d977cc6cdba12190a27dfe42e6452ea98d8",
+ "84f2fc8582127b9a8e271887d420b3ea7a87696a",
"testharness"
],
"xhr/historical.html": [
@@ -656952,7 +662127,7 @@
"testharness"
],
"xhr/timeout-multiple-fetches.html": [
- "30d6b736c56d5576483c12a7413dd809d27d89e8",
+ "4f4998c4285222bf4bdf41c3e0c1c27e913d2149",
"testharness"
],
"xhr/timeout-sync.htm": [
diff --git a/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini b/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini
deleted file mode 100644
index 86715ffc9c2..00000000000
--- a/tests/wpt/metadata/css/CSS2/floats/floats-in-table-caption-001.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[floats-in-table-caption-001.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini b/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini
new file mode 100644
index 00000000000..98fac618bce
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/linebox/anonymous-inline-inherit-001.html.ini
@@ -0,0 +1,2 @@
+[anonymous-inline-inherit-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini b/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini
new file mode 100644
index 00000000000..3d28990c283
--- /dev/null
+++ b/tests/wpt/metadata/css/CSS2/visudet/line-height-204.html.ini
@@ -0,0 +1,2 @@
+[line-height-204.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
index 04cfbdc7eee..9b8f6a6602d 100644
--- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
+++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini
@@ -41,9 +41,6 @@
[Matching font-weight: '430' should prefer '340 398' over '501 550']
expected: FAIL
- [Matching font-weight: '430' should prefer '501 550' over '502 560']
- expected: FAIL
-
[Matching font-weight: '500' should prefer '500' over '450 460']
expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini
deleted file mode 100644
index 3e0b732a20f..00000000000
--- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-050.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-text-line-break-opclns-050.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini
deleted file mode 100644
index 247462a9f2f..00000000000
--- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-054.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-text-line-break-opclns-054.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini
deleted file mode 100644
index 926f5631fe8..00000000000
--- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-059.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-text-line-break-opclns-059.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini
deleted file mode 100644
index 2853708ba60..00000000000
--- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-164.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-text-line-break-opclns-164.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini b/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini
deleted file mode 100644
index 8bcf1b74f6e..00000000000
--- a/tests/wpt/metadata/css/css-text/i18n/css3-text-line-break-opclns-165.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[css3-text-line-break-opclns-165.html]
- expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini b/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini
index f32b05ecd88..102a231a234 100644
--- a/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini
+++ b/tests/wpt/metadata/css/css-text/i18n/zh/css-text-line-break-zh-in-strict.html.ini
@@ -11,3 +11,6 @@
[FE19 PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS may NOT appear at line start if zh and strict]
expected: FAIL
+ [22EF MIDLINE HORIZONTAL ELLIPSIS may NOT appear at line start if zh and strict]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini b/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini
new file mode 100644
index 00000000000..bbb2e5f171e
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transforms/css-transforms-3d-on-anonymous-block-001.html.ini
@@ -0,0 +1,2 @@
+[css-transforms-3d-on-anonymous-block-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini b/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini
new file mode 100644
index 00000000000..8502ae0ce91
--- /dev/null
+++ b/tests/wpt/metadata/css/selectors/webkit-pseudo-element.html.ini
@@ -0,0 +1,13 @@
+[webkit-pseudo-element.html]
+ [webkit-prefixed pseudo-element selectors should be accessible from CSSOM]
+ expected: FAIL
+
+ [qS and qSA shouldn't throw exception]
+ expected: FAIL
+
+ [webkit-prefix without dash is invalid]
+ expected: FAIL
+
+ [rules include webkit-prefixed pseudo-element should be cascaded]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini
index b49624917df..b6001e8bba9 100644
--- a/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini
+++ b/tests/wpt/metadata/custom-elements/parser/parser-sets-attributes-and-children.html.ini
@@ -1,2 +1,2 @@
[parser-sets-attributes-and-children.html]
- expected: TIMEOUT
+ expected: CRASH
diff --git a/tests/wpt/metadata/encoding/idlharness.any.js.ini b/tests/wpt/metadata/encoding/idlharness.any.js.ini
index 1e892e5e427..7eed0794ca3 100644
--- a/tests/wpt/metadata/encoding/idlharness.any.js.ini
+++ b/tests/wpt/metadata/encoding/idlharness.any.js.ini
@@ -22,6 +22,66 @@
[idlharness]
expected: FAIL
+ [TextDecoderStream interface: attribute readable]
+ expected: FAIL
+
+ [TextEncoderStream interface object length]
+ expected: FAIL
+
+ [TextDecoderStream interface object length]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface object]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [TextEncoderStream interface object name]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute fatal]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute ignoreBOM]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute writable]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface object]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute encoding]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute readable]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute encoding]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [TextDecoderStream interface object name]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute writable]
+ expected: FAIL
+
[idlharness.any.worker.html]
[Untitled]
@@ -30,6 +90,66 @@
[idlharness]
expected: FAIL
+ [TextDecoderStream interface: attribute readable]
+ expected: FAIL
+
+ [TextEncoderStream interface object length]
+ expected: FAIL
+
+ [TextDecoderStream interface object length]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface object]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [TextEncoderStream interface object name]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute fatal]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object's @@unscopables property]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object's "constructor" property]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute ignoreBOM]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute writable]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface object]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute encoding]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute readable]
+ expected: FAIL
+
+ [TextEncoderStream interface: attribute encoding]
+ expected: FAIL
+
+ [TextDecoderStream interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [TextDecoderStream interface object name]
+ expected: FAIL
+
+ [TextEncoderStream interface: existence and properties of interface prototype object]
+ expected: FAIL
+
+ [TextDecoderStream interface: attribute writable]
+ expected: FAIL
+
[idlharness.any.serviceworker.html]
expected: TIMEOUT
diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
index 28ee1901e6a..f72b3d38837 100644
--- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
+++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
@@ -2,96 +2,538 @@
type: testharness
[single-byte-decoder.html?document]
- expected: CRASH
+ [windows-1254: iso_8859-9 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
-[single-byte-decoder.html?XMLHttpRequest]
- expected: CRASH
- [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
+ [ISO-8859-8: iso-8859-8 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-3: iso_8859-3:1988 (XMLHttpRequest)]
+ [ISO-8859-4: iso_8859-4 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-4: iso_8859-4:1988 (XMLHttpRequest)]
+ [ISO-8859-6: arabic (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-5: iso_8859-5:1988 (XMLHttpRequest)]
+ [KOI8-U: koi8-u (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-6: iso_8859-6:1987 (XMLHttpRequest)]
+ [ISO-8859-2: iso8859-2 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-7: iso_8859-7:1987 (XMLHttpRequest)]
+ [ISO-8859-5: iso-8859-5 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [ISO-8859-8: iso_8859-8:1988 (XMLHttpRequest)]
+ [windows-1252: csisolatin1 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [windows-1252: iso_8859-1:1987 (XMLHttpRequest)]
+ [ISO-8859-2: latin2 (document.characterSet and document.inputEncoding)]
expected: FAIL
- [windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-874: dos-874 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1258: cp1258 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-874: iso885911 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: iso_8859-9 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-6: iso_8859-6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: iso88599 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1257: windows-1257 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: iso-8859-9 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1252: latin1 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1258: x-cp1258 (XMLHttpRequest)]
- expected: TIMEOUT
+ [KOI8-R: koi (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1257: windows-1257 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1252: windows-1252 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: windows-1254 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-5: csisolatincyrillic (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [x-mac-cyrillic: x-mac-ukrainian (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1254: iso-ir-148 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: csisolatin5 (XMLHttpRequest)]
- expected: TIMEOUT
+ [x-mac-cyrillic: x-mac-cyrillic (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1257: cp1257 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-6: iso-8859-6-e (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1255: x-cp1255 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1255: cp1255 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1257: x-cp1257 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-3: iso-ir-109 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: cp1254 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1254: cp1254 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: x-cp1254 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-13: iso8859-13 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: latin5 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1252: cp1252 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1255: cp1255 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-4: l4 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1254: iso-ir-148 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-6: iso-ir-127 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1258: windows-1258 (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1254: latin5 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [windows-1255: windows-1255 (XMLHttpRequest)]
- expected: TIMEOUT
+ [ISO-8859-14: iso885914 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [IBM866: cp866 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [KOI8-R: koi8 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: csisolatingreek (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: greek8 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso88597 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [macintosh: mac (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: csisolatin4 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso_8859-7 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1250: windows-1250 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: elot_928 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-874: tis-620 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: iso8859-3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1250: cp1250 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-874: windows-874 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: iso-8859-2 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [macintosh: csmacintosh (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: iso_8859-15 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: iso-8859-3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1253: windows-1253 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [KOI8-R: koi8-r (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1251: windows-1251 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: csisolatin5 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: x-cp1254 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: csisolatin3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: iso8859-5 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: l3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: iso885910 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: l5 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: l1 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: iso88595 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: ecma-114 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-14: iso8859-14 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: iso-8859-6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [KOI8-R: koi8_r (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1258: windows-1258 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: x-cp1252 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-13: iso885913 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso-ir-138 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso-8859-8-e (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [IBM866: ibm866 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-14: iso-8859-14 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: csisolatinhebrew (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: cp819 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: latin6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1253: x-cp1253 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: us-ascii (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso_8859-7:1987 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso8859-1 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: latin3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: l6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: iso88592 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: iso-8859-10 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: windows-1254 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [IBM866: 866 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso-8859-7 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso8859-8 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-874: iso-8859-11 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: ascii (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: iso_8859-3 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: ibm819 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso88591 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1258: cp1258 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso8859-7 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso-ir-100 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: iso_8859-5 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [IBM866: csibm866 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: hebrew (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: iso-ir-144 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
- [x-mac-cyrillic: x-mac-cyrillic (XMLHttpRequest)]
- expected: TIMEOUT
+ [windows-1254: iso8859-9 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: l9 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: iso_8859-6:1987 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1255: x-cp1255 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: cyrillic (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1256: cp1256 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-5: iso_8859-5:1988 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: csiso88596i (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: iso8859-6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: csiso88596e (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1251: x-cp1251 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: csisolatin2 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: iso8859-4 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: greek (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: sun_eu_greek (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: latin4 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1255: windows-1255 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: iso_8859-9:1989 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: iso88596 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [macintosh: macintosh (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso_8859-1:1987 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: iso-8859-9 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: ecma-118 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: iso8859-15 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: l2 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: iso88593 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1256: x-cp1256 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1251: cp1251 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: iso885915 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: iso88594 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: iso_8859-2 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-3: iso_8859-3:1988 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [x-mac-cyrillic: x-mac-ukrainian (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-13: iso-8859-13 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: iso_8859-2:1987 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-874: iso8859-11 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1256: windows-1256 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: csiso88598e (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: asmo-708 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: iso-ir-110 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1254: iso88599 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1257: cp1257 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [macintosh: x-mac-roman (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: csisolatin9 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: iso-8859-6-i (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: csisolatin6 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8-I: csiso88598i (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: iso8859-10 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1250: x-cp1250 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1258: x-cp1258 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso_8859-1 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: visual (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1253: cp1253 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso_8859-8:1988 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: ansi_x3.4-1968 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-7: iso-ir-126 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [KOI8-R: cskoi8r (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8-I: iso-8859-8-i (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-10: iso-ir-157 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [KOI8-U: koi8-ru (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1257: x-cp1257 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso_8859-8 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8-I: logical (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-8: iso88598 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-2: iso-ir-101 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-15: iso-8859-15 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [windows-1252: iso-8859-1 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-16: iso-8859-16 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-4: iso-8859-4 (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+ [ISO-8859-6: csisolatinarabic (document.characterSet and document.inputEncoding)]
+ expected: FAIL
+
+
+[single-byte-decoder.html?XMLHttpRequest]
+ [ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-3: iso_8859-3:1988 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-4: iso_8859-4:1988 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-5: iso_8859-5:1988 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-6: iso_8859-6:1987 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-7: iso_8859-7:1987 (XMLHttpRequest)]
+ expected: FAIL
+
+ [ISO-8859-8: iso_8859-8:1988 (XMLHttpRequest)]
+ expected: FAIL
+
+ [windows-1252: iso_8859-1:1987 (XMLHttpRequest)]
+ expected: FAIL
+
+ [windows-1254: iso_8859-9:1989 (XMLHttpRequest)]
+ expected: FAIL
[single-byte-decoder.html?TextDecoder]
diff --git a/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini
new file mode 100644
index 00000000000..ae376965575
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/backpressure.any.js.ini
@@ -0,0 +1,17 @@
+[backpressure.any.sharedworker.html]
+ [backpressure]
+ expected: FAIL
+
+
+[backpressure.any.html]
+ [backpressure]
+ expected: FAIL
+
+
+[backpressure.any.serviceworker.html]
+ expected: TIMEOUT
+
+[backpressure.any.worker.html]
+ [backpressure]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini
new file mode 100644
index 00000000000..072b3593998
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-bad-chunks.any.js.ini
@@ -0,0 +1,17 @@
+[decode-bad-chunks.any.html]
+ [decode-bad-chunks]
+ expected: FAIL
+
+
+[decode-bad-chunks.any.worker.html]
+ [decode-bad-chunks]
+ expected: FAIL
+
+
+[decode-bad-chunks.any.serviceworker.html]
+ expected: TIMEOUT
+
+[decode-bad-chunks.any.sharedworker.html]
+ [decode-bad-chunks]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini
new file mode 100644
index 00000000000..259b7667bd8
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-ignore-bom.any.js.ini
@@ -0,0 +1,83 @@
+[decode-ignore-bom.any.html]
+ [ignoreBOM should work for encoding utf-16be, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 0]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 0]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 0]
+ expected: FAIL
+
+
+[decode-ignore-bom.any.serviceworker.html]
+ expected: TIMEOUT
+
+[decode-ignore-bom.any.sharedworker.html]
+ [decode-ignore-bom]
+ expected: FAIL
+
+
+[decode-ignore-bom.any.worker.html]
+ [ignoreBOM should work for encoding utf-16be, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 0]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16be, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 0]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-8, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 3]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 2]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 1]
+ expected: FAIL
+
+ [ignoreBOM should work for encoding utf-16le, split at character 0]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini
new file mode 100644
index 00000000000..6972b401446
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-incomplete-input.any.js.ini
@@ -0,0 +1,23 @@
+[decode-incomplete-input.any.serviceworker.html]
+ expected: TIMEOUT
+
+[decode-incomplete-input.any.sharedworker.html]
+ [decode-incomplete-input]
+ expected: FAIL
+
+
+[decode-incomplete-input.any.worker.html]
+ [incomplete input with error mode "fatal" should error the stream]
+ expected: FAIL
+
+ [incomplete input with error mode "replacement" should end with a replacement character]
+ expected: FAIL
+
+
+[decode-incomplete-input.any.html]
+ [incomplete input with error mode "fatal" should error the stream]
+ expected: FAIL
+
+ [incomplete input with error mode "replacement" should end with a replacement character]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini
new file mode 100644
index 00000000000..6510f801f28
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-non-utf8.any.js.ini
@@ -0,0 +1,71 @@
+[decode-non-utf8.any.sharedworker.html]
+ [decode-non-utf8]
+ expected: FAIL
+
+
+[decode-non-utf8.any.worker.html]
+ [TextDecoderStream should be able to reject invalid sequences in Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to reject invalid sequences in UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to reject invalid sequences in UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode ISO-8859-14]
+ expected: FAIL
+
+
+[decode-non-utf8.any.html]
+ [TextDecoderStream should be able to reject invalid sequences in Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to reject invalid sequences in UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to reject invalid sequences in UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode Shift_JIS]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode invalid sequences in UTF-16BE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode UTF-16LE]
+ expected: FAIL
+
+ [TextDecoderStream should be able to decode ISO-8859-14]
+ expected: FAIL
+
+
+[decode-non-utf8.any.serviceworker.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini
new file mode 100644
index 00000000000..affec6b9557
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-split-character.any.js.ini
@@ -0,0 +1,77 @@
+[decode-split-character.any.serviceworker.html]
+ expected: TIMEOUT
+
+[decode-split-character.any.sharedworker.html]
+ [decode-split-character]
+ expected: FAIL
+
+
+[decode-split-character.any.worker.html]
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 3]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 1]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 2]
+ expected: FAIL
+
+ [a code point should be emitted as soon as all bytes are available]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 4]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 5]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 6]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 4]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 5]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 2]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 3]
+ expected: FAIL
+
+
+[decode-split-character.any.html]
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 3]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 1]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 2]
+ expected: FAIL
+
+ [a code point should be emitted as soon as all bytes are available]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 4]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 5]
+ expected: FAIL
+
+ [an empty chunk inside a code point split between chunks should not change the output; split point = 6]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 4]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 5]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 2]
+ expected: FAIL
+
+ [a code point split between chunks should not be emitted until all bytes are available; split point = 3]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini
new file mode 100644
index 00000000000..e0dbbd4d512
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/decode-utf8.any.js.ini
@@ -0,0 +1,35 @@
+[decode-utf8.any.serviceworker.html]
+ expected: TIMEOUT
+
+[decode-utf8.any.sharedworker.html]
+ [decode-utf8]
+ expected: FAIL
+
+
+[decode-utf8.any.html]
+ [decoding one UTF-8 chunk should give one output string]
+ expected: FAIL
+
+ [a trailing empty chunk should be ignored]
+ expected: FAIL
+
+ [decoding an empty chunk should give no output chunks]
+ expected: FAIL
+
+ [an initial empty chunk should be ignored]
+ expected: FAIL
+
+
+[decode-utf8.any.worker.html]
+ [decoding one UTF-8 chunk should give one output string]
+ expected: FAIL
+
+ [a trailing empty chunk should be ignored]
+ expected: FAIL
+
+ [decoding an empty chunk should give no output chunks]
+ expected: FAIL
+
+ [an initial empty chunk should be ignored]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini
new file mode 100644
index 00000000000..ddde7b046bc
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/encode-bad-chunks.any.js.ini
@@ -0,0 +1,47 @@
+[encode-bad-chunks.any.html]
+ [a chunk that cannot be converted to a string should error the streams]
+ expected: FAIL
+
+ [input of type numeric should be converted correctly to string]
+ expected: FAIL
+
+ [input of type undefined should be converted correctly to string]
+ expected: FAIL
+
+ [input of type array should be converted correctly to string]
+ expected: FAIL
+
+ [input of type object should be converted correctly to string]
+ expected: FAIL
+
+ [input of type null should be converted correctly to string]
+ expected: FAIL
+
+
+[encode-bad-chunks.any.worker.html]
+ [a chunk that cannot be converted to a string should error the streams]
+ expected: FAIL
+
+ [input of type numeric should be converted correctly to string]
+ expected: FAIL
+
+ [input of type undefined should be converted correctly to string]
+ expected: FAIL
+
+ [input of type array should be converted correctly to string]
+ expected: FAIL
+
+ [input of type object should be converted correctly to string]
+ expected: FAIL
+
+ [input of type null should be converted correctly to string]
+ expected: FAIL
+
+
+[encode-bad-chunks.any.sharedworker.html]
+ [encode-bad-chunks]
+ expected: FAIL
+
+
+[encode-bad-chunks.any.serviceworker.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini
new file mode 100644
index 00000000000..1a887518165
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/encode-utf8.any.js.ini
@@ -0,0 +1,125 @@
+[encode-utf8.any.html]
+ [two leading chunks should result in two replacement characters]
+ expected: FAIL
+
+ [characters in the ISO-8859-1 range should be encoded correctly]
+ expected: FAIL
+
+ [a terminal unpaired trailing surrogate should immediately be replaced]
+ expected: FAIL
+
+ [a character split between chunks should be correctly encoded]
+ expected: FAIL
+
+ [an empty string should result in no output chunk]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by an ascii character in the next chunk should be replaced with the replacement character at the start of the next output chunk]
+ expected: FAIL
+
+ [a leading empty chunk should be ignored]
+ expected: FAIL
+
+ [encoding one string of UTF-8 should give one complete chunk]
+ expected: FAIL
+
+ [a leading surrogate chunk should be carried past empty chunks]
+ expected: FAIL
+
+ [a leading surrogate chunk should error when it is clear it didn't form a pair]
+ expected: FAIL
+
+ [a trailing empty chunk should be ignored]
+ expected: FAIL
+
+ [a plain ASCII chunk should be converted]
+ expected: FAIL
+
+ [a character following one split between chunks should be correctly encoded]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by a plane 1 character split into two chunks should result in the encoded plane 1 character appearing in the last output chunk]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by an astral character in the next chunk should be replaced with the replacement character at the start of the next output chunk]
+ expected: FAIL
+
+ [two consecutive astral characters each split down the middle should be correctly reassembled]
+ expected: FAIL
+
+ [a non-terminal unpaired leading surrogate should immediately be replaced]
+ expected: FAIL
+
+ [two consecutive astral characters each split down the middle with an invalid surrogate in the middle should be correctly encoded]
+ expected: FAIL
+
+ [a stream ending in a leading surrogate should emit a replacement character as a final chunk]
+ expected: FAIL
+
+
+[encode-utf8.any.worker.html]
+ [two leading chunks should result in two replacement characters]
+ expected: FAIL
+
+ [characters in the ISO-8859-1 range should be encoded correctly]
+ expected: FAIL
+
+ [a terminal unpaired trailing surrogate should immediately be replaced]
+ expected: FAIL
+
+ [a character split between chunks should be correctly encoded]
+ expected: FAIL
+
+ [an empty string should result in no output chunk]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by an ascii character in the next chunk should be replaced with the replacement character at the start of the next output chunk]
+ expected: FAIL
+
+ [a leading empty chunk should be ignored]
+ expected: FAIL
+
+ [encoding one string of UTF-8 should give one complete chunk]
+ expected: FAIL
+
+ [a leading surrogate chunk should be carried past empty chunks]
+ expected: FAIL
+
+ [a leading surrogate chunk should error when it is clear it didn't form a pair]
+ expected: FAIL
+
+ [a trailing empty chunk should be ignored]
+ expected: FAIL
+
+ [a plain ASCII chunk should be converted]
+ expected: FAIL
+
+ [a character following one split between chunks should be correctly encoded]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by a plane 1 character split into two chunks should result in the encoded plane 1 character appearing in the last output chunk]
+ expected: FAIL
+
+ [an unmatched surrogate at the end of a chunk followed by an astral character in the next chunk should be replaced with the replacement character at the start of the next output chunk]
+ expected: FAIL
+
+ [two consecutive astral characters each split down the middle should be correctly reassembled]
+ expected: FAIL
+
+ [a non-terminal unpaired leading surrogate should immediately be replaced]
+ expected: FAIL
+
+ [two consecutive astral characters each split down the middle with an invalid surrogate in the middle should be correctly encoded]
+ expected: FAIL
+
+ [a stream ending in a leading surrogate should emit a replacement character as a final chunk]
+ expected: FAIL
+
+
+[encode-utf8.any.sharedworker.html]
+ [encode-utf8]
+ expected: FAIL
+
+
+[encode-utf8.any.serviceworker.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini
new file mode 100644
index 00000000000..b4b8335f34f
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/readable-writable-properties.any.js.ini
@@ -0,0 +1,23 @@
+[readable-writable-properties.any.html]
+ [TextDecoderStream readable and writable properties must pass brand checks]
+ expected: FAIL
+
+ [TextEncoderStream readable and writable properties must pass brand checks]
+ expected: FAIL
+
+
+[readable-writable-properties.any.serviceworker.html]
+ expected: TIMEOUT
+
+[readable-writable-properties.any.worker.html]
+ [TextDecoderStream readable and writable properties must pass brand checks]
+ expected: FAIL
+
+ [TextEncoderStream readable and writable properties must pass brand checks]
+ expected: FAIL
+
+
+[readable-writable-properties.any.sharedworker.html]
+ [readable-writable-properties]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/streams/realms.window.js.ini b/tests/wpt/metadata/encoding/streams/realms.window.js.ini
new file mode 100644
index 00000000000..059cf2b7b77
--- /dev/null
+++ b/tests/wpt/metadata/encoding/streams/realms.window.js.ini
@@ -0,0 +1,2 @@
+[realms.window.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini
new file mode 100644
index 00000000000..96389a8b64e
--- /dev/null
+++ b/tests/wpt/metadata/fetch/api/basic/header-value-null-byte.any.js.ini
@@ -0,0 +1,11 @@
+[header-value-null-byte.any.html]
+
+[header-value-null-byte.any.sharedworker.html]
+ [header-value-null-byte]
+ expected: FAIL
+
+
+[header-value-null-byte.any.worker.html]
+
+[header-value-null-byte.any.serviceworker.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
index c6509e035dd..0d630fb814a 100644
--- a/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
+++ b/tests/wpt/metadata/fetch/cross-origin-resource-policy/fetch-in-iframe.html.ini
@@ -1,4 +1,5 @@
[fetch-in-iframe.html]
+ expected: CRASH
[Untitled]
expected: FAIL
@@ -7,9 +8,13 @@
[Cross-origin fetch in a data: iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-origin' response header.]
expected: FAIL
+
[Cross-origin fetch in a data: iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-site' response header.]
expected: FAIL
+
[Cross-origin fetch in a cross origin iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-origin' response header.]
expected: FAIL
+
[Cross-origin fetch in a cross origin iframe load fails if the server blocks cross-origin loads with a 'Cross-Origin-Resource-Policy: same-site' response header.]
expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini
new file mode 100644
index 00000000000..ff5d3abc74b
--- /dev/null
+++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html.ini
@@ -0,0 +1,10 @@
+[cross-site-redirect.tentative.https.sub.html]
+ [Cross-Site -> Cross-Site redirect]
+ expected: FAIL
+
+ [Cross-Site -> Same-Site redirect]
+ expected: FAIL
+
+ [Cross-Site -> Same-Origin redirect]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini
new file mode 100644
index 00000000000..ea5a2ec1a12
--- /dev/null
+++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html.ini
@@ -0,0 +1,4 @@
+[multiple-redirect-cross-site.tentative.https.sub.html]
+ [Same-Origin -> Cross-Site -> Same-Origin redirect]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini
new file mode 100644
index 00000000000..cb4a0801f78
--- /dev/null
+++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html.ini
@@ -0,0 +1,4 @@
+[multiple-redirect-same-site.tentative.https.sub.html]
+ [Same-Origin -> Same-Site -> Same-Origin redirect]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini
new file mode 100644
index 00000000000..0ec11a20c11
--- /dev/null
+++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html.ini
@@ -0,0 +1,10 @@
+[same-origin-redirect.tentative.https.sub.html]
+ [Same-Origin -> Cross-Site redirect]
+ expected: FAIL
+
+ [Same-Origin -> Same-Site redirect]
+ expected: FAIL
+
+ [Same-Origin -> Same-Origin redirect]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini
new file mode 100644
index 00000000000..72a5cbe072e
--- /dev/null
+++ b/tests/wpt/metadata/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html.ini
@@ -0,0 +1,10 @@
+[same-site-redirect.tentative.https.sub.html]
+ [Same-Site -> Same-Origin redirect]
+ expected: FAIL
+
+ [Same-Site -> Same-Site redirect]
+ expected: FAIL
+
+ [Same-Site -> Cross-Site redirect]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
deleted file mode 100644
index 87b07c3e670..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_1.html]
- [Multiple history traversals from the same task]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
deleted file mode 100644
index 385376c7321..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_4.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
index 20865f493ec..9579b42287e 100644
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
+++ b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken.html.ini
@@ -30,3 +30,6 @@
[Set HTTP URL frame location.protocol to data]
expected: FAIL
+ [Set HTTP URL frame location.protocol to x]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini
new file mode 100644
index 00000000000..176a6ca1f30
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html.ini
@@ -0,0 +1,4 @@
+[fieldset-block-formatting-context.html]
+ [The fieldset element: block formatting context]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini
new file mode 100644
index 00000000000..d1ea43f0322
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html.ini
@@ -0,0 +1,2 @@
+[fieldset-border-gap.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini
new file mode 100644
index 00000000000..685d73d1454
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html.ini
@@ -0,0 +1,4 @@
+[fieldset-border-radius-hittest.html]
+ [fieldset, border-radius and hit testing]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini
new file mode 100644
index 00000000000..7fddee706f4
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html.ini
@@ -0,0 +1,2 @@
+[fieldset-containing-block.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini
new file mode 100644
index 00000000000..e76c8d1b88d
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html.ini
@@ -0,0 +1,4 @@
+[fieldset-default-style.html]
+ [fieldset default style]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini
new file mode 100644
index 00000000000..d4af9337d23
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html.ini
@@ -0,0 +1,58 @@
+[fieldset-display.html]
+ [fieldset with display: ruby-text]
+ expected: FAIL
+
+ [fieldset with display: table-footer-group]
+ expected: FAIL
+
+ [fieldset with display: table-column]
+ expected: FAIL
+
+ [fieldset with display: table-row]
+ expected: FAIL
+
+ [fieldset with display: table-cell]
+ expected: FAIL
+
+ [fieldset with display: table]
+ expected: FAIL
+
+ [fieldset with display: list-item]
+ expected: FAIL
+
+ [fieldset with display: flow]
+ expected: FAIL
+
+ [fieldset with display: table-header-group]
+ expected: FAIL
+
+ [fieldset with display: inline-table]
+ expected: FAIL
+
+ [fieldset with display: ruby]
+ expected: FAIL
+
+ [fieldset with display: flow-root]
+ expected: FAIL
+
+ [fieldset with display: ruby-base]
+ expected: FAIL
+
+ [fieldset with display: table-caption]
+ expected: FAIL
+
+ [fieldset with display: run-in]
+ expected: FAIL
+
+ [fieldset with display: table-column-group]
+ expected: FAIL
+
+ [fieldset with display: ruby-base-container]
+ expected: FAIL
+
+ [fieldset with display: table-row-group]
+ expected: FAIL
+
+ [fieldset with display: ruby-text-container]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini
new file mode 100644
index 00000000000..209486495d3
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html.ini
@@ -0,0 +1,7 @@
+[fieldset-grid.html]
+ [Inline grid]
+ expected: FAIL
+
+ [Grid]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini
new file mode 100644
index 00000000000..c72edb18366
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html.ini
@@ -0,0 +1,2 @@
+[fieldset-list-item.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini
new file mode 100644
index 00000000000..7e24c228ec0
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html.ini
@@ -0,0 +1,2 @@
+[fieldset-overflow-hidden.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini
new file mode 100644
index 00000000000..4f698bdc824
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html.ini
@@ -0,0 +1,2 @@
+[fieldset-painting-order.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini
new file mode 100644
index 00000000000..69849101170
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html.ini
@@ -0,0 +1,2 @@
+[fieldset-vertical.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini
new file mode 100644
index 00000000000..de5de2f7800
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html.ini
@@ -0,0 +1,10 @@
+[legend-block-formatting-context.html]
+ [rendered-legend]
+ expected: FAIL
+
+ [in-fieldset-second-child]
+ expected: FAIL
+
+ [in-fieldset-descendant]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini
new file mode 100644
index 00000000000..e10f148a1ba
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html.ini
@@ -0,0 +1,73 @@
+[legend-display.html]
+ [rendered legend with display: ruby-base-container]
+ expected: FAIL
+
+ [rendered legend with display: ruby-text-container]
+ expected: FAIL
+
+ [rendered legend with display: flow]
+ expected: FAIL
+
+ [rendered legend with display: flow-root]
+ expected: FAIL
+
+ [rendered legend with display: table-column-group]
+ expected: FAIL
+
+ [rendered legend with display: table-row]
+ expected: FAIL
+
+ [rendered legend with display: table-caption]
+ expected: FAIL
+
+ [rendered legend with display: inline-grid]
+ expected: FAIL
+
+ [rendered legend with display: grid]
+ expected: FAIL
+
+ [rendered legend with display: flex]
+ expected: FAIL
+
+ [rendered legend with display: table-row-group]
+ expected: FAIL
+
+ [rendered legend with display: table-cell]
+ expected: FAIL
+
+ [rendered legend with display: ruby]
+ expected: FAIL
+
+ [rendered legend with display: list-item]
+ expected: FAIL
+
+ [rendered legend with display: table-header-group]
+ expected: FAIL
+
+ [rendered legend with display: table-footer-group]
+ expected: FAIL
+
+ [rendered legend with display: table]
+ expected: FAIL
+
+ [rendered legend with display: inline-flex]
+ expected: FAIL
+
+ [rendered legend with display: run-in]
+ expected: FAIL
+
+ [rendered legend with display: inline-block]
+ expected: FAIL
+
+ [rendered legend with display: ruby-text]
+ expected: FAIL
+
+ [rendered legend with display: ruby-base]
+ expected: FAIL
+
+ [rendered legend with display: inline]
+ expected: FAIL
+
+ [rendered legend with display: table-column]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini
new file mode 100644
index 00000000000..0a55a47c4ba
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html.ini
@@ -0,0 +1,13 @@
+[legend-float-abspos.html]
+ [dynamic changes to float]
+ expected: FAIL
+
+ [dynamic changes to position]
+ expected: FAIL
+
+ [inserting a new legend and removing it again]
+ expected: FAIL
+
+ [no dynamic changes]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini
new file mode 100644
index 00000000000..d4bd3869fdf
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html.ini
@@ -0,0 +1,10 @@
+[legend-grid-flex-multicol.html]
+ [multicol]
+ expected: FAIL
+
+ [inline-grid]
+ expected: FAIL
+
+ [grid]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini
new file mode 100644
index 00000000000..84b3539d05c
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html.ini
@@ -0,0 +1,2 @@
+[legend-list-item.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini
new file mode 100644
index 00000000000..f1efd104b95
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html.ini
@@ -0,0 +1,2 @@
+[legend-position-relative.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini
new file mode 100644
index 00000000000..3d009c9c9c2
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html.ini
@@ -0,0 +1,7 @@
+[legend-sans-fieldset-display.html]
+ [.ruby]
+ expected: FAIL
+
+ [.rt]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini
new file mode 100644
index 00000000000..af60f72f9b8
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html.ini
@@ -0,0 +1,4 @@
+[legend.html]
+ [rendered-legend: width]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini
new file mode 100644
index 00000000000..45e26f2671f
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html.ini
@@ -0,0 +1,16 @@
+[min-inline-size.html]
+ [horizontal-tb ]
+ expected: FAIL
+
+ [vertical-rl ]
+ expected: FAIL
+
+ [vertical-lr ]
+ expected: FAIL
+
+ [vertical-lr override]
+ expected: FAIL
+
+ [vertical-rl override]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini b/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
deleted file mode 100644
index 178680e5d14..00000000000
--- a/tests/wpt/metadata/html/semantics/scripting-1/the-script-element/script-onerror-insertion-point-2.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[script-onerror-insertion-point-2.html]
- expected: TIMEOUT
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini
new file mode 100644
index 00000000000..ac0f3147f9f
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js.ini
@@ -0,0 +1,13 @@
+[quirks.window.html]
+ [document.open() sets document to no-quirks mode (write new doctype)]
+ expected: FAIL
+
+ [document.open() sets document to no-quirks mode, not limited-quirks mode]
+ expected: FAIL
+
+ [document.open() sets document to no-quirks mode (write no doctype)]
+ expected: FAIL
+
+ [document.open() sets document to no-quirks mode (write old doctype)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini
new file mode 100644
index 00000000000..1f1bf468470
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js.ini
@@ -0,0 +1,4 @@
+[readiness.window.html]
+ [document.open() and readiness]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini
new file mode 100644
index 00000000000..743f32638ad
--- /dev/null
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js.ini
@@ -0,0 +1,4 @@
+[url-fragment.window.html]
+ [document.open() and document's URL containing a fragment (entry is not relevant)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini
new file mode 100644
index 00000000000..05a16975210
--- /dev/null
+++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-001.html.ini
@@ -0,0 +1,145 @@
+[excluded-properties-001.html]
+ [Property grid-auto-rows does not support quirky length]
+ expected: FAIL
+
+ [Property background-position-x does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-left does not support quirky length]
+ expected: FAIL
+
+ [Property grid-template-rows does not support quirky length]
+ expected: FAIL
+
+ [Property padding-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property inline-size does not support quirky length]
+ expected: FAIL
+
+ [Property padding-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property border-bottom-left-radius does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property offset-distance does not support quirky length]
+ expected: FAIL
+
+ [Property grid-auto-columns does not support quirky length]
+ expected: FAIL
+
+ [Property padding-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property outline-width does not support quirky length]
+ expected: FAIL
+
+ [Property column-rule-width does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-bottom does not support quirky length]
+ expected: FAIL
+
+ [Property grid-template-columns does not support quirky length]
+ expected: FAIL
+
+ [Property perspective does not support quirky length]
+ expected: FAIL
+
+ [Property margin-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property margin-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-right does not support quirky length]
+ expected: FAIL
+
+ [Property margin-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-right does not support quirky length]
+ expected: FAIL
+
+ [Property block-size does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-bottom does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-top does not support quirky length]
+ expected: FAIL
+
+ [Property background-position-y does not support quirky length]
+ expected: FAIL
+
+ [Property border-top-left-radius does not support quirky length]
+ expected: FAIL
+
+ [Property column-width does not support quirky length]
+ expected: FAIL
+
+ [Property min-block-size does not support quirky length]
+ expected: FAIL
+
+ [Property outline-offset does not support quirky length]
+ expected: FAIL
+
+ [Property flex-basis does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property padding-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-block-end does not support quirky length]
+ expected: FAIL
+
+ [Property row-gap does not support quirky length]
+ expected: FAIL
+
+ [Property min-inline-size does not support quirky length]
+ expected: FAIL
+
+ [Property margin-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-inline-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-top does not support quirky length]
+ expected: FAIL
+
+ [Property border-bottom-right-radius does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-padding-inline-end does not support quirky length]
+ expected: FAIL
+
+ [Property border-top-right-radius does not support quirky length]
+ expected: FAIL
+
+ [Property column-gap does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-block-start does not support quirky length]
+ expected: FAIL
+
+ [Property scroll-margin-left does not support quirky length]
+ expected: FAIL
+
+ [Property shape-margin does not support quirky length]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini
new file mode 100644
index 00000000000..2921e774187
--- /dev/null
+++ b/tests/wpt/metadata/quirks/unitless-length/excluded-properties-002.html.ini
@@ -0,0 +1,34 @@
+[excluded-properties-002.html]
+ [Property mask does not support quirky length]
+ expected: FAIL
+
+ [Property background-blend-mode does not support quirky length]
+ expected: FAIL
+
+ [Property transform-origin does not support quirky length]
+ expected: FAIL
+
+ [Property filter does not support quirky length]
+ expected: FAIL
+
+ [Property text-shadow does not support quirky length]
+ expected: FAIL
+
+ [Property clip-path does not support quirky length]
+ expected: FAIL
+
+ [Property column-span does not support quirky length]
+ expected: FAIL
+
+ [Property background-size does not support quirky length]
+ expected: FAIL
+
+ [Property box-shadow does not support quirky length]
+ expected: FAIL
+
+ [Property perspective-origin does not support quirky length]
+ expected: FAIL
+
+ [Property object-position does not support quirky length]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
index 4c38403a6f1..88948111d26 100644
--- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
+++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
@@ -1,17 +1,11 @@
[urlencoded-parser.any.html]
- [response.formData() with input: a&b&c]
- expected: FAIL
-
[request.formData() with input: a&b&c]
expected: FAIL
- [request.formData() with input: &&&a=b&&&&c=d&]
- expected: FAIL
-
- [response.formData() with input: &&&a=b&&&&c=d&]
+ [request.formData() with input: a=b&c=d]
expected: FAIL
- [response.formData() with input: a=b&c=d]
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
@@ -22,15 +16,9 @@
[request.formData() with input: a&b&c]
expected: FAIL
- [response.formData() with input: a=b&c=d&]
- expected: FAIL
-
- [request.formData() with input: a=b&c=d]
- expected: FAIL
-
- [response.formData() with input: a=b&c=d]
+ [request.formData() with input: a=b&c=d&]
expected: FAIL
- [request.formData() with input: a=b&c=d&]
+ [request.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini
index 83d2ecf7e47..66426f2d8e4 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html.ini
@@ -29,10 +29,10 @@
[X gain.gain.setValueCurveAtTime(curve, 1, 0) threw "TypeError" instead of EcmaScript error RangeError.]
expected: FAIL
- [X gain.gain.setValueCurveAtTime(\[0,0,0\],1,-1) threw "TypeError" instead of EcmaScript error RangeError.]
+ [X gain.gain.setValueCurveAtTime([0,0,0\],1,-1) threw "TypeError" instead of EcmaScript error RangeError.]
expected: FAIL
- [X gain.gain.setValueCurveAtTime(\[0,0,0\],-1,1) threw "TypeError" instead of EcmaScript error RangeError.]
+ [X gain.gain.setValueCurveAtTime([0,0,0\],-1,1) threw "TypeError" instead of EcmaScript error RangeError.]
expected: FAIL
[< [special cases 1\] 8 out of 8 assertions were failed.]
@@ -53,3 +53,9 @@
[# AUDIT TASK RUNNER FINISHED: 2 out of 6 tasks were failed.]
expected: FAIL
+ [< [special cases 1\] 9 out of 9 assertions were failed.]
+ expected: FAIL
+
+ [X gain.gain.setValueCurveAtTime(curve, 1, -1) threw "TypeError" instead of EcmaScript error RangeError.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini
index 031e60e922d..df8c64b0086 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html.ini
@@ -9,3 +9,12 @@
[X () => context.createDelay(-1) threw "TypeError" instead of Delay length cannot be negative.]
expected: FAIL
+ [X Setting Delay length to negative threw "TypeError" instead of NotSupportedError.]
+ expected: FAIL
+
+ [X Setting Delay length to 0 seconds threw "TypeError" instead of NotSupportedError.]
+ expected: FAIL
+
+ [X Setting Delay length to 180 seconds or more threw "TypeError" instead of NotSupportedError.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini
index 60f05981dcb..c2ec70499b3 100644
--- a/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini
+++ b/tests/wpt/metadata/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html.ini
@@ -1,4 +1,5 @@
[ctor-panner.html]
+ expected: ERROR
[X context = new OfflineAudioContext(...) incorrectly threw ReferenceError: "OfflineAudioContext is not defined".]
expected: FAIL
@@ -20,3 +21,9 @@
[X node6.channelInterpretation is not equal to discrete. Got speakers.]
expected: FAIL
+ [X node = new PannerNode(c, {"panningModel":"HRTF","positionX":1.4142135623730951,"positionY":2.8284271247461903,"positionZ":4.242640687119286,"orientationX":-1.4142135623730951,"orientationY":-2.8284271247461903,"orientationZ":-4.242640687119286,"distanceModel":"linear","refDistance":3.141592653589793,"maxDistance":6.283185307179586,"rolloffFactor":9.42477796076938,"coneInnerAngle":12.566370614359172,"coneOuterAngle":15.707963267948966,"coneOuterGain":18.84955592153876}) incorrectly threw InvalidStateError: "The object is in an invalid state.".]
+ expected: FAIL
+
+ [X node instanceof PannerNode is not equal to true. Got false.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
index 650c91da4a6..333edb3a26e 100644
--- a/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
+++ b/tests/wpt/metadata/workers/baseurl/alpha/sharedworker-in-worker.html.ini
@@ -1,5 +1,4 @@
[sharedworker-in-worker.html]
- expected: ERROR
[Base URL in workers: new SharedWorker()]
expected: FAIL
diff --git a/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini b/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini
index 7ac33fce748..c5dc615ee07 100644
--- a/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini
+++ b/tests/wpt/metadata/xhr/headers-normalize-response.htm.ini
@@ -6,15 +6,9 @@
[Header value: \\0hello_world]
expected: FAIL
- [Header value: hello\\0world]
- expected: FAIL
-
[Header value: hello_world[tab\]]
expected: FAIL
[Header value: [tab\]hello_world[tab\]]
expected: FAIL
- [Header value: \\0]
- expected: FAIL
-
diff --git a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini b/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
deleted file mode 100644
index dbea4f293ad..00000000000
--- a/tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[transition_calc_implicit.html]
- expected: TIMEOUT
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html
index 0af5a213cd3..ed8c04d0ab7 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html
@@ -38,6 +38,13 @@ step_timeout(t.step_func_done(function () {
_assert(ctx.measureText('Hello').advances[2] >= 58, "ctx.measureText('Hello').advances[\""+(2)+"\"] >= 58");
_assert(ctx.measureText('Hello').advances[3] >= 70, "ctx.measureText('Hello').advances[\""+(3)+"\"] >= 70");
_assert(ctx.measureText('Hello').advances[4] >= 80, "ctx.measureText('Hello').advances[\""+(4)+"\"] >= 80");
+
+ var tm = ctx.measureText('Hello');
+ _assertSame(ctx.measureText('Hello').advances[0], tm.advances[0], "ctx.measureText('Hello').advances[\""+(0)+"\"]", "tm.advances[\""+(0)+"\"]");
+ _assertSame(ctx.measureText('Hello').advances[1], tm.advances[1], "ctx.measureText('Hello').advances[\""+(1)+"\"]", "tm.advances[\""+(1)+"\"]");
+ _assertSame(ctx.measureText('Hello').advances[2], tm.advances[2], "ctx.measureText('Hello').advances[\""+(2)+"\"]", "tm.advances[\""+(2)+"\"]");
+ _assertSame(ctx.measureText('Hello').advances[3], tm.advances[3], "ctx.measureText('Hello').advances[\""+(3)+"\"]", "tm.advances[\""+(3)+"\"]");
+ _assertSame(ctx.measureText('Hello').advances[4], tm.advances[4], "ctx.measureText('Hello').advances[\""+(4)+"\"]", "tm.advances[\""+(4)+"\"]");
}), 500);
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html
index 19b939e63b7..36087e7b035 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html
+++ b/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html
@@ -31,11 +31,13 @@ step_timeout(t.step_func_done(function () {
ctx.font = '50px CanvasTest';
ctx.direction = 'ltr';
ctx.align = 'left'
- _assertSame(ctx.measureText('A').emHeightAscent, 124, "ctx.measureText('A').emHeightAscent", "124");
- _assertSame(Math.abs(ctx.measureText('A').emHeightDescent), 0, "Math.abs(ctx.measureText('A').emHeightDescent)", "0");
+ _assertSame(ctx.measureText('A').emHeightAscent, 37.5, "ctx.measureText('A').emHeightAscent", "37.5");
+ _assertSame(ctx.measureText('A').emHeightDescent, 12.5, "ctx.measureText('A').emHeightDescent", "12.5");
+ _assertSame(ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent, 50, "ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent", "50");
- _assertSame(ctx.measureText('ABCD').emHeightAscent, 124, "ctx.measureText('ABCD').emHeightAscent", "124");
- _assertSame(Math.abs(ctx.measureText('ABCD').emHeightDescent), 0, "Math.abs(ctx.measureText('ABCD').emHeightDescent)", "0");
+ _assertSame(ctx.measureText('ABCD').emHeightAscent, 37.5, "ctx.measureText('ABCD').emHeightAscent", "37.5");
+ _assertSame(ctx.measureText('ABCD').emHeightDescent, 12.5, "ctx.measureText('ABCD').emHeightDescent", "12.5");
+ _assertSame(ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent, 50, "ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent", "50");
}), 500);
diff --git a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html b/tests/wpt/web-platform-tests/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html
index f070d0d5b7f..f070d0d5b7f 100644
--- a/tests/wpt/web-platform-tests/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html
+++ b/tests/wpt/web-platform-tests/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html
diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml
index 479c171810c..40a04057881 100644
--- a/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml
+++ b/tests/wpt/web-platform-tests/2dcontext/tools/name2dir.yaml
@@ -9,7 +9,6 @@
2d.fillRect: "drawing-rectangles-to-the-canvas"
2d.strokeRect: "drawing-rectangles-to-the-canvas"
2d.text.draw: "drawing-text-to-the-canvas"
-2d.text.draw.baseline.alphabetic: "drawing-text-to-the-canvas"
2d.text.draw.space.basic: "drawing-text-to-the-canvas"
2d.text.draw.space.collapse: "drawing-text-to-the-canvas"
2d.text.measure: "drawing-text-to-the-canvas"
diff --git a/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml b/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml
index 8490cd4f2b2..f89d6d48a4f 100644
--- a/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml
+++ b/tests/wpt/web-platform-tests/2dcontext/tools/tests2dtext.yaml
@@ -1037,6 +1037,13 @@
@assert ctx.measureText('Hello').advances[2] >= 58;
@assert ctx.measureText('Hello').advances[3] >= 70;
@assert ctx.measureText('Hello').advances[4] >= 80;
+
+ var tm = ctx.measureText('Hello');
+ @assert ctx.measureText('Hello').advances[0] === tm.advances[0];
+ @assert ctx.measureText('Hello').advances[1] === tm.advances[1];
+ @assert ctx.measureText('Hello').advances[2] === tm.advances[2];
+ @assert ctx.measureText('Hello').advances[3] === tm.advances[3];
+ @assert ctx.measureText('Hello').advances[4] === tm.advances[4];
}), 500);
- name: 2d.text.measure.actualBoundingBox
@@ -1096,11 +1103,13 @@
ctx.font = '50px CanvasTest';
ctx.direction = 'ltr';
ctx.align = 'left'
- @assert ctx.measureText('A').emHeightAscent === 124;
- @assert Math.abs(ctx.measureText('A').emHeightDescent) === 0;
+ @assert ctx.measureText('A').emHeightAscent === 37.5;
+ @assert ctx.measureText('A').emHeightDescent === 12.5;
+ @assert ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent === 50;
- @assert ctx.measureText('ABCD').emHeightAscent === 124;
- @assert Math.abs(ctx.measureText('ABCD').emHeightDescent) === 0;
+ @assert ctx.measureText('ABCD').emHeightAscent === 37.5;
+ @assert ctx.measureText('ABCD').emHeightDescent === 12.5;
+ @assert ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent === 50;
}), 500);
- name: 2d.text.measure.baselines
diff --git a/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html b/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html
index 4608af9d5fc..cdd9cc8eaef 100644
--- a/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html
+++ b/tests/wpt/web-platform-tests/compat/css-style-declaration-alias-enumeration.html
@@ -1,6 +1,5 @@
<!DOCTYPE html>
<title>Aliases enumerated on CSSStyleDeclaration</title>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<link rel="help" href="https://compat.spec.whatwg.org/#css-simple-aliases">
<meta name="assert" content="This test verifies that aliases are enumerated on CSSStyleDeclaration" />
diff --git a/tests/wpt/web-platform-tests/compat/webkit-appearance.html b/tests/wpt/web-platform-tests/compat/webkit-appearance.html
new file mode 100644
index 00000000000..210944522a9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/compat/webkit-appearance.html
@@ -0,0 +1,57 @@
+<!doctype html>
+<title>-webkit-appearance</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<button id=button>Test</button>
+<script>
+ const button = document.getElementById('button');
+ // values from https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance
+ // intersection of Firefox and Chrome.
+ const values = ["none",
+ "button",
+ "button-bevel",
+ "caret",
+ "checkbox",
+ "listbox",
+ "listitem",
+ "menulist",
+ "menulist-button",
+ "menulist-text",
+ "menulist-textfield",
+ "radio",
+ "searchfield",
+ "textfield",
+ ];
+ for (const value of values) {
+ test(() => {
+ button.removeAttribute('style');
+ button.style.setProperty('-webkit-appearance', value);
+ assert_equals(button.style.WebkitAppearance, value);
+ assert_equals(button.style.webkitAppearance, value); // lowercase w
+ const style = getComputedStyle(button);
+ assert_equals(style.WebkitAppearance, value);
+ assert_equals(style.webkitAppearance, value); // lowercase w
+ }, `-webkit-appearance: ${value}`);
+ }
+
+ const invalidValues = ["bogus-button"];
+ for (const invalidValue of invalidValues) {
+ test(() => {
+ button.removeAttribute('style');
+ button.style.setProperty('-webkit-appearance', invalidValue);
+ assert_equals(button.style.WebkitAppearance, "");
+ assert_equals(button.style.webkitAppearance, ""); // lowercase w
+ const style = getComputedStyle(button);
+ assert_equals(style.WebkitAppearance, "button");
+ assert_equals(style.webkitAppearance, "button"); // lowercase w
+ }, `-webkit-appearance: ${invalidValue} (invalid)`);
+ }
+
+ test(() => {
+ button.removeAttribute('style');
+ button.style.setProperty('appearance', 'auto');
+ assert_equals(button.style.appearance, undefined);
+ const style = getComputedStyle(button);
+ assert_equals(style.appearance, undefined);
+ }, 'appearance');
+</script>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html
index 6e7d5feabb2..1d2141d38c4 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html
+++ b/tests/wpt/web-platform-tests/cookies/http-state/attribute-tests.html
@@ -9,8 +9,14 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-http-state-template.js"></script>
</head>
- <body>
- <div id="log"></div>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
<script>
setup({ explicit_timeout: true });
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html
new file mode 100644
index 00000000000..9d9ef1bb087
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/charset-tests.html
@@ -0,0 +1,39 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests cookie charset functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "charset0001", name: "charset0001"},
+ {file: "charset0002", name: "charset0002"},
+ {file: "charset0003", name: "charset0003"},
+ {file: "charset0004", name: "charset0004"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html
new file mode 100644
index 00000000000..e5d745e0390
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/chromium-tests.html
@@ -0,0 +1,58 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests chromium cookie functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "chromium0001", name: "chromium0001"},
+ {file: "chromium0002", name: "chromium0002"},
+ {file: "chromium0003", name: "chromium0003"},
+ {file: "chromium0004", name: "chromium0004"},
+ {file: "chromium0005", name: "chromium0005"},
+ {file: "chromium0006", name: "chromium0006"},
+ {file: "chromium0007", name: "chromium0007"},
+ {file: "chromium0008", name: "chromium0008"},
+ {file: "chromium0009", name: "chromium0009"},
+ {file: "chromium0010", name: "chromium0010"},
+ {file: "chromium0011", name: "chromium0011"},
+ {file: "chromium0012", name: "chromium0012"},
+ {file: "chromium0013", name: "chromium0013"},
+ {file: "chromium0014", name: "chromium0014"},
+ {file: "chromium0015", name: "chromium0015"},
+ {file: "chromium0016", name: "chromium0016"},
+ {file: "chromium0017", name: "chromium0017"},
+ {file: "chromium0018", name: "chromium0018"},
+ {file: "chromium0019", name: "chromium0019"},
+ {file: "disabled-chromium0020", name: "disabled-chromium0020"},
+ {file: "chromium0021", name: "chromium0021"},
+ {file: "disabled-chromium0022", name: "disabled-chromium0022"},
+ {file: "disabled-chromium0023", name: "disabled-chromium0023"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html
new file mode 100644
index 00000000000..f71bb8d9610
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/comma-tests.html
@@ -0,0 +1,42 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests cookie setting comma functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "comma0001", name: "comma0001"},
+ {file: "comma0002", name: "comma0002"},
+ {file: "comma0003", name: "comma0003"},
+ {file: "comma0004", name: "comma0004"},
+ {file: "comma0005", name: "comma0005"},
+ {file: "comma0006", name: "comma0006"},
+ {file: "comma0007", name: "comma0007"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html
new file mode 100644
index 00000000000..85c8cd00a44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/domain-tests.html
@@ -0,0 +1,79 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests cookie setting domain functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "domain0001", name: "domain0001"},
+ {file: "domain0002", name: "domain0002"},
+ {file: "domain0003", name: "domain0003"},
+ {file: "domain0004", name: "domain0004"},
+ {file: "domain0005", name: "domain0005"},
+ {file: "domain0006", name: "domain0006"},
+ {file: "domain0007", name: "domain0007"},
+ {file: "domain0008", name: "domain0008"},
+ {file: "domain0009", name: "domain0009"},
+ {file: "domain0010", name: "domain0010"},
+ {file: "domain0011", name: "domain0011"},
+ {file: "domain0012", name: "domain0012"},
+ {file: "domain0013", name: "domain0013"},
+ {file: "domain0014", name: "domain0014"},
+ {file: "domain0015", name: "domain0015"},
+ {file: "domain0016", name: "domain0016"},
+ {file: "domain0017", name: "domain0017"},
+ {file: "domain0018", name: "domain0018"},
+ {file: "domain0019", name: "domain0019"},
+ {file: "domain0020", name: "domain0020"},
+ {file: "domain0021", name: "domain0021"},
+ {file: "domain0022", name: "domain0022"},
+ {file: "domain0023", name: "domain0023"},
+ {file: "domain0024", name: "domain0024"},
+ {file: "domain0025", name: "domain0025"},
+ {file: "domain0026", name: "domain0026"},
+ {file: "domain0027", name: "domain0027"},
+ {file: "domain0028", name: "domain0028"},
+ {file: "domain0029", name: "domain0029"},
+ {file: "optional-domain0030", name: "optional-domain0030"},
+ {file: "domain0031", name: "domain0031"},
+ {file: "domain0033", name: "domain0033"},
+ {file: "domain0034", name: "domain0034"},
+ {file: "domain0035", name: "domain0035"},
+ {file: "domain0036", name: "domain0036"},
+ {file: "domain0037", name: "domain0037"},
+ {file: "domain0038", name: "domain0038"},
+ {file: "domain0039", name: "domain0039"},
+ {file: "domain0040", name: "domain0040"},
+ {file: "domain0041", name: "domain0041"},
+ {file: "domain0042", name: "domain0042"},
+ {file: "optional-domain0041", name: "optional-domain0041"},
+ {file: "optional-domain0042", name: "optional-domain0042"},
+ {file: "optional-domain0043", name: "optional-domain0043"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
index 169984de6ac..1e63043ae11 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
+++ b/tests/wpt/web-platform-tests/cookies/http-state/general-tests.html
@@ -9,8 +9,14 @@
<script src="/resources/testharnessreport.js"></script>
<script src="resources/cookie-http-state-template.js"></script>
</head>
- <body>
- <div id="log"></div>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
<script>
setup({ explicit_timeout: true });
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html
new file mode 100644
index 00000000000..01a5645b140
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/mozilla-tests.html
@@ -0,0 +1,52 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "mozilla0001", name: "mozilla0001"},
+ {file: "mozilla0002", name: "mozilla0002"},
+ {file: "mozilla0003", name: "mozilla0003"},
+ {file: "mozilla0004", name: "mozilla0004"},
+ {file: "mozilla0005", name: "mozilla0005"},
+ {file: "mozilla0006", name: "mozilla0006"},
+ {file: "mozilla0007", name: "mozilla0007"},
+ {file: "mozilla0008", name: "mozilla0008"},
+ {file: "mozilla0009", name: "mozilla0009"},
+ {file: "mozilla0010", name: "mozilla0010"},
+ {file: "mozilla0011", name: "mozilla0011"},
+ {file: "mozilla0012", name: "mozilla0012"},
+ {file: "mozilla0013", name: "mozilla0013"},
+ {file: "mozilla0014", name: "mozilla0014"},
+ {file: "mozilla0015", name: "mozilla0015"},
+ {file: "mozilla0016", name: "mozilla0016"},
+ {file: "mozilla0017", name: "mozilla0017"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html
new file mode 100644
index 00000000000..9dd2781f235
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/name-tests.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "name0001", name: "name0001"},
+ {file: "name0002", name: "name0002"},
+ {file: "name0003", name: "name0003"},
+ {file: "name0004", name: "name0004"},
+ {file: "name0005", name: "name0005"},
+ {file: "name0006", name: "name0006"},
+ {file: "name0007", name: "name0007"},
+ {file: "name0008", name: "name0008"},
+ {file: "name0009", name: "name0009"},
+ {file: "name0010", name: "name0010"},
+ {file: "name0011", name: "name0011"},
+ {file: "name0012", name: "name0012"},
+ {file: "name0013", name: "name0013"},
+ {file: "name0014", name: "name0014"},
+ {file: "name0015", name: "name0015"},
+ {file: "name0016", name: "name0016"},
+ {file: "name0017", name: "name0017"},
+ {file: "name0018", name: "name0018"},
+ {file: "name0019", name: "name0019"},
+ {file: "name0020", name: "name0020"},
+ {file: "name0021", name: "name0021"},
+ {file: "name0022", name: "name0022"},
+ {file: "name0023", name: "name0023"},
+ {file: "name0024", name: "name0024"},
+ {file: "name0025", name: "name0025"},
+ {file: "name0026", name: "name0026"},
+ {file: "name0027", name: "name0027"},
+ {file: "name0028", name: "name0028"},
+ {file: "name0029", name: "name0029"},
+ {file: "name0030", name: "name0030"},
+ {file: "name0031", name: "name0031"},
+ {file: "name0032", name: "name0032"},
+ {file: "name0033", name: "name0033"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html
new file mode 100644
index 00000000000..53cfae452be
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/ordering-tests.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "ordering0001", name: "ordering0001"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html
new file mode 100644
index 00000000000..464f39becd9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/path-tests.html
@@ -0,0 +1,68 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "path0001", name: "path0001"},
+ {file: "path0002", name: "path0002"},
+ {file: "path0003", name: "path0003"},
+ {file: "path0004", name: "path0004"},
+ {file: "path0005", name: "path0005"},
+ {file: "path0006", name: "path0006"},
+ {file: "path0007", name: "path0007"},
+ {file: "path0008", name: "path0008"},
+ {file: "path0009", name: "path0009"},
+ {file: "path0010", name: "path0010"},
+ {file: "path0011", name: "path0011"},
+ {file: "path0012", name: "path0012"},
+ {file: "path0013", name: "path0013"},
+ {file: "path0014", name: "path0014"},
+ {file: "path0015", name: "path0015"},
+ {file: "path0016", name: "path0016"},
+ {file: "path0017", name: "path0017"},
+ {file: "path0018", name: "path0018"},
+ {file: "path0019", name: "path0019"},
+ {file: "path0020", name: "path0020"},
+ {file: "path0021", name: "path0021"},
+ {file: "path0022", name: "path0022"},
+ {file: "path0023", name: "path0023"},
+ {file: "path0024", name: "path0024"},
+ {file: "path0025", name: "path0025"},
+ {file: "path0026", name: "path0026"},
+ {file: "path0027", name: "path0027"},
+ {file: "path0028", name: "path0028"},
+ {file: "disabled-path0029", name: "disabled-path0029"},
+ {file: "path0029", name: "path0029"},
+ {file: "path0030", name: "path0030"},
+ {file: "path0031", name: "path0031"},
+ {file: "path0032", name: "path0032"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str b/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str
new file mode 100644
index 00000000000..37d630fef4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/all-tests.html.py-str
@@ -0,0 +1,79 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h1>Cookie Tests</h1>
+ This page is a debug page for cookie tests. To run a test in isolation,
+ append "?debug=" and the test id to this URL. E.g. to debug "value0001", use
+ this url:<br>
+ <a href="cookie-setter.py?debug=value0001">
+ cookie-setter.py?debug=value0001
+ </a><br>
+ <br>
+ To request, append "?file=" and the file name (stripped of
+ "-tests.html"). For value0001, this would be:<br>
+ <a href="cookie-setter.py?file=value0001">
+ cookie-setter.py?file=value0001
+ </a><br>
+ <br>
+ Please note, the general tests are one level higher:<br>
+ <a href="../attribute-tests.html"> ../attribute-tests.html </a><br>
+ <a href="../charset-tests.html"> ../charset-tests.html </a><br>
+ <a href="../chromium-tests.html"> ../chromium-tests.html </a><br>
+ <a href="../comma-tests.html"> ../comma-tests.html </a><br>
+ <a href="../domain-tests.html"> ../domain-tests.html </a><br>
+ <a href="../general-tests.html"> ../general-tests.html </a><br>
+ <a href="../mozilla-tests.html"> ../mozilla-tests.html </a><br>
+ <a href="../name-tests.html"> ../name-tests.html </a><br>
+ <a href="../ordering-tests.html"> ../ordering-tests.html </a><br>
+ <a href="../path-tests.html"> ../path-tests.html </a><br>
+ <a href="../value-tests.html"> ../value-tests.html </a><br>
+
+ <h2>Current Cookies</h2>
+ These are all cookies, currently set by the browser for this domain: <br>
+ <span id="cookies">(None)</span>
+ <script type="text/javascript">
+ setInterval(() => {
+ document.getElementById("cookies").textContent =
+ document.cookie || "(None)";
+ }, 500);
+ </script>
+
+ <h2>All Tests</h2>
+ Below, all tests are running. The Log contains messages (e.g. when cookies
+ are left over) and the IFrames list preserves all requested files and shows
+ which cookies were expected to show. <br>
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <!-- No element should come after this - the test harness appends the result
+ here when it finished running all of them. -->
+
+ <script type="text/javascript">
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [%s];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js
index 470d46ebc43..d737b38c520 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-http-state-template.js
@@ -1,16 +1,32 @@
const SERVER_LOCATION = "resources";
const SERVER_SCRIPT = SERVER_LOCATION + "/cookie-setter.py";
+/* Adds a div with "<time> [<tag>] - <message>" to the "#log" container.*/
+function log(message, tag) {
+ let log_str = document.createElement('div');
+ log_str.textContent = new Date().toTimeString().replace(/\s.+$/, '');
+ if (tag) {
+ log_str.textContent += " [" + tag + "] ";
+ }
+ log_str.textContent += " - " + message;
+ let log_container = document.getElementById("log");
+ log_container.appendChild(log_str);
+ log_container.scrollTo(0, log_container.scrollHeight);
+}
+
+/* Removes the "Cookie: " prefix and strip any leading or trailing whitespace.*/
function stripPrefixAndWhitespace(cookie_text) {
return cookie_text.replace(/^Cookie: /, '').replace(/^\s+|\s+$/g, '');
}
+/* Returns the absolute path of the resource folder, ignoring any navigation. */
function getLocalResourcesPath() {
let replace = "(" + SERVER_LOCATION + "\/)*"; // Redundant location.
replace += "[^\/]*$"; // Everything after the last "/".
return location.pathname.replace(new RegExp(replace), "") + SERVER_LOCATION;
}
+/* Returns the absolute server location ignoring any navgation.*/
function getAbsoluteServerLocation() {
// Replace the server location and everything coming after it ...
let replace = SERVER_LOCATION + ".*$";
@@ -18,6 +34,7 @@ function getAbsoluteServerLocation() {
return getLocalResourcesPath().replace(new RegExp(replace),'')+ SERVER_SCRIPT;
}
+/* Expires a cookie by name by setting it's expiry date into the past.*/
function expireCookie(name, expiry_date, path) {
name = name || "";
expiry_date = expiry_date || "Thu, 01 Jan 1970 00:00:00 UTC";
@@ -25,10 +42,16 @@ function expireCookie(name, expiry_date, path) {
document.cookie = name + "=; expires=" + expiry_date + "; path=" + path + ";";
}
+/* Captures a snapshot of cookies with |parse| and allows to diff it with a
+second snapshot with |diffWith|. This allows to run tests even if cookies were
+previously set that would mess with the expected final set of Cookies.
+With |resetCookies|, all cookies set between first and second snapshot are
+expired. */
function CookieManager() {
this.initial_cookies = [];
}
+/* Creates a snapshot of the current given document cookies.*/
CookieManager.prototype.parse = document_cookies => {
this.initial_cookies = [];
document_cookies = document_cookies.replace(/^Cookie: /, '');
@@ -37,22 +60,25 @@ CookieManager.prototype.parse = document_cookies => {
}
}
+/* Creates a diff of newly added cookies between the initial snapshot and the
+newly given cookies. The diff is stored for cleaning purposes. A second call
+will replace the the stored diff entirely.*/
CookieManager.prototype.diffWith = document_cookies => {
this.actual_cookies = document_cookies;
for (let i in initial_cookies) {
let no_spaces_cookie_regex =
- new RegExp(/\s*[\;]*\s/.source + initial_cookies[i]);
- this.actual_cookies = actual_cookies.replace(no_spaces_cookie_regex, '');
+ new RegExp(/\s*[\;]*\s/.source + initial_cookies[i].replace(/\\/, "\\\\"));
+ this.actual_cookies = this.actual_cookies.replace(no_spaces_cookie_regex, '');
}
return this.actual_cookies;
}
+/* Cleans cookies between the first and the second snapshot.
+Some tests might set cookies to the root path or cookies without key. Both cases
+are dropped here.*/
CookieManager.prototype.resetCookies = () => {
- expireCookie(/*name=*/""); // If a cookie without keys was accepted, drop it.
- if (this.actual_cookies == "") {
- return; // There is nothing to reset here.
- }
- let cookies_to_delete = this.actual_cookies.split(/\s*;\s*/)
+ // If a cookie without keys was accepted, drop it additionally.
+ let cookies_to_delete = [""].concat(this.actual_cookies.split(/\s*;\s*/))
for (let i in cookies_to_delete){
expireCookie(cookies_to_delete[i].replace(/=.*$/, ""));
// Drop cookies with same name that were set to the root path which happens
@@ -63,14 +89,27 @@ CookieManager.prototype.resetCookies = () => {
}
}
+/* Returns a new cookie test.
+The test creates an iframe where a |file| from the cookie-setter.py is loaded.
+This sets cookies which are diffed with an initial cookie snapshot and compared
+to the expectation that the server returned.
+Finally, it cleans up newly set cookies and all cookies in the root path or
+without key. */
function createCookieTest(file) {
return t => {
+ let iframe_container = document.getElementById("iframes");
const iframe = document.createElement('iframe');
- document.body.appendChild(iframe);
+ iframe_container.appendChild(iframe);
+ iframe_container.scrollTo(0, iframe_container.scrollHeight);
let diff_tool = new CookieManager();
t.add_cleanup(diff_tool.resetCookies);
return new Promise((resolve, reject) => {
diff_tool.parse(document.cookie);
+ if (diff_tool.initial_cookies.length > 0) {
+ // The cookies should ideally be empty. If that isn't the case, log it.
+ //Cookies with equal keys (e.g. foo=) may have unwanted side-effects.
+ log("Run with existing cookies: " + diff_tool.initial_cookies, file);
+ }
window.addEventListener("message", t.step_func(e => {
assert_true(!!e.data, "Message contains data")
resolve(e.data);
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py
index 0418f4b7630..758b1429f72 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/cookie-setter.py
@@ -1,5 +1,17 @@
-from os import path;
+from os import path
+from os import listdir
+"""
+The main purpose of this script is to set cookies based on files in this folder:
+ cookies/http-state/resources
+
+If a wpt server is running, navigate to
+ http://<server>/cookies/http-state/resources/cookie-setter.py
+which will run all cookie tests and explain the usage of this script in detail.
+
+If you want to run a test in isolation, append "?debug=" and the test id to the
+URL above.
+"""
SETUP_FILE_TEMPLATE = "{}-test"
EXPECTATION_FILE_TEMPLATE = "{}-expected"
@@ -7,13 +19,18 @@ EXPECTATION_HTML_SCAFFOLD = "iframe-expectation-doc.html.py-str"
DEBUGGING_HTML_SCAFFOLD = "debugging-single-test.html.py-str"
DEFAULT_RESOURCE_DIR = path.join("cookies", "http-state", "resources")
DEFAULT_TEST_DIR = "test-files"
+ALL_TESTS = "all-tests.html.py-str"
def dump_file(directory, filename):
+ """Reads a file into a string."""
return open(path.join(directory, filename), "r").read()
class CookieTestResponse(object):
+ """Loads the Set-Cookie header from a given file name. Relies on the naming
+ convention that ever test file is called '<test_id>-test' and every
+ expectation is called '<test_id>-expected'."""
def __init__(self, file, root):
super(CookieTestResponse, self).__init__()
self.__test_file = SETUP_FILE_TEMPLATE.format(file)
@@ -22,16 +39,36 @@ class CookieTestResponse(object):
self.__test_files_dir = path.join(self.__resources_dir, DEFAULT_TEST_DIR)
def cookie_setting_header(self):
+ """Returns the loaded header."""
return dump_file(self.__test_files_dir, self.__test_file)
def body_with_expectation(self):
+ """Returns a full HTML document which contains the expectation."""
html_frame = dump_file(self.__resources_dir, EXPECTATION_HTML_SCAFFOLD)
- expected_data = dump_file(self.__test_files_dir, self.__expectation_file);
+ expected_data = dump_file(self.__test_files_dir, self.__expectation_file)
return html_frame.format(**{'data' : expected_data})
+def find_all_test_files(root):
+ """Retrieves all files from the test-files/ folder and returns them as
+ string pair as used in the JavaScript object. Sorted by filename."""
+ all_files = []
+ line_template = '{{file: "{filename}", name: "{filename}"}},'
+ for file in listdir(path.join(root, DEFAULT_RESOURCE_DIR, DEFAULT_TEST_DIR)):
+ if file.endswith('-test'):
+ name = file.replace('-test', '')
+ all_files.append(line_template.format(**{'filename' : name}))
+ all_files.sort()
+ return all_files
+
+def generate_for_all_tests(root):
+ """Returns an HTML document which loads and executes all tests in the
+ test-files/ directory."""
+ html_frame = dump_file(path.join(root, DEFAULT_RESOURCE_DIR), ALL_TESTS)
+ return html_frame % '\n'.join(find_all_test_files(root))
def main(request, response):
if "debug" in request.GET:
+ """If '?debug=' is set, return the document for a single test."""
response.writer.write_status(200)
response.writer.end_headers()
html_frame = dump_file(path.join(request.doc_root, DEFAULT_RESOURCE_DIR),
@@ -40,15 +77,18 @@ def main(request, response):
response.writer.write_content(test_file)
return;
- if not "file" in request.GET:
- response.writer.write_status(404)
+ if "file" in request.GET:
+ """If '?file=' is set, send a cookie and a document which contains the
+ expectation of which cookies should be set by the browser in response."""
+ cookie_response = CookieTestResponse(request.GET['file'], request.doc_root)
+
+ response.writer.write_status(200)
+ response.writer.write(cookie_response.cookie_setting_header())
response.writer.end_headers()
- response.writer.write_content("The 'file' parameter is missing!")
+ response.writer.write_content(cookie_response.body_with_expectation())
return;
- cookie_response = CookieTestResponse(request.GET['file'], request.doc_root)
-
+ """Without any arguments, return documentation and run all available tests."""
response.writer.write_status(200)
- response.writer.write(cookie_response.cookie_setting_header())
response.writer.end_headers()
- response.writer.write_content(cookie_response.body_with_expectation())
+ response.writer.write_content(generate_for_all_tests(request.doc_root))
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str b/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str
index d34ff872c1d..40d9809a4bc 100644
--- a/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/debugging-single-test.html.py-str
@@ -8,9 +8,19 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="cookie-http-state-template.js"></script>
+ <style type="text/css">
+ .scrollable {
+ height:150px;
+ overflow-y:scroll;
+ }
+ </style>
</head>
<body>
- <div id="log"></div>
+ <h3>Log</h3>
+ <div id="log" class="scrollable"></div>
+ <h3>IFrame</h3>
+ <div id="iframes" class="toggleable scrollable"></div>
+ <h3>Test Results</h3>
<script>
setup({ explicit_timeout: true });
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected
new file mode 100644
index 00000000000..8646afc6366
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-expected
@@ -0,0 +1 @@
+Cookie: foo=春节回家路·春运完全手册
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test
new file mode 100644
index 00000000000..e89a36dd89e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0001-test
@@ -0,0 +1 @@
+Set-Cookie: foo=春节回家路·春运完全手册
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected
new file mode 100644
index 00000000000..fc7d2561017
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-expected
@@ -0,0 +1 @@
+Cookie: 春节回=家路·春运完全手册
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test
new file mode 100644
index 00000000000..70ce472afa6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0002-test
@@ -0,0 +1 @@
+Set-Cookie: 春节回=家路·春运完全手册
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected
new file mode 100644
index 00000000000..1969bc86b97
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-expected
@@ -0,0 +1 @@
+Cookie: 春节回=家路·春运
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test
new file mode 100644
index 00000000000..446e2fd29f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0003-test
@@ -0,0 +1 @@
+Set-Cookie: 春节回=家路·春运; 完全手册
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected
new file mode 100644
index 00000000000..1d6d952989e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-expected
@@ -0,0 +1 @@
+Cookie: foo="春节回家路·春运完全手册"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test
new file mode 100644
index 00000000000..1564ba4fc92
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/charset0004-test
@@ -0,0 +1 @@
+Set-Cookie: foo="春节回家路·春运完全手册"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected
new file mode 100644
index 00000000000..1022f64a290
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-expected
@@ -0,0 +1 @@
+Cookie: a=b
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test
new file mode 100644
index 00000000000..4635f0e7e37
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0001-test
@@ -0,0 +1 @@
+Set-Cookie: a=b
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected
new file mode 100644
index 00000000000..64932dcffb4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-expected
@@ -0,0 +1 @@
+Cookie: aBc="zzz "
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test
new file mode 100644
index 00000000000..24ab0d2da56
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0002-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zzz " ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected
new file mode 100644
index 00000000000..64932dcffb4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-expected
@@ -0,0 +1 @@
+Cookie: aBc="zzz "
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test
new file mode 100644
index 00000000000..bac41f99288
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0003-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zzz " ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected
new file mode 100644
index 00000000000..9be3e8f6435
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-expected
@@ -0,0 +1 @@
+Cookie: aBc="zz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test
new file mode 100644
index 00000000000..45cab2f409d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0004-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zz;pp" ; ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected
new file mode 100644
index 00000000000..9be3e8f6435
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-expected
@@ -0,0 +1 @@
+Cookie: aBc="zz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test
new file mode 100644
index 00000000000..c2dfebd3c44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0005-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zz ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected
new file mode 100644
index 00000000000..8121145c18b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-expected
@@ -0,0 +1 @@
+Cookie: aBc="zzz " "ppp"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test
new file mode 100644
index 00000000000..a9da26811a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0006-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zzz " "ppp" ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected
new file mode 100644
index 00000000000..8121145c18b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-expected
@@ -0,0 +1 @@
+Cookie: aBc="zzz " "ppp"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test
new file mode 100644
index 00000000000..dca20b8e7df
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0007-test
@@ -0,0 +1 @@
+Set-Cookie: aBc="zzz " "ppp" ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected
new file mode 100644
index 00000000000..602c0e017c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-expected
@@ -0,0 +1 @@
+Cookie: aBc=A"B
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test
new file mode 100644
index 00000000000..ece6c66f0b1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0008-test
@@ -0,0 +1 @@
+Set-Cookie: aBc=A"B ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test
new file mode 100644
index 00000000000..eecdae60cc4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0009-test
@@ -0,0 +1 @@
+Set-Cookie: BLAHHH; path=/;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test
new file mode 100644
index 00000000000..17a18ea9272
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0010-test
@@ -0,0 +1 @@
+Set-Cookie: "BLA\"HHH"; path=/;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected
new file mode 100644
index 00000000000..2062e231556
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-expected
@@ -0,0 +1 @@
+Cookie: a="B
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test
new file mode 100644
index 00000000000..4000f269a49
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0011-test
@@ -0,0 +1 @@
+Set-Cookie: a="B
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test
new file mode 100644
index 00000000000..b33a4e7427b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0012-test
@@ -0,0 +1 @@
+Set-Cookie: =ABC
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected
new file mode 100644
index 00000000000..5d2d06092c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-expected
@@ -0,0 +1 @@
+Cookie: ABC=
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test
new file mode 100644
index 00000000000..f61a087bb8f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0013-test
@@ -0,0 +1 @@
+Set-Cookie: ABC=; path = /
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected
new file mode 100644
index 00000000000..21bfd134e54
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-expected
@@ -0,0 +1 @@
+Cookie: A=BC
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test
new file mode 100644
index 00000000000..edbb7931a38
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0014-test
@@ -0,0 +1 @@
+Set-Cookie: A = BC ;foo;;; bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected
new file mode 100644
index 00000000000..b968e7427a0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-expected
@@ -0,0 +1 @@
+Cookie: A=== BC
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test
new file mode 100644
index 00000000000..80d32366b5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0015-test
@@ -0,0 +1 @@
+Set-Cookie: A=== BC ;foo;;; bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected
new file mode 100644
index 00000000000..11d8efaea2a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-expected
@@ -0,0 +1 @@
+Cookie: foo="zohNumRKgI0oxyhSsV3Z7D"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test
new file mode 100644
index 00000000000..8abf12026c7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0016-test
@@ -0,0 +1 @@
+Set-Cookie: foo="zohNumRKgI0oxyhSsV3Z7D" ; expires=Sun, 18-Apr-2027 21:06:29 GMT ; path=/ ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected
new file mode 100644
index 00000000000..6bb84483a05
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-expected
@@ -0,0 +1 @@
+Cookie: foo=zohNumRKgI0oxyhSsV3Z7D
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test
new file mode 100644
index 00000000000..94cce02078b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0017-test
@@ -0,0 +1 @@
+Set-Cookie: foo=zohNumRKgI0oxyhSsV3Z7D ; expires=Sun, 18-Apr-2027 21:06:29 GMT ; path=/ ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test
new file mode 100644
index 00000000000..145ad2c5def
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0018-test
@@ -0,0 +1 @@
+Set-Cookie:
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected
new file mode 100644
index 00000000000..b6df50eef28
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-expected
@@ -0,0 +1 @@
+Cookie: a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test
new file mode 100644
index 00000000000..e3bcc4a18c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0019-test
@@ -0,0 +1 @@
+Set-Cookie: a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test
new file mode 100644
index 00000000000..145ad2c5def
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/chromium0021-test
@@ -0,0 +1 @@
+Set-Cookie:
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected
new file mode 100644
index 00000000000..ab55cea018a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-expected
@@ -0,0 +1 @@
+Cookie: foo=bar, baz=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test
new file mode 100644
index 00000000000..5b3678de396
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0001-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar, baz=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected
new file mode 100644
index 00000000000..33590a08486
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-expected
@@ -0,0 +1 @@
+Cookie: foo="bar, baz=qux"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test
new file mode 100644
index 00000000000..164c0a93bfc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0002-test
@@ -0,0 +1 @@
+Set-Cookie: foo="bar, baz=qux"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test
new file mode 100644
index 00000000000..213d3a5f267
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0003-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; b,az=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test
new file mode 100644
index 00000000000..e93f6f4062c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0004-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; baz=q,ux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test
new file mode 100644
index 00000000000..eeb040d0a31
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0005-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; Max-Age=50,399
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test
new file mode 100644
index 00000000000..a3eaff03ba3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0006-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; Expires=Fri, 07 Aug 2019 08:04:19 GMT
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test
new file mode 100644
index 00000000000..29fb0a2695d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/comma0007-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; Expires=Fri 07 Aug 2019 08:04:19 GMT, baz=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test
new file mode 100644
index 00000000000..67cefa339ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0020-test
@@ -0,0 +1 @@
+Set-Cookie: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected
new file mode 100644
index 00000000000..8ac13216032
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-expected
@@ -0,0 +1 @@
+Cookie: AAA=BB
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test
new file mode 100644
index 00000000000..1a8f35ffbd8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0022-test
Binary files differ
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected
new file mode 100644
index 00000000000..8ac13216032
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-expected
@@ -0,0 +1 @@
+Cookie: AAA=BB
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test
new file mode 100644
index 00000000000..76a8ed4e9b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-chromium0023-test
@@ -0,0 +1 @@
+Set-Cookie: AAA=BB ZYX
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test
new file mode 100644
index 00000000000..d7219d590c6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/disabled-path0029-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/bar
+Location: /cookie-parser-result/f%6Fo/bar?disabled-path0029
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test
new file mode 100644
index 00000000000..fd8926d7b4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0001-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0001
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test
new file mode 100644
index 00000000000..a6ad2a80856
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0002-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0002
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test
new file mode 100644
index 00000000000..ff051f4806c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0003-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0003
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test
new file mode 100644
index 00000000000..f05029bb5a7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0004-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0004
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test
new file mode 100644
index 00000000000..697ab186fcd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0005-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.home.example.org
+Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0005
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test
new file mode 100644
index 00000000000..fe5f90df9dc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0006-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.home.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0006
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test
new file mode 100644
index 00000000000..1d2c6fcec62
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0007-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=sibling.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0007
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test
new file mode 100644
index 00000000000..491c52de9da
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0008-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0008
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test
new file mode 100644
index 00000000000..736e69fe8e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0009-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0009
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test
new file mode 100644
index 00000000000..5bf212f27d8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0010-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=..home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0010
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test
new file mode 100644
index 00000000000..e1c54db25ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0011-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home..example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0011
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test
new file mode 100644
index 00000000000..a189f38087a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0012-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain= .home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0012
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test
new file mode 100644
index 00000000000..8493146e767
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0013-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain= . home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0013
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test
new file mode 100644
index 00000000000..adccd0d3205
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0014-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org.
+Location: http://home.example.org:8888/cookie-parser-result?domain0014
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test
new file mode 100644
index 00000000000..c123ba940d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0015-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org..
+Location: http://home.example.org:8888/cookie-parser-result?domain0015
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test
new file mode 100644
index 00000000000..9136ac4d86a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0016-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org .
+Location: http://home.example.org:8888/cookie-parser-result?domain0016
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test
new file mode 100644
index 00000000000..8e876b8d687
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0017-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0017
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test
new file mode 100644
index 00000000000..3763f9625ef
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0018-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.org.
+Location: http://home.example.org:8888/cookie-parser-result?domain0018
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected
new file mode 100644
index 00000000000..1f359c4850b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-expected
@@ -0,0 +1 @@
+Cookie: foo=bar; foo2=bar2
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test
new file mode 100644
index 00000000000..f5aebfd0e10
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0019-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Set-Cookie: foo2=bar2; domain=.home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0019
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected
new file mode 100644
index 00000000000..5eb3ac42d41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-expected
@@ -0,0 +1 @@
+Cookie: foo2=bar2; foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test
new file mode 100644
index 00000000000..1c7a61c85f6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0020-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo2=bar2; domain=.home.example.org
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0020
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test
new file mode 100644
index 00000000000..895744eac5d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0021-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain="home.example.org"
+Location: http://home.example.org:8888/cookie-parser-result?domain0021
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected
new file mode 100644
index 00000000000..1f359c4850b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-expected
@@ -0,0 +1 @@
+Cookie: foo=bar; foo2=bar2
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test
new file mode 100644
index 00000000000..6eeae00159f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0022-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Set-Cookie: foo2=bar2; domain=.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0022
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected
new file mode 100644
index 00000000000..5eb3ac42d41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-expected
@@ -0,0 +1 @@
+Cookie: foo2=bar2; foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test
new file mode 100644
index 00000000000..91a81ed003c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0023-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo2=bar2; domain=.example.org
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0023
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test
new file mode 100644
index 00000000000..63157b9b457
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0024-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.example.org; domain=home.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0024
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test
new file mode 100644
index 00000000000..353c3bb6346
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0025-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0025
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test
new file mode 100644
index 00000000000..3b14e307546
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0026-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.eXaMpLe.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0026
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test
new file mode 100644
index 00000000000..8b7adbd17a1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0027-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org:8888
+Location: http://home.example.org:8888/cookie-parser-result?domain0027
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test
new file mode 100644
index 00000000000..ab8f2c401eb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0028-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=subdomain.home.example.org
+Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0028
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test
new file mode 100644
index 00000000000..cfab57a6e49
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0029-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar
+Location: http://subdomain.home.example.org:8888/cookie-parser-result?domain0029
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test
new file mode 100644
index 00000000000..6eccb78b8b8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0031-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0031
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test
new file mode 100644
index 00000000000..7fdcc8356a1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0033-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org
+Location: http://hoMe.eXaMplE.org:8888/cookie-parser-result?domain0033
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test
new file mode 100644
index 00000000000..d3f4723fd08
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0034-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.com
+Location: http://home.example.org:8888/cookie-parser-result?domain0034
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test
new file mode 100644
index 00000000000..967d248c256
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0035-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.com; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0035
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test
new file mode 100644
index 00000000000..a618ec4dd20
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0036-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.com; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0036
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test
new file mode 100644
index 00000000000..c61fe8f2762
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0037-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.com; domain=home.example.org; domain=home.example.com
+Location: http://home.example.org:8888/cookie-parser-result?domain0037
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test
new file mode 100644
index 00000000000..2d8fcca5731
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0038-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0038
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test
new file mode 100644
index 00000000000..3225b28baac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0039-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=home.example.org; domain=example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0039
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test
new file mode 100644
index 00000000000..3e32fa895c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0040-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=example.org; domain=home.example.org
+Location: http://home.example.org:8888/cookie-parser-result?domain0040
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test
new file mode 100644
index 00000000000..6fbc4ad1141
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0041-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.sibling.example.org
+Location: http://sibling.example.org:8888/cookie-parser-result?domain0041
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test
new file mode 100644
index 00000000000..9258624cc56
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/domain0042-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=.sibling.home.example.org
+Location: http://sibling.home.example.org:8888/cookie-parser-result?domain0042
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test
new file mode 100644
index 00000000000..53f98e23b2a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0001-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; max-age=-1
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test
new file mode 100644
index 00000000000..a79c5be41f4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0002-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; max-age=0
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test
new file mode 100644
index 00000000000..785c326fae4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0003-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; expires=Thu, 10 Apr 1980 16:33:12 GMT
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test
new file mode 100644
index 00000000000..567134f5d3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0004-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; max-age=60
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test
new file mode 100644
index 00000000000..0fa350adc36
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0005-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; max-age=-20
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test
new file mode 100644
index 00000000000..567134f5d3a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0006-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; max-age=60
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test
new file mode 100644
index 00000000000..785c326fae4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0007-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; expires=Thu, 10 Apr 1980 16:33:12 GMT
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected
new file mode 100644
index 00000000000..0f62babd8b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-expected
@@ -0,0 +1 @@
+Cookie: foo=bar; foo1=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test
new file mode 100644
index 00000000000..d6350d6c7b5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0008-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; max-age=60
+Set-Cookie: foo1=bar; max-age=60
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected
new file mode 100644
index 00000000000..555fbaf5471
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-expected
@@ -0,0 +1 @@
+Cookie: foo1=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test
new file mode 100644
index 00000000000..84944d4d50b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0009-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo=bar; max-age=60
+Set-Cookie: foo1=bar; max-age=60
+Set-Cookie: foo=differentvalue; max-age=0
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected
new file mode 100644
index 00000000000..555fbaf5471
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-expected
@@ -0,0 +1 @@
+Cookie: foo1=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test
new file mode 100644
index 00000000000..13477a47c26
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0010-test
@@ -0,0 +1,4 @@
+Set-Cookie: foo=bar; max-age=60
+Set-Cookie: foo1=bar; max-age=60
+Set-Cookie: foo=differentvalue; max-age=0
+Set-Cookie: foo2=evendifferentvalue; max-age=0
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test
new file mode 100644
index 00000000000..bba20536edd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0011-test
@@ -0,0 +1 @@
+Set-Cookie: test=parser; domain=.parser.test; ;; ;=; ,,, ===,abc,=; abracadabra! max-age=20;=;;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected
new file mode 100644
index 00000000000..10e669a0134
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-expected
@@ -0,0 +1 @@
+Cookie: test="fubar! = foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test
new file mode 100644
index 00000000000..9ba773f5c74
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0012-test
@@ -0,0 +1,2 @@
+Set-Cookie: test="fubar! = foo;bar\";" parser; max-age=6
+Set-Cookie: five; max-age=2.63,
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test
new file mode 100644
index 00000000000..d491267e4aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0013-test
@@ -0,0 +1,2 @@
+Set-Cookie: test=kill; max-age=0
+Set-Cookie: five; max-age=0
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test
new file mode 100644
index 00000000000..4cc1f450756
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0014-test
@@ -0,0 +1 @@
+Set-Cookie: six
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test
new file mode 100644
index 00000000000..13254db6886
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0015-test
@@ -0,0 +1,2 @@
+Set-Cookie: six
+Set-Cookie: seven
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test
new file mode 100644
index 00000000000..6aab3e80d6f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0016-test
@@ -0,0 +1,3 @@
+Set-Cookie: six
+Set-Cookie: seven
+Set-Cookie: =eight
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected
new file mode 100644
index 00000000000..fc9a2496c60
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-expected
@@ -0,0 +1 @@
+Cookie: test=six
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test
new file mode 100644
index 00000000000..b6c297cc77d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/mozilla0017-test
@@ -0,0 +1,4 @@
+Set-Cookie: six
+Set-Cookie: seven
+Set-Cookie: =eight
+Set-Cookie: test=six
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected
new file mode 100644
index 00000000000..96527926e10
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-expected
@@ -0,0 +1 @@
+Cookie: a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test
new file mode 100644
index 00000000000..3ce5f5f9824
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0001-test
@@ -0,0 +1 @@
+Set-Cookie: a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected
new file mode 100644
index 00000000000..d4d3cda811b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-expected
@@ -0,0 +1 @@
+Cookie: 1=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test
new file mode 100644
index 00000000000..d6eac8a757a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0002-test
@@ -0,0 +1 @@
+Set-Cookie: 1=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected
new file mode 100644
index 00000000000..0c00f45c4a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-expected
@@ -0,0 +1 @@
+Cookie: $=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test
new file mode 100644
index 00000000000..7ea96155bd7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0003-test
@@ -0,0 +1 @@
+Set-Cookie: $=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected
new file mode 100644
index 00000000000..b079529aa24
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-expected
@@ -0,0 +1 @@
+Cookie: !a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test
new file mode 100644
index 00000000000..99f0e61801a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0004-test
@@ -0,0 +1 @@
+Set-Cookie: !a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected
new file mode 100644
index 00000000000..a0f031bb34e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-expected
@@ -0,0 +1 @@
+Cookie: @a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test
new file mode 100644
index 00000000000..9e33e0c8e47
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0005-test
@@ -0,0 +1 @@
+Set-Cookie: @a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected
new file mode 100644
index 00000000000..ee0e7d7c335
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-expected
@@ -0,0 +1 @@
+Cookie: #a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test
new file mode 100644
index 00000000000..fbd03632c61
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0006-test
@@ -0,0 +1 @@
+Set-Cookie: #a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected
new file mode 100644
index 00000000000..6d6e56ebe59
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-expected
@@ -0,0 +1 @@
+Cookie: $a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test
new file mode 100644
index 00000000000..d41e64b87ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0007-test
@@ -0,0 +1 @@
+Set-Cookie: $a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected
new file mode 100644
index 00000000000..a4b8c242825
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-expected
@@ -0,0 +1 @@
+Cookie: %a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test
new file mode 100644
index 00000000000..7afcf700376
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0008-test
@@ -0,0 +1 @@
+Set-Cookie: %a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected
new file mode 100644
index 00000000000..49506acc248
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-expected
@@ -0,0 +1 @@
+Cookie: ^a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test
new file mode 100644
index 00000000000..f40d2c4d6b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0009-test
@@ -0,0 +1 @@
+Set-Cookie: ^a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected
new file mode 100644
index 00000000000..1e72557892b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-expected
@@ -0,0 +1 @@
+Cookie: &a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test
new file mode 100644
index 00000000000..fb4fd921be3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0010-test
@@ -0,0 +1 @@
+Set-Cookie: &a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected
new file mode 100644
index 00000000000..260d7028a01
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-expected
@@ -0,0 +1 @@
+Cookie: *a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test
new file mode 100644
index 00000000000..b36b72388f2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0011-test
@@ -0,0 +1 @@
+Set-Cookie: *a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected
new file mode 100644
index 00000000000..0a2686a1525
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-expected
@@ -0,0 +1 @@
+Cookie: (a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test
new file mode 100644
index 00000000000..6927aac6fa0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0012-test
@@ -0,0 +1 @@
+Set-Cookie: (a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected
new file mode 100644
index 00000000000..87dec78b622
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-expected
@@ -0,0 +1 @@
+Cookie: )a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test
new file mode 100644
index 00000000000..59ada98321c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0013-test
@@ -0,0 +1 @@
+Set-Cookie: )a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected
new file mode 100644
index 00000000000..82bfe0e60ac
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-expected
@@ -0,0 +1 @@
+Cookie: -a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test
new file mode 100644
index 00000000000..a113e99be5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0014-test
@@ -0,0 +1 @@
+Set-Cookie: -a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected
new file mode 100644
index 00000000000..390b77b30c4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-expected
@@ -0,0 +1 @@
+Cookie: _a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test
new file mode 100644
index 00000000000..60fc0746ba2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0015-test
@@ -0,0 +1 @@
+Set-Cookie: _a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected
new file mode 100644
index 00000000000..7d4d9e33079
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-expected
@@ -0,0 +1 @@
+Cookie: +=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test
new file mode 100644
index 00000000000..371dbcde6ca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0016-test
@@ -0,0 +1 @@
+Set-Cookie: +=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test
new file mode 100644
index 00000000000..056143166bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0017-test
@@ -0,0 +1 @@
+Set-Cookie: =a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected
new file mode 100644
index 00000000000..96527926e10
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-expected
@@ -0,0 +1 @@
+Cookie: a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test
new file mode 100644
index 00000000000..e86a48360cf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0018-test
@@ -0,0 +1 @@
+Set-Cookie: a =bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected
new file mode 100644
index 00000000000..8d0bc2d07d6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-expected
@@ -0,0 +1 @@
+Cookie: "a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test
new file mode 100644
index 00000000000..d48e3f6954a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0019-test
@@ -0,0 +1 @@
+Set-Cookie: "a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected
new file mode 100644
index 00000000000..aa9cd6d435c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-expected
@@ -0,0 +1 @@
+Cookie: "a=b"=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test
new file mode 100644
index 00000000000..b84f64d1798
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0020-test
@@ -0,0 +1 @@
+Set-Cookie: "a=b"=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected
new file mode 100644
index 00000000000..206ff76e3e3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-expected
@@ -0,0 +1 @@
+Cookie: "a=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test
new file mode 100644
index 00000000000..56b319e9d49
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0021-test
@@ -0,0 +1,2 @@
+Set-Cookie: "a=b"=bar
+Set-Cookie: "a=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test
new file mode 100644
index 00000000000..cc59ff17eda
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0022-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test
new file mode 100644
index 00000000000..b7f9cc257d2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0023-test
@@ -0,0 +1 @@
+Set-Cookie: foo;bar=baz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected
new file mode 100644
index 00000000000..5ac4f2535c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-expected
@@ -0,0 +1 @@
+Cookie: $Version=1
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test
new file mode 100644
index 00000000000..da7b696da91
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0024-test
@@ -0,0 +1 @@
+Set-Cookie: $Version=1; foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test
new file mode 100644
index 00000000000..708f006b9c0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0025-test
@@ -0,0 +1 @@
+Set-Cookie: ===a=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test
new file mode 100644
index 00000000000..bbeb77a029c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0026-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test
new file mode 100644
index 00000000000..d222227e6de
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0027-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar ;
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test
new file mode 100644
index 00000000000..1c197e3324c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0028-test
@@ -0,0 +1 @@
+Set-Cookie: =a
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test
new file mode 100644
index 00000000000..44212468d44
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0029-test
@@ -0,0 +1 @@
+Set-Cookie: =
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected
new file mode 100644
index 00000000000..a391380fb66
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-expected
@@ -0,0 +1 @@
+Cookie: foo bar=baz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test
new file mode 100644
index 00000000000..cf3ff160f45
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0030-test
@@ -0,0 +1 @@
+Set-Cookie: foo bar=baz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test
new file mode 100644
index 00000000000..93941849040
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0031-test
@@ -0,0 +1 @@
+Set-Cookie: "foo;bar"=baz
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test
new file mode 100644
index 00000000000..93fc9752333
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0032-test
@@ -0,0 +1 @@
+Set-Cookie: "foo\"bar;baz"=qux
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test
new file mode 100644
index 00000000000..7bbdd89566a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/name0033-test
@@ -0,0 +1,2 @@
+Set-Cookie: =foo=bar
+Set-Cookie: aaa
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test
new file mode 100644
index 00000000000..3ab75aa3a07
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0030-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=
+Location: http://home.example.org:8888/cookie-parser-result?optional-domain0030
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test
new file mode 100644
index 00000000000..b85a6c9e43c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0041-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=example.org; domain=
+Location: http://home.example.org:8888/cookie-parser-result?optional-domain0041
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected
new file mode 100644
index 00000000000..8b137891791
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-expected
@@ -0,0 +1 @@
+
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test
new file mode 100644
index 00000000000..524d192b6e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0042-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=foo.example.org; domain=
+Location: http://home.example.org:8888/cookie-parser-result?optional-domain0042
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test
new file mode 100644
index 00000000000..506cdc46e52
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/optional-domain0043-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; domain=foo.example.org; domain=
+Location: http://subdomain.home.example.org:8888/cookie-parser-result?optional-domain0043
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected
new file mode 100644
index 00000000000..3d819593f53
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-expected
@@ -0,0 +1 @@
+Cookie: key=val5; key=val1; key=val2; key=val4
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test
new file mode 100644
index 00000000000..ba6e85c44cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/ordering0001-test
@@ -0,0 +1,7 @@
+Set-Cookie: key=val0;
+Set-Cookie: key=val1; path=/cookie-parser-result
+Set-Cookie: key=val2; path=/
+Set-Cookie: key=val3; path=/bar
+Set-Cookie: key=val4; domain=.example.org
+Set-Cookie: key=val5; domain=.example.org; path=/cookie-parser-result/foo
+Location: /cookie-parser-result/foo/baz?ordering0001
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected
new file mode 100644
index 00000000000..785d0a2f5f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-expected
@@ -0,0 +1 @@
+Cookie: x=y; a=b
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test
new file mode 100644
index 00000000000..ed81cb955f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0001-test
@@ -0,0 +1,2 @@
+Set-Cookie: a=b; path=/
+Set-Cookie: x=y; path=/cookie-parser-result
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected
new file mode 100644
index 00000000000..2314ba0d495
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-expected
@@ -0,0 +1 @@
+Cookie: a=b; x=y
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test
new file mode 100644
index 00000000000..22493285185
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0002-test
@@ -0,0 +1,2 @@
+Set-Cookie: a=b; path=/cookie-parser-result
+Set-Cookie: x=y; path=/
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected
new file mode 100644
index 00000000000..2314ba0d495
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-expected
@@ -0,0 +1 @@
+Cookie: a=b; x=y
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test
new file mode 100644
index 00000000000..e4b5a4b2565
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0003-test
@@ -0,0 +1,2 @@
+Set-Cookie: x=y; path=/
+Set-Cookie: a=b; path=/cookie-parser-result
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected
new file mode 100644
index 00000000000..785d0a2f5f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-expected
@@ -0,0 +1 @@
+Cookie: x=y; a=b
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test
new file mode 100644
index 00000000000..a80ea6ec015
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0004-test
@@ -0,0 +1,2 @@
+Set-Cookie: x=y; path=/cookie-parser-result
+Set-Cookie: a=b; path=/
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test
new file mode 100644
index 00000000000..6447c9164f9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0005-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test
new file mode 100644
index 00000000000..07ecf27b82b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0006-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar
+Set-Cookie: foo=qux; path=/cookie-parser-result/foo
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test
new file mode 100644
index 00000000000..66a54de7420
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0007-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo
+Location: /cookie-parser-result/foo?path0007
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test
new file mode 100644
index 00000000000..b10012d3096
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0008-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo
+Location: /cookie-parser-result/bar?path0008
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test
new file mode 100644
index 00000000000..874f21bad97
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0009-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux
+Location: /cookie-parser-result/foo?path0009
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test
new file mode 100644
index 00000000000..0ea62fd5ec5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0010-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux
+Location: /cookie-parser-result/foo/qux?path0010
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test
new file mode 100644
index 00000000000..35ea0620495
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0011-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux
+Location: /cookie-parser-result/bar/qux?path0011
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test
new file mode 100644
index 00000000000..4c0577897bd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0012-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux
+Location: /cookie-parser-result/foo/baz?path0012
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test
new file mode 100644
index 00000000000..d17b99b6b43
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0013-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/
+Location: /cookie-parser-result/foo/baz?path0013
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test
new file mode 100644
index 00000000000..a953e707b3b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0014-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/
+Location: /cookie-parser-result/foo/qux?path0014
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test
new file mode 100644
index 00000000000..253a9bb2fcd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0015-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux/
+Location: /cookie-parser-result/foo/qux/?path0015
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test
new file mode 100644
index 00000000000..433faeb9120
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0016-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/
+Location: /cookie-parser-result/foo/qux?path0016
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test
new file mode 100644
index 00000000000..a602d7ca6fe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0017-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/
+Location: /cookie-parser-result/foo//qux?path0017
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test
new file mode 100644
index 00000000000..37040dac5d3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0018-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/
+Location: /cookie-parser-result/fooqux?path0018
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test
new file mode 100644
index 00000000000..6d498600a2f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0019-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test
new file mode 100644
index 00000000000..603eded7ebd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0020-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path=
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test
new file mode 100644
index 00000000000..4577c510a42
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0021-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path=/
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test
new file mode 100644
index 00000000000..4aade9e0145
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0022-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path= /
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test
new file mode 100644
index 00000000000..f14d683df97
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0023-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; Path=/cookie-PARSER-result
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test
new file mode 100644
index 00000000000..18a71c875b4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0024-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux?
+Location: /cookie-parser-result/foo/qux?path0024
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test
new file mode 100644
index 00000000000..b6c497b9715
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0025-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux#
+Location: /cookie-parser-result/foo/qux?path0025
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test
new file mode 100644
index 00000000000..ffc3b7a54fa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0026-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/foo/qux;
+Location: /cookie-parser-result/foo/qux?path0026
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test
new file mode 100644
index 00000000000..bd021f33e2c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0027-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path="/cookie-parser-result/foo/qux;"
+Location: /cookie-parser-result/foo/qux?path0027
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test
new file mode 100644
index 00000000000..3bcd6a5c657
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0028-test
@@ -0,0 +1,2 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result/f%6Fo/bar
+Location: /cookie-parser-result/foo/bar?path0028
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected
new file mode 100644
index 00000000000..1022f64a290
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-expected
@@ -0,0 +1 @@
+Cookie: a=b
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test
new file mode 100644
index 00000000000..17bd42f4212
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0029-test
@@ -0,0 +1,2 @@
+Set-Cookie: a=b; path = /cookie-parser-result
+Set-Cookie: x=y; path = /book
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test
new file mode 100644
index 00000000000..e17a2d490b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0030-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path=/dog; path=
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-expected
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test
new file mode 100644
index 00000000000..3b24090b338
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0031-test
@@ -0,0 +1 @@
+Set-Cookie: foo=bar; path=; path=/dog
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected
new file mode 100644
index 00000000000..e7403c4aadc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-expected
@@ -0,0 +1 @@
+Cookie: foo=qux; foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test
new file mode 100644
index 00000000000..db6ceb2ea06
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/path0032-test
@@ -0,0 +1,3 @@
+Set-Cookie: foo=bar; path=/cookie-parser-result
+Set-Cookie: foo=qux; path=/cookie-parser-result/
+Location: /cookie-parser-result/dog?path0032
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test
new file mode 100644
index 00000000000..38b7dd296e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0001-test
@@ -0,0 +1 @@
+Set-Cookie: foo= bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected
new file mode 100644
index 00000000000..9e96a81e3b4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-expected
@@ -0,0 +1 @@
+Cookie: foo="bar"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test
new file mode 100644
index 00000000000..bed691f1809
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0002-test
@@ -0,0 +1 @@
+Set-Cookie: foo="bar"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected
new file mode 100644
index 00000000000..5cc2d467ef7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-expected
@@ -0,0 +1 @@
+Cookie: foo=" bar "
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test
new file mode 100644
index 00000000000..ce1d455201d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0003-test
@@ -0,0 +1 @@
+Set-Cookie: foo=" bar "
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected
new file mode 100644
index 00000000000..400030f6f1d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-expected
@@ -0,0 +1 @@
+Cookie: foo="bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test
new file mode 100644
index 00000000000..c569216520c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0004-test
@@ -0,0 +1 @@
+Set-Cookie: foo="bar;baz"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected
new file mode 100644
index 00000000000..cad285f7086
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-expected
@@ -0,0 +1 @@
+Cookie: foo="bar=baz"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test
new file mode 100644
index 00000000000..514c0f125f1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0005-test
@@ -0,0 +1 @@
+Set-Cookie: foo="bar=baz"
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected
new file mode 100644
index 00000000000..b14d4f69b58
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-expected
@@ -0,0 +1 @@
+Cookie: foo=bar
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test
new file mode 100644
index 00000000000..a939a822914
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/resources/test-files/value0006-test
@@ -0,0 +1 @@
+Set-Cookie: foo = bar ; ttt
diff --git a/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html b/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html
new file mode 100644
index 00000000000..cb09034ae85
--- /dev/null
+++ b/tests/wpt/web-platform-tests/cookies/http-state/value-tests.html
@@ -0,0 +1,41 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset=utf-8>
+ <title>Tests basic cookie setting functionality</title>
+ <meta name=help href="https://tools.ietf.org/html/rfc6265#page-8">
+
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/cookie-http-state-template.js"></script>
+ </head>
+ <body style="background:#EEE">
+ <h3>Log</h3>
+ <div id="log" style="height:50px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>IFrames</h3>
+ <div id="iframes" style="height:170px; overflow-y:scroll; background: #FFF">
+ </div>
+ <h3>Test Results</h3>
+ <script>
+ setup({ explicit_timeout: true });
+
+ const TEST_CASES = [
+ {file: "value0001", name: "value0001"},
+ {file: "value0002", name: "value0002"},
+ {file: "value0003", name: "value0003"},
+ {file: "value0004", name: "value0004"},
+ {file: "value0005", name: "value0005"},
+ {file: "value0006", name: "value0006"},
+ ];
+
+ for (const i in TEST_CASES) {
+ const t = TEST_CASES[i];
+ promise_test(createCookieTest(t.file),
+ t.file + " - " + t.name,
+ { timeout: 3000 });
+ }
+
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html b/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html
deleted file mode 100644
index 425f66fde5c..00000000000
--- a/tests/wpt/web-platform-tests/cookies/secure/create-cookie-http.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/cookies/resources/cookie-helper.sub.js"></script>
-<script>
- //origin is who sets the cookie
- //target is who tries to send cookie
- function create_test(origin, target, expectedStatus, title) {
- promise_test(t => {
- var value = "" + Math.random();
- return resetSecureCookies(origin, value)
- .then(_ => {
- return credFetch(target + "/cookies/resources/list.py")
- .then(r => r.json())
- .then(cookies => verifySecureCookieState(expectedStatus, value, cookies));
- });
- }, title);
- }
-
- //Given an |expectedStatus| and |expectedValue|, assert the |cookies| contains the
- //proper set of cookie names and values.
- function verifySecureCookieState(expectedStatus, expectedValue, cookies) {
- assert_equals(cookies["alone_insecure"], expectedValue, "Insecure cookies are always present");
- if (expectedStatus == SecureStatus.INSECURE_COOKIE_ONLY) {
- assert_equals(cookies["alone_secure"], undefined, "Secure cookies are not present");
- } else if (expectedStatus == SecureStatus.BOTH_COOKIES) {
- assert_equals(cookies["alone_secure"], expectedValue, "Secure cookies are present");
- }
- }
-
- //cookies set by insecure origins
- create_test(INSECURE_ORIGIN, INSECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies cannot be set by insecure origins");
- //create_test(INSECURE_ORIGIN, SECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies cannot be set by insecure origins, even if read from a secure origin");
-
- //This test should set the secure cookie right but not be able to read it from the secure origin
- //create_test(SECURE_ORIGIN, INSECURE_ORIGIN, SecureStatus.INSECURE_COOKIE_ONLY, "Secure cookies should not be read by insecure origins");
- //create_test(SECURE_ORIGIN, SECURE_ORIGIN, SecureStatus.BOTH_COOKIES, "Secure cookies should be set and read by secure domains")
-</script>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html
new file mode 100644
index 00000000000..712bfbaf1e8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/abspos/static-inside-table-cell.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<title>Static position inside table cell</title>
+<link rel="author" title="Aleks Totic" href="atotic@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div id="container" style="position:relative;">
+ <div id="changeMe" style="height:100px;"></div>
+ <div style="display:table-cell;">
+ <div style="position:absolute; width:100px; height:100px; background:green;"></div>
+ <div style="width:100px; height:100px; background:red;"></div>
+ </div>
+</div>
+<script>
+ document.body.offsetTop;
+ document.querySelector('#changeMe').style.height = "auto";
+</script>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html
new file mode 100644
index 00000000000..e97da2169d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001-ref.html
@@ -0,0 +1,7 @@
+<!DOCTYPE html>
+<body>
+ <span>
+ <span style="font-size: 500%">A</span>
+ x
+ </span>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html
new file mode 100644
index 00000000000..77904d80e45
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/anonymous-inline-inherit-001.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<link rel="match" href="anonymous-inline-inherit-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css2/visuren.html#anonymous">
+<link rel="author" href="kojii@chromium.org">
+<!--
+ The text node for "x" should be wrapped in an anonymous inline box,
+ which should have the initial value for non-inherited properties.
+ https://drafts.csswg.org/css2/visuren.html#anonymous
+-->
+<body>
+ <span style="vertical-align: top">
+ <span style="font-size: 500%">A</span>
+ x
+ </span>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html
new file mode 100644
index 00000000000..1fd155e3801
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<style>
+body {
+ font-size: 18px;
+ line-height: 20px;
+}
+.hb {
+ font-size: 12px;
+ vertical-align: top;
+}
+</style>
+<body>
+ <span class="hb">XX</span>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html
new file mode 100644
index 00000000000..3667ced2ca3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/linebox/vertical-align-nested-top-001.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<link rel="match" href="vertical-align-nested-top-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#propdef-vertical-align" />
+<link rel="author" href="kojii@chromium.org">
+<style>
+body {
+ font-size: 18px;
+ line-height: 20px;
+}
+.hb {
+ font-size: 12px;
+ vertical-align: top;
+}
+.g2 {
+ vertical-align: top;
+}
+</style>
+<body>
+ <span class="hb">X<span class="g2">X</span></span>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht
new file mode 100644
index 00000000000..9233b4373e5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/CSS2/positioning/abspos-inline-008.xht
@@ -0,0 +1,17 @@
+<!DOCTYPE HTML>
+<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <title>CSS Test: Absolutely positioned descendant under relative positioned inline with negative offset</title>
+ <link rel="author" title="Tien-Ren Chen" href="mailto:trchen@chromium.org"/>
+ <link rel="help" href="https://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-width"/>
+ <link rel="match" href="../../reference/ref-filled-green-100px-square-only.html"/>
+ </head>
+ <body>
+ <p>Test passes if there is a filled green square.</p>
+ <div style="position:relative; left:100px; width:100px;">
+ <span style="position:relative; left:-100px;">
+ <div style="position:absolute; display:inline-block; width:100px; height:100px; background:green;"></div>
+ </span>
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html b/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html
new file mode 100644
index 00000000000..06108ac800c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/reference/widows-orphans-001-ref.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fragmentation level 3 Test Reference File</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<style>
+div {
+ position: absolute;
+ columns: 2;
+ column-fill: balance-all;
+ column-gap: 0;
+}
+</style>
+<body>
+ <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below.
+
+ <div>X<br>X<br>X<br>X</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html
new file mode 100644
index 00000000000..8da27f0b659
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-001.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fragmentation level 3 Test: widows and block level boxes</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans">
+<link rel="match" href="reference/widows-orphans-001-ref.html">
+<meta name="assert" content="The widows property has no effect on block container boxes that contains only block-level boxes.">
+<meta name="flags" content="">
+<style>
+div p { margin: 0; }
+
+div {
+ columns: 2;
+ column-gap: 0;
+ position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */
+ column-fill: balance-all; /* to make sure it balances as well on paged media */
+
+ widows: 4;
+}
+
+/* If the property applied to block container boxes that contain block-level boxes,
+ it would force the two two-line paragraphs to stick together.*/
+
+</style>
+<body>
+ <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below.
+
+ <div>
+ <p>X<br>X
+ <p>X<br>X
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html
new file mode 100644
index 00000000000..cf9afe7c033
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-002.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fragmentation level 3 Test: widows and line boxes</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans">
+<link rel="match" href="reference/widows-orphans-001-ref.html">
+<meta name="assert" content="The widows property affects block containers that establish an inline formatting context">
+<meta name="flags" content="">
+<style>
+div p { margin: 0; }
+
+div {
+ columns: 4;
+ column-gap: 0;
+ position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */
+ column-fill: balance-all; /* to make sure it balances as well on paged media */
+}
+div p {
+ orphans: 1; /* to avoid interference */
+ widows: 2;
+}
+
+/* The lines of each paragraphs should be kept together if the widows property applies,
+ or spread over the 4 columns if it fails to,
+ or all above one-another in a single column if multicol doesn't work. */
+
+</style>
+<body>
+ <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below.
+
+ <div>
+ <p>X<br>X
+ <p>X<br>X
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html
new file mode 100644
index 00000000000..31114840926
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-003.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fragmentation level 3 Test: orphans and block level boxes</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans">
+<link rel="match" href="reference/widows-orphans-001-ref.html">
+<meta name="assert" content="The orphans property has no effect on block container boxes that contains only block-level boxes.">
+<meta name="flags" content="">
+<style>
+div p { margin: 0; }
+
+div {
+ columns: 2;
+ column-gap: 0;
+ position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */
+ column-fill: balance-all; /* to make sure it balances as well on paged media */
+
+ orphans: 4;
+}
+
+/* If the property applied to block container boxes that contain block-level boxes,
+ it would force the two two-line paragraphs to stick together.*/
+
+</style>
+<body>
+ <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below.
+
+ <div>
+ <p>X<br>X
+ <p>X<br>X
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html
new file mode 100644
index 00000000000..3e226d9e41e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-break/widows-orphans-004.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Fragmentation level 3 Test: orphans and line boxes</title>
+<link rel="author" title="Florian Rivoal" href="https://florian.rivoal.net/">
+<link rel="help" href="https://drafts.csswg.org/css-break/#widows-orphans">
+<link rel="match" href="reference/widows-orphans-001-ref.html">
+<meta name="assert" content="The orphans property affects block containers that establish an inline formatting context">
+<meta name="flags" content="">
+<style>
+div p { margin: 0; }
+
+div {
+ columns: 4;
+ column-gap: 0;
+ position: absolute; /* shrinkwrap. Using an explicit width in 'ch' with a monospace font would be fine as well if all UAs supported 'ch', but some don't. */
+ column-fill: balance-all; /* to make sure it balances as well on paged media */
+}
+div p {
+ widows: 1; /* to avoid interference */
+ orphans: 2;
+}
+
+/* The lines of each paragraphs should be kept together if the orphans property applies,
+ or spread over the 4 columns if it fails to,
+ or all above one-another in a single column if multicol doesn't work. */
+
+</style>
+<body>
+ <p>Test passes if there are 4 “X” characters <strong>arranged in a 2 by 2 square</strong> below.
+
+ <div>
+ <p>X<br>X
+ <p>X<br>X
+ </div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html
index 8eb67b5943f..12f9b989fd2 100644
--- a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html
+++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-style-counters-003-ref.html
@@ -13,6 +13,6 @@
}
</style>
- <p>Test passes if there is the digit 20.
+ <p>Test passes if there is the number 20.
<div>20</div>
diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html
new file mode 100644
index 00000000000..a96994a8afe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-001.html
@@ -0,0 +1,35 @@
+<!doctype html>
+<title>CSS Test: Blurs are correctly clipped by an overflow: hidden ancestor</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-blur">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#valdef-overflow-hidden">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459065">
+<link rel="match" href="blur-clip-stacking-context-ref.html">
+<style>
+ #cover, #clip, #blur {
+ width: 100px;
+ height: 100px;
+ }
+
+ #cover, #clip {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ }
+
+ #cover {
+ background: green;
+ }
+
+ #clip {
+ overflow: hidden;
+ background: red;
+ }
+
+ #blur {
+ background: blue;
+ filter: blur(20px);
+ }
+</style>
+<div id="clip"><div id="blur"></div></div>
+<div id="cover"></div>
diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html
new file mode 100644
index 00000000000..0473f129494
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-002.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<title>CSS Test: Blurs on an overflow: hidden element are correctly not-clipped to the padding box</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#funcdef-filter-blur">
+<link rel="help" href="https://drafts.csswg.org/css-overflow-3/#valdef-overflow-hidden">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1459065">
+<link rel="mismatch" href="blur-clip-stacking-context-ref.html">
+<style>
+ #cover, #clip {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ width: 100px;
+ height: 100px;
+ }
+
+ #cover {
+ background: green;
+ }
+
+ #clip {
+ overflow: hidden;
+ background: blue;
+ filter: blur(20px);
+ }
+</style>
+<div id="clip"></div>
+<div id="cover"></div>
diff --git a/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html
new file mode 100644
index 00000000000..82b907334fd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-filter/blur-clip-stacking-context-ref.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<style>
+ div {
+ position: absolute;
+ top: 10px;
+ left: 10px;
+ background: green;
+ width: 100px;
+ height: 100px;
+ }
+</style>
+<div></div>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html
index b35b16d648d..79dd1d43506 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-001.html
@@ -23,14 +23,17 @@
.columns { grid-template-columns: 100px 100px; }
.rows { grid-template-rows: 100px 100px; }
-.min-content-columns { grid-auto-columns: min-content; }
-.max-content-columns { grid-auto-columns: max-content; }
-.fit-content-columns { grid-auto-columns: fit-content; }
-.flex-columns { grid-auto-columns: 1fr; }
-.min-content-rows { grid-auto-rows: min-content; }
-.max-content-rows { grid-auto-rows: max-content; }
-.fit-content-rows { grid-auto-rows: fit-content; }
-.flex-rows { grid-auto-rows: 1fr; }
+.min-content-columns { grid-template-columns: min-content; }
+.max-content-columns { grid-template-columns: max-content; }
+.fit-content-columns { grid-template-columns: fit-content; }
+.min-content-rows { grid-template-rows: min-content; }
+.max-content-rows { grid-template-rows: max-content; }
+.fit-content-rows { grid-template-rows: fit-content; }
+
+.flex-columns { grid-template-columns: 1fr; }
+.max-flex-columns { grid-template-columns: minmax(0px, 1fr); }
+.flex-rows { grid-template-rows: 1fr; }
+.max-flex-rows { grid-template-rows: minmax(0px, 1fr); }
.height25 { height: 25px; }
.height50 { height: 50px; }
@@ -47,82 +50,113 @@
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.inline-grid')">
-<pre>auto-sized rows - items with relative height</pre>
-
-<div class="inline-grid alignItemsBaseline columns">
- <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div>
- <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div>
- <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div>
+<div style="height: 125px">
+ <pre>auto-sized rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns">
+ <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>min-content-sized rows - items with relative height</pre>
-
-<div class="inline-grid alignItemsBaseline columns min-content-rows">
- <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
- <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+<div style="height: 200px">
+ <pre>min-content-sized rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns min-content-rows">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>max-content-sized rows - items with relative height</pre>
-
-<div class="inline-grid alignItemsBaseline columns max-content-rows">
- <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
- <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+<div style="height: 200px">
+ <pre>max-content-sized rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns max-content-rows">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>fit-content-sized rows - items with relative height</pre>
-
-<div class="inline-grid alignItemsBaseline columns fit-content-rows">
- <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
- <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+<div style="height: 200px">
+ <pre>fit-content-sized rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns fit-content-rows">
+ <div class="firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="80">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="160"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="80" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>flexible-sized rows - items with relative height</pre>
-
-<div class="inline-grid alignItemsBaseline columns flex-rows">
- <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div>
- <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div>
- <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div>
+<div style="height: 125px">
+ <pre>flexible-sized rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns flex-rows">
+ <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>auto-sized columns - items with relative width</pre>
-
-<div class="inline-grid justifyItemsBaseline rows">
- <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
- <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div>
- <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+<div style="height: 125px">
+ <pre>flex max-function rows - items with relative height</pre>
+ <div class="inline-grid alignItemsBaseline columns max-flex-rows">
+ <div class="firstRowFirstColumn height50" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="50"></div>
+ <div class="firstRowSecondColumn height200Percent" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="100"></div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="50" data-expected-width="200" data-expected-height="25"></div>
+ </div>
</div>
-<pre>min-content-sized columns - items with relative width</pre>
-
-<div class="inline-grid justifyItemsBaseline rows min-content-columns">
- <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
- <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+<div style="height: 250px">
+ <pre>auto-sized columns - items with relative width</pre>
+ <div class="inline-grid justifyItemsBaseline rows">
+ <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
</div>
-<pre>max-content-sized columns - items with relative width</pre>
-
-<div class="inline-grid justifyItemsBaseline rows max-content-columns">
- <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
- <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+<div style="height: 250px">
+ <pre>min-content-sized columns - items with relative width</pre>
+ <div class="inline-grid justifyItemsBaseline rows min-content-columns">
+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
</div>
-<pre>fit-content-sized columns - items with relative width</pre>
+<div style="height: 250px">
+ <pre>max-content-sized columns - items with relative width</pre>
+ <div class="inline-grid justifyItemsBaseline rows max-content-columns">
+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
+</div>
-<div class="inline-grid justifyItemsBaseline rows fit-content-columns">
- <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
- <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+<div style="height: 250px">
+ <pre>fit-content-sized columns - items with relative width</pre>
+ <div class="inline-grid justifyItemsBaseline rows fit-content-columns">
+ <div class="firstRowFirstColumn verticalRL" data-offset-x="0" data-offset-y="0" data-expected-width="80" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="160" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="80" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
</div>
-<pre>flexible-sized columns - items with relative width</pre>
+<div style="height: 250px">
+ <pre>flexible-sized columns - items with relative width</pre>
+ <div class="inline-grid justifyItemsBaseline rows flex-columns">
+ <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
+</div>
-<div class="inline-grid justifyItemsBaseline rows flex-columns">
- <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
- <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="0" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div>
- <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+<div style="height: 250px">
+ <pre>flex max-function columns - items with relative width<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre>
+ <!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+ <div class="inline-grid justifyItemsBaseline rows max-flex-columns">
+ <div class="firstRowFirstColumn verticalRL width50" data-offset-x="0" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
+ <div class="secondRowFirstColumn verticalRL width200Percent" data-offset-x="-50" data-offset-y="100" data-expected-width="100" data-expected-height="100"></div>
+ <div class="firstRowSpanning2AutoColumn verticalRL width25" data-offset-x="50" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ </div>
</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html
index 4d0f506c7b6..3232913cb13 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-002.html
@@ -23,14 +23,17 @@
.columns { grid-template-columns: 100px 100px; }
.rows { grid-template-rows: 100px 100px; }
-.min-content-columns { grid-auto-columns: min-content; }
-.max-content-columns { grid-auto-columns: max-content; }
-.fit-content-columns { grid-auto-columns: fit-content; }
-.flex-columns { grid-auto-columns: 1fr; }
-.min-content-rows { grid-auto-rows: min-content; }
-.max-content-rows { grid-auto-rows: max-content; }
-.fit-content-rows { grid-auto-rows: fit-content; }
-.flex-rows { grid-auto-rows: 1fr; }
+.min-content-columns { grid-template-columns: min-content; }
+.max-content-columns { grid-template-columns: max-content; }
+.fit-content-columns { grid-template-columns: fit-content; }
+.flex-columns { grid-template-columns: 1fr; }
+.max-flex-columns { grid-template-columns: minmax(0px, 1fr); }
+
+.min-content-rows { grid-template-rows: min-content; }
+.max-content-rows { grid-template-rows: max-content; }
+.fit-content-rows { grid-template-rows: fit-content; }
+.flex-rows { grid-template-rows: 1fr; }
+.max-flex-rows { grid-template-rows: minmax(0px, 1fr); }
.height25 { height: 25px; }
.height50 { height: 50px; }
@@ -50,7 +53,6 @@
<body onload="checkLayout('.inline-grid')">
<pre>auto-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre>
-
<div class="inline-grid alignItemsBaseline columns height200">
<div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
<div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="175">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -58,7 +60,6 @@
</div>
<pre>min-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre>
-
<div class="inline-grid alignItemsBaseline columns min-content-rows">
<div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
<div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="75">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -66,23 +67,35 @@
</div>
<pre>max-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre>
-
<div class="inline-grid alignItemsBaseline columns max-content-rows">
- <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
- <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
<div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div>
</div>
<pre>fit-content-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre>
-
<div class="inline-grid alignItemsBaseline columns fit-content-rows">
- <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
- <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
<div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div>
</div>
-<pre>auto-sized columns - horizontal grid item - row-axis baseline</pre>
+<pre>flex-sized rows - horizonal grid and verticalLR item - column-axis baseline</pre>
+<div class="inline-grid alignItemsBaseline columns flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="0" data-expected-width="100" data-expected-height="75">É</div>
+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div>
+</div>
+<pre>max-flex-sized rows - horizonal grid and verticalLR item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre>
+<!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+<div class="inline-grid alignItemsBaseline columns max-flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingBottom" data-offset-x="0" data-offset-y="376" data-expected-width="100" data-expected-height="75">É</div>
+ <div class="firstRowSecondColumn verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="416">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 height25" data-offset-x="0" data-offset-y="416" data-expected-width="200" data-expected-height="25"></div>
+</div>
+
+<pre>auto-sized columns - horizontal grid item - row-axis baseline</pre>
<div class="inline-grid justifyItemsBaseline rows width200">
<div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -90,7 +103,6 @@
</div>
<pre>min-content-sized columns - horizontal grid item - row-axis baseline</pre>
-
<div class="inline-grid justifyItemsBaseline rows min-content-columns">
<div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -98,7 +110,6 @@
</div>
<pre>max-content-sized columns - horizontal grid item - row-axis baseline</pre>
-
<div class="inline-grid justifyItemsBaseline rows max-content-columns">
<div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -106,15 +117,28 @@
</div>
<pre>fit-content-sized columns - horizontal grid item - row-axis baseline</pre>
-
<div class="inline-grid justifyItemsBaseline rows fit-content-columns">
<div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
<div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
-<pre>auto-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
+<pre>flex-sized columns - horizontal grid item - row-axis baseline</pre>
+<div class="inline-grid justifyItemsBaseline rows flex-columns">
+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+
+<pre>max-flex-sized columns - horizontal grid item - row-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre>
+<!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+<div class="inline-grid justifyItemsBaseline rows max-flex-columns">
+ <div class="firstRowFirstColumn bigFont verticalLR paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="secondRowFirstColumn" data-offset-x="35" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="firstRowSpanning2AutoColumn width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+<pre>auto-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
<div class="inline-grid verticalLR alignItemsBaseline columns width200">
<div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -122,7 +146,6 @@
</div>
<pre>min-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalLR alignItemsBaseline columns min-content-rows">
<div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -130,7 +153,6 @@
</div>
<pre>max-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalLR alignItemsBaseline columns max-content-rows">
<div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
@@ -138,41 +160,68 @@
</div>
<pre>fit-content-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalLR alignItemsBaseline columns fit-content-rows">
<div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
<div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
<div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
-<pre>auto-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
+<pre>flex-sized rows - verticalLR grid and horizontal item - column-axis baseline</pre>
+<div class="inline-grid verticalLR alignItemsBaseline columns flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="0" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+<pre>max-flex-sized rows - verticalLR grid and horizontal item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre>
+<!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+<div class="inline-grid verticalLR alignItemsBaseline columns max-flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="0" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="35" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="416" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+
+<pre>auto-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
<div class="inline-grid verticalRL alignItemsBaseline columns width200">
- <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
- <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="125" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="175" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
<pre>min-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalRL alignItemsBaseline columns min-content-rows">
- <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="25" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
- <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="25" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="75" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
<pre>max-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalRL alignItemsBaseline columns max-content-rows">
- <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
- <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
<pre>fit-content-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
-
<div class="inline-grid verticalRL alignItemsBaseline columns fit-content-rows">
- <div class="firstRowFirstColumn bigFont paddingRight" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
- <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
- <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+
+<pre>flex-sized rows - verticalRL grid and horizontal item - column-axis baseline</pre>
+<div class="inline-grid verticalRL alignItemsBaseline columns flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="366" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
</div>
+
+<pre>max-flex-sized rows - verticalRL grid and horizontal item - column-axis baseline<br>baseline is not applied initially, but orthogonal items force repeating the track sizing and height is not indefinite in that phase.</pre>
+<!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+<div class="inline-grid verticalRL alignItemsBaseline columns max-flex-rows">
+ <div class="firstRowFirstColumn bigFont paddingLeft" data-offset-x="-10" data-offset-y="0" data-expected-width="75" data-expected-height="100">É</div>
+ <div class="firstRowSecondColumn horizontalTB" data-offset-x="25" data-offset-y="100" data-expected-width="416" data-expected-height="100">ÉÉ É ÉÉ ÉÉÉÉ É ÉÉ ÉÉÉ ÉÉ É</div>
+ <div class="autoRowAutoColumnSpanning2 width25" data-offset-x="0" data-offset-y="0" data-expected-width="25" data-expected-height="200"></div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html b/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html
new file mode 100644
index 00000000000..c968a0875cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/inline-block-and-column-span-all.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<title>Combining column-span and inline-block on the same element</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-multicol-1/#column-span" title="6.1. column-span">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<meta name="assert" content="column-span:all only applies to block-level elements, i.e. not inline-blocks, for instance">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="columns:4; column-gap:0; width:400px;">
+ <div style="column-span:all; display:inline-block;">
+ <div style="float:left; width:100px; height:50px; background:green;"></div>
+ <div style="float:left; width:100px; height:50px; background:green;"></div>
+ </div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html b/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html
new file mode 100644
index 00000000000..ce8011b17f8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/intrinsic-size-001.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<title>Intrinsic size computation with specified padding</title>
+<link rel="author" title="Googld Inc." href="https://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-multicol/#pseudo-algorithm " title="3.4. Pseudo-algorithm">
+<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div style="float:left; columns:2; height:40px; padding:30px; column-gap:0; background:green;">
+ <div style="width:20px;"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html
index 97c1975cf13..5f0b7eb50c2 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/property-cascade.html
@@ -1,5 +1,4 @@
<!DOCTYPE html>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#the-registerproperty-function" />
<meta name="assert" content="Verifies that registering a propety does not affect the cascade" />
<script src="/resources/testharness.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
index 69ebf7a13d8..eb2d8549ba6 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/typedom.tentative.html
@@ -1,5 +1,4 @@
<!DOCTYPE html>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<!-- TODO(andruud): Add Typed OM details to spec and link to it here. -->
<link rel="help" href="https://github.com/w3c/css-houdini-drafts/pull/783" />
<meta name="assert" content="Verifies that registered custom properties interact correctly with CSS Typed OM" />
@@ -341,99 +340,189 @@ test_style_property_map_set({
test_style_property_map_set({
syntax: '<angle>',
initialValue: '0deg',
- shouldAccept: [CSS.deg(42), CSS.turn(2)],
- shouldReject: [unparsed('42deg'), CSS.px(15)],
+ shouldAccept: [CSS.deg(42), CSS.turn(2), '42deg'],
+ shouldReject: [unparsed('42deg'), CSS.px(15), '50px'],
});
test_style_property_map_set({
syntax: '<custom-ident>',
initialValue: 'none',
- shouldAccept: [keyword('foo')],
- shouldReject: [unparsed('foo'), CSS.px(15)],
+ shouldAccept: [keyword('foo'), 'foo'],
+ shouldReject: [unparsed('foo'), CSS.px(15), '15px'],
});
test_style_property_map_set({
syntax: '<image>',
initialValue: 'url(a)',
- shouldAccept: [url_image('url(b)')],
- shouldReject: [unparsed('url(b)'), CSS.px(100)],
+ shouldAccept: [url_image('url(b)'), 'url(b)'],
+ shouldReject: [unparsed('url(b)'), CSS.px(100), '50px'],
});
test_style_property_map_set({
syntax: '<integer>',
initialValue: '0',
- shouldAccept: [CSS.number(1), CSS.number(-42)],
- shouldReject: [unparsed('42'), CSS.px(100)],
+ shouldAccept: [CSS.number(1), CSS.number(-42), '1', '-42'],
+ shouldReject: [unparsed('42'), CSS.px(100), '50px'],
});
test_style_property_map_set({
syntax: '<length-percentage>',
initialValue: '0px',
- shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1)],
- shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1)],
+ shouldAccept: [CSS.percent(10), CSS.px(1), CSS.em(1), '10px', '10%'],
+ shouldReject: [unparsed('10%'), unparsed('10px'), CSS.dpi(1), 'url(b)'],
});
test_style_property_map_set({
syntax: '<length>',
initialValue: '0px',
- shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20))],
- shouldReject: [unparsed('10px'), CSS.percent(1)],
+ shouldAccept: [CSS.px(10), CSS.em(10), CSS.vh(200), sum(CSS.px(10), CSS.em(20)), '10em', 'calc(10px + 10em)'],
+ shouldReject: [unparsed('10px'), CSS.percent(1), 'url(b)'],
});
test_style_property_map_set({
syntax: '<number>',
initialValue: '0',
- shouldAccept: [CSS.number(1337), CSS.number(-42.5)],
- shouldReject: [unparsed('42'), CSS.px(15)],
+ shouldAccept: [CSS.number(1337), CSS.number(-42.5), '1337', '-42.5'],
+ shouldReject: [unparsed('42'), CSS.px(15), '#fef'],
});
test_style_property_map_set({
syntax: '<percentage>',
initialValue: '0%',
- shouldAccept: [CSS.percent(10)],
- shouldReject: [unparsed('10%'), CSS.px(1)],
+ shouldAccept: [CSS.percent(10), '10%'],
+ shouldReject: [unparsed('10%'), CSS.px(1), '#fef'],
});
test_style_property_map_set({
syntax: '<resolution>',
initialValue: '0dpi',
- shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50)],
- shouldReject: [unparsed('42'), CSS.px(15)],
+ shouldAccept: [CSS.dpi(100), CSS.dpcm(10), CSS.dppx(50), '100dpi'],
+ shouldReject: [unparsed('42'), CSS.px(15), '#fef'],
});
test_style_property_map_set({
syntax: '<time>',
initialValue: '0s',
- shouldAccept: [CSS.s(42), CSS.ms(16)],
- shouldReject: [unparsed('42s'), CSS.px(15)],
+ shouldAccept: [CSS.s(42), CSS.ms(16), '16ms'],
+ shouldReject: [unparsed('42s'), CSS.px(15), '#fef'],
});
test_style_property_map_set({
syntax: '<url>',
initialValue: 'url(a)',
shouldAccept: [url_image('url(b)')],
- shouldReject: [unparsed('url(b)'), CSS.px(100)],
+ shouldReject: [unparsed('url(b)'), CSS.px(100), '#fef'],
});
test_style_property_map_set({
syntax: '<transform-list>',
initialValue: 'translateX(0px)',
shouldAccept: [CSSStyleValue.parse('transform', 'translateX(10px)')],
- shouldReject: [unparsed('transformX(10px'), CSS.px(100)],
+ shouldReject: [unparsed('transformX(10px'), CSS.px(100), '#fef'],
});
test_style_property_map_set({
syntax: 'none | thing | THING',
initialValue: 'none',
- shouldAccept: [keyword('thing'), keyword('THING')],
- shouldReject: [unparsed('thing'), CSS.px(15), keyword('notathing')],
+ shouldAccept: [keyword('thing'), keyword('THING'), 'thing'],
+ shouldReject: [unparsed('thing'), CSS.px(15), keyword('notathing'), 'notathing'],
});
test_style_property_map_set({
syntax: '<angle> | <length>',
initialValue: '0deg',
- shouldAccept: [CSS.deg(42), CSS.turn(2), CSS.px(10), CSS.em(10)],
- shouldReject: [unparsed('42deg'), unparsed('20px'), CSS.s(1)],
+ shouldAccept: [CSS.deg(42), CSS.turn(2), CSS.px(10), CSS.em(10), '10deg', '10px'],
+ shouldReject: [unparsed('42deg'), unparsed('20px'), CSS.s(1), '#fef'],
});
+// CSSStyleValue.parse/parseAll
+
+function assert_parsed_type(prop, value, expected) {
+ let parse_value = CSSStyleValue.parse(prop, value);
+ let parse_all_value = CSSStyleValue.parseAll(prop, value);
+
+ assert_true(parse_value instanceof expected);
+ assert_true(parse_all_value.every(x => x instanceof expected))
+
+ // If CSSStyleValue is expected, the values must be exactly CSSStyleValue.
+ // This is because CSSUnparsedValues are also CSSStyleValues, which would be
+ // wrong in this case.
+ if (expected == CSSStyleValue) {
+ assert_equals(parse_value.constructor, CSSStyleValue);
+ assert_true(parse_all_value.every(x => x.constructor == CSSStyleValue));
+ }
+}
+
+test(function(){
+ assert_parsed_type(gen_prop('*', 'if(){}'), 'while(){}', CSSUnparsedValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnparsedValue for *');
+
+test(function(){
+ assert_parsed_type(gen_prop('<angle> | fail', 'fail'), '42deg', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <angle>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<color> | fail', 'fail'), '#fefefe', CSSStyleValue);
+}, 'CSSStyleValue.parse[All] returns CSSStyleValue for <color>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<custom-ident> | <length>', '10px'), 'none', CSSKeywordValue);
+}, 'CSSStyleValue.parse[All] returns CSSKeywordValue for <custom-ident>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<image> | fail', 'fail'), 'url(thing.png)', CSSImageValue);
+}, 'CSSStyleValue.parse[All] returns CSSImageValue for <image> [url]');
+
+test(function(){
+ assert_parsed_type(gen_prop('<integer> | fail', 'fail'), '100', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <integer>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), '10%', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length-percentage> [%]');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), '10px', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length-percentage> [px]');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length-percentage> | fail', 'fail'), 'calc(10px + 10%)', CSSMathSum);
+}, 'CSSStyleValue.parse[All] returns CSSMathSum for <length-percentage> [px + %]');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length> | fail', 'fail'), '10px', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <length>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<number> | fail', 'fail'), '42', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <number>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<percentage> | fail', 'fail'), '10%', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <percentage>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<resolution> | fail', 'fail'), '300dpi', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <resolution>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<time> | fail', 'fail'), '42s', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns CSSUnitValue for <time>');
+
+test(function(){
+ assert_parsed_type(gen_prop('<url> | fail', 'fail'), 'url(a)', CSSStyleValue);
+}, 'CSSStyleValue.parse[All] returns CSSStyleValue for <url>');
+
+test(function(){
+ assert_parsed_type(gen_prop('thing1 | THING2 | <url>', 'url(fail)'), 'THING2', CSSKeywordValue);
+}, 'CSSStyleValue.parse[All] returns CSSKeywordValue for ident');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length>+ | fail', 'fail'), '10px 20px', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>+');
+
+test(function(){
+ assert_parsed_type(gen_prop('<length># | fail', 'fail'), '10px, 20px', CSSUnitValue);
+}, 'CSSStyleValue.parse[All] returns list of CSSUnitValues for <length>#');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html
index c242640f2b9..b5c996a4429 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html
@@ -1,5 +1,4 @@
<!DOCTYPE html>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#dependency-cycles-via-relative-units" />
<meta name="assert" content="This test verifies that reference cycles via units are detected" />
<script src="/resources/testharness.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html
index 6e7c008a58c..d9327896496 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/url-resolution.html
@@ -1,5 +1,4 @@
<!DOCTYPE html>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<link rel="help" href="https://drafts.css-houdini.org/css-properties-values-api-1/#relative-urls" />
<meta name="assert" content="This test verifies that relative URLs in registered properties resolve correctly" />
<script src="/resources/testharness.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html b/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html
index 65678526817..0a5e4cb0589 100644
--- a/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html
+++ b/tests/wpt/web-platform-tests/css/cssom/computed-style-set-property.html
@@ -1,6 +1,5 @@
<!DOCTYPE html>
<title>NoModificationAllowedError when mutating read only properties</title>
-<link rel="author" title="Anders Hartvoll Ruud" href="andruud@chromium.org">
<link rel="help" href="https://www.w3.org/TR/cssom-1/#dom-cssstyledeclaration-setpropertyvalue">
<meta name="assert" content="This test verifies that NoModificationAllowedError is thrown when mutating read only properties" />
<script src="/resources/testharness.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html b/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html
index 2178ba37a95..44af6737e3e 100644
--- a/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html
+++ b/tests/wpt/web-platform-tests/css/cssom/shorthand-serialization.html
@@ -58,6 +58,20 @@
assert_equals(testElem.style.margin, "20px");
assert_equals(testElem.style.cssText, "margin: 20px;")
}, "Shorthand serialization after setting");
+
+ test(function() {
+ const testElem = document.getElementById("test");
+ testElem.style.cssText = "margin: initial;";
+ assert_equals(testElem.style.margin, "initial");
+ assert_equals(testElem.style.cssText, "margin: initial;");
+ }, "Shorthand serialization with 'initial' value.");
+
+ test(function() {
+ const testElem = document.getElementById("test");
+ testElem.style.setProperty("margin-top", "initial", "important");
+ assert_equals(testElem.style.margin, "");
+ assert_equals(testElem.style.cssText, "margin-top: initial !important; margin-right: initial; margin-bottom: initial; margin-left: initial;");
+ }, "Shorthand serialization with 'initial' value, one longhand with important flag.");
</script>
</body>
</html>
diff --git a/tests/wpt/web-platform-tests/compat/webkit-pseudo-element.html b/tests/wpt/web-platform-tests/css/selectors/webkit-pseudo-element.html
index 8f69477489a..8b4adddba8f 100644
--- a/tests/wpt/web-platform-tests/compat/webkit-pseudo-element.html
+++ b/tests/wpt/web-platform-tests/css/selectors/webkit-pseudo-element.html
@@ -2,7 +2,7 @@
<title>WebKit-prefixed pseudo-elements</title>
<link rel="author" title="Xidorn Quan" href="https://www.upsuper.org">
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
-<link rel="help" href="https://compat.spec.whatwg.org/#css-webkit-pseudo-elements">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/#compat">
<meta name="assert" content="WebKit-prefixed pseudo-elements should always be valid">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html b/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html
new file mode 100644
index 00000000000..80ec44f9def
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/selectors/x-pseudo-element.html
@@ -0,0 +1,22 @@
+<!doctype html>
+<title>CSS Test: 'x-' prefixed pseudo-elements don't parse correctly</title>
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<link rel="author" title="Mozilla" href="https://www.mozilla.org">
+<link rel="help" href="https://drafts.csswg.org/selectors-4/">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<style>
+ p {
+ color: green;
+ }
+ ::x-something-nobody-would-think-of, p {
+ color: red;
+ }
+</style>
+<p>Should be green
+<script>
+ test(function() {
+ let p = document.querySelector('p');
+ assert_equals(getComputedStyle(p).color, "rgb(0, 128, 0)");
+ }, "x-prefixed pseudo-elements should make the whole rule invalid")
+</script>
diff --git a/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js b/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js
new file mode 100644
index 00000000000..f17e149ed9e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/backpressure.any.js
@@ -0,0 +1,60 @@
+// META: global=worker
+
+'use strict';
+
+const classes = [
+ {
+ constructor: TextDecoderStream,
+ input: new Uint8Array([65])
+ },
+ {
+ constructor: TextEncoderStream,
+ input: 'A'
+ }
+];
+
+const microtasksRun = () => new Promise(resolve => step_timeout(resolve, 0));
+
+for (const streamClass of classes) {
+ promise_test(async () => {
+ const stream = new streamClass.constructor();
+ const writer = stream.writable.getWriter();
+ const reader = stream.readable.getReader();
+ const events = [];
+ await microtasksRun();
+ const writePromise = writer.write(streamClass.input);
+ writePromise.then(() => events.push('write'));
+ await microtasksRun();
+ events.push('paused');
+ await reader.read();
+ events.push('read');
+ await writePromise;
+ assert_array_equals(events, ['paused', 'read', 'write'],
+ 'write should happen after read');
+ }, 'write() should not complete until read relieves backpressure for ' +
+ `${streamClass.constructor.name}`);
+
+ promise_test(async () => {
+ const stream = new streamClass.constructor();
+ const writer = stream.writable.getWriter();
+ const reader = stream.readable.getReader();
+ const events = [];
+ await microtasksRun();
+ const readPromise1 = reader.read();
+ readPromise1.then(() => events.push('read1'));
+ const writePromise1 = writer.write(streamClass.input);
+ const writePromise2 = writer.write(streamClass.input);
+ writePromise1.then(() => events.push('write1'));
+ writePromise2.then(() => events.push('write2'));
+ await microtasksRun();
+ events.push('paused');
+ const readPromise2 = reader.read();
+ readPromise2.then(() => events.push('read2'));
+ await Promise.all([writePromise1, writePromise2,
+ readPromise1, readPromise2]);
+ assert_array_equals(events, ['read1', 'write1', 'paused', 'read2',
+ 'write2'],
+ 'writes should not happen before read2');
+ }, 'additional writes should wait for backpressure to be relieved for ' +
+ `class ${streamClass.constructor.name}`);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js
new file mode 100644
index 00000000000..101fb3aeb61
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-bad-chunks.any.js
@@ -0,0 +1,72 @@
+// META: global=worker
+
+'use strict';
+
+const badChunks = [
+ {
+ name: 'undefined',
+ value: undefined
+ },
+ {
+ name: 'null',
+ value: null
+ },
+ {
+ name: 'numeric',
+ value: 3.14
+ },
+ {
+ name: 'object, not BufferSource',
+ value: {}
+ },
+ {
+ name: 'array',
+ value: [65]
+ },
+ {
+ name: 'detached ArrayBufferView',
+ value: (() => {
+ const u8 = new Uint8Array([65]);
+ const ab = u8.buffer;
+ const mc = new MessageChannel();
+ mc.port1.postMessage(ab, [ab]);
+ return u8;
+ })()
+ },
+ {
+ name: 'detached ArrayBuffer',
+ value: (() => {
+ const u8 = new Uint8Array([65]);
+ const ab = u8.buffer;
+ const mc = new MessageChannel();
+ mc.port1.postMessage(ab, [ab]);
+ return ab;
+ })()
+ },
+ {
+ name: 'SharedArrayBuffer',
+ // Use a getter to postpone construction so that all tests don't fail where
+ // SharedArrayBuffer is not yet implemented.
+ get value() {
+ return new SharedArrayBuffer();
+ }
+ },
+ {
+ name: 'shared Uint8Array',
+ get value() {
+ new Uint8Array(new SharedArrayBuffer())
+ }
+ }
+];
+
+for (const chunk of badChunks) {
+ promise_test(async t => {
+ const tds = new TextDecoderStream();
+ const reader = tds.readable.getReader();
+ const writer = tds.writable.getWriter();
+ const writePromise = writer.write(chunk.value);
+ const readPromise = reader.read();
+ await promise_rejects(t, new TypeError(), writePromise, 'write should reject');
+ await promise_rejects(t, new TypeError(), readPromise, 'read should reject');
+ }, `chunk of type ${chunk.name} should error the stream`);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js
new file mode 100644
index 00000000000..cbe26d71b13
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-ignore-bom.any.js
@@ -0,0 +1,38 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+const cases = [
+ {encoding: 'utf-8', bytes: [0xEF, 0xBB, 0xBF, 0x61, 0x62, 0x63]},
+ {encoding: 'utf-16le', bytes: [0xFF, 0xFE, 0x61, 0x00, 0x62, 0x00, 0x63, 0x00]},
+ {encoding: 'utf-16be', bytes: [0xFE, 0xFF, 0x00, 0x61, 0x00, 0x62, 0x00, 0x63]}
+];
+const BOM = '\uFEFF';
+
+// |inputChunks| is an array of chunks, each represented by an array of
+// integers. |ignoreBOM| is true or false. The result value is the output of the
+// pipe, concatenated into a single string.
+async function pipeAndAssemble(inputChunks, encoding, ignoreBOM) {
+ const chunksAsUint8 = inputChunks.map(values => new Uint8Array(values));
+ const readable = readableStreamFromArray(chunksAsUint8);
+ const outputArray = await readableStreamToArray(readable.pipeThrough(
+ new TextDecoderStream(encoding, {ignoreBOM})));
+ return outputArray.join('');
+}
+
+for (const testCase of cases) {
+ for (let splitPoint = 0; splitPoint < 4; ++splitPoint) {
+ promise_test(async () => {
+ const inputChunks = [testCase.bytes.slice(0, splitPoint),
+ testCase.bytes.slice(splitPoint)];
+ const withIgnoreBOM =
+ await pipeAndAssemble(inputChunks, testCase.encoding, true);
+ assert_equals(withIgnoreBOM, BOM + 'abc', 'BOM should be preserved');
+
+ const withoutIgnoreBOM =
+ await pipeAndAssemble(inputChunks, testCase.encoding, false);
+ assert_equals(withoutIgnoreBOM, 'abc', 'BOM should be stripped')
+ }, `ignoreBOM should work for encoding ${testCase.encoding}, split at ` +
+ `character ${splitPoint}`);
+ }
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js
new file mode 100644
index 00000000000..80dd016d491
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-incomplete-input.any.js
@@ -0,0 +1,24 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+'use strict';
+
+const inputBytes = [229];
+
+promise_test(async () => {
+ const input = readableStreamFromArray([new Uint8Array(inputBytes)]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, ['\uFFFD'], 'array should have one element');
+}, 'incomplete input with error mode "replacement" should end with a ' +
+ 'replacement character');
+
+promise_test(async t => {
+ const input = readableStreamFromArray([new Uint8Array(inputBytes)]);
+ const output = input.pipeThrough(new TextDecoderStream(
+ 'utf-8', {fatal: true}));
+ const reader = output.getReader();
+ await promise_rejects(t, new TypeError(), reader.read(),
+ 'read should reject');
+}, 'incomplete input with error mode "fatal" should error the stream');
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js
new file mode 100644
index 00000000000..7f39cdc04ca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-non-utf8.any.js
@@ -0,0 +1,77 @@
+// META: global=worker
+
+'use strict';
+
+// The browser is assumed to use the same implementation as for TextDecoder, so
+// this file don't replicate the exhaustive checks it has. It is just a smoke
+// test that non-UTF-8 encodings work at all.
+
+const encodings = [
+ {
+ name: 'UTF-16BE',
+ value: [108, 52],
+ expected: "\u{6c34}",
+ invalid: [0xD8, 0x00]
+ },
+ {
+ name: 'UTF-16LE',
+ value: [52, 108],
+ expected: "\u{6c34}",
+ invalid: [0x00, 0xD8]
+ },
+ {
+ name: 'Shift_JIS',
+ value: [144, 133],
+ expected: "\u{6c34}",
+ invalid: [255]
+ },
+ {
+ name: 'ISO-8859-14',
+ value: [100, 240, 114],
+ expected: "d\u{0175}r",
+ invalid: undefined // all bytes are treated as valid
+ }
+];
+
+for (const encoding of encodings) {
+ promise_test(async () => {
+ const stream = new TextDecoderStream(encoding.name);
+ const reader = stream.readable.getReader();
+ const writer = stream.writable.getWriter();
+ const writePromise = writer.write(new Uint8Array(encoding.value));
+ const {value, done} = await reader.read();
+ assert_false(done, 'readable should not be closed');
+ assert_equals(value, encoding.expected, 'chunk should match expected');
+ await writePromise;
+ }, `TextDecoderStream should be able to decode ${encoding.name}`);
+
+ if (!encoding.invalid)
+ continue;
+
+ promise_test(async t => {
+ const stream = new TextDecoderStream(encoding.name);
+ const reader = stream.readable.getReader();
+ const writer = stream.writable.getWriter();
+ const writePromise = writer.write(new Uint8Array(encoding.invalid));
+ const closePromise = writer.close();
+ const {value, done} = await reader.read();
+ assert_false(done, 'readable should not be closed');
+ assert_equals(value, '\u{FFFD}', 'output should be replacement character');
+ await Promise.all([writePromise, closePromise]);
+ }, `TextDecoderStream should be able to decode invalid sequences in ` +
+ `${encoding.name}`);
+
+ promise_test(async t => {
+ const stream = new TextDecoderStream(encoding.name, {fatal: true});
+ const reader = stream.readable.getReader();
+ const writer = stream.writable.getWriter();
+ const writePromise = writer.write(new Uint8Array(encoding.invalid));
+ const closePromise = writer.close();
+ await promise_rejects(t, new TypeError(), reader.read(),
+ 'readable should be errored');
+ await promise_rejects(t, new TypeError(),
+ Promise.all([writePromise, closePromise]),
+ 'writable should be errored');
+ }, `TextDecoderStream should be able to reject invalid sequences in ` +
+ `${encoding.name}`);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js
new file mode 100644
index 00000000000..6c022697da6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-split-character.any.js
@@ -0,0 +1,50 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+'use strict';
+
+const inputBytes = [73, 32, 240, 159, 146, 153, 32, 115, 116, 114, 101,
+ 97, 109, 115];
+for (const splitPoint of [2, 3, 4, 5]) {
+ promise_test(async () => {
+ const input = readableStreamFromArray(
+ [new Uint8Array(inputBytes.slice(0, splitPoint)),
+ new Uint8Array(inputBytes.slice(splitPoint))]);
+ const expectedOutput = ['I ', '\u{1F499} streams'];
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, expectedOutput,
+ 'the split code point should be in the second chunk ' +
+ 'of the output');
+ }, 'a code point split between chunks should not be emitted until all ' +
+ 'bytes are available; split point = ' + splitPoint);
+}
+
+promise_test(async () => {
+ const splitPoint = 6;
+ const input = readableStreamFromArray(
+ [new Uint8Array(inputBytes.slice(0, splitPoint)),
+ new Uint8Array(inputBytes.slice(splitPoint))]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, ['I \u{1F499}', ' streams'],
+ 'the multibyte character should be in the first chunk ' +
+ 'of the output');
+}, 'a code point should be emitted as soon as all bytes are available');
+
+for (let splitPoint = 1; splitPoint < 7; ++splitPoint) {
+ promise_test(async () => {
+ const input = readableStreamFromArray(
+ [new Uint8Array(inputBytes.slice(0, splitPoint)),
+ new Uint8Array([]),
+ new Uint8Array(inputBytes.slice(splitPoint))]);
+ const concatenatedOutput = 'I \u{1F499} streams';
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_equals(array.length, 2, 'two chunks should be output');
+ assert_equals(array[0].concat(array[1]), concatenatedOutput,
+ 'output should be unchanged by the empty chunk');
+ }, 'an empty chunk inside a code point split between chunks should not ' +
+ 'change the output; split point = ' + splitPoint);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js
new file mode 100644
index 00000000000..34fa764bf0a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/decode-utf8.any.js
@@ -0,0 +1,41 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+'use strict';
+
+const emptyChunk = new Uint8Array([]);
+const inputChunk = new Uint8Array([73, 32, 240, 159, 146, 153, 32, 115, 116,
+ 114, 101, 97, 109, 115]);
+const expectedOutputString = 'I \u{1F499} streams';
+
+promise_test(async () => {
+ const input = readableStreamFromArray([inputChunk]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, [expectedOutputString],
+ 'the output should be in one chunk');
+}, 'decoding one UTF-8 chunk should give one output string');
+
+promise_test(async () => {
+ const input = readableStreamFromArray([emptyChunk]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, [], 'no chunks should be output');
+}, 'decoding an empty chunk should give no output chunks');
+
+promise_test(async () => {
+ const input = readableStreamFromArray([emptyChunk, inputChunk]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, [expectedOutputString],
+ 'the output should be in one chunk');
+}, 'an initial empty chunk should be ignored');
+
+promise_test(async () => {
+ const input = readableStreamFromArray([inputChunk, emptyChunk]);
+ const output = input.pipeThrough(new TextDecoderStream());
+ const array = await readableStreamToArray(output);
+ assert_array_equals(array, [expectedOutputString],
+ 'the output should be in one chunk');
+}, 'a trailing empty chunk should be ignored');
diff --git a/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js b/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js
new file mode 100644
index 00000000000..868e34b7342
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/encode-bad-chunks.any.js
@@ -0,0 +1,63 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+'use strict';
+
+const error1 = new Error('error1');
+error1.name = 'error1';
+
+promise_test(t => {
+ const ts = new TextEncoderStream();
+ const writer = ts.writable.getWriter();
+ const reader = ts.readable.getReader();
+ const writePromise = writer.write({
+ toString() { throw error1; }
+ });
+ const readPromise = reader.read();
+ return Promise.all([
+ promise_rejects(t, error1, readPromise, 'read should reject with error1'),
+ promise_rejects(t, error1, writePromise, 'write should reject with error1'),
+ promise_rejects(t, error1, reader.closed, 'readable should be errored with error1'),
+ promise_rejects(t, error1, writer.closed, 'writable should be errored with error1'),
+ ]);
+}, 'a chunk that cannot be converted to a string should error the streams');
+
+const oddInputs = [
+ {
+ name: 'undefined',
+ value: undefined,
+ expected: 'undefined'
+ },
+ {
+ name: 'null',
+ value: null,
+ expected: 'null'
+ },
+ {
+ name: 'numeric',
+ value: 3.14,
+ expected: '3.14'
+ },
+ {
+ name: 'object',
+ value: {},
+ expected: '[object Object]'
+ },
+ {
+ name: 'array',
+ value: ['hi'],
+ expected: 'hi'
+ }
+];
+
+for (const input of oddInputs) {
+ promise_test(async () => {
+ const outputReadable = readableStreamFromArray([input.value])
+ .pipeThrough(new TextEncoderStream())
+ .pipeThrough(new TextDecoderStream());
+ const output = await readableStreamToArray(outputReadable);
+ assert_equals(output.length, 1, 'output should contain one chunk');
+ assert_equals(output[0], input.expected, 'output should be correct');
+ }, `input of type ${input.name} should be converted correctly to string`);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js b/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js
new file mode 100644
index 00000000000..74d1860e82b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/encode-utf8.any.js
@@ -0,0 +1,144 @@
+// META: global=worker
+// META: script=resources/readable-stream-from-array.js
+// META: script=resources/readable-stream-to-array.js
+
+'use strict';
+const inputString = 'I \u{1F499} streams';
+const expectedOutputBytes = [0x49, 0x20, 0xf0, 0x9f, 0x92, 0x99, 0x20, 0x73,
+ 0x74, 0x72, 0x65, 0x61, 0x6d, 0x73];
+// This is a character that must be represented in two code units in a string,
+// ie. it is not in the Basic Multilingual Plane.
+const astralCharacter = '\u{1F499}'; // BLUE HEART
+const astralCharacterEncoded = [0xf0, 0x9f, 0x92, 0x99];
+const leading = astralCharacter[0];
+const trailing = astralCharacter[1];
+const replacementEncoded = [0xef, 0xbf, 0xbd];
+
+// These tests assume that the implementation correctly classifies leading and
+// trailing surrogates and treats all the code units in each set equivalently.
+
+const testCases = [
+ {
+ input: [inputString],
+ output: [expectedOutputBytes],
+ description: 'encoding one string of UTF-8 should give one complete chunk'
+ },
+ {
+ input: [leading, trailing],
+ output: [astralCharacterEncoded],
+ description: 'a character split between chunks should be correctly encoded'
+ },
+ {
+ input: [leading, trailing + astralCharacter],
+ output: [astralCharacterEncoded.concat(astralCharacterEncoded)],
+ description: 'a character following one split between chunks should be ' +
+ 'correctly encoded'
+ },
+ {
+ input: [leading, trailing + leading, trailing],
+ output: [astralCharacterEncoded, astralCharacterEncoded],
+ description: 'two consecutive astral characters each split down the ' +
+ 'middle should be correctly reassembled'
+ },
+ {
+ input: [leading, trailing + leading + leading, trailing],
+ output: [astralCharacterEncoded.concat(replacementEncoded), astralCharacterEncoded],
+ description: 'two consecutive astral characters each split down the ' +
+ 'middle with an invalid surrogate in the middle should be correctly ' +
+ 'encoded'
+ },
+ {
+ input: [leading],
+ output: [replacementEncoded],
+ description: 'a stream ending in a leading surrogate should emit a ' +
+ 'replacement character as a final chunk'
+ },
+ {
+ input: [leading, astralCharacter],
+ output: [replacementEncoded.concat(astralCharacterEncoded)],
+ description: 'an unmatched surrogate at the end of a chunk followed by ' +
+ 'an astral character in the next chunk should be replaced with ' +
+ 'the replacement character at the start of the next output chunk'
+ },
+ {
+ input: [leading, 'A'],
+ output: [replacementEncoded.concat([65])],
+ description: 'an unmatched surrogate at the end of a chunk followed by ' +
+ 'an ascii character in the next chunk should be replaced with ' +
+ 'the replacement character at the start of the next output chunk'
+ },
+ {
+ input: [leading, leading, trailing],
+ output: [replacementEncoded, astralCharacterEncoded],
+ description: 'an unmatched surrogate at the end of a chunk followed by ' +
+ 'a plane 1 character split into two chunks should result in ' +
+ 'the encoded plane 1 character appearing in the last output chunk'
+ },
+ {
+ input: [leading, leading],
+ output: [replacementEncoded, replacementEncoded],
+ description: 'two leading chunks should result in two replacement ' +
+ 'characters'
+ },
+ {
+ input: [leading + leading, trailing],
+ output: [replacementEncoded, astralCharacterEncoded],
+ description: 'a non-terminal unpaired leading surrogate should ' +
+ 'immediately be replaced'
+ },
+ {
+ input: [trailing, astralCharacter],
+ output: [replacementEncoded, astralCharacterEncoded],
+ description: 'a terminal unpaired trailing surrogate should ' +
+ 'immediately be replaced'
+ },
+ {
+ input: [leading, '', trailing],
+ output: [astralCharacterEncoded],
+ description: 'a leading surrogate chunk should be carried past empty chunks'
+ },
+ {
+ input: [leading, ''],
+ output: [replacementEncoded],
+ description: 'a leading surrogate chunk should error when it is clear ' +
+ 'it didn\'t form a pair'
+ },
+ {
+ input: [''],
+ output: [],
+ description: 'an empty string should result in no output chunk'
+ },
+ {
+ input: ['', inputString],
+ output: [expectedOutputBytes],
+ description: 'a leading empty chunk should be ignored'
+ },
+ {
+ input: [inputString, ''],
+ output: [expectedOutputBytes],
+ description: 'a trailing empty chunk should be ignored'
+ },
+ {
+ input: ['A'],
+ output: [[65]],
+ description: 'a plain ASCII chunk should be converted'
+ },
+ {
+ input: ['\xff'],
+ output: [[195, 191]],
+ description: 'characters in the ISO-8859-1 range should be encoded correctly'
+ },
+];
+
+for (const {input, output, description} of testCases) {
+ promise_test(async () => {
+ const inputStream = readableStreamFromArray(input);
+ const outputStream = inputStream.pipeThrough(new TextEncoderStream());
+ const chunkArray = await readableStreamToArray(outputStream);
+ assert_equals(chunkArray.length, output.length,
+ 'number of chunks should match');
+ for (let i = 0; i < output.length; ++i) {
+ assert_array_equals(chunkArray[i], output[i], `chunk ${i} should match`);
+ }
+ }, description);
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js b/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js
new file mode 100644
index 00000000000..ad7cde32f68
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/readable-writable-properties.any.js
@@ -0,0 +1,22 @@
+// META: global=worker
+
+// This just tests that the "readable" and "writable" properties pass the brand
+// checks. All other relevant attributes are covered by the IDL tests.
+
+'use strict';
+
+test(() => {
+ const te = new TextEncoderStream();
+ assert_equals(typeof ReadableStream.prototype.getReader.call(te.readable),
+ 'object', 'readable property must pass brand check');
+ assert_equals(typeof WritableStream.prototype.getWriter.call(te.writable),
+ 'object', 'writable property must pass brand check');
+}, 'TextEncoderStream readable and writable properties must pass brand checks');
+
+test(() => {
+ const td = new TextDecoderStream();
+ assert_equals(typeof ReadableStream.prototype.getReader.call(td.readable),
+ 'object', 'readable property must pass brand check');
+ assert_equals(typeof WritableStream.prototype.getWriter.call(td.writable),
+ 'object', 'writable property must pass brand check');
+}, 'TextDecoderStream readable and writable properties must pass brand checks');
diff --git a/tests/wpt/web-platform-tests/encoding/streams/realms.window.js b/tests/wpt/web-platform-tests/encoding/streams/realms.window.js
new file mode 100644
index 00000000000..b1cc13e0b80
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/realms.window.js
@@ -0,0 +1,347 @@
+'use strict';
+
+// Test that objects created by the TextEncoderStream and TextDecoderStream APIs
+// are created in the correct realm. The tests work by creating an iframe for
+// each realm and then posting Javascript to them to be evaluated. Inputs and
+// outputs are passed around via global variables in each realm's scope.
+
+// Async setup is required before creating any tests, so require done() to be
+// called.
+setup({explicit_done: true});
+
+function createRealm() {
+ let iframe = document.createElement('iframe');
+ const scriptEndTag = '<' + '/script>';
+ iframe.srcdoc = `<!doctype html>
+<script>
+onmessage = event => {
+ if (event.source !== window.parent) {
+ throw new Error('unexpected message with source ' + event.source);
+ }
+ eval(event.data);
+};
+${scriptEndTag}`;
+ iframe.style.display = 'none';
+ document.body.appendChild(iframe);
+ let realmPromiseResolve;
+ const realmPromise = new Promise(resolve => {
+ realmPromiseResolve = resolve;
+ });
+ iframe.onload = () => {
+ realmPromiseResolve(iframe.contentWindow);
+ };
+ return realmPromise;
+}
+
+async function createRealms() {
+ // All realms are visible on the global object so they can access each other.
+
+ // The realm that the constructor function comes from.
+ window.constructorRealm = await createRealm();
+
+ // The realm in which the constructor object is called.
+ window.constructedRealm = await createRealm();
+
+ // The realm in which reading happens.
+ window.readRealm = await createRealm();
+
+ // The realm in which writing happens.
+ window.writeRealm = await createRealm();
+
+ // The realm that provides the definitions of Readable and Writable methods.
+ window.methodRealm = await createRealm();
+
+ await evalInRealmAndWait(methodRealm, `
+ window.ReadableStreamDefaultReader =
+ new ReadableStream().getReader().constructor;
+ window.WritableStreamDefaultWriter =
+ new WritableStream().getWriter().constructor;
+`);
+ window.readMethod = methodRealm.ReadableStreamDefaultReader.prototype.read;
+ window.writeMethod = methodRealm.WritableStreamDefaultWriter.prototype.write;
+}
+
+// In order for values to be visible between realms, they need to be
+// global. To prevent interference between tests, variable names are generated
+// automatically.
+const id = (() => {
+ let nextId = 0;
+ return () => {
+ return `realmsId${nextId++}`;
+ };
+})();
+
+// Eval string "code" in the content of realm "realm". Evaluation happens
+// asynchronously, meaning it hasn't happened when the function returns.
+function evalInRealm(realm, code) {
+ realm.postMessage(code, window.origin);
+}
+
+// Same as evalInRealm() but returns a Promise which will resolve when the
+// function has actually.
+async function evalInRealmAndWait(realm, code) {
+ const resolve = id();
+ const waitOn = new Promise(r => {
+ realm[resolve] = r;
+ });
+ evalInRealm(realm, code);
+ evalInRealm(realm, `${resolve}();`);
+ await waitOn;
+}
+
+// The same as evalInRealmAndWait but returns the result of evaluating "code" as
+// an expression.
+async function evalInRealmAndReturn(realm, code) {
+ const myId = id();
+ await evalInRealmAndWait(realm, `window.${myId} = ${code};`);
+ return realm[myId];
+}
+
+// Constructs an object in constructedRealm and copies it into readRealm and
+// writeRealm. Returns the id that can be used to access the object in those
+// realms. |what| can contain constructor arguments.
+async function constructAndStore(what) {
+ const objId = id();
+ // Call |constructorRealm|'s constructor from inside |constructedRealm|.
+ writeRealm[objId] = await evalInRealmAndReturn(
+ constructedRealm, `new parent.constructorRealm.${what}`);
+ readRealm[objId] = writeRealm[objId];
+ return objId;
+}
+
+// Calls read() on the readable side of the TransformStream stored in
+// readRealm[objId]. Locks the readable side as a side-effect.
+function readInReadRealm(objId) {
+ return evalInRealmAndReturn(readRealm, `
+parent.readMethod.call(window.${objId}.readable.getReader())`);
+}
+
+// Calls write() on the writable side of the TransformStream stored in
+// writeRealm[objId], passing |value|. Locks the writable side as a
+// side-effect.
+function writeInWriteRealm(objId, value) {
+ const valueId = id();
+ writeRealm[valueId] = value;
+ return evalInRealmAndReturn(writeRealm, `
+parent.writeMethod.call(window.${objId}.writable.getWriter(),
+ window.${valueId})`);
+}
+
+window.onload = () => {
+ createRealms().then(() => {
+ runGenericTests('TextEncoderStream');
+ runTextEncoderStreamTests();
+ runGenericTests('TextDecoderStream');
+ runTextDecoderStreamTests();
+ done();
+ });
+};
+
+function runGenericTests(classname) {
+ promise_test(async () => {
+ const obj = await evalInRealmAndReturn(
+ constructedRealm, `new parent.constructorRealm.${classname}()`);
+ assert_equals(obj.constructor, constructorRealm[classname],
+ 'obj should be in constructor realm');
+ }, `a ${classname} object should be associated with the realm the ` +
+ 'constructor came from');
+
+ promise_test(async () => {
+ const objId = await constructAndStore(classname);
+ const readableGetterId = id();
+ readRealm[readableGetterId] = Object.getOwnPropertyDescriptor(
+ methodRealm[classname].prototype, 'readable').get;
+ const writableGetterId = id();
+ writeRealm[writableGetterId] = Object.getOwnPropertyDescriptor(
+ methodRealm[classname].prototype, 'writable').get;
+ const readable = await evalInRealmAndReturn(
+ readRealm, `${readableGetterId}.call(${objId})`);
+ const writable = await evalInRealmAndReturn(
+ writeRealm, `${writableGetterId}.call(${objId})`);
+ assert_equals(readable.constructor, constructorRealm.ReadableStream,
+ 'readable should be in constructor realm');
+ assert_equals(writable.constructor, constructorRealm.WritableStream,
+ 'writable should be in constructor realm');
+ }, `${classname}'s readable and writable attributes should come from the ` +
+ 'same realm as the constructor definition');
+}
+
+function runTextEncoderStreamTests() {
+ promise_test(async () => {
+ const objId = await constructAndStore('TextEncoderStream');
+ const writePromise = writeInWriteRealm(objId, 'A');
+ const result = await readInReadRealm(objId);
+ await writePromise;
+ assert_equals(result.constructor, constructorRealm.Object,
+ 'result should be in constructor realm');
+ assert_equals(result.value.constructor, constructorRealm.Uint8Array,
+ 'chunk should be in constructor realm');
+ }, 'the output chunks when read is called after write should come from the ' +
+ 'same realm as the constructor of TextEncoderStream');
+
+ promise_test(async () => {
+ const objId = await constructAndStore('TextEncoderStream');
+ const chunkPromise = readInReadRealm(objId);
+ writeInWriteRealm(objId, 'A');
+ // Now the read() should resolve.
+ const result = await chunkPromise;
+ assert_equals(result.constructor, constructorRealm.Object,
+ 'result should be in constructor realm');
+ assert_equals(result.value.constructor, constructorRealm.Uint8Array,
+ 'chunk should be in constructor realm');
+ }, 'the output chunks when write is called with a pending read should come ' +
+ 'from the same realm as the constructor of TextEncoderStream');
+
+ // There is not absolute consensus regarding what realm exceptions should be
+ // created in. Implementations may vary. The expectations in exception-related
+ // tests may change in future once consensus is reached.
+ promise_test(async t => {
+ const objId = await constructAndStore('TextEncoderStream');
+ // Read first to relieve backpressure.
+ const readPromise = readInReadRealm(objId);
+ // promise_rejects() does not permit directly inspecting the rejection, so
+ // it's necessary to write it out long-hand.
+ let writeSucceeded = false;
+ try {
+ // Write an invalid chunk.
+ await writeInWriteRealm(objId, {
+ toString() { return {}; }
+ });
+ writeSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'write TypeError should come from constructor realm');
+ }
+ assert_false(writeSucceeded, 'write should fail');
+
+ let readSucceeded = false;
+ try {
+ await readPromise;
+ readSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'read TypeError should come from constructor realm');
+ }
+
+ assert_false(readSucceeded, 'read should fail');
+ }, 'TypeError for unconvertable chunk should come from constructor realm ' +
+ 'of TextEncoderStream');
+}
+
+function runTextDecoderStreamTests() {
+ promise_test(async () => {
+ const objId = await constructAndStore('TextDecoderStream');
+ const writePromise = writeInWriteRealm(objId, new Uint8Array([65]));
+ const result = await readInReadRealm(objId);
+ await writePromise;
+ assert_equals(result.constructor, constructorRealm.Object,
+ 'result should be in constructor realm');
+ // A string is not an object, so doesn't have an associated realm. Accessing
+ // string properties will create a transient object wrapper belonging to the
+ // current realm. So checking the realm of result.value is not useful.
+ }, 'the result object when read is called after write should come from the ' +
+ 'same realm as the constructor of TextDecoderStream');
+
+ promise_test(async () => {
+ const objId = await constructAndStore('TextDecoderStream');
+ const chunkPromise = readInReadRealm(objId);
+ writeInWriteRealm(objId, new Uint8Array([65]));
+ // Now the read() should resolve.
+ const result = await chunkPromise;
+ assert_equals(result.constructor, constructorRealm.Object,
+ 'result should be in constructor realm');
+ // A string is not an object, so doesn't have an associated realm. Accessing
+ // string properties will create a transient object wrapper belonging to the
+ // current realm. So checking the realm of result.value is not useful.
+ }, 'the result object when write is called with a pending ' +
+ 'read should come from the same realm as the constructor of TextDecoderStream');
+
+ promise_test(async t => {
+ const objId = await constructAndStore('TextDecoderStream');
+ // Read first to relieve backpressure.
+ const readPromise = readInReadRealm(objId);
+ // promise_rejects() does not permit directly inspecting the rejection, so
+ // it's necessary to write it out long-hand.
+ let writeSucceeded = false;
+ try {
+ // Write an invalid chunk.
+ await writeInWriteRealm(objId, {});
+ writeSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'write TypeError should come from constructor realm');
+ }
+ assert_false(writeSucceeded, 'write should fail');
+
+ let readSucceeded = false;
+ try {
+ await readPromise;
+ readSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'read TypeError should come from constructor realm');
+ }
+ assert_false(readSucceeded, 'read should fail');
+ }, 'TypeError for chunk with the wrong type should come from constructor ' +
+ 'realm of TextDecoderStream');
+
+ promise_test(async t => {
+ const objId =
+ await constructAndStore(`TextDecoderStream('utf-8', {fatal: true})`);
+ // Read first to relieve backpressure.
+ const readPromise = readInReadRealm(objId);
+ // promise_rejects() does not permit directly inspecting the rejection, so
+ // it's necessary to write it out long-hand.
+ let writeSucceeded = false;
+ try {
+ await writeInWriteRealm(objId, new Uint8Array([0xff]));
+ writeSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'write TypeError should come from constructor realm');
+ }
+ assert_false(writeSucceeded, 'write should fail');
+
+ let readSucceeded = false;
+ try {
+ await readPromise;
+ readSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'read TypeError should come from constructor realm');
+ }
+ assert_false(readSucceeded, 'read should fail');
+ }, 'TypeError for invalid chunk should come from constructor realm ' +
+ 'of TextDecoderStream');
+
+ promise_test(async t => {
+ const objId =
+ await constructAndStore(`TextDecoderStream('utf-8', {fatal: true})`);
+ // Read first to relieve backpressure.
+ readInReadRealm(objId);
+ // Write an unfinished sequence of bytes.
+ const incompleteBytesId = id();
+ writeRealm[incompleteBytesId] = new Uint8Array([0xf0]);
+ // promise_rejects() does not permit directly inspecting the rejection, so
+ // it's necessary to write it out long-hand.
+ let closeSucceeded = false;
+ try {
+ // Can't use writeInWriteRealm() here because it doesn't make it possible
+ // to reuse the writer.
+ await evalInRealmAndReturn(writeRealm, `
+(() => {
+ const writer = window.${objId}.writable.getWriter();
+ parent.writeMethod.call(writer, window.${incompleteBytesId});
+ return parent.methodRealm.WritableStreamDefaultWriter.prototype
+ .close.call(writer);
+})();
+`);
+ closeSucceeded = true;
+ } catch (err) {
+ assert_equals(err.constructor, constructorRealm.TypeError,
+ 'close TypeError should come from constructor realm');
+ }
+ assert_false(closeSucceeded, 'close should fail');
+ }, 'TypeError for incomplete input should come from constructor realm ' +
+ 'of TextDecoderStream');
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js
new file mode 100644
index 00000000000..5c12ba8c8bb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-from-array.js
@@ -0,0 +1,12 @@
+'use strict';
+
+function readableStreamFromArray(array) {
+ return new ReadableStream({
+ start(controller) {
+ for (let entry of array) {
+ controller.enqueue(entry);
+ }
+ controller.close();
+ }
+ });
+}
diff --git a/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js
new file mode 100644
index 00000000000..fda03e22644
--- /dev/null
+++ b/tests/wpt/web-platform-tests/encoding/streams/resources/readable-stream-to-array.js
@@ -0,0 +1,11 @@
+'use strict';
+
+function readableStreamToArray(stream) {
+ var array = [];
+ var writable = new WritableStream({
+ write(chunk) {
+ array.push(chunk);
+ }
+ });
+ return stream.pipeTo(writable).then(() => array);
+}
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html
new file mode 100644
index 00000000000..60bc00ddc3e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-with-responsive-images.tentative.https.sub.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+const srcs = [
+ "/feature-policy/experimental-features/resources/image.svg",
+ "/feature-policy/experimental-features/resources/image.jpg",
+ "/feature-policy/experimental-features/resources/image.png",
+];
+
+for (var src of srcs) {
+ async_test(t => {
+ var img = document.createElement('IMG');
+ img.intrinsicSize = '400 x 500';
+ var expected_intrinsic_width = 400;
+ var expected_intrinsic_height = 500;
+ var expected_width = expected_intrinsic_width;
+ var expected_height = expected_intrinsic_height;
+
+ document.body.appendChild(img);
+ img.addEventListener('load', t.step_func(() => {
+ assert_equals(img.width, expected_width, 'width');
+ assert_equals(img.height, expected_height, 'height');
+ assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth');
+ assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh');
+ t.done();
+ }));
+ img.srcset = src + ' 3x';
+ }, 'Test image ' + src + ' with no specified sizes, width, or height');
+
+ async_test(t => {
+ var img = document.createElement('IMG');
+ img.intrinsicSize = '400 x 500';
+ img.width = '800'; /* 2x of intrinsic width */
+ var expected_intrinsic_width = 400;
+ var expected_intrinsic_height = 500;
+ var expected_width = expected_intrinsic_width * 2;
+ var expected_height = expected_intrinsic_height * 2;
+
+ document.body.appendChild(img);
+ img.addEventListener('load', t.step_func(() => {
+ assert_equals(img.width, expected_width, 'width');
+ assert_equals(img.height, expected_height, 'height');
+ assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth');
+ assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh');
+ t.done();
+ }));
+ img.srcset = src + ' 3x';
+ }, 'Test image ' + src + ' with width = 800, no specified sizes, or height');
+
+ async_test(t => {
+ var img = document.createElement('IMG');
+ img.intrinsicSize = '400 x 500';
+ img.width = '800';
+ img.style = 'height:800px;';
+ var expected_intrinsic_width = 400;
+ var expected_intrinsic_height = 500;
+ var expected_width = 800;
+ var expected_height = 800;
+
+ document.body.appendChild(img);
+ img.addEventListener('load', t.step_func(() => {
+ assert_equals(img.width, expected_width, 'width');
+ assert_equals(img.height, expected_height, 'height');
+ assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth');
+ assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh');
+ t.done();
+ }));
+ img.srcset = src + ' 3x';
+ }, 'Test image ' + src + ' with width = 800, height = 800, and no specified sizes');
+}
+
+async_test(t => {
+ var img = document.createElement('IMG');
+ img.intrinsicSize = '400 x 500';
+ img.sizes = '100px';
+ var expected_intrinsic_width = 100;
+ var expected_intrinsic_height = 125;
+ var expected_width = 100;
+ var expected_height = 125;
+
+ document.body.appendChild(img);
+ img.addEventListener('load', t.step_func(() => {
+ assert_equals(img.width, expected_width, 'width');
+ assert_equals(img.height, expected_height, 'height');
+ assert_equals(img.naturalWidth, expected_intrinsic_width, 'naturalWidth');
+ assert_equals(img.naturalHeight, expected_intrinsic_height, 'naturalHeigh');
+ t.done();
+ }));
+ img.srcset = srcs[2] + ' 32w';
+}, 'Test image (32 x 32) with sizes = 100 and srcset descriptor = 32w');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html
new file mode 100644
index 00000000000..4a3526425d7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicSize-without-unsized-media.tentative.https.sub.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<body>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+'use strict';
+
+const srcs = [
+ "/feature-policy/experimental-features/resources/image.svg",
+ "/feature-policy/experimental-features/resources/image.jpg",
+ "/feature-policy/experimental-features/resources/image.png",
+];
+
+// Set new attribute, and wait til the media element is repainted.
+function updateAttribute(e, attribute, value) {
+ return new Promise(resolve => {
+ requestAnimationFrame(() => requestAnimationFrame(() => resolve()));
+ e.setAttribute(attribute, value);
+ });
+}
+
+// Test intrinsicSize attribute with image element.
+for (var src of srcs) {
+ promise_test(async() => {
+ var img = document.createElement('IMG');
+ document.body.appendChild(img);
+ img.src = src;
+ await new Promise(resolve =>
+ img.addEventListener('load', () => resolve(), {once: true}));
+ await updateAttribute(img, 'intrinsicSize', '400 x 500');
+ assert_equals(img.width, 400, 'width');
+ assert_equals(img.height, 500, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+
+ await updateAttribute(img, 'width', '800');
+ assert_equals(img.width, 800, 'width');
+ assert_equals(img.height, 1000, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+
+ await updateAttribute(img, 'style', 'height:800px;');
+ assert_equals(img.width, 800, 'width');
+ assert_equals(img.height, 800, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+
+ await updateAttribute(img, 'width', '');
+ assert_equals(img.width, 640, 'width');
+ assert_equals(img.height, 800, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+
+ await updateAttribute(img, 'style', 'height:800px; writing-mode: vertical-rl;');
+ assert_equals(img.width, 640, 'width');
+ assert_equals(img.height, 800, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+
+ await updateAttribute(img, 'style', 'height:800px; writing-mode: horizontal-tb;');
+ assert_equals(img.width, 640, 'width');
+ assert_equals(img.height, 800, 'height');
+ assert_equals(img.naturalWidth, 400, 'naturalWidth');
+ assert_equals(img.naturalHeight, 500, 'naturalHeight');
+ }, 'Test image with src=' + src);
+}
+
+// Test intrinsicSize attribute with video element.
+promise_test(async() => {
+ var video = document.createElement('video');
+ document.body.appendChild(video);
+ video.src = "/feature-policy/experimental-features/resources/video.ogv";
+ await new Promise(resolve =>
+ video.addEventListener('canplaythrough', () => resolve(), {once: true}));
+ video.intrinsicSize = '400 x 500';
+ assert_equals(video.getBoundingClientRect().width, 400, 'width');
+ assert_equals(video.getBoundingClientRect().height, 500, 'height');
+ assert_equals(video.videoWidth, 400, 'naturalWidth');
+ assert_equals(video.videoHeight, 500, 'naturalHeight');
+
+ video.width = '800';
+ assert_equals(video.getBoundingClientRect().width, 800, 'width');
+ assert_equals(video.getBoundingClientRect().height, 1000, 'height');
+ assert_equals(video.videoWidth, 400, 'naturalWidth');
+ assert_equals(video.videoHeight, 500, 'naturalHeight');
+
+ video.style = 'height:800px;';
+ assert_equals(video.getBoundingClientRect().width, 800, 'width');
+ assert_equals(video.getBoundingClientRect().height, 800, 'height');
+ assert_equals(video.videoWidth, 400, 'naturalWidth');
+ assert_equals(video.videoHeight, 500, 'naturalHeight');
+
+ video.removeAttribute('width');
+ assert_equals(video.getBoundingClientRect().width, 640, 'width');
+ assert_equals(video.getBoundingClientRect().height, 800, 'height');
+ assert_equals(video.videoWidth, 400, 'naturalWidth');
+ assert_equals(video.videoHeight, 500, 'naturalHeight');
+}, 'Test video');
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers
new file mode 100644
index 00000000000..4fbf3f5addd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/experimental-features/intrinsicsize-without-unsized-media.tentative.https.sub.html.headers
@@ -0,0 +1 @@
+Feature-Policy: unsized-media *
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html
new file mode 100644
index 00000000000..14b2ed1d37c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("Camera Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "camera");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+navigator.mediaDevices.getUserMedia({video: true}).then(
+ t.unreached_func("UserMedia camera access should not be allowed in this document.")
+).catch(() => {});
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers
new file mode 100644
index 00000000000..2adc5e237fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/camera-reporting.https.html.headers
@@ -0,0 +1 @@
+Feature-Policy: camera 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html
new file mode 100644
index 00000000000..cb08b8d72d1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("Document-write Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "document-write");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+t.step_func(() => {
+ assert_throws('NotAllowedError',
+ () => document.write("This should not succeed"),
+ "document.write should throw an exception when disabled");
+})();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers
new file mode 100644
index 00000000000..57102d5ee7c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/document-write-reporting.html.headers
@@ -0,0 +1 @@
+Feature-Policy: document-write 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html
new file mode 100644
index 00000000000..83d97c91fab
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <div id='fs'></div>
+ <script>
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "fullscreen");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+async_test(t => {
+ new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+ document.getElementById('fs').requestFullscreen().then(t.unreached_func(
+ "Fullscreen should not be allowed in this document.")).catch(()=>{});
+}, "Fullscreen Report Format");
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers
new file mode 100644
index 00000000000..d35e48ba40d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/fullscreen-reporting.html.headers
@@ -0,0 +1 @@
+Feature-Policy: fullscreen 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html
new file mode 100644
index 00000000000..22e258563b7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("Geolocation Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "geolocation");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+navigator.geolocation.getCurrentPosition(
+ t.unreached_func("geolocation should be disabled in this document"),
+ () => {});
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers
new file mode 100644
index 00000000000..7e75481ea6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/geolocation-reporting.https.html.headers
@@ -0,0 +1 @@
+Feature-Policy: geolocation 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg b/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg
new file mode 100644
index 00000000000..c059b96d97f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/image.jpg
Binary files differ
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html
new file mode 100644
index 00000000000..7347a2332bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("Microphone Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "microphone");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+navigator.mediaDevices.getUserMedia({audio: true}).then(
+ t.unreached_func("UserMedia microphone access should not be allowed in this document.")
+).catch(() => {});
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers
new file mode 100644
index 00000000000..a86e0a07785
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/microphone-reporting.https.html.headers
@@ -0,0 +1 @@
+Feature-Policy: microphone 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html
new file mode 100644
index 00000000000..8303b7adce4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "midi");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+promise_test(async (t) => {
+ const report = new Promise(resolve => {
+ new ReportingObserver((reports, observer) => resolve([reports, observer]),
+ {types: ['feature-policy']}).observe();
+ });
+ await promise_rejects(t, 'SecurityError', navigator.requestMIDIAccess(),
+ "MIDI device access should not be allowed in this document.");
+ const [reports, observer] = await report;
+ check_report_format(reports, observer);
+}, "MIDI Report Format");
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers
new file mode 100644
index 00000000000..0e145978a01
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/midi-reporting.html.headers
@@ -0,0 +1 @@
+Feature-Policy: midi 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html
new file mode 100644
index 00000000000..03eaebea58f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("PaymentRequest Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "payment");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+t.step_func(() => {
+ assert_throws('SecurityError',
+ () => new PaymentRequest(
+ [{ supportedMethods: 'basic-card' }],
+ { total: { label: 'Total', amount: { currency: 'USD', value: 0 }}},
+ {}).show(),
+ "PaymentRequest API should not be allowed in this document.");
+})();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers
new file mode 100644
index 00000000000..a2836778bc5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/payment-reporting.https.html.headers
@@ -0,0 +1 @@
+Feature-Policy: payment 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html
new file mode 100644
index 00000000000..2c76390847b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("Sync-xhr Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "sync-xhr");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+t.step_func(() => {
+ var xhr = new XMLHttpRequest();
+ xhr.open("GET", document.location.href, false);
+ assert_throws('NetworkError',
+ () => xhr.send(),
+ "Synchronous XHR.send should throw an exception when disabled");
+})();
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers
new file mode 100644
index 00000000000..21a909e1fb6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/sync-xhr-reporting.html.headers
@@ -0,0 +1 @@
+Feature-Policy: sync-xhr 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html
new file mode 100644
index 00000000000..8bd79318950
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <img src="image.jpg">
+ <script>
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "unsized-media");
+ assert_equals(typeof report.body.message, "string");
+};
+
+async_test(t => {
+ new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy'], buffered: true}).observe();
+}, "Unsized-media Report Format");
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers
new file mode 100644
index 00000000000..db2dcbc1929
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/unsized-media-reporting.html.headers
@@ -0,0 +1 @@
+Feature-Policy: unsized-media 'none'
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html
new file mode 100644
index 00000000000..f90c602e449
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+ </head>
+ <body>
+ <script>
+var t = async_test("USB Report Format");
+
+var check_report_format = (reports, observer) => {
+ let report = reports[0];
+ assert_equals(report.type, "feature-policy");
+ assert_equals(report.url, document.location.href);
+ assert_equals(report.body.feature, "usb");
+ assert_equals(report.body.sourceFile, document.location.href);
+ assert_equals(typeof report.body.message, "string");
+ assert_equals(typeof report.body.lineNumber, "number");
+ assert_equals(typeof report.body.columnNumber, "number");
+};
+
+new ReportingObserver(t.step_func_done(check_report_format),
+ {types: ['feature-policy']}).observe();
+
+navigator.usb.getDevices().then(
+ t.unreached_func("USB device access should not be allowed in this document.")
+).catch(() => {});
+ </script>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers
new file mode 100644
index 00000000000..4fd1e269362
--- /dev/null
+++ b/tests/wpt/web-platform-tests/feature-policy/reporting/usb-reporting.https.html.headers
@@ -0,0 +1 @@
+Feature-Policy: usb 'none'
diff --git a/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js
new file mode 100644
index 00000000000..9c223740c78
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/api/basic/header-value-null-byte.any.js
@@ -0,0 +1,5 @@
+// META: global=window,worker
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), fetch("../../../xhr/resources/parse-headers.py?my-custom-header="+encodeURIComponent("x\0x")));
+}, "Ensure fetch() rejects null bytes in headers");
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html
index 65432b5bacf..0a75531c405 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/font.tentative.https.sub.html
@@ -1,5 +1,5 @@
<!DOCTYPE html>
-
+<html>
<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
@@ -43,62 +43,42 @@
</body>
<script>
document.fonts.ready.then(function () {
- test_same_origin();
- test_same_site();
- test_cross_site();
- });
-
- function test_same_origin(){
- var same_origin_test = async_test("Same-Origin font");
- same_origin_test.step(function () {
- key = "font-same-origin";
- expected_same_origin = {"destination":"font", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("PUT", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "font-same-origin";
+ let expected = {"destination":"font", "site":"same-origin"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
});
- same_origin_xhr.send();
- });
- }
-
- function test_same_site(){
- var same_site_test = async_test("Same-Site font");
- same_site_test.step(function () {
- key = "font-same-site";
- expected_same_site = {"destination":"font", "site":"same-site"};
+ }, "Same-Origin font");
- // Requests from the server the saved value of the Sec-Metadata header
- same_site_xhr = new XMLHttpRequest();
- same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_site_xhr.onreadystatechange = same_site_test.step_func(function () {
- verify_response(same_site_xhr, same_site_test, expected_same_site)
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "font-same-site";
+ let expected = {"destination":"font", "site":"same-site"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
});
- same_site_xhr.send();
- });
- }
-
- function test_cross_site(){
- var cross_site_test = async_test("Cross-Site font");
- cross_site_test.step(function () {
- key = "font-cross-site";
- expected_cross_site = {"destination":"font", "site":"cross-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- cross_site_xhr = new XMLHttpRequest();
- cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
+ }, "Same-Site font");
- // Async test step triggered when the response is loaded
- cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () {
- verify_response(cross_site_xhr, cross_site_test, expected_cross_site)
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "font-cross-site";
+ let expected = {"destination":"font", "site":"cross-site"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
});
- cross_site_xhr.send();
- });
- }
+ }, "Cross-Site font");
+
+ });
</script>
+</html>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html
new file mode 100644
index 00000000000..9f497a9b62b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site-redirect.tentative.https.sub.html
@@ -0,0 +1,86 @@
+<!DOCTYPE html>
+
+<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
+<script>
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-cross-site-same-origin";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"cross-site"};
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Cross-Site -> Same-Origin redirect");
+
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-cross-site-same-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"cross-site"};
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Cross-Site -> Same-Site redirect");
+
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-cross-site-cross-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"cross-site"};
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Cross-Site -> Cross-Site redirect");
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html
deleted file mode 100644
index e25fd3f61d5..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/cross-site.tentative.https.sub.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
- <!-- redirect Cross-Site -> Cross-Site -->
- <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-cross-site"></img>
-</body>
-
-<script>
- function test_cross_site(){
- var cross_site_test = async_test("Cross-Site -> Cross-Site redirect");
- cross_site_test.step(function () {
- filename = "redirect-cross-site-cross-site";
- expected_cross_site = {"destination":"image", "site":"cross-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- cross_site_xhr = new XMLHttpRequest();
- cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () {
- verify_response(cross_site_xhr, cross_site_test, expected_cross_site)
- });
- cross_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html
deleted file mode 100644
index ac5982d8956..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-origin.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Cross-Site -> Same-Origin -->
- <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-same-origin"></img>
-</body>
-
-<script>
- function test_same_origin(){
- var same_origin_test = async_test("Cross-Site -> Same-Origin redirect");
- same_origin_test.step(function () {
- filename = "redirect-cross-site-same-origin";
- expected_same_origin = {"destination":"image", "site":"cross-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html
deleted file mode 100644
index 5b3b965f5e9..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/cross-site/same-site.tentative.https.sub.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
- <!-- redirect Cross-Site -> Same-Site -->
- <img onload="test_same_site()" onerror="test_same_site()" src="https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-cross-site-same-site"></img>
-</body>
-
-<script>
- function test_same_site(){
- var same_site_test = async_test("Cross-Site -> Same-Site redirect");
- same_site_test.step(function () {
- filename = "redirect-cross-site-same-site";
- expected_same_site = {"destination":"image", "site":"cross-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_site_xhr = new XMLHttpRequest();
- same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- same_site_xhr.onreadystatechange = same_site_test.step_func(function () {
- verify_response(same_site_xhr, same_site_test, expected_same_site)
- });
- same_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html
new file mode 100644
index 00000000000..fdd8733ba6d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-cross-site.tentative.https.sub.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+
+<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
+<script>
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-multiple-cross-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-origin
+ "https://{{hosts[alt][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// cross-site
+ "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;// same-origin
+ let expected = {"destination":"image", "site":"cross-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin -> Cross-Site -> Same-Origin redirect");
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html
new file mode 100644
index 00000000000..8fdc943f4c9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/multiple-redirect-same-site.tentative.https.sub.html
@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+
+<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
+<script>
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-multiple-same-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-origin
+ "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=" +// same-site
+ "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;// same-origin
+ let expected = {"destination":"image", "site":"same-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin -> Same-Site -> Same-Origin redirect");
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html
new file mode 100644
index 00000000000..dea71c3f67d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin-redirect.tentative.https.sub.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+
+<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
+<script>
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-origin-same-origin";
+
+ let e = document.createElement('img');
+ e.src = "/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"same-origin"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin -> Same-Origin redirect");
+
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-origin-same-site";
+
+ let e = document.createElement('img');
+ e.src = "/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"same-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin -> Same-Site redirect");
+
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-origin-cross-site";
+
+ let e = document.createElement('img');
+ e.src = "/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"cross-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin -> Cross-Site redirect");
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html
deleted file mode 100644
index ea6b167673f..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/cross-site.tentative.https.sub.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
- <!-- redirect Same-Origin -> Cross-Site -->
- <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-cross-site"></img>
-</body>
-
-<script>
- function test_cross_site(){
- var cross_site_test = async_test("Same-Origin -> Cross-Site redirect");
- cross_site_test.step(function () {
- filename = "redirect-same-origin-cross-site";
- expected_cross_site = {"destination":"image", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- cross_site_xhr = new XMLHttpRequest();
- cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () {
- verify_response(cross_site_xhr, cross_site_test, expected_cross_site)
- });
- cross_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html
deleted file mode 100644
index 430990a57c4..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-origin.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Same-Origin -> Same-Origin -->
- <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-same-origin"></img>
-</body>
-
-<script>
- function test_same_origin(){
- var same_origin_test = async_test("Same-Origin -> Same-Origin redirect");
- same_origin_test.step(function () {
- filename = "redirect-same-origin-same-origin";
- expected_same_origin = {"destination":"image", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html
deleted file mode 100644
index 591cf67d181..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-origin/same-site.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Same-Origin -> Same-Site -->
- <img onload="test_same_site()" onerror="test_same_site()" src="https://{{host}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-origin-same-site"></img>
-</body>
-
-<script>
- function test_same_site(){
- var same_site_test = async_test("Same-Origin -> Same-Site redirect");
- same_site_test.step(function () {
- filename = "redirect-same-origin-same-site";
- expected_same_site = {"destination":"image", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_site_xhr = new XMLHttpRequest();
- same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + filename);
-
- // Async test step triggered when the response is loaded
- same_site_xhr.onreadystatechange = same_site_test.step_func(function () {
- verify_response(same_site_xhr, same_site_test, expected_same_site)
- });
- same_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html
new file mode 100644
index 00000000000..a71163a1bfc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site-redirect.tentative.https.sub.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+
+<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
+<script>
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-site-same-origin";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"same-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Site -> Same-Origin redirect");
+
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-site-same-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"same-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Site -> Same-Site redirect");
+
+promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "redirect-same-site-cross-site";
+
+ let e = document.createElement('img');
+ e.src = "https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ let expected = {"destination":"image", "site":"cross-site"};
+
+ e.onload = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+ e.onerror = e => {
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
+
+ document.body.appendChild(e);
+ })
+ }, "Same-Site -> Cross-Site redirect");
+</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html
deleted file mode 100644
index 8592d02c269..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/cross-site.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Same-Site -> Cross-Site -->
- <img onload="test_cross_site()" onerror="test_cross_site()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-cross-site"></img>
-</body>
-
-<script>
- function test_cross_site(){
- var cross_site_test = async_test("Same-Site -> Cross-Site redirect");
- cross_site_test.step(function () {
- key = "redirect-same-site-cross-site";
- expected_cross_site = {"destination":"image", "site":"same-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- cross_site_xhr = new XMLHttpRequest();
- cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () {
- verify_response(cross_site_xhr, cross_site_test, expected_cross_site)
- });
- cross_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html
deleted file mode 100644
index 191dbaa7f77..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-origin.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Same-Site -> Same-Origin -->
- <img onload="test_same_origin()" onerror="test_same_origin()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-same-origin"></img>
-</body>
-
-<script>
- function test_same_origin(){
- var same_origin_test = async_test("Same-Site -> Same-Origin redirect");
- same_origin_test.step(function () {
- key = "redirect-same-site-same-origin";
- expected_same_origin = {"destination":"image", "site":"same-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html
deleted file mode 100644
index 11d60473981..00000000000
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/redirect/same-site/same-site.tentative.https.sub.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<!DOCTYPE html>
-
-<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/fetch/sec-metadata/resources/helper.js></script>
-<body>
-
- <!-- redirect Same-Site -> Same-Site -->
- <img onload="test_same_site()" onerror="test_same_site()" src="https://{{hosts[][www]}}:{{ports[https][0]}}/xhr/resources/redirect.py?location=https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=redirect-same-site-same-site"></img>
-</body>
-
-<script>
- function test_same_site(){
- var same_site_test = async_test("Same-Site -> Same-Site redirect");
- same_site_test.step(function () {
- key = "redirect-same-site-same-site";
- expected_same_site = {"destination":"image", "site":"same-site"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_site_xhr = new XMLHttpRequest();
- same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_site_xhr.onreadystatechange = same_site_test.step_func(function () {
- verify_response(same_site_xhr, same_site_test, expected_same_site)
- });
- same_site_xhr.send();
- });
- }
-</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js
index cbd96d06863..55e36d49fac 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/helper.js
@@ -17,10 +17,3 @@ function assert_header_equals(value, expected) {
assert_equals(result.target, expected.target, "target");
assert_equals(result.site, expected.site, "site");
}
-
-function verify_response(xhr, test, expected){
- if (xhr.readyState === 4) {
- assert_header_equals(xhr.responseText, expected);
- test.done();
- }
-}
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py
index fe08cd1cbca..5472aa5b47e 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/post-to-owner.py
@@ -12,5 +12,5 @@ def main(request, response):
if (window.top != window)
window.top.postMessage(data, "*");
</script>
- """ % json.dumps(request.headers["sec-metadata"])
+ """ % json.dumps(request.headers.get("Sec-Metadata", ""))
return headers, body
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py
index 06157e4cd8b..4c30d1e52ac 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/resources/record-header.py
@@ -21,20 +21,23 @@ def main(request, response):
if 'retrieve' in request.GET:
response.writer.write_status(200)
response.writer.end_headers()
- header_value = request.server.stash.take(testId)
- if header_value != None:
+ try:
+ header_value = request.server.stash.take(testId)
response.writer.write(header_value)
+ except (KeyError, ValueError) as e:
+ response.writer.write("No header has been recorded")
+ pass
response.close_connection = True
## Record incoming Sec-Metadata header value
else:
- ## Return empty string as a default value ##
- header = request.headers.get("Sec-Metadata", "")
try:
+ ## Return empty string as a default value ##
+ header = request.headers.get("Sec-Metadata", "")
request.server.stash.put(testId, header)
except KeyError:
- ## The header is already recorded
+ ## The header is already recorded or it doesn't exist
pass
## Prevent the browser from caching returned responses and allow CORS ##
@@ -61,6 +64,7 @@ def main(request, response):
## Return a valid font content and Content-Type ##
if key.startswith("font"):
+ response.headers.set("Content-Type", "application/x-font-ttf")
file = open("fonts/Ahem.ttf", "r")
font = file.read()
file.close()
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html
index 9d1fe2a3449..cefabb20aaa 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/serviceworker.tentative.https.sub.html
@@ -8,7 +8,7 @@
<script>
if ('serviceWorker' in navigator) {
window.addEventListener('load', function() {
- navigator.serviceWorker.register('/fetch/sec-metadata/resources/record-header.py?file=serviceworker-same-origin').then(function(registration) {
+ navigator.serviceWorker.register('https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=serviceworker-same-origin').then(function(registration) {
test_same_origin();
// uninstall the serviceworker after the test
@@ -32,20 +32,16 @@
<script>
function test_same_origin(){
- var same_origin_test = async_test("Same-Origin serviceworker");
- same_origin_test.step(function () {
- key = "serviceworker-same-origin";
- expected_same_origin = {"destination":"serviceworker", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "serviceworker-same-origin";
+ let expected = {"destination":"serviceworker", "site":"same-origin"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ })
+ })
}
</script>
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html
index aa118e04239..09017ccbb3a 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/sharedworker.tentative.https.sub.html
@@ -23,22 +23,18 @@
}
function test_same_origin(){
- var same_origin_test = async_test("Same-Origin sharedworker");
- same_origin_test.step(function () {
- key = "sharedworker-same-origin";
- expected_same_origin = {"destination":"sharedworker", "site":"same-origin"};
-
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
-
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "sharedworker-same-origin";
+ let expected = {"destination":"sharedworker", "site":"same-origin"};
+
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ })
+ }, "Same-Origin sharedworker")
}
</script>
<body></body>
-
diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html
index 78fac567b43..609d5764f08 100644
--- a/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/style.tentative.https.sub.html
@@ -1,75 +1,70 @@
<!DOCTYPE html>
-
+<html>
<link rel="author" href="mtrzos@google.com" title="Maciek Trzos">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/fetch/sec-metadata/resources/helper.js></script>
+<body></body>
<script>
- function test_same_origin() {
- var same_origin_test = async_test("Same-Origin style");
- same_origin_test.step(function () {
- key = "style-same-origin";
- expected_same_origin = {"destination":"style", "site":"same-origin"};
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "style-same-origin";
- // Requests from the server the saved value of the Sec-Metadata header
- same_origin_xhr = new XMLHttpRequest();
- same_origin_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
+ let e = document.createElement('link');
+ e.rel = "stylesheet";
+ e.href = "https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ e.onload = e => {
+ let expected = {"destination":"style", "site":"same-origin"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
- // Async test step triggered when the response is loaded
- same_origin_xhr.onreadystatechange = same_origin_test.step_func(function () {
- verify_response(same_origin_xhr, same_origin_test, expected_same_origin)
- });
- same_origin_xhr.send();
- });
- }
+ document.body.appendChild(e);
+ })
+ }, "Same-Origin style");
- function test_same_site() {
- var same_site_test = async_test("Same-Site style");
- same_site_test.step(function () {
- key = "style-same-site";
- expected_same_site = {"destination":"style", "site":"same-site"};
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "style-same-site";
- // Requests from the server the saved value of the Sec-Metadata header
- same_site_xhr = new XMLHttpRequest();
- same_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
+ let e = document.createElement('link');
+ e.rel = "stylesheet";
+ e.href = "https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ e.onload = e => {
+ let expected = {"destination":"style", "site":"same-site"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
- // Async test step triggered when the response is loaded
- same_site_xhr.onreadystatechange = same_site_test.step_func(function () {
- verify_response(same_site_xhr, same_site_test, expected_same_site)
- });
- same_site_xhr.send();
- });
- }
+ document.body.appendChild(e);
+ })
+ }, "Same-Site style");
- function test_cross_site() {
- var cross_site_test = async_test("Cross-Site style");
- cross_site_test.step(function () {
- key = "style-cross-site";
- expected_cross_site = {"destination":"style", "site":"cross-site"};
+ promise_test(t => {
+ return new Promise((resolve, reject) => {
+ let key = "style-cross-site";
- // Requests from the server the saved value of the Sec-Metadata header
- cross_site_xhr = new XMLHttpRequest();
- cross_site_xhr.open("GET", "/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key);
+ let e = document.createElement('link');
+ e.rel = "stylesheet";
+ e.href = "https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=" + key;
+ e.onload = e => {
+ let expected = {"destination":"style", "site":"cross-site"};
+ fetch("/fetch/sec-metadata/resources/record-header.py?retrieve=true&file=" + key)
+ .then(response => response.text())
+ .then(text => assert_header_equals(text, expected))
+ .then(_ => resolve())
+ .catch(e => reject(e));
+ };
- // Async test step triggered when the response is loaded
- cross_site_xhr.onreadystatechange = cross_site_test.step_func(function () {
- verify_response(cross_site_xhr, cross_site_test, expected_cross_site)
- });
- cross_site_xhr.send();
- });
- }
+ document.body.appendChild(e);
+ })
+ }, "Cross-Site style");
</script>
-<body>
- <!-- Same-Origin request -->
- <link href="https://{{host}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-same-origin"
- rel="stylesheet" onload="test_same_origin()" onerror="test_same_origin()">
-
- <!-- Same-Site request -->
- <link href="https://{{hosts[][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-same-site"
- rel="stylesheet" onload="test_same_site()" onerror="test_same_site()">
-
- <!-- Cross-Site request -->
- <link href="https://{{hosts[alt][www]}}:{{ports[https][0]}}/fetch/sec-metadata/resources/record-header.py?file=style-cross-site"
- rel="stylesheet" onload="test_cross_site()" onerror="test_cross_site()">
-</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html
index 66f99688f14..8ba2ab71b15 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html
@@ -13,9 +13,12 @@ async_test(function(t)
trusted_request(t, iframes[0].contentDocument.body, document.body);
iframes[0].contentDocument.onfullscreenchange = t.step_func(function()
{
+ assert_equals(document.fullscreenElement, iframes[0]);
trusted_request(t, iframes[1].contentDocument.body, iframes[0].contentDocument.body);
- iframes[1].contentDocument.onfullscreenchange = t.unreached_func("fullscreenchange event");
- iframes[1].contentDocument.onfullscreenerror = t.step_func_done();
+ iframes[1].contentDocument.onfullscreenchange = t.step_func_done(function() {
+ assert_equals(document.fullscreenElement, iframes[1]);
+ });
+ iframes[1].contentDocument.onfullscreenerror = t.unreached_func("fullscreenchange error");
});
});
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html
index dc0c28c78e1..f800093ec8e 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html
@@ -13,10 +13,12 @@ async_test(function(t)
var b = document.getElementById("b");
document.onfullscreenchange = t.step_func(function()
{
- assert_equals(document.fullscreenElement, a, "fullscreen element");
+ assert_equals(document.fullscreenElement, a, "fullscreen element is a");
trusted_request(t, b, a);
- document.onfullscreenchange = t.unreached_func("second fullscreenchange event");
- document.onfullscreenerror = t.step_func_done();
+ document.onfullscreenchange = t.step_func_done(function() {
+ assert_equals(document.fullscreenElement, b, "fullscreen element is b");
+ });
+ document.onfullscreenerror = t.unreached_func("second fullscreenchange event");
});
trusted_request(t, a);
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html
index 06c4c1b0367..0764e9c8423 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-non-top-manual.html
@@ -21,7 +21,9 @@ async_test(function(t)
{
assert_equals(document.fullscreenElement, last);
trusted_request(t, first, last);
- document.onfullscreenerror = t.step_func_done();
+ document.onfullscreenchange = t.step_func_done(function() {
+ assert_equals(document.fullscreenElement, first);
+ });
});
});
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html
index 9611c816566..3291664c63a 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-elements-manual.html
@@ -19,8 +19,11 @@ async_test(t => {
assert_in_array(document.fullscreenElement, [a, b]);
order.push(document.fullscreenElement.id);
if (order.length == 2) {
- assert_array_equals(order, ['b', 'a'],
- 'fullscreenElement IDs in fullscreenchange events');
+ // Since fullscreenchange event occurs at animation frame timing we might
+ // have not seen the transition from null -> 'b' but just see the
+ // resulting 'a' transition twice.
+ assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b');
+ assert_true(order[1] == 'a', 'second id seen is b');
t.done();
}
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html
index 99a7672e71c..94b38c0302a 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-two-iframes-manual.html
@@ -21,8 +21,11 @@ async_test(t => {
assert_in_array(document.fullscreenElement, [a, b]);
order.push(document.fullscreenElement.id);
if (order.length == 2) {
- assert_array_equals(order, ['b', 'a'],
- 'fullscreenElement IDs in fullscreenchange events');
+ // Since fullscreenchange event occurs at animation frame timing we might
+ // have not seen the transition from null -> 'b' but just see the
+ // resulting 'a' transition twice.
+ assert_true(order[0] == 'a' || order[0] == 'b', 'first id seen is a or b');
+ assert_true(order[1] == 'a', 'second id seen is b');
t.done();
}
});
diff --git a/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html
new file mode 100644
index 00000000000..ae57d8a9f23
--- /dev/null
+++ b/tests/wpt/web-platform-tests/fullscreen/rendering/fullscreen-root-block-scroll-manual.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<style>
+ body {
+ height: 10000px;
+ background: grey;
+ }
+</style>
+<title>fullscreen root block scrolling</title>
+<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>
+<div>This page tests that entering fullscreen doesn't adjust the scroll offset</div>
+<script>
+async_test(t => {
+ document.scrollingElement.scrollTop = 300;
+ document.onfullscreenchange = t.step_func_done(() => {
+ assert_equals(document.fullscreenElement, document.documentElement);
+ assert_not_equals(document.scrollingElement.scrollTop, 0);
+ });
+ document.documentElement.addEventListener('click', e => {
+ document.documentElement.requestFullscreen();
+ }, {once: true});
+ test_driver.click(document.documentElement);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/META.yml b/tests/wpt/web-platform-tests/html/META.yml
index d491c94e30c..636b42b68c1 100644
--- a/tests/wpt/web-platform-tests/html/META.yml
+++ b/tests/wpt/web-platform-tests/html/META.yml
@@ -5,6 +5,5 @@ suggested_reviewers:
- foolip
- jdm
- jgraham
- - sideshowbarker
- zcorpan
- zqzhang
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html b/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html
deleted file mode 100644
index defc7cd6c49..00000000000
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-does-not-match-disabled-selector.html
+++ /dev/null
@@ -1,29 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8" />
- <title>inert does not match :disabled selector</title>
- <link rel="author" title="Alice Boxhall" href="aboxhall@chromium.org">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- <style>
- button {
- color: green;
- }
-
- button:disabled {
- color: red;
- }
- </style>
- </head>
- <body>
- <button inert>The test passes if this is in green.</button>
- <script>
- test(function() {
- button = document.querySelector('button');
- var color = document.defaultView.getComputedStyle(button).getPropertyValue('color');
- assert_equals(color, 'rgb(0, 128, 0)');
- }, 'Tests that inert elements do not match the :disabled selector.');
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js
index a11ccbc1f30..8472318abd5 100644
--- a/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js
+++ b/tests/wpt/web-platform-tests/html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/resources/sharedworker-failure.js
@@ -1,16 +1,17 @@
let state = "send-sw-failure"
onconnect = initialE => {
- initialE.source.postMessage(state)
- initialE.source.onmessage = e => {
+ let port = initialE.source;
+ port.postMessage(state)
+ port.onmessage = e => {
if(state === "" && e.data === "send-window-failure") {
- e.postMessage(new SharedArrayBuffer())
+ port.postMessage(new SharedArrayBuffer())
} else {
- e.postMessage("failure")
+ port.postMessage("failure")
}
}
- initialE.source.onmessageerror = e => {
+ port.onmessageerror = e => {
if(state === "send-sw-failure") {
- e.postMessage("send-sw-failure-success")
+ port.postMessage("send-sw-failure-success")
state = ""
}
}
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml
new file mode 100644
index 00000000000..f5b533c3771
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml
@@ -0,0 +1,4 @@
+suggested_reviewers:
+ - emilio
+ - mstensho
+ - zcorpan
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html
index c38944ae795..c38944ae795 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-block-formatting-context.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-block-formatting-context.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html
index 95e2347121e..95e2347121e 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html
index 4d2269632c0..4d2269632c0 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-border-gap.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html
new file mode 100644
index 00000000000..9ab10159d8c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-radius-hittest.html
@@ -0,0 +1,14 @@
+<!doctype html>
+<title>fieldset, border-radius and hit testing</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+fieldset { width: 80px; height: 80px; border-radius: 100px; border: 10px solid; background: lime; }
+</style>
+<fieldset>
+</fieldset>
+<script>
+test(() => {
+ assert_equals(document.elementFromPoint(20, 20), document.body);
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html
index ccb755b347c..ccb755b347c 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html
index e7529946a49..e7529946a49 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-containing-block.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-containing-block.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html
index f07c84f406c..f07c84f406c 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-default-style.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-default-style.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html
index 95332898203..95332898203 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-display.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-display.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html
index 5d17b91290f..5d17b91290f 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-div-display-contents.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-div-display-contents.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html
index d2b1d30d8cc..07c73554e59 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-flexbox.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-flexbox.html
@@ -11,9 +11,13 @@
border: none
}
#test-inline, #ref-inline { display: inline-flex }
+legend {
+ float: left; /* Makes it not the "rendered legend" */
+ padding: 0;
+}
</style>
<fieldset id=test>
- <div>1</div>
+ <legend>1</legend>
<div>2</div>
<div>3</div>
<div>4</div>
@@ -25,7 +29,7 @@
</fieldset>
<hr>
<div id=ref>
- <div>1</div>
+ <legend>1</legend>
<div>2</div>
<div>3</div>
<div>4</div>
@@ -37,7 +41,7 @@
</div>
<hr>
<fieldset id=test-inline>
- <div>1</div>
+ <legend>1</legend>
<div>2</div>
<div>3</div>
<div>4</div>
@@ -60,12 +64,21 @@
</div>
<script>
test(() => {
- assert_equals(getComputedStyle(document.getElementById('test')).height,
- getComputedStyle(document.getElementById('ref')).height);
+ const testElm = document.getElementById('test');
+ const refElm = document.getElementById('ref');
+ assert_equals(getComputedStyle(testElm).height,
+ getComputedStyle(refElm).height, 'height');
+ assert_equals(testElm.querySelector('legend').offsetTop,
+ testElm.querySelector('div').offsetTop, 'offsetTop')
}, "Flex");
test(() => {
- assert_equals(getComputedStyle(document.getElementById('test-inline')).height,
- getComputedStyle(document.getElementById('ref-inline')).height);
+ const testElm = document.getElementById('test-inline');
+ const refElm = document.getElementById('ref-inline');
+ assert_equals(getComputedStyle(testElm).height,
+ getComputedStyle(refElm).height, 'height');
+ assert_equals(testElm.querySelector('legend').offsetTop,
+ testElm.querySelector('div').offsetTop, 'offsetTop')
+
}, "Inline flex");
</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html
index cace814a8ce..cace814a8ce 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-foo-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-foo-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html
index 7e9cf3643d0..bbb71dfa702 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-grid.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-grid.html
@@ -12,9 +12,13 @@
border: none
}
#test-inline, #ref-inline { display: inline-grid }
+legend {
+ float: left; /* Makes it not the "rendered legend" */
+ padding: 0;
+}
</style>
<fieldset id=test>
- <div>1</div>
+ <legend>1</legend>
<div>2</div>
<div>3</div>
<div>4</div>
@@ -38,7 +42,7 @@
</div>
<hr>
<fieldset id=test-inline>
- <div>1</div>
+ <legend>1</legend>
<div>2</div>
<div>3</div>
<div>4</div>
@@ -61,12 +65,21 @@
</div>
<script>
test(() => {
- assert_equals(getComputedStyle(document.getElementById('test')).height,
- getComputedStyle(document.getElementById('ref')).height);
+ const testElm = document.getElementById('test');
+ const refElm = document.getElementById('ref');
+ assert_equals(getComputedStyle(testElm).height,
+ getComputedStyle(refElm).height, 'height');
+ assert_equals(testElm.querySelector('legend').offsetTop,
+ testElm.querySelector('div').offsetTop, 'offsetTop')
}, "Grid");
test(() => {
- assert_equals(getComputedStyle(document.getElementById('test-inline')).height,
- getComputedStyle(document.getElementById('ref-inline')).height);
+ const testElm = document.getElementById('test-inline');
+ const refElm = document.getElementById('ref-inline');
+ assert_equals(getComputedStyle(testElm).height,
+ getComputedStyle(refElm).height, 'height');
+ assert_equals(testElm.querySelector('legend').offsetTop,
+ testElm.querySelector('div').offsetTop, 'offsetTop')
+
}, "Inline grid");
</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html
new file mode 100644
index 00000000000..05b8ca4770b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item-ref.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<title>Reference for fieldset and dipslay: list-item</title>
+<style>
+ fieldset { margin: 0 40px; }
+</style>
+<p>There should be no bullet points below.</p>
+<fieldset>
+ <legend>X</legend>
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html
new file mode 100644
index 00000000000..7726947beca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-list-item.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<title>fieldset and dipslay: list-item</title>
+<link rel=match href=fieldset-list-item-ref.html>
+<style>
+ fieldset { margin: 0 40px; display: list-item; }
+</style>
+<p>There should be no bullet points below.</p>
+<fieldset>
+ <legend>X</legend>
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html
index bdb2c2fd946..bdb2c2fd946 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-multicol.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-multicol.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html
index 9fe632f7c20..9fe632f7c20 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html
index cacbdbae00d..cacbdbae00d 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-overflow-hidden.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-overflow-hidden.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html
index 13b262a804a..13b262a804a 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html
index 7bd2cedb1b6..7bd2cedb1b6 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-painting-order.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-painting-order.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html
index 3b46eb03c6c..3b46eb03c6c 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-shadow-dom.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-shadow-dom.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html
index 8200e671944..8200e671944 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html
index df30468b004..df30468b004 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/fieldset-transform-translatez.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-transform-translatez.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html
new file mode 100644
index 00000000000..29c28ea5f89
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical-ref.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<title>Reference for fieldset vertical</title>
+<link rel=stylesheet href=resources/fieldset-vertical.css>
+<p>vertical-lr
+<div style="writing-mode: vertical-lr">
+ <div class=fieldset><div class="legend top">foo bar</div>normal</div>
+ <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl</div>
+ <div class="fieldset rtl"><div class="legend top">foo bar</div>dir=rtl align=left</div>
+ <div class="fieldset rtl"><div class="legend center">foo bar</div>dir=rtl align=center</div>
+ <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl align=right</div>
+ <div class=fieldset><div class="legend top">foo bar</div>align=left</div>
+ <div class=fieldset><div class="legend center">foo bar</div>align=center</div>
+ <div class=fieldset><div class="legend bottom">foo bar</div>align=right</div>
+</div>
+<hr>
+<p>vertical-rl
+<div style="writing-mode: vertical-rl">
+ <div class=fieldset><div class="legend top">foo bar</div>normal</div>
+ <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl</div>
+ <div class="fieldset rtl"><div class="legend top">foo bar</div>dir=rtl align=left</div>
+ <div class="fieldset rtl"><div class="legend center">foo bar</div>dir=rtl align=center</div>
+ <div class="fieldset rtl"><div class="legend bottom">foo bar</div>dir=rtl align=right</div>
+ <div class=fieldset><div class="legend top">foo bar</div>align=left</div>
+ <div class=fieldset><div class="legend center">foo bar</div>align=center</div>
+ <div class=fieldset><div class="legend bottom">foo bar</div>align=right</div></div>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html
new file mode 100644
index 00000000000..c11b4666696
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-vertical.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<title>fieldset vertical</title>
+<link rel=stylesheet href=resources/fieldset-vertical.css>
+<link rel=match href=fieldset-vertical-ref.html>
+<p>vertical-lr
+<div style="writing-mode: vertical-lr">
+ <fieldset><legend>foo bar</legend>normal</fieldset>
+ <fieldset dir=rtl><legend>foo bar</legend>dir=rtl</fieldset>
+ <fieldset dir=rtl><legend align=left>foo bar</legend>dir=rtl align=left</fieldset>
+ <fieldset dir=rtl><legend align=center>foo bar</legend>dir=rtl align=center</fieldset>
+ <fieldset dir=rtl><legend align=right>foo bar</legend>dir=rtl align=right</fieldset>
+ <fieldset><legend align=left>foo bar</legend>align=left</fieldset>
+ <fieldset><legend align=center>foo bar</legend>align=center</fieldset>
+ <fieldset><legend align=right>foo bar</legend>align=right</fieldset>
+</div>
+<hr>
+<p>vertical-rl
+<div style="writing-mode: vertical-rl">
+ <fieldset><legend>foo bar</legend>normal</fieldset>
+ <fieldset dir=rtl><legend>foo bar</legend>dir=rtl</fieldset>
+ <fieldset dir=rtl><legend align=left>foo bar</legend>dir=rtl align=left</fieldset>
+ <fieldset dir=rtl><legend align=center>foo bar</legend>dir=rtl align=center</fieldset>
+ <fieldset dir=rtl><legend align=right>foo bar</legend>dir=rtl align=right</fieldset>
+ <fieldset><legend align=left>foo bar</legend>align=left</fieldset>
+ <fieldset><legend align=center>foo bar</legend>align=center</fieldset>
+ <fieldset><legend align=right>foo bar</legend>align=right</fieldset>
+</div>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html
index f7511c9e4c9..f7511c9e4c9 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-align.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-align.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html
index 4e953917973..4e953917973 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-block-formatting-context.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-block-formatting-context.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html
new file mode 100644
index 00000000000..e6eff47e53c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering-ref.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<title>Reference for Rendering of display: none legend</title>
+<style>
+ div { border: 2em solid lime; width: 0; }
+</style>
+<p>There should be a green box below.</p>
+<div></div>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html
new file mode 100644
index 00000000000..abf3c45df71
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none-rendering.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<title>Rendering of display: none legend</title>
+<link rel=match href=legend-display-none-rendering-ref.html>
+<style>
+ fieldset { border: 2em solid lime; width: 0; margin: 0; padding: 0; }
+ legend { display: none; background: red; }
+</style>
+<p>There should be a green box below.</p>
+<fieldset>
+ <legend>FAIL</legend>
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html
new file mode 100644
index 00000000000..689454ac493
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display-none.html
@@ -0,0 +1,16 @@
+<!doctype html>
+<title>legend display: none</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<style>
+ legend { display: none; }
+</style>
+<fieldset>
+ <legend>Foo</legend>
+</fieldset>
+<script>
+ test(() => {
+ const display = getComputedStyle(document.querySelector('legend')).display;
+ assert_equals(display, 'none');
+ });
+</script>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html
index 914547fc6cd..914547fc6cd 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-display.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-display.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html
index 5dc68244fe0..5dc68244fe0 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-dynamic-update.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-dynamic-update.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html
index 7979e1d03ec..7979e1d03ec 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-abspos.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-abspos.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html
index c51bca231e1..c51bca231e1 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html
index f70e952ed06..f70e952ed06 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-float.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-float.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html
index edd2600d4a0..edd2600d4a0 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-grid-flex-multicol.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-grid-flex-multicol.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html
new file mode 100644
index 00000000000..ee76e93b64e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html
@@ -0,0 +1,7 @@
+<!doctype html>
+<title>Reference for legend and dipslay: list-item</title>
+<style>
+ div { margin: 0 40px; display: list-item; }
+</style>
+<p>There should be a bullet point below.</p>
+<div>X</div>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html
new file mode 100644
index 00000000000..c26b50ce662
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html
@@ -0,0 +1,11 @@
+<!doctype html>
+<title>legend and dipslay: list-item</title>
+<link rel=match href=fieldset-list-item-ref.html>
+<style>
+ fieldset { margin: 0; padding: 0; border: none; }
+ legend { margin: 0 40px; padding: 0; display: list-item; }
+</style>
+<p>There should be a bullet point below.</p>
+<fieldset>
+ <legend>X</legend>
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html
index fd6c11a0056..fd6c11a0056 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative-ref.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative-ref.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html
index 99383612614..99383612614 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-position-relative.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-position-relative.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html
index 5f27ca5c299..5f27ca5c299 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend-sans-fieldset-display.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-sans-fieldset-display.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html
index 1cda91f32ba..1cda91f32ba 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/legend.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html
index 92c33029701..92c33029701 100644
--- a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-element-0/min-inline-size.html
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/min-inline-size.html
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css
new file mode 100644
index 00000000000..b358d925a76
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/resources/fieldset-vertical.css
@@ -0,0 +1,18 @@
+body > div { display: inline-block }
+fieldset, .fieldset { padding: 0; height:10em; width:2em; border:1em groove; margin: 0em; line-height:1 }
+legend, .legend { padding: 0; width: 1em }
+.legend {
+ background: white; /* overlap the border to emulate the border not being painted */
+ display: table; /* shrink-wrap */
+}
+
+[style="writing-mode: vertical-lr"] .legend {
+ margin-left: -1em;
+}
+[style="writing-mode: vertical-rl"] .legend {
+ margin-right: -1em;
+}
+.top { margin-bottom: auto }
+.center { margin-top: auto; margin-bottom: auto }
+.bottom { margin-top: auto }
+.rtl { direction: rtl }
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html
index 6f11f8995b1..6f11f8995b1 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html
index 59b33d7c4d2..59b33d7c4d2 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy-attribute.https.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy-attribute.https.sub.html
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html
index 63479c0cb6f..63479c0cb6f 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers
index 08461fadc28..08461fadc28 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-allowed-by-feature-policy.https.sub.html.headers
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-allowed-by-feature-policy.https.sub.html.headers
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-default-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html
index 763073e437d..763073e437d 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-default-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-default-feature-policy.https.sub.html
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html
index 3dd3afbf771..3dd3afbf771 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html
diff --git a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers
index 69ce436270a..69ce436270a 100644
--- a/tests/wpt/web-platform-tests/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html.headers
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/autoplay-disabled-by-feature-policy.https.sub.html.headers
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html
deleted file mode 100644
index 317e13691d4..00000000000
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-1.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<!doctype html>
-010-1
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html
deleted file mode 100644
index ea537fcd601..00000000000
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010-2.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<!doctype html>
-010-2
-<script>
-onload = function() {history.back()}
-</script>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html
deleted file mode 100644
index d83d24f2414..00000000000
--- a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/010.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<!doctype html>
-<title>Salvagability of document.opened document</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
-<iframe src="010-1.html"></iframe>
-<script>
-var iframe;
-var t = async_test();
-onload = t.step_func(function() {
- iframe = document.getElementsByTagName("iframe")[0];
- assert_equals(iframe.contentDocument.open(), iframe.contentDocument);
- iframe.contentDocument.close();
-
- iframe.contentWindow.setTimeout(t.step_func(function() {t.done();}), 500);
-
- onload = null;
-
- iframe.src = "010-2.html"
- setTimeout(t.step_func(function() {assert_unreached()}), 1000)
-})
-</script>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js
new file mode 100644
index 00000000000..0134da24f07
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/history.window.js
@@ -0,0 +1,29 @@
+// Historically, document.open() created an entry in the session history so
+// that the original page could be seen by going back. Test that this behavior
+// no longer occurs.
+//
+// This test uses window.open() for variety, as most other tests in this
+// directory use document.open(). An <iframe> would probably work also. We can
+// always add an <iframe>-based test later if it is deemed necessary.
+
+const t = async_test("document.open should not add an entry to the session history");
+
+const frameURL = new URL("resources/history-frame.html", document.URL).href;
+
+let origLength;
+window.onFrameLoaded = t.step_func(() => {
+ window.onFrameLoaded = t.unreached_func("onFrameLoaded should only be called once");
+ assert_equals(win.document.URL, frameURL);
+ assert_true(win.document.body.textContent.includes("Old"));
+ origLength = win.history.length;
+});
+window.onDocumentOpen = t.step_func_done(() => {
+ window.onDocumentOpen = t.unreached_func("onDocumentOpen should only be called once");
+ assert_equals(win.document.URL, frameURL);
+ assert_true(win.document.body.textContent.includes("New"));
+ assert_not_equals(origLength, undefined);
+ assert_equals(win.history.length, origLength);
+});
+
+const win = window.open(frameURL);
+t.add_cleanup(() => win.close());
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js
new file mode 100644
index 00000000000..0ff0bb99443
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/quirks.window.js
@@ -0,0 +1,74 @@
+test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"));
+ t.add_cleanup(() => frame.contentDocument.close());
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.close();
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+}, "document.open() sets document to no-quirks mode (write no doctype)");
+
+test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"));
+ t.add_cleanup(() => frame.contentDocument.close());
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.write("<!doctype html public");
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.write(" \"-//IETF//DTD HTML 3//\"");
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.write(">");
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+ frame.contentDocument.close();
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+}, "document.open() sets document to no-quirks mode (write old doctype)");
+
+test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"));
+ t.add_cleanup(() => frame.contentDocument.close());
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.write("<!doctype html");
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.write(">");
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+ frame.contentDocument.close();
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+}, "document.open() sets document to no-quirks mode (write new doctype)");
+
+// This tests the document.open() call in fact sets the document to no-quirks
+// mode, not limited-quirks mode. It is derived from
+// quirks/blocks-ignore-line-height.html in WPT, as there is no direct way to
+// distinguish between a no-quirks document and a limited-quirks document. It
+// assumes that the user agent passes the linked test, which at the time of
+// writing is all major web browsers.
+test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"));
+ t.add_cleanup(() => frame.contentDocument.close());
+ assert_equals(frame.contentDocument.compatMode, "BackCompat");
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+
+ // Create the DOM tree manually rather than going through document.write() to
+ // bypass the parser, which resets the document mode.
+ const html = frame.contentDocument.appendChild(frame.contentDocument.createElement("html"));
+ const body = html.appendChild(frame.contentDocument.createElement("body"));
+ assert_equals(frame.contentDocument.body, body);
+ body.innerHTML = `
+ <style>#ref { display:block }</style>
+ <div id=test><font size=1>x</font></div>
+ <font id=ref size=1>x</font>
+ <div id=s_ref>x</div>
+ `;
+ assert_equals(frame.contentDocument.compatMode, "CSS1Compat");
+
+ const idTest = frame.contentDocument.getElementById("test");
+ const idRef = frame.contentDocument.getElementById("ref");
+ const idSRef = frame.contentDocument.getElementById("s_ref");
+ assert_equals(frame.contentWindow.getComputedStyle(idTest).height,
+ frame.contentWindow.getComputedStyle(idSRef).height);
+ assert_not_equals(frame.contentWindow.getComputedStyle(idTest).height,
+ frame.contentWindow.getComputedStyle(idRef).height);
+}, "document.open() sets document to no-quirks mode, not limited-quirks mode");
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js
new file mode 100644
index 00000000000..729a958700b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/readiness.window.js
@@ -0,0 +1,25 @@
+// This tests the behavior of dynamic markup insertion APIs with a document's
+// readiness.
+
+async_test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"));
+ t.add_cleanup(() => { frame.remove(); });
+ frame.src = "/common/blank.html";
+ frame.onload = t.step_func_done(() => {
+ const states = [];
+ frame.contentDocument.onreadystatechange = t.step_func(() => {
+ states.push(frame.contentDocument.readyState);
+ });
+ assert_equals(frame.contentDocument.readyState, "complete");
+ assert_array_equals(states, []);
+
+ // When open() is called, it first removes the event listeners and handlers
+ // from all nodes in the DOM tree. Then, after a new parser is created and
+ // initialized, it changes the current document readiness to "loading".
+ // However, because all event listeners are removed, we cannot observe the
+ // readystatechange event fired for "loading" inside open().
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.readyState, "loading");
+ assert_array_equals(states, []);
+ });
+}, "document.open() and readiness");
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html
new file mode 100644
index 00000000000..2404105b09a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html
@@ -0,0 +1,20 @@
+<script>
+function queueTest() {
+ // The timeout is necessary to avoid the parser still being active when
+ // `document.open()` is called and becoming a no-op.
+ //
+ // We also cannot use setTimeout(..., 0), as the parser is terminated in a
+ // task with DOM manipulation task source while the timeout is run in a task
+ // on the timer task source. The order is therefore not guaranteed. Let's
+ // play it safer and use some actual timeout.
+ setTimeout(() => {
+ document.open();
+ document.write("<p>New content</p>");
+ document.close();
+ opener.onDocumentOpen();
+ }, 200);
+}
+</script>
+<body onload="opener.onFrameLoaded(); queueTest();">
+<p>Old content</p>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html
new file mode 100644
index 00000000000..be483ff0aea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/url-frame.html
@@ -0,0 +1,9 @@
+<script>
+onload = () => {
+ const beforeURL = document.URL;
+ document.open();
+ const afterURL = document.URL;
+ document.close();
+ parent.testDone(beforeURL, afterURL);
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js
new file mode 100644
index 00000000000..0c528935b52
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/url-fragment.window.js
@@ -0,0 +1,26 @@
+async_test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe")),
+ urlSansHash = document.URL;
+ t.add_cleanup(() => { frame.remove(); });
+ assert_equals(frame.contentDocument.URL, "about:blank");
+ assert_equals(frame.contentWindow.location.href, "about:blank");
+ self.onhashchange = t.step_func_done(() => {
+ frame.contentDocument.open();
+ assert_equals(frame.contentDocument.URL, urlSansHash);
+ assert_equals(frame.contentWindow.location.href, urlSansHash);
+ });
+ self.location.hash = "heya";
+}, "document.open() and document's URL containing a fragment (entry is not relevant)");
+
+window.testDone = undefined;
+async_test(t => {
+ const frame = document.body.appendChild(document.createElement("iframe"))
+ t.add_cleanup(() => { frame.remove(); });
+ frame.src = "resources/url-frame.html#heya";
+ window.testDone = t.step_func_done((beforeURL, afterURL) => {
+ assert_equals(beforeURL, frame.src);
+ assert_equals(afterURL, frame.src);
+ assert_equals(frame.contentDocument.URL, frame.src);
+ assert_equals(frame.contentWindow.location.href, frame.src);
+ });
+}, "document.open() and document's URL containing a fragment (entry is relevant)");
diff --git a/tests/wpt/web-platform-tests/dom/inert/inert-does-not-match-disabled-selector.html b/tests/wpt/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html
index 74b8ac3f7dd..74b8ac3f7dd 100644
--- a/tests/wpt/web-platform-tests/dom/inert/inert-does-not-match-disabled-selector.html
+++ b/tests/wpt/web-platform-tests/inert/inert-does-not-match-disabled-selector.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-in-shadow-dom.html b/tests/wpt/web-platform-tests/inert/inert-in-shadow-dom.tentative.html
index 36c962b1fc7..36c962b1fc7 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-in-shadow-dom.html
+++ b/tests/wpt/web-platform-tests/inert/inert-in-shadow-dom.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-inlines.html b/tests/wpt/web-platform-tests/inert/inert-inlines.tentative.html
index b056c6495d2..b056c6495d2 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-inlines.html
+++ b/tests/wpt/web-platform-tests/inert/inert-inlines.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-label-focus.html b/tests/wpt/web-platform-tests/inert/inert-label-focus.tentative.html
index 8bbe1eca15c..8bbe1eca15c 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-label-focus.html
+++ b/tests/wpt/web-platform-tests/inert/inert-label-focus.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-uneditable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-uneditable.tentative.html
index b18d9912eb2..b18d9912eb2 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-uneditable.html
+++ b/tests/wpt/web-platform-tests/inert/inert-node-is-uneditable.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unfocusable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html
index 8b5de37fdca..8b5de37fdca 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unfocusable.html
+++ b/tests/wpt/web-platform-tests/inert/inert-node-is-unfocusable.tentative.html
diff --git a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unselectable.html b/tests/wpt/web-platform-tests/inert/inert-node-is-unselectable.tentative.html
index 7d5e90821bb..7d5e90821bb 100644
--- a/tests/wpt/web-platform-tests/html/editing/focus/inert/inert-node-is-unselectable.html
+++ b/tests/wpt/web-platform-tests/inert/inert-node-is-unselectable.tentative.html
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html
new file mode 100644
index 00000000000..b6b4847473d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch.html
@@ -0,0 +1,5 @@
+<title>Reftest chain with mismatch and mismatch</title>
+<link rel=mismatch href=reftest_and_mismatch_0.html>
+<style>
+:root {background-color:green}
+</style>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html
new file mode 100644
index 00000000000..f84ce6a13aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_0.html
@@ -0,0 +1,5 @@
+<title>Reftest chain with mismatch and mismatch</title>
+<link rel=mismatch href=reftest_and_mismatch_1.html>
+<style>
+:root {background-color:blue}
+</style>
diff --git a/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html
new file mode 100644
index 00000000000..05e905adafc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/infrastructure/reftest/reftest_and_mismatch_1.html
@@ -0,0 +1,4 @@
+<title>Reftest chain with match and mismatch</title>
+<style>
+:root {background-color:green}
+</style>
diff --git a/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js b/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js
new file mode 100644
index 00000000000..a57ae829936
--- /dev/null
+++ b/tests/wpt/web-platform-tests/input-device-capabilities/idlharness.window.js
@@ -0,0 +1,14 @@
+// META: script=/resources/WebIDLParser.js
+// META: script=/resources/idlharness.js
+
+'use strict';
+
+idl_test(
+ ['InputDeviceCapabilities'],
+ ['uievents', 'dom'],
+ idl_array => {
+ idl_array.add_objects({
+ InputDeviceCapabilities: ["new InputDeviceCapabilities"],
+ });
+ }
+);
diff --git a/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html b/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html
deleted file mode 100644
index 178ce5aa892..00000000000
--- a/tests/wpt/web-platform-tests/input-device-capabilities/interfaces.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<!doctype html>
-<title>Input Device Capabilities IDL tests</title>
-<link rel="help" href="https://wicg.github.io/InputDeviceCapabilities/">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/resources/WebIDLParser.js"></script>
-<script src="/resources/idlharness.js"></script>
-<script>
- "use strict";
-
- promise_test(async () => {
- const idl_array = new IdlArray();
- const idl = await (await fetch("/interfaces/InputDeviceCapabilities.idl")).text();
- const uievents = await (await fetch("/interfaces/uievents.idl")).text();
- const dom = await (await fetch("/interfaces/dom.idl")).text();
- idl_array.add_idls(idl);
- idl_array.add_dependency_idls(uievents);
- idl_array.add_dependency_idls(dom);
- idl_array.add_objects({
- InputDeviceCapabilities: ["new InputDeviceCapabilities"],
- });
- idl_array.test();
- }, "Test driver");
-</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
index 6957604e7df..92b6026f8b6 100644
--- a/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
+++ b/tests/wpt/web-platform-tests/interfaces/background-fetch.idl
@@ -19,11 +19,10 @@ interface BackgroundFetchManager {
Promise<BackgroundFetchRegistration> fetch(DOMString id, (RequestInfo or sequence<RequestInfo>) requests, optional BackgroundFetchOptions options);
Promise<BackgroundFetchRegistration?> get(DOMString id);
Promise<sequence<DOMString>> getIds();
- // TODO: in future this should become an async iterator for BackgroundFetchRegistration objects
};
dictionary BackgroundFetchUIOptions {
- sequence<IconDefinition> icons = [];
+ sequence<ImageResource> icons = [];
DOMString title = "";
};
@@ -31,14 +30,6 @@ dictionary BackgroundFetchOptions : BackgroundFetchUIOptions {
unsigned long long downloadTotal = 0;
};
-// This is taken from https://w3c.github.io/manifest/#icons-member.
-// This definition should probably be moved somewhere more general.
-dictionary IconDefinition {
- DOMString src;
- DOMString sizes = "";
- DOMString type = "";
-};
-
[Exposed=(Window,Worker)]
interface BackgroundFetchRegistration : EventTarget {
readonly attribute DOMString id;
@@ -77,7 +68,6 @@ enum BackgroundFetchFailureReason {
interface BackgroundFetchRecord {
readonly attribute Request request;
readonly attribute Promise<Response> responseReady;
- // TODO: In future this will include a fetch observer
};
[Constructor(DOMString type, BackgroundFetchEventInit init), Exposed=ServiceWorker]
diff --git a/tests/wpt/web-platform-tests/interfaces/encoding.idl b/tests/wpt/web-platform-tests/interfaces/encoding.idl
index 7d55ce7e190..b805363c534 100644
--- a/tests/wpt/web-platform-tests/interfaces/encoding.idl
+++ b/tests/wpt/web-platform-tests/interfaces/encoding.idl
@@ -3,6 +3,12 @@
// (https://github.com/tidoust/reffy-reports)
// Source: Encoding Standard (https://encoding.spec.whatwg.org/)
+interface mixin TextDecoderCommon {
+ readonly attribute DOMString encoding;
+ readonly attribute boolean fatal;
+ readonly attribute boolean ignoreBOM;
+};
+
dictionary TextDecoderOptions {
boolean fatal = false;
boolean ignoreBOM = false;
@@ -15,14 +21,36 @@ dictionary TextDecodeOptions {
[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
Exposed=(Window,Worker)]
interface TextDecoder {
- readonly attribute DOMString encoding;
- readonly attribute boolean fatal;
- readonly attribute boolean ignoreBOM;
USVString decode(optional BufferSource input, optional TextDecodeOptions options);
};
+TextDecoder includes TextDecoderCommon;
+
+interface mixin TextEncoderCommon {
+ readonly attribute DOMString encoding;
+};
+
[Constructor,
Exposed=(Window,Worker)]
interface TextEncoder {
- readonly attribute DOMString encoding;
[NewObject] Uint8Array encode(optional USVString input = "");
};
+TextEncoder includes TextEncoderCommon;
+
+interface mixin GenericTransformStream {
+ readonly attribute ReadableStream readable;
+ readonly attribute WritableStream writable;
+};
+
+[Constructor(optional DOMString label = "utf-8", optional TextDecoderOptions options),
+ Exposed=(Window,Worker)]
+interface TextDecoderStream {
+};
+TextDecoderStream includes TextDecoderCommon;
+TextDecoderStream includes GenericTransformStream;
+
+[Constructor,
+ Exposed=(Window,Worker)]
+interface TextEncoderStream {
+};
+TextEncoderStream includes TextEncoderCommon;
+TextEncoderStream includes GenericTransformStream;
diff --git a/tests/wpt/web-platform-tests/interfaces/payment-request.idl b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
index 3717d79476d..7bd2ae13efd 100644
--- a/tests/wpt/web-platform-tests/interfaces/payment-request.idl
+++ b/tests/wpt/web-platform-tests/interfaces/payment-request.idl
@@ -89,6 +89,7 @@ interface PaymentAddress {
readonly attribute DOMString city;
readonly attribute DOMString country;
readonly attribute DOMString dependentLocality;
+ // "languageCode" is a feature at risk
readonly attribute DOMString languageCode;
readonly attribute DOMString organization;
readonly attribute DOMString phone;
diff --git a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl
index da822bba0e5..63d39a28523 100644
--- a/tests/wpt/web-platform-tests/interfaces/pointerevents.idl
+++ b/tests/wpt/web-platform-tests/interfaces/pointerevents.idl
@@ -41,6 +41,7 @@ partial interface GlobalEventHandlers {
attribute EventHandler onlostpointercapture;
attribute EventHandler onpointerdown;
attribute EventHandler onpointermove;
+ [RuntimeEnabled=PointerRawMove] attribute EventHandler onpointerrawmove;
attribute EventHandler onpointerup;
attribute EventHandler onpointercancel;
attribute EventHandler onpointerover;
diff --git a/tests/wpt/web-platform-tests/interfaces/webxr.idl b/tests/wpt/web-platform-tests/interfaces/webxr.idl
index 00839eed1a2..ffa9ed4e91a 100644
--- a/tests/wpt/web-platform-tests/interfaces/webxr.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webxr.idl
@@ -162,7 +162,7 @@ typedef (WebGLRenderingContext or
dictionary XRWebGLLayerInit {
boolean antialias = true;
- boolean depth = false;
+ boolean depth = true;
boolean stencil = false;
boolean alpha = true;
boolean multiview = false;
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index 8c6bb2d8fbd..7d579b6b343 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -162,6 +162,7 @@ SET TIMEOUT: html/semantics/embedded-content/the-iframe-element/*
SET TIMEOUT: html/semantics/embedded-content/the-img-element/*
SET TIMEOUT: html/semantics/scripting-1/the-script-element/*
SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/0*
+SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/resources/history-frame.html
SET TIMEOUT: html/webappapis/dynamic-markup-insertion/opening-the-input-stream/tasks.window.js
SET TIMEOUT: html/webappapis/scripting/event-loops/*
SET TIMEOUT: html/webappapis/scripting/events/event-handler-processing-algorithm-error/*
@@ -264,6 +265,9 @@ GENERATE_TESTS: dom/traversal/TreeWalker.html
GENERATE_TESTS: domparsing/createContextualFragment.html
GENERATE_TESTS: domxpath/001.html
GENERATE_TESTS: domxpath/002.html
+GENERATE_TESTS: mediacapture-image/MediaStreamTrack-applyConstraints-reject.html
+GENERATE_TESTS: mediacapture-image/MediaStreamTrack-getConstraints-fast.html
+GENERATE_TESTS: mediacapture-image/setOptions-reject.html
GENERATE_TESTS: html/semantics/scripting-1/the-template-element/template-element/template-as-a-descendant.html
GENERATE_TESTS: html/syntax/parsing/Document.getElementsByTagName-foreign-01.html
GENERATE_TESTS: html/syntax/parsing/template/clearing-the-stack-back-to-a-given-context/clearing-stack-back-to-a-table-body-context.html
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html
new file mode 100644
index 00000000000..aae75b7e8c9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-MediaTrackSupportedConstraints.html
@@ -0,0 +1,25 @@
+<!DOCTYPE HTML>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+// Tests that getSupportedConstraints() returns what it should.
+test(function() {
+ supported_constraints = navigator.mediaDevices.getSupportedConstraints();
+
+ assert_true(supported_constraints.whiteBalanceMode);
+ assert_true(supported_constraints.exposureMode);
+ assert_true(supported_constraints.focusMode);
+ assert_true(supported_constraints.pointsOfInterest);
+ assert_true(supported_constraints.exposureCompensation);
+ assert_true(supported_constraints.colorTemperature);
+ assert_true(supported_constraints.iso);
+ assert_true(supported_constraints.brightness);
+ assert_true(supported_constraints.contrast);
+ assert_true(supported_constraints.saturation);
+ assert_true(supported_constraints.sharpness);
+ assert_true(supported_constraints.zoom);
+ assert_true(supported_constraints.torch);
+}, 'Image Capture supported constraints');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html
new file mode 100644
index 00000000000..9e8b5feeeb5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-creation.https.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+// This test verifies that ImageCapture can be created (or not) with different
+// Media Stream Track types (audio, video).
+
+function makeAsyncTest(modifyTrack, message) {
+ async_test(function(test) {
+
+ const gotStream = test.step_func(function(stream) {
+ assert_equals(stream.getAudioTracks().length, 0);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ var videoTrack = stream.getVideoTracks()[0];
+ assert_equals(videoTrack.readyState, 'live');
+ assert_true(videoTrack.enabled);
+ assert_false(videoTrack.muted);
+
+ var capturer = new ImageCapture(videoTrack);
+ assert_equals(capturer.track, videoTrack);
+
+ modifyTrack(videoTrack);
+
+ promise_rejects(test,
+ 'InvalidStateError',
+ capturer.grabFrame(),
+ 'Should throw InvalidStateError.')
+ .then(() => test.done());
+ });
+
+ const onError = test.unreached_func('Error creating MediaStream.');
+ navigator.mediaDevices.getUserMedia({video: true})
+ .then(gotStream)
+ .catch(onError);
+
+ }, message);
+}
+
+var disableTrack = function(videoTrack) {
+ // grabFrame() is rejected if the associated video track is disabled.
+ videoTrack.enabled = false;
+};
+
+var stopTrack = function(videoTrack) {
+ // grabFrame() is rejected if the associated video track is ended.
+ videoTrack.stop();
+ assert_equals(videoTrack.readyState, 'ended');
+};
+
+// Create the rejection tests. Note that grabFrame() would also be rejected if
+// the video Track was muted but that's a read-only property of the Track.
+makeAsyncTest(disableTrack, 'grabFrame() of a disabled Track');
+makeAsyncTest(stopTrack, 'grabFrame() of an ended Track');
+
+
+var testAudio = async_test(function() {
+ navigator.mediaDevices.getUserMedia({audio:true})
+ .then(
+ this.step_func(function(stream) {
+ assert_equals(stream.getAudioTracks().length, 1);
+ assert_equals(stream.getVideoTracks().length, 0);
+ assert_throws("NotSupportedError",
+ function() {
+ var capturer = new ImageCapture(stream.getAudioTracks()[0]);
+ },
+ 'an ImageCapturer can only be created from a video track');
+
+ this.done();
+ }))
+ .catch(
+ this.unreached_func('Error creating MediaStream.'));
+}, 'verifies that an ImageCapture cannot be created out of an Audio Track');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html
new file mode 100644
index 00000000000..bf5e9400a03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/ImageCapture-grabFrame.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<canvas id='canvas0' width=10 height=10/>
+<canvas id='canvas1' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that ImageCapture can grabFrame()s.
+
+var test = async_test(function() {
+ var canvas0 = document.getElementById('canvas0');
+ var context0 = canvas0.getContext("2d");
+ context0.fillStyle = "red";
+ context0.fillRect(0, 0, 10, 10);
+
+ var stream = canvas0.captureStream();
+
+ var capturer = new ImageCapture(stream.getVideoTracks()[0]);
+
+ capturer.grabFrame()
+ .then(bitmap => {
+ assert_equals(canvas0.width, bitmap.width);
+ assert_equals(canvas0.height, bitmap.height);
+
+ var context1 = document.getElementById('canvas1').getContext("2d");
+ context1.drawImage(bitmap, 0, 0);
+
+ var imageData0 = context0.getImageData(0, 0, 10, 10);
+ var imageData1 = context1.getImageData(0, 0, 10, 10);
+
+ assert_equals(imageData0.width, imageData1.width);
+ assert_equals(imageData0.height, imageData1.height);
+ assert_equals(imageData0.data.length, imageData1.data.length);
+ for (var i = 0; i < imageData0.data.length; i++)
+ assert_approx_equals(imageData0.data[i], imageData1.data[i], 5);
+
+ this.done();
+ })
+ .catch(error => {
+ assert_unreached('Error during grabFrame(): '+ error);
+ });
+}, 'exercises the ImageCapture API creation and grabFrame().');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html
new file mode 100644
index 00000000000..75ed17a9e33
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-fast.html
@@ -0,0 +1,85 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that MediaStreamTrack.applyConstraints() exists and that,
+// when called with no parameters, returns a Promise that is resolved. This
+// might not make sense: https://github.com/w3c/mediacapture-main/issues/438 .
+// Other tests go deeper.
+promise_test(function(t) {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+
+ var stream = canvas.captureStream();
+ assert_equals(stream.getAudioTracks().length, 0);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ var videoTrack = stream.getVideoTracks()[0];
+ return videoTrack.applyConstraints();
+}, 'MediaStreamTrack.applyConstraints()');
+
+// This test verifies that MediaStreamTrack.applyConstraints() exists and that,
+// when called with an empty advanced constraint set, returns a Promise that is
+// resolved.
+promise_test(function(t) {
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.fillStyle = "red";
+context.fillRect(0, 0, 10, 10);
+
+var stream = canvas.captureStream();
+assert_equals(stream.getAudioTracks().length, 0);
+assert_equals(stream.getVideoTracks().length, 1);
+
+var videoTrack = stream.getVideoTracks()[0];
+return videoTrack.applyConstraints({advanced: []});
+}, 'MediaStreamTrack.applyConstraints({advanced: []})');
+
+// This test verifies that applyConstraints() rejects the returned Promise if
+// passed a non-supported image-capture constraint (https://crbug.com/711694).
+promise_test(function(t) {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+
+ var stream = canvas.captureStream();
+ var videoTrack = stream.getVideoTracks()[0];
+
+ var expectedError =
+ new DOMException('Unsupported constraint(s)', 'NotSupportedError');
+
+ // Use e.g. |torch| as an example of unsupported constraint.
+ assert_false("torch" in videoTrack.getCapabilities());
+ return promise_rejects(
+ t, expectedError,
+ videoTrack.applyConstraints({advanced : [ {torch : true} ]}));
+}, 'MediaStreamTrack.applyConstraints() with unsupported constraint');
+
+// This test verifies that applyConstraints() rejects the returned Promise if
+// passed mixed ImageCapture and non-ImageCapture constraints.
+// TODO(mcasas): remove entirely after https://crbug.com/338503.
+promise_test(function(t) {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+
+ var stream = canvas.captureStream();
+ var videoTrack = stream.getVideoTracks()[0];
+
+ var expectedError = new OverconstrainedError(
+ '', 'Mixing ImageCapture and non-ImageCapture constraints is not currently supported');
+
+ return promise_rejects(
+ t, expectedError,
+ videoTrack.applyConstraints({advanced : [ {width : 640, torch: true} ]}));
+}, 'MediaStreamTrack.applyConstraints() with non Image-Capture constraint');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html
new file mode 100644
index 00000000000..6241d599dc3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-getSettings.html
@@ -0,0 +1,91 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that the |constraints| configured in the mock Mojo
+// service implementation, are returned by MediaStreamTrack.getSettings().
+
+image_capture_test(async t => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+
+ const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
+ exposureMode : 'continuous',
+ focusMode : 'single-shot',
+
+ pointsOfInterest : [{x : 0.1, y : 0.2},
+ {x : 0.3, y : 0.4}],
+
+ exposureCompensation : 133.77,
+ colorTemperature : 6000,
+ iso : 120.0,
+
+ brightness : 3,
+ contrast : 4,
+ saturation : 5,
+ sharpness : 6,
+
+ zoom : 3.141592,
+
+ torch : true
+ }]};
+
+ let stream = canvas.captureStream();
+ let videoTrack = stream.getVideoTracks()[0];
+
+ // |videoTrack|'s capabilities gathering, just like the actual capture, is
+ // a process kicked off right after creation, we introduce a small delay
+ // to allow for those to be collected, since they are needed to understand
+ // which constraints are supported in applyConstraints().
+ // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
+ await new Promise(resolve => step_timeout(resolve, 100));
+
+ try {
+ await videoTrack.applyConstraints(constraints);
+ } catch (error) {
+ assert_unreached('Error applying constraints: ' + error.message);
+ }
+
+ let settings = videoTrack.getSettings();
+ assert_equals(typeof settings, 'object');
+
+ assert_equals(constraints.advanced[0].whiteBalanceMode,
+ settings.whiteBalanceMode, 'whiteBalanceMode');
+ assert_equals(constraints.advanced[0].exposureMode, settings.exposureMode,
+ 'exposureMode');
+ assert_equals(constraints.advanced[0].focusMode, settings.focusMode,
+ 'focusMode');
+
+ assert_point2d_array_approx_equals(
+ constraints.advanced[0].pointsOfInterest, settings.pointsOfInterest,
+ 0.01);
+
+ assert_equals(constraints.advanced[0].exposureCompensation,
+ settings.exposureCompensation, 'exposureCompensation');
+ assert_equals(constraints.advanced[0].colorTemperature,
+ settings.colorTemperature, 'colorTemperature');
+ assert_equals(constraints.advanced[0].iso, settings.iso, 'iso');
+
+ assert_equals(constraints.advanced[0].brightness, settings.brightness,
+ 'brightness');
+ assert_equals(constraints.advanced[0].contrast, settings.contrast,
+ 'contrast');
+ assert_equals(constraints.advanced[0].saturation, settings.saturation,
+ 'saturation');
+ assert_equals(constraints.advanced[0].sharpness, settings.sharpness,
+ 'sharpness');
+
+ assert_equals(constraints.advanced[0].zoom, settings.zoom, 'zoom');
+
+ assert_equals(constraints.advanced[0].torch, settings.torch, 'torch');
+
+}, 'exercises an applyConstraints() - getSettings() cycle');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html
new file mode 100644
index 00000000000..8f08d250fd1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints-reject.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext('2d');
+context.fillStyle = 'red';
+context.fillRect(0, 0, 10, 10);
+
+// This test verifies that MediaStreamTrack.applyConstraints() rejects if any
+// passed constraint is unsupported or outside its allowed range.
+var makePromiseTest = function(getConstraint) {
+ image_capture_test(async (t, imageCaptureTest) => {
+ imageCaptureTest.mockImageCapture().state().supportsTorch = false;
+
+ let stream = canvas.captureStream();
+ let videoTrack = stream.getVideoTracks()[0];
+
+ // |videoTrack|'s capabilities gathering, just like the actual capture,
+ // is a process kicked off right after creation, we introduce a small
+ // delay to allow for those to be collected, since they are needed to
+ // understand which constraints are supported in applyConstraints().
+ // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
+ await new Promise(resolve => step_timeout(resolve, 100));
+
+ try {
+ const constraints = {
+ advanced : [ getConstraint(imageCaptureTest.mockImageCapture().state()) ]
+ };
+
+ await videoTrack.applyConstraints(constraints);
+ assert_unreached('expected applyConstraints to reject');
+ } catch (error) {
+ assert_equals(error.name, 'NotSupportedError');
+ }
+ });
+};
+
+const constraintGenerators = [
+ capabilities => ({ whiteBalanceMode: 'manual' }),
+ capabilities => ({ exposureMode: 'manual' }),
+ capabilities => ({ focusMode: 'continuous' }),
+ capabilities => ({
+ exposureCompensation: capabilities.exposureCompensation.max + 1
+ }),
+ capabilities => ({
+ exposureCompensation: capabilities.exposureCompensation.min - 1
+ }),
+ capabilities => ({
+ colorTemperature: capabilities.colorTemperature.max + 1
+ }),
+ capabilities => ({
+ colorTemperature: capabilities.colorTemperature.min - 1
+ }),
+ capabilities => ({ iso: capabilities.iso.max + 1 }),
+ capabilities => ({ iso: capabilities.iso.min - 1 }),
+ capabilities => ({ brightness: capabilities.brightness.max + 1 }),
+ capabilities => ({ brightness: capabilities.brightness.min - 1 }),
+ capabilities => ({ contrast: capabilities.contrast.max + 1 }),
+ capabilities => ({ contrast: capabilities.contrast.min - 1 }),
+ capabilities => ({ saturation: capabilities.saturation.max + 1 }),
+ capabilities => ({ saturation: capabilities.saturation.min - 1 }),
+ capabilities => ({ sharpness: capabilities.sharpness.max + 1 }),
+ capabilities => ({ sharpness: capabilities.sharpness.min - 1 }),
+ capabilities => ({ zoom: capabilities.zoom.max + 1 }),
+ capabilities => ({ zoom: capabilities.zoom.min - 1 }),
+ capabilities => ({ torch: true }),
+];
+
+for (key in constraintGenerators) {
+ generate_tests(
+ makePromiseTest, [[
+ 'MediaStreamTrack.applyConstraints(constraints) rejects with bad' +
+ ' constraints, #' + key,
+ constraintGenerators[key]
+ ]]);
+}
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html
new file mode 100644
index 00000000000..431646eb53f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-applyConstraints.html
@@ -0,0 +1,109 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
+
+// This test verifies that we can all MediaStreamTrack.applyConstraints(), with
+// a mock Mojo service implementation.
+
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+
+ const constraints = { advanced : [{ whiteBalanceMode : 'single-shot',
+ exposureMode : 'continuous',
+ focusMode : 'single-shot',
+
+ pointsOfInterest : [{x : 0.1, y : 0.2},
+ {x : 0.3, y : 0.4}],
+
+ exposureCompensation : 133.77,
+ colorTemperature : 6000,
+ iso : 120.0,
+
+ brightness : 3,
+ contrast : 4,
+ saturation : 5,
+ sharpness : 6,
+
+ zoom : 3.141592,
+
+ torch : true
+ }]};
+
+ let stream = canvas.captureStream();
+ let videoTrack = stream.getVideoTracks()[0];
+
+ // |videoTrack|'s capabilities gathering, just like the actual capture, is
+ // a process kicked off right after creation, we introduce a small delay
+ // to allow for those to be collected, since they are needed to understand
+ // which constraints are supported in applyConstraints().
+ // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
+ await new Promise(resolve => step_timeout(resolve, 100));
+
+ try {
+ await videoTrack.applyConstraints(constraints);
+ } catch (error) {
+ assert_unreached('applyConstraints(): ' + error.message);
+ }
+
+ const constraintsDict = constraints.advanced[0];
+ let appliedConstraints = videoTrack.getConstraints();
+ const appliedConstraintsDict = appliedConstraints.advanced[0];
+
+ // Check that |appliedConstraints| and |constraints| are equal.
+ assert_equals(constraintsDict.length, appliedConstraintsDict.length);
+ Object.keys(appliedConstraintsDict).forEach((key, value) => {
+ assert_not_equals(constraintsDict[key], undefined, 'key ' + key);
+ if (key != 'pointsOfInterest') {
+ assert_equals(constraintsDict[key], appliedConstraintsDict[key], key);
+ } else {
+ assert_point2d_array_approx_equals(constraintsDict[key],
+ appliedConstraintsDict[key], 0.01);
+ }
+ });
+
+ let theMock = imageCaptureTest.mockImageCapture();
+ assert_equals(constraintsDict.whiteBalanceMode,
+ meteringModeNames[theMock.options().whiteBalanceMode],
+ 'whiteBalanceMode');
+ assert_equals(constraintsDict.exposureMode,
+ meteringModeNames[theMock.options().exposureMode],
+ 'exposureMode');
+ assert_equals(constraintsDict.focusMode,
+ meteringModeNames[theMock.options().focusMode],
+ 'focusMode');
+
+ assert_point2d_array_approx_equals(constraintsDict.pointsOfInterest,
+ theMock.options().pointsOfInterest,
+ 0.01);
+
+ assert_equals(constraintsDict.exposureCompensation,
+ theMock.options().exposureCompensation,
+ 'exposureCompensation');
+ assert_equals(constraintsDict.colorTemperature,
+ theMock.options().colorTemperature, 'colorTemperature');
+ assert_equals(constraintsDict.iso, theMock.options().iso, 'iso');
+
+ assert_equals(constraintsDict.brightness, theMock.options().brightness,
+ 'brightness');
+ assert_equals(constraintsDict.contrast, theMock.options().contrast,
+ 'constrast');
+ assert_equals(constraintsDict.saturation, theMock.options().saturation,
+ 'saturation');
+ assert_equals(constraintsDict.sharpness, theMock.options().sharpness,
+ 'sharpness');
+
+ assert_equals(constraintsDict.torch, theMock.options().torch, 'torch');
+
+}, 'exercises MediaStreamTrack.applyConstraints(constraints)');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html
new file mode 100644
index 00000000000..55272d14995
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities-fast.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that MediaStreamTrack.getCapabilities() exists and that it
+// returns something. Other tests go deeper.
+test(function() {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+
+ var stream = canvas.captureStream();
+ assert_equals(stream.getAudioTracks().length, 0);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ var videoTrack = stream.getVideoTracks()[0];
+
+ assert_equals(typeof videoTrack.getCapabilities, 'function');
+
+ capabilities = videoTrack.getCapabilities();
+ assert_equals(typeof capabilities, 'object');
+}, 'MediaStreamTrack.getCapabilities()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html
new file mode 100644
index 00000000000..452b223a1b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getCapabilities.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
+
+// This test verifies that MediaTrackCapabilities are returned upon
+// MediaStreamTrack.getCapabilities(), with a mock Mojo service implementation.
+
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+
+ let mockCapabilities = imageCaptureTest.mockImageCapture().state();
+
+ // |stream| must be created _after_ |mock| is constructed to give the
+ // latter time to override the bindings.
+ let stream = canvas.captureStream();
+ assert_equals(stream.getAudioTracks().length, 0);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ let videoTrack = stream.getVideoTracks()[0];
+ assert_equals(typeof videoTrack.getCapabilities, 'function');
+
+ // |videoTrack|'s capabilities gathering, just like the actual capture, is
+ // a process kicked off right after creation, we introduce a small delay
+ // to allow for those to be collected.
+ // TODO(mcasas): this shouldn't be needed, https://crbug.com/711524.
+ await new Promise(resolve => step_timeout(resolve, 100));
+
+ let capabilities = videoTrack.getCapabilities();
+ assert_equals(typeof capabilities, 'object');
+
+ assert_equals(capabilities.whiteBalanceMode.length,
+ mockCapabilities.supportedWhiteBalanceModes.length,
+ 'whiteBalanceMode');
+ for (i = 0; i < capabilities.whiteBalanceMode.length; ++i) {
+ assert_equals(
+ capabilities.whiteBalanceMode[i],
+ meteringModeNames[mockCapabilities
+ .supportedWhiteBalanceModes[i]],
+ 'whiteBalanceMode');
+ }
+
+ assert_equals(capabilities.exposureMode.length,
+ mockCapabilities.supportedExposureModes.length,
+ 'exposureMode');
+ for (i = 0; i < capabilities.exposureMode.length; ++i) {
+ assert_equals(
+ capabilities.exposureMode[i],
+ meteringModeNames[mockCapabilities.supportedExposureModes[i]],
+ 'exposureMode');
+ }
+
+ assert_equals(capabilities.focusMode.length,
+ mockCapabilities.supportedFocusModes.length,
+ 'focusMode');
+ for (i = 0; i < capabilities.focusMode.length; ++i) {
+ assert_equals(
+ capabilities.focusMode[i],
+ meteringModeNames[mockCapabilities.supportedFocusModes[i]],
+ 'focusMode');
+ }
+
+ assert_true(capabilities.exposureCompensation instanceof
+ MediaSettingsRange);
+ assert_equals(capabilities.exposureCompensation.max,
+ mockCapabilities.exposureCompensation.max);
+ assert_equals(capabilities.exposureCompensation.min,
+ mockCapabilities.exposureCompensation.min);
+ assert_equals(capabilities.exposureCompensation.step,
+ mockCapabilities.exposureCompensation.step);
+
+ assert_true(capabilities.colorTemperature instanceof
+ MediaSettingsRange);
+ assert_equals(capabilities.colorTemperature.max,
+ mockCapabilities.colorTemperature.max);
+ assert_equals(capabilities.colorTemperature.min,
+ mockCapabilities.colorTemperature.min);
+ assert_equals(capabilities.colorTemperature.step,
+ mockCapabilities.colorTemperature.step);
+
+ assert_true(capabilities.iso instanceof MediaSettingsRange);
+ assert_equals(capabilities.iso.max, mockCapabilities.iso.max);
+ assert_equals(capabilities.iso.min, mockCapabilities.iso.min);
+ assert_equals(capabilities.iso.step, mockCapabilities.iso.step);
+
+ assert_true(capabilities.brightness instanceof MediaSettingsRange);
+ assert_equals(capabilities.brightness.max,
+ mockCapabilities.brightness.max);
+ assert_equals(capabilities.brightness.min,
+ mockCapabilities.brightness.min);
+ assert_equals(capabilities.brightness.step,
+ mockCapabilities.brightness.step);
+
+ assert_true(capabilities.contrast instanceof MediaSettingsRange);
+ assert_equals(capabilities.contrast.max,
+ mockCapabilities.contrast.max);
+ assert_equals(capabilities.contrast.min,
+ mockCapabilities.contrast.min);
+ assert_equals(capabilities.contrast.step,
+ mockCapabilities.contrast.step);
+
+ assert_true(capabilities.saturation instanceof MediaSettingsRange);
+ assert_equals(capabilities.saturation.max,
+ mockCapabilities.saturation.max);
+ assert_equals(capabilities.saturation.min,
+ mockCapabilities.saturation.min);
+ assert_equals(capabilities.saturation.step,
+ mockCapabilities.saturation.step);
+
+ assert_true(capabilities.sharpness instanceof MediaSettingsRange);
+ assert_equals(capabilities.sharpness.max,
+ mockCapabilities.sharpness.max);
+ assert_equals(capabilities.sharpness.min,
+ mockCapabilities.sharpness.min);
+ assert_equals(capabilities.sharpness.step,
+ mockCapabilities.sharpness.step);
+
+ assert_true(capabilities.zoom instanceof MediaSettingsRange);
+ assert_equals(capabilities.zoom.max, mockCapabilities.zoom.max);
+ assert_equals(capabilities.zoom.min, mockCapabilities.zoom.min);
+ assert_equals(capabilities.zoom.step, mockCapabilities.zoom.step);
+
+ assert_equals(capabilities.torch, mockCapabilities.supportsTorch,
+ 'torch');
+
+}, 'exercises MediaStreamTrack.getCapabilities()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html
new file mode 100644
index 00000000000..8cae4331318
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getConstraints-fast.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const constraints = { whiteBalanceMode : "manual",
+ exposureMode : "continuous",
+ focusMode : "single-shot",
+
+ exposureCompensation : 133.77,
+ colorTemperature : 6000,
+ iso : 120.0,
+
+ brightness : 3,
+ contrast : 4,
+ saturation : 5,
+ sharpness : 6,
+
+ zoom : 3.141592
+ // TODO: torch https://crbug.com/700607.
+ };
+
+var canvas = document.getElementById('canvas');
+var context = canvas.getContext("2d");
+context.fillStyle = "red";
+context.fillRect(0, 0, 10, 10);
+
+// These tests verify that MediaStreamTrack.getConstraints() exists and that,
+// returns the constraints passed beforehand with applyConstraints.
+var makeAsyncTest = function(c) {
+ async_test(function(t) {
+ var stream = canvas.captureStream();
+ var videoTrack = stream.getVideoTracks()[0];
+
+ const constraintsIn = { advanced : [ c ]};
+
+ // Method applyConstraints() will fail since there is no Image Capture
+ // service in this Layout Test, but |constraintsIn| should be cached.
+ videoTrack.applyConstraints(constraintsIn)
+ .then(() => { /* ignore */ })
+ .catch((e) => { /* ignore */ })
+ .then(() => {
+ const constraintsOut = videoTrack.getConstraints();
+ assert_object_equals(constraintsOut, constraintsIn, "constraints");
+ t.done();
+ });
+
+ // Clear constraints by sending an empty constraint set.
+ videoTrack.applyConstraints({})
+ .then(() => {
+ const constraintsOut = videoTrack.getConstraints();
+ assert_object_equals(constraintsOut, {}, "constraints");
+ t.done();
+ });
+ });
+};
+
+// Send each line of |constraints| in turn and then the whole dictionary.
+for (key in constraints) {
+ var one_constraint = {};
+ one_constraint[key] = constraints[key];
+ generate_tests(
+ makeAsyncTest,
+ [[ 'MediaStreamTrack.getConstraints(), key: ' + key, one_constraint ]]);
+}
+
+generate_tests(makeAsyncTest, [[
+ 'MediaStreamTrack.getConstraints(), complete ', constraints
+ ]]);
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html
new file mode 100644
index 00000000000..a4ecbe61181
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings-fast.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that MediaStreamTrack.getSettings() exists and that it
+// returns something. Other tests go deeper.
+test(function() {
+ var canvas = document.getElementById('canvas');
+ var context = canvas.getContext("2d");
+ context.fillStyle = "red";
+ context.fillRect(0, 0, 10, 10);
+
+ var stream = canvas.captureStream();
+ assert_equals(stream.getAudioTracks().length, 0);
+ assert_equals(stream.getVideoTracks().length, 1);
+
+ var videoTrack = stream.getVideoTracks()[0];
+
+ assert_equals(typeof videoTrack.getSettings, 'function');
+
+ settings = videoTrack.getSettings();
+ assert_equals(typeof settings, 'object');
+}, 'MediaStreamTrack.getSettings()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html
new file mode 100644
index 00000000000..04fbfbfb613
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/MediaStreamTrack-getSettings.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const meteringModeNames = ['none', 'manual', 'single-shot', 'continuous'];
+
+// This test verifies that the settings defined in the mock Mojo service
+// implementation are the same as those returned by the corresponding
+// MediaStreamTrack.getSettings().
+
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+
+ let mockSettings = imageCaptureTest.mockImageCapture().state();
+
+ // |stream| must be created _after_ |mock| is constructed to give the
+ // latter time to override the bindings.
+ let stream = canvas.captureStream();
+ let videoTrack = stream.getVideoTracks()[0];
+
+ // |videoTrack|s settings retrieval, just like the actual capture, is a
+ // process kicked right after creation, we introduce a small delay to
+ // allow for those to be collected.
+ await new Promise(resolve => step_timeout(resolve, 100));
+
+ let settings = videoTrack.getSettings();
+ assert_equals(typeof settings, 'object');
+
+ assert_equals(settings.whiteBalanceMode,
+ meteringModeNames[mockSettings.currentWhiteBalanceMode],
+ 'whiteBalanceMode');
+ assert_equals(settings.exposureMode,
+ meteringModeNames[mockSettings.currentExposureMode],
+ 'exposureMode;');
+ assert_equals(settings.focusMode,
+ meteringModeNames[mockSettings.currentFocusMode],
+ 'focusMode');
+
+ assert_point2d_array_approx_equals(
+ settings.pointsOfInterest, mockSettings.pointsOfInterest, 0.01);
+
+ assert_equals(settings.exposureCompensation,
+ mockSettings.exposureCompensation.current);
+ assert_equals(settings.colorTemperature,
+ mockSettings.colorTemperature.current);
+ assert_equals(settings.iso, mockSettings.iso.current);
+
+ assert_equals(settings.brightness, mockSettings.brightness.current);
+ assert_equals(settings.contrast, mockSettings.contrast.current);
+ assert_equals(settings.saturation, mockSettings.saturation.current);
+ assert_equals(settings.sharpness, mockSettings.sharpness.current);
+
+ assert_equals(settings.zoom, mockSettings.zoom.current);
+
+ assert_equals(settings.torch, mockSettings.torch, 'torch');
+
+}, 'exercises MediaStreamTrack.getSettings()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html
new file mode 100644
index 00000000000..e27950fc5ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/detached-HTMLCanvasElement.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+
+async_test(t => {
+ let iframe = document.createElement('iframe');
+ let html = "<canvas id='canvas' width=10 height=10 />";
+ iframe.srcdoc = html;
+ iframe.onload = t.step_func_done(() => {
+ // This detaches the frame while retaining a reference to an
+ // HTMLCanvasElement from it.
+ let canvas = iframe.contentWindow.document.getElementById('canvas');
+ document.body.removeChild(iframe);
+
+ // Creation of the ImageCapture object (as part of the MediaStreamTrack)
+ // should be safe even if the frame is detached.
+ canvas.captureStream();
+ });
+
+ document.body.appendChild(iframe);
+}, 'MediaStreamTrack can be obtained from a detached frame');
+
+</script>
+</body>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html
new file mode 100644
index 00000000000..83329fcac4a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoCapabilities.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that ImageCapture can get PhotoCapabilities(), with a mock
+// Mojo interface implementation.
+
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+ let stream = canvas.captureStream();
+
+ let mockCapabilities = imageCaptureTest.mockImageCapture().state();
+ let capturer = new ImageCapture(stream.getVideoTracks()[0]);
+ assert_true(typeof capturer.getPhotoCapabilities == 'function');
+
+ let capabilities = await capturer.getPhotoCapabilities();
+ assert_true(capabilities instanceof PhotoCapabilities);
+
+ assert_equals(capabilities.redEyeReduction, 'controllable',
+ 'redEyeReduction');
+
+ assert_true(capabilities.imageHeight instanceof MediaSettingsRange);
+ assert_equals(capabilities.imageHeight.max, mockCapabilities.height.max);
+ assert_equals(capabilities.imageHeight.min, mockCapabilities.height.min);
+ assert_equals(capabilities.imageHeight.step, mockCapabilities.height.step);
+
+ assert_true(capabilities.imageWidth instanceof MediaSettingsRange);
+ assert_equals(capabilities.imageWidth.max, mockCapabilities.width.max);
+ assert_equals(capabilities.imageWidth.min, mockCapabilities.width.min);
+ assert_equals(capabilities.imageWidth.step, mockCapabilities.width.step);
+
+ assert_array_equals(capabilities.fillLightMode, [ 'auto', 'flash' ],
+ 'fillLightMode');
+
+}, 'exercises ImageCapture.getPhotoCapabilities()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html
new file mode 100644
index 00000000000..6a6184f17cb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/getPhotoSettings.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const fillLightModeNames = ['off', 'auto', 'flash'];
+
+// This test verifies that ImageCapture can call getPhotoSettings(), with a
+// mock Mojo interface implementation.
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+ let stream = canvas.captureStream();
+
+ let mockState = imageCaptureTest.mockImageCapture().state();
+ let capturer = new ImageCapture(stream.getVideoTracks()[0]);
+ let settings = await capturer.getPhotoSettings();
+ assert_equals(settings.imageWidth, mockState.width.current, 'width');
+ assert_equals(settings.imageHeight, mockState.height.current, 'height');
+ // TODO(mcasas): check the remaining two entries https://crbug.com/732521.
+
+}, 'exercises ImageCapture.getPhotoSettings()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js b/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js
new file mode 100644
index 00000000000..6d5ffa1695d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/resources/imagecapture-helpers.js
@@ -0,0 +1,69 @@
+'use strict';
+
+// These tests rely on the User Agent providing an implementation of
+// platform image capture backends.
+//
+// In Chromium-based browsers this implementation is provided by a polyfill
+// in order to reduce the amount of test-only code shipped to users. To enable
+// these tests the browser must be run with these options:
+//
+// --enable-blink-features=MojoJS,MojoJSTest
+
+let loadChromiumResources = Promise.resolve().then(() => {
+ if (!MojoInterfaceInterceptor) {
+ // Do nothing on non-Chromium-based browsers or when the Mojo bindings are
+ // not present in the global namespace.
+ return;
+ }
+
+ let chain = Promise.resolve();
+ [
+ '/resources/chromium/mojo_bindings.js',
+ '/resources/chromium/image_capture.mojom.js',
+ '/resources/chromium/mock-imagecapture.js',
+ ].forEach(path => {
+ // Use importScripts for workers.
+ if (typeof document === 'undefined') {
+ chain = chain.then(() => importScripts(path));
+ return;
+ }
+ let script = document.createElement('script');
+ script.src = path;
+ script.async = false;
+ chain = chain.then(() => new Promise(resolve => {
+ script.onload = () => resolve();
+ }));
+ document.head.appendChild(script);
+ });
+
+ return chain;
+});
+
+async function initialize_image_capture_tests() {
+ if (typeof ImageCaptureTest === 'undefined') {
+ await loadChromiumResources;
+ }
+ assert_true(typeof ImageCaptureTest !== 'undefined');
+ let imageCaptureTest = new ImageCaptureTest();
+ await imageCaptureTest.initialize();
+ return imageCaptureTest;
+}
+
+function image_capture_test(func, name, properties) {
+ promise_test(async (t) => {
+ let imageCaptureTest = await initialize_image_capture_tests();
+ try {
+ await func(t, imageCaptureTest);
+ } finally {
+ await imageCaptureTest.reset();
+ };
+ }, name, properties);
+}
+
+function assert_point2d_array_approx_equals(actual, expected, epsilon) {
+ assert_equals(actual.length, expected.length, 'length');
+ for (var i = 0; i < actual.length; ++i) {
+ assert_approx_equals(actual[i].x, expected[i].x, epsilon, 'x');
+ assert_approx_equals(actual[i].y, expected[i].y, epsilon, 'y');
+ }
+}
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html b/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html
new file mode 100644
index 00000000000..4deee97d7bc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/setOptions-reject.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+let canvas = document.getElementById('canvas');
+let context = canvas.getContext('2d');
+context.fillStyle = 'red';
+context.fillRect(0, 0, 10, 10);
+
+// This test verifies that ImageCapture.takePhoto() rejects if any passed
+// option is unsupported or outside its allowed range.
+function makePromiseTest(getOption) {
+ image_capture_test(async (t, imageCaptureTest) => {
+ imageCaptureTest.mockImageCapture().state().redEyeReduction = 0;
+
+ let stream = canvas.captureStream();
+ let capturer = new ImageCapture(stream.getVideoTracks()[0]);
+ await capturer.getPhotoCapabilities();
+ const options = getOption(imageCaptureTest.mockImageCapture().state());
+
+ try {
+ await capturer.takePhoto(options);
+ assert_unreached('expected takePhoto to reject');
+ } catch (error) {
+ assert_equals(error.name, 'NotSupportedError');
+ }
+ });
+}
+
+const optionsGenerators = [
+ capabilities => ({ redEyeReduction: true }),
+ capabilities => ({ imageHeight: capabilities.height.max + 1 }),
+ capabilities => ({ imageHeight: capabilities.height.min - 1 }),
+ capabilities => ({ imageWidth: capabilities.width.max + 1 }),
+ capabilities => ({ imageWidth: capabilities.width.min - 1 }),
+ capabilities => ({ fillLightMode: 'off' }),
+];
+
+for (key in optionsGenerators) {
+ generate_tests(
+ makePromiseTest,
+ [[ 'ImageCapture.takePhoto(options) rejects with bad options, #' + key,
+ optionsGenerators[key] ]]);
+}
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html
new file mode 100644
index 00000000000..58708612456
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto-with-PhotoSettings.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+const fillLightModeNames = ['off', 'auto', 'flash'];
+
+// This test verifies that ImageCapture can call takePhoto with a PhotoSettings
+// argument, with a mock Mojo interface implementation.
+
+image_capture_test(async (t, imageCaptureTest) => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+ let stream = canvas.captureStream();
+
+ const optionsDict = { imageWidth : 1080,
+ imageHeight : 100,
+ redEyeReduction : true,
+ fillLightMode : 'flash'
+ };
+
+ let capturer = new ImageCapture(stream.getVideoTracks()[0]);
+ let blob = await capturer.takePhoto(optionsDict);
+
+ // JS Blob is almost-opaque, can only check |type| and |size|.
+ assert_equals(blob.type, 'image/cat');
+ assert_equals(blob.size, 2);
+
+
+ assert_equals(true, imageCaptureTest.mockImageCapture().options().hasWidth,
+ 'hasWidth');
+ assert_equals(optionsDict.imageWidth,
+ imageCaptureTest.mockImageCapture().options().width,'width');
+ assert_equals(true, imageCaptureTest.mockImageCapture().options().hasHeight,
+ 'hasHeight');
+ assert_equals(optionsDict.imageHeight,
+ imageCaptureTest.mockImageCapture().options().height,
+ 'height');
+
+ // Depending on how mojo boolean packing in integers is arranged, this can
+ // be a number instead of a boolean, compare directly.
+ // TODO(mcasas): Revert to assert_equals() when yzshen@ has sorted it out.
+ assert_true(
+ optionsDict.redEyeReduction == imageCaptureTest.mockImageCapture().
+ options().redEyeReduction, 'redEyeReduction');
+
+ assert_equals(true,
+ imageCaptureTest.mockImageCapture().options().hasFillLightMode,
+ 'hasFillLightMode');
+ assert_equals(optionsDict.fillLightMode,
+ fillLightModeNames[
+ imageCaptureTest.mockImageCapture().options().fillLightMode],
+ 'fillLightMode');
+
+}, 'exercises ImageCapture.takePhoto(PhotoSettings dictionary)');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html
new file mode 100644
index 00000000000..49926db1cde
--- /dev/null
+++ b/tests/wpt/web-platform-tests/mediacapture-image/takePhoto.html
@@ -0,0 +1,29 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/mediacapture-image/resources/imagecapture-helpers.js"></script>
+<body>
+<canvas id='canvas' width=10 height=10/>
+</body>
+<script>
+
+// This test verifies that ImageCapture can takePhoto()s, with a mock Mojo
+// interface implementation.
+
+image_capture_test(async t => {
+ let canvas = document.getElementById('canvas');
+ let context = canvas.getContext('2d');
+ context.fillStyle = 'red';
+ context.fillRect(0, 0, 10, 10);
+ let stream = canvas.captureStream();
+
+ let capturer = new ImageCapture(stream.getVideoTracks()[0]);
+ let blob = await capturer.takePhoto();
+
+ // JS Blob is almost-opaque, can only check |type| and |size|.
+ assert_equals(blob.type, 'image/cat');
+ assert_equals(blob.size, 2);
+
+}, 'exercises ImageCapture.takePhoto()');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html
index f0f07da2122..0b45ac6f594 100644
--- a/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html
+++ b/tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html
@@ -13,7 +13,7 @@
// mic/camera has been explicitly allowed by feature policy.
function promise_factory(allowed_features) {
return new Promise((resolve, reject) => {
- navigator.getUserMedia({video: true, audio: true},
+ navigator.getUserMedia({video: true, audio: true}).then(
function(stream) {
// If microphone is allowed, there should be at least one microphone
// in the result. If camera is allowed, there should be at least one
diff --git a/tests/wpt/web-platform-tests/network-error-logging/support/lock.py b/tests/wpt/web-platform-tests/network-error-logging/support/lock.py
index 8c88250bde0..d87b3aef0fb 100644
--- a/tests/wpt/web-platform-tests/network-error-logging/support/lock.py
+++ b/tests/wpt/web-platform-tests/network-error-logging/support/lock.py
@@ -1,4 +1,14 @@
-_LOCK_KEY = "network-error-logging:lock"
+# This file implements a shared lock that lets us ensure that the test cases in
+# this directory run serially. Each test case obtains this lock as its first
+# step, and releases it as its last. (The nel_test helper function in
+# nel.sub.js automates this process.) Because the lock needs to be shared
+# across all of the test cases, we use a hard-coded stash key. This hard-coded
+# key is a random UUID, which should not conflict with any other auto-generated
+# stash keys.
+
+import time
+
+_LOCK_KEY = "67966d2e-a847-41d8-b7c3-5f6aee3375ba"
_TIMEOUT = 5 # seconds
def wait_for_lock(request):
diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html
new file mode 100644
index 00000000000..99a10e9dc79
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/complete-method-manual.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<link rel="help" href="https://w3c.github.io/browser-payment-api/#dom-merchantvalidationevent-complete">
+<title>Test for the MerchantValidationEvent's complete() method.</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<body>
+<script>
+test(() => {
+ const event = new MerchantValidationEvent("test");
+ assert_throws(() => {
+ event.complete("");
+ })
+}, "If event's isTrusted attribute is false, then then throw an InvalidStateError DOMException.");
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html
new file mode 100644
index 00000000000..8368c79a3b1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.http.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test for MerchantValidationEvent Constructor (insecure)</title>
+<link rel="help" href="https://w3c.github.io/browser-payment-api/#merchantvalidationevent-interface">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+test(() => {
+ assert_false("MerchantValidationEvent" in Window);
+}, "MerchantValidationEvent constructor must not be exposed in insecure context");
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html
new file mode 100644
index 00000000000..952c0f734a3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-request/MerchantValidationEvent/constructor.https.html
@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
+<meta charset="utf-8">
+<title>Test for MerchantValidationEvent Constructor</title>
+<link rel="help" href="https://w3c.github.io/browser-payment-api/#merchantvalidationevent-constructor">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay"});
+const basicCard = Object.freeze({ supportedMethods: "basic-card" });
+const defaultMethods = Object.freeze([basicCard, applePay]);
+const defaultDetails = Object.freeze({
+ total: {
+ label: "Total",
+ amount: {
+ currency: "USD",
+ value: "1.00",
+ },
+ },
+});
+
+test(() => {
+ new MerchantValidationEvent("test");
+}, "MerchantValidationEvent can be constructed in secure-context.");
+
+test(() => {
+ const ev = new MerchantValidationEvent("test", {
+ bubbles: true,
+ cancelable: true,
+ composed: true,
+ });
+ assert_false(ev.isTrusted, "constructed in script, so not trusted");
+ assert_true(ev.bubbles, "set by EventInitDict");
+ assert_true(ev.cancelable, "set by EventInitDict");
+ assert_true(ev.composed, "set by EventInitDict");
+ assert_equals(ev.target, null, "initially null");
+ assert_equals(ev.type, "test");
+}, "MerchantValidationEvent can be constructed with an EventInitDict, even if not trusted.");
+
+test(() => {
+ const request = new PaymentRequest(defaultMethods, defaultDetails);
+ const ev = new MerchantValidationEvent("test");
+ request.addEventListener("test", evt => {
+ assert_equals(ev, evt);
+ });
+ request.dispatchEvent(ev);
+}, "MerchantValidationEvent can be dispatched, even if not trusted.");
+
+test(() => {
+ const validationURL = "https://pass.com";
+ const event = new MerchantValidationEvent("test", { validationURL });
+ assert_idl_attribute(event, "validationURL");
+ assert_equals(event.validationURL, "https://pass.com/");
+}, "Must have a validationURL IDL attribute, which is initialized with to the validationURL dictionary value.");
+
+test(() => {
+ const validationURL = "http://\u005B"; // invalid URL
+ assert_throws(new TypeError(), () => {
+ new MerchantValidationEvent("test", { validationURL })
+ });
+}, "Must throw TypeError if initialized with an invalid URL.");
+
+test(() => {
+ const validationURL = "";
+ const relativePaths = [
+ "",
+ ".",
+ "/test",
+ ]
+ for(const path of relativePaths ) {
+ const event = new MerchantValidationEvent("test", { validationURL: path });
+ const expected = new URL(path, document.location.href).href;
+ assert_equals(event.validationURL, expected);
+ }
+}, "Relative validationURLs use the document as the base.");
+</script>
diff --git a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js
index 85a08461fcb..a94bac064c9 100644
--- a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js
+++ b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/common.sub.js
@@ -5,41 +5,57 @@
const tests = {};
-window.onmessage = (e) => {
+window.onmessage = e => {
const result = e.data;
const tagName = result.urlQuery;
const t = tests[tagName];
t.step(() => {
if (expectSuccess[tagName]) {
- assert_equals(result.message, 'Success');
+ assert_equals(result.message, "Success");
+ if (result.message === "Exception") {
+ const [, code, name, stack] = result.details;
+ assert_unreached(`Unexpected exception "${name}" (${code}) ${stack}`);
+ }
} else {
- assert_equals(result.message, 'Exception');
- assert_array_equals(result.details, [true /*ex instanceof DOMException*/,
- DOMException.SECURITY_ERR /*ex.code*/,
- 'SecurityError' /*ex.name*/]);
+ assert_equals(result.message, "Exception");
+ const detailsArray = result.details.slice(0,3);
+ assert_array_equals(detailsArray, [
+ true /*ex instanceof DOMException*/,
+ DOMException.SECURITY_ERR /*ex.code*/,
+ "SecurityError" /*ex.name*/,
+ ]);
}
t.done();
});
};
-['iframe', 'frame', 'object', 'embed'].forEach((tagName, i) => {
- tests[tagName] = async_test((t) => {
+["iframe", "frame", "object", "embed"].forEach((tagName, i) => {
+ tests[tagName] = async_test(t => {
const elm = document.createElement(tagName);
if (setAllowPaymentRequest) {
- elm.setAttribute('allowpaymentrequest', '');
+ elm.setAttribute("allowpaymentrequest", "");
}
- const path = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
- const url = (testCrossOrigin ? "https://{{domains[www1]}}:{{ports[https][0]}}" : "") +
- path + "echo-PaymentRequest.html?" + tagName;
- if (tagName === 'object') {
+ const path = location.pathname.substring(
+ 0,
+ location.pathname.lastIndexOf("/") + 1
+ );
+ const url =
+ (testCrossOrigin ? "https://{{domains[www1]}}:{{ports[https][0]}}" : "") +
+ path +
+ "echo-PaymentRequest.html?" +
+ tagName;
+ if (tagName === "object") {
elm.data = url;
} else {
elm.src = url;
}
elm.onload = t.step_func(() => {
- window[i].postMessage('What is the result of new PaymentRequest(...)?', '*');
+ window[i].postMessage(
+ "What is the result of new PaymentRequest(...)?",
+ "*"
+ );
});
- elm.onerror = t.unreached_func('elm.onerror');
+ elm.onerror = t.unreached_func("elm.onerror");
document.body.appendChild(elm);
}, tagName);
});
diff --git a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html
index f18b16ee31b..5211c7e5ce7 100644
--- a/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html
+++ b/tests/wpt/web-platform-tests/payment-request/allowpaymentrequest/echo-PaymentRequest.html
@@ -11,7 +11,9 @@ window.onmessage = (e) => {
e.source.postMessage(result, '*');
} catch(ex) {
result.message = 'Exception';
- result.details = [ex instanceof DOMException, ex.code, ex.name];
+ const isDomException = ex instanceof DOMException;
+ const stack = "stack" in ex ? ex.stack : "";
+ result.details = [ isDomException, ex.code, ex.name, stack ];
e.source.postMessage(result, '*');
}
} else {
diff --git a/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html b/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html
new file mode 100644
index 00000000000..c0ed23167ed
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-request/onmerchantvalidation-attribute.https.html
@@ -0,0 +1,69 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Test for PaymentRequest's onmerchantvalidation attribute</title>
+<link rel="help" href="https://w3c.github.io/browser-payment-api/#dom-paymentrequest-onmerchantvalidation">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+"use strict";
+const testMethod = Object.freeze({ supportedMethods: "not-a-real-method" });
+const applePay = Object.freeze({ supportedMethods: "https://apple.com/apple-pay" });
+const defaultMethods = Object.freeze([testMethod, applePay]);
+const defaultDetails = Object.freeze({
+ total: {
+ label: "Total",
+ amount: {
+ currency: "USD",
+ value: "1.00",
+ },
+ },
+});
+const validationURL = "https://example.com";
+
+test(() => {
+ const request = new PaymentRequest(defaultMethods, defaultDetails);
+ assert_idl_attribute(request, "onmerchantvalidation");
+}, "Must have a onmerchantvalidation IDL attribute");
+
+test(() => {
+ const request = new PaymentRequest(defaultMethods, defaultDetails);
+ const ev = new Event("merchantvalidation");
+ let didHandle = false;
+ request.onmerchantvalidation = evt => {
+ assert_equals(ev, evt, "must be same event");
+ didHandle = true;
+ };
+ request.dispatchEvent(ev);
+ assert_true(didHandle, "event did not fire");
+}, `onmerchantvalidation attribute is a generic handler for "merchantvalidation"`);
+
+test(() => {
+ const request = new PaymentRequest(defaultMethods, defaultDetails);
+ const ev = new MerchantValidationEvent("merchantvalidation", { validationURL });
+ let didHandle = false;
+ request.onmerchantvalidation = evt => {
+ assert_equals(ev, evt, "must be same event");
+ didHandle = true;
+ };
+ request.dispatchEvent(ev);
+ assert_true(didHandle, "event did not fire");
+}, `onmerchantvalidation attribute is a handler for MerchantValidationEvent`);
+
+test(() => {
+ const request = new PaymentRequest(defaultMethods, defaultDetails);
+ const ev = new MerchantValidationEvent("merchantvalidation", { validationURL });
+ let didHandle = false;
+ let didListen = false;
+ request.onmerchantvalidation = evt => {
+ assert_equals(ev, evt, "must be same event");
+ didHandle = true;
+ };
+ request.addEventListener("merchantvalidation", evt => {
+ assert_equals(ev, evt, "must be same event");
+ didListen = true;
+ });
+ request.dispatchEvent(ev);
+ assert_true(didHandle, "onmerchantvalidation must receive the event");
+ assert_true(didListen, "addEventListener must receive the event");
+}, `onmerchantvalidation attribute and listeners both work`);
+</script>
diff --git a/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html
new file mode 100644
index 00000000000..0c4ccf9ad48
--- /dev/null
+++ b/tests/wpt/web-platform-tests/pointerevents/extension/pointerevent_pointerrawmove-manual.html
@@ -0,0 +1,55 @@
+<!doctype html>
+<html>
+ <head>
+ <title>pointerrawmove</title>
+ <meta name="viewport" content="width=device-width">
+ <link rel="stylesheet" type="text/css" href="../pointerevent_styles.css">
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <!-- Additional helper script for common checks across event types -->
+ <script type="text/javascript" src="../pointerevent_support.js"></script>
+ </head>
+ <body onload="run()">
+ <h2>pointerrawmove</h2>
+ <h4>Test Description: This test checks if pointerrawmove is dispatched correctly. </h4>
+ <p>Move your mouse within the black box.</p>
+ <p>Press left button down and then press middle button while holding down left button. Then release the buttons</p>
+ <div id="target0"></div>
+ <script>
+ var test_pointerrawmove = async_test("pointerrawmove event received");
+
+ var pointerrawmoveReceived = false;
+ var pointerdownReceived = false;
+ var pointerrawmoveFromButtonChangeReceived = false;
+
+ function run() {
+ var target0 = document.getElementById("target0");
+
+ on_event(target0, "pointerrawmove", function (event) {
+ pointerrawmoveReceived = true;
+ if (pointerdownReceived && event.button != -1)
+ pointerrawmoveFromButtonChangeReceived = true;
+ });
+ on_event(target0, "pointermove", function (event) {
+ test_pointerrawmove.step(function() {
+ assert_true(pointerrawmoveReceived,
+ "Pointerrawmove event should have been received before pointermove.");
+ }, "Pointerrawmove event should have been received before pointermove.");
+ });
+ on_event(target0, "pointerdown", function (event) {
+ pointerdownReceived = true;
+ });
+ on_event(target0, "pointerup", function (event) {
+ test_pointerrawmove.step(function() {
+ assert_true(pointerrawmoveFromButtonChangeReceived,
+ "Pointerrawmove event should have been received from chorded button changes.");
+ }, "Pointerrawmove event should have been received from chorded button changes.");
+ test_pointerrawmove.done();
+ });
+ }
+
+ </script>
+ <div id="complete-notice">
+ </div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html
index a1de182770a..2e33cec0b33 100644
--- a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties.html
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-001.html
@@ -14,7 +14,21 @@
'use strict';
var properties = [
+ 'background-position-x',
+ 'background-position-y',
'block-size',
+ 'border-bottom-left-radius',
+ 'border-bottom-right-radius',
+ 'border-top-left-radius',
+ 'border-top-right-radius',
+ 'column-gap',
+ 'column-rule-width',
+ 'column-width',
+ 'flex-basis',
+ 'grid-auto-columns',
+ 'grid-auto-rows',
+ 'grid-template-columns',
+ 'grid-template-rows',
'inline-size',
'margin-block-end',
'margin-block-start',
@@ -23,10 +37,14 @@ var properties = [
'min-block-size',
'min-inline-size',
'offset-distance',
+ 'outline-offset',
+ 'outline-width',
'padding-block-end',
'padding-block-start',
'padding-inline-end',
'padding-inline-start',
+ 'perspective',
+ 'row-gap',
'scroll-margin-block-end',
'scroll-margin-block-start',
'scroll-margin-bottom',
diff --git a/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html
new file mode 100644
index 00000000000..5f98bc283eb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/quirks/unitless-length/excluded-properties-002.html
@@ -0,0 +1,42 @@
+<html>
+<head>
+<meta charset="utf-8">
+<title>Many properties do not support quirky-length</title>
+<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
+<link rel="help" href="https://quirks.spec.whatwg.org/#the-unitless-length-quirk">
+<meta name="assert" content="quirky-length is not supported by properties not listed.">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<div id="target"></div>
+<script>
+'use strict';
+
+var properties = [
+ 'background-blend-mode',
+ 'background-size',
+ 'box-shadow',
+ 'clip-path',
+ 'column-span',
+ 'filter',
+ 'mask',
+ 'object-position',
+ 'perspective-origin',
+ 'text-shadow',
+ 'transform-origin'
+];
+
+for (let property of properties) {
+ test(() => {
+ if (!getComputedStyle(target)[property]) {
+ assert_unreached('Property ' + property + ' not supported');
+ }
+ target.style[property] = '1234';
+ assert_not_equals(target.style[property], '1234');
+ assert_not_equals(target.style[property], '1234px');
+ }, 'Property ' + property + ' does not support quirky length');
+}
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers b/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers
new file mode 100644
index 00000000000..6c61a34a4ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/image_capture-mojom.js.headers
@@ -0,0 +1 @@
+Content-Type: text/javascript; charset=utf-8 \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js b/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js
new file mode 100644
index 00000000000..1d01581e023
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/image_capture.mojom.js
@@ -0,0 +1,1329 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+'use strict';
+
+(function() {
+ var mojomId = 'media/capture/mojom/image_capture.mojom';
+ if (mojo.internal.isMojomLoaded(mojomId)) {
+ console.warn('The following mojom is loaded multiple times: ' + mojomId);
+ return;
+ }
+ mojo.internal.markMojomLoaded(mojomId);
+ var bindings = mojo;
+ var associatedBindings = mojo;
+ var codec = mojo.internal;
+ var validator = mojo.internal;
+
+ var exports = mojo.internal.exposeNamespace('media.mojom');
+
+
+ var MeteringMode = {};
+ MeteringMode.NONE = 0;
+ MeteringMode.MANUAL = MeteringMode.NONE + 1;
+ MeteringMode.SINGLE_SHOT = MeteringMode.MANUAL + 1;
+ MeteringMode.CONTINUOUS = MeteringMode.SINGLE_SHOT + 1;
+
+ MeteringMode.isKnownEnumValue = function(value) {
+ switch (value) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ return true;
+ }
+ return false;
+ };
+
+ MeteringMode.validate = function(enumValue) {
+ var isExtensible = false;
+ if (isExtensible || this.isKnownEnumValue(enumValue))
+ return validator.validationError.NONE;
+
+ return validator.validationError.UNKNOWN_ENUM_VALUE;
+ };
+ var RedEyeReduction = {};
+ RedEyeReduction.NEVER = 0;
+ RedEyeReduction.ALWAYS = RedEyeReduction.NEVER + 1;
+ RedEyeReduction.CONTROLLABLE = RedEyeReduction.ALWAYS + 1;
+
+ RedEyeReduction.isKnownEnumValue = function(value) {
+ switch (value) {
+ case 0:
+ case 1:
+ case 2:
+ return true;
+ }
+ return false;
+ };
+
+ RedEyeReduction.validate = function(enumValue) {
+ var isExtensible = false;
+ if (isExtensible || this.isKnownEnumValue(enumValue))
+ return validator.validationError.NONE;
+
+ return validator.validationError.UNKNOWN_ENUM_VALUE;
+ };
+ var FillLightMode = {};
+ FillLightMode.OFF = 0;
+ FillLightMode.AUTO = FillLightMode.OFF + 1;
+ FillLightMode.FLASH = FillLightMode.AUTO + 1;
+
+ FillLightMode.isKnownEnumValue = function(value) {
+ switch (value) {
+ case 0:
+ case 1:
+ case 2:
+ return true;
+ }
+ return false;
+ };
+
+ FillLightMode.validate = function(enumValue) {
+ var isExtensible = false;
+ if (isExtensible || this.isKnownEnumValue(enumValue))
+ return validator.validationError.NONE;
+
+ return validator.validationError.UNKNOWN_ENUM_VALUE;
+ };
+
+ function Range(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ Range.prototype.initDefaults_ = function() {
+ this.max = 0;
+ this.min = 0;
+ this.current = 0;
+ this.step = 0;
+ };
+ Range.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ Range.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 40}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+
+
+ return validator.validationError.NONE;
+ };
+
+ Range.encodedSize = codec.kStructHeaderSize + 32;
+
+ Range.decode = function(decoder) {
+ var packed;
+ var val = new Range();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.max = decoder.decodeStruct(codec.Double);
+ val.min = decoder.decodeStruct(codec.Double);
+ val.current = decoder.decodeStruct(codec.Double);
+ val.step = decoder.decodeStruct(codec.Double);
+ return val;
+ };
+
+ Range.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(Range.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.Double, val.max);
+ encoder.encodeStruct(codec.Double, val.min);
+ encoder.encodeStruct(codec.Double, val.current);
+ encoder.encodeStruct(codec.Double, val.step);
+ };
+ function PhotoState(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ PhotoState.prototype.initDefaults_ = function() {
+ this.supportedWhiteBalanceModes = null;
+ this.currentWhiteBalanceMode = 0;
+ this.currentExposureMode = 0;
+ this.supportedExposureModes = null;
+ this.supportedFocusModes = null;
+ this.currentFocusMode = 0;
+ this.supportsTorch = false;
+ this.torch = false;
+ this.pointsOfInterest = null;
+ this.exposureCompensation = null;
+ this.colorTemperature = null;
+ this.iso = null;
+ this.brightness = null;
+ this.contrast = null;
+ this.saturation = null;
+ this.sharpness = null;
+ this.zoom = null;
+ this.redEyeReduction = 0;
+ this.height = null;
+ this.width = null;
+ this.fillLightMode = null;
+ };
+ PhotoState.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ PhotoState.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 152}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.supportedWhiteBalanceModes
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 0, 4, new codec.Enum(MeteringMode), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.currentWhiteBalanceMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 8, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.supportedExposureModes
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 16, 4, new codec.Enum(MeteringMode), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.currentExposureMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 12, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.supportedFocusModes
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 24, 4, new codec.Enum(MeteringMode), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.currentFocusMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 32, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.pointsOfInterest
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 40, 8, new codec.PointerTo(Point2D), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.exposureCompensation
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 48, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.colorTemperature
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 56, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.iso
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 64, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.brightness
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 72, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.contrast
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 80, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.saturation
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 88, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.sharpness
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 96, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.zoom
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 104, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+
+ // validate PhotoState.redEyeReduction
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 112, RedEyeReduction);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.height
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 120, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.width
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 128, Range, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoState.fillLightMode
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 136, 4, new codec.Enum(FillLightMode), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ PhotoState.encodedSize = codec.kStructHeaderSize + 144;
+
+ PhotoState.decode = function(decoder) {
+ var packed;
+ var val = new PhotoState();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.supportedWhiteBalanceModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode));
+ val.currentWhiteBalanceMode = decoder.decodeStruct(codec.Int32);
+ val.currentExposureMode = decoder.decodeStruct(codec.Int32);
+ val.supportedExposureModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode));
+ val.supportedFocusModes = decoder.decodeArrayPointer(new codec.Enum(MeteringMode));
+ val.currentFocusMode = decoder.decodeStruct(codec.Int32);
+ packed = decoder.readUint8();
+ val.supportsTorch = (packed >> 0) & 1 ? true : false;
+ val.torch = (packed >> 1) & 1 ? true : false;
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ val.pointsOfInterest = decoder.decodeArrayPointer(new codec.PointerTo(Point2D));
+ val.exposureCompensation = decoder.decodeStructPointer(Range);
+ val.colorTemperature = decoder.decodeStructPointer(Range);
+ val.iso = decoder.decodeStructPointer(Range);
+ val.brightness = decoder.decodeStructPointer(Range);
+ val.contrast = decoder.decodeStructPointer(Range);
+ val.saturation = decoder.decodeStructPointer(Range);
+ val.sharpness = decoder.decodeStructPointer(Range);
+ val.zoom = decoder.decodeStructPointer(Range);
+ val.redEyeReduction = decoder.decodeStruct(codec.Int32);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ val.height = decoder.decodeStructPointer(Range);
+ val.width = decoder.decodeStructPointer(Range);
+ val.fillLightMode = decoder.decodeArrayPointer(new codec.Enum(FillLightMode));
+ return val;
+ };
+
+ PhotoState.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(PhotoState.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedWhiteBalanceModes);
+ encoder.encodeStruct(codec.Int32, val.currentWhiteBalanceMode);
+ encoder.encodeStruct(codec.Int32, val.currentExposureMode);
+ encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedExposureModes);
+ encoder.encodeArrayPointer(new codec.Enum(MeteringMode), val.supportedFocusModes);
+ encoder.encodeStruct(codec.Int32, val.currentFocusMode);
+ packed = 0;
+ packed |= (val.supportsTorch & 1) << 0
+ packed |= (val.torch & 1) << 1
+ encoder.writeUint8(packed);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.encodeArrayPointer(new codec.PointerTo(Point2D), val.pointsOfInterest);
+ encoder.encodeStructPointer(Range, val.exposureCompensation);
+ encoder.encodeStructPointer(Range, val.colorTemperature);
+ encoder.encodeStructPointer(Range, val.iso);
+ encoder.encodeStructPointer(Range, val.brightness);
+ encoder.encodeStructPointer(Range, val.contrast);
+ encoder.encodeStructPointer(Range, val.saturation);
+ encoder.encodeStructPointer(Range, val.sharpness);
+ encoder.encodeStructPointer(Range, val.zoom);
+ encoder.encodeStruct(codec.Int32, val.redEyeReduction);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.encodeStructPointer(Range, val.height);
+ encoder.encodeStructPointer(Range, val.width);
+ encoder.encodeArrayPointer(new codec.Enum(FillLightMode), val.fillLightMode);
+ };
+ function Point2D(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ Point2D.prototype.initDefaults_ = function() {
+ this.x = 0;
+ this.y = 0;
+ };
+ Point2D.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ Point2D.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+ return validator.validationError.NONE;
+ };
+
+ Point2D.encodedSize = codec.kStructHeaderSize + 8;
+
+ Point2D.decode = function(decoder) {
+ var packed;
+ var val = new Point2D();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.x = decoder.decodeStruct(codec.Float);
+ val.y = decoder.decodeStruct(codec.Float);
+ return val;
+ };
+
+ Point2D.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(Point2D.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.Float, val.x);
+ encoder.encodeStruct(codec.Float, val.y);
+ };
+ function PhotoSettings(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ PhotoSettings.prototype.initDefaults_ = function() {
+ this.hasWhiteBalanceMode = false;
+ this.hasExposureMode = false;
+ this.hasFocusMode = false;
+ this.hasExposureCompensation = false;
+ this.hasColorTemperature = false;
+ this.hasIso = false;
+ this.hasBrightness = false;
+ this.hasContrast = false;
+ this.hasSaturation = false;
+ this.hasSharpness = false;
+ this.hasZoom = false;
+ this.hasTorch = false;
+ this.torch = false;
+ this.hasFillLightMode = false;
+ this.hasWidth = false;
+ this.hasHeight = false;
+ this.hasRedEyeReduction = false;
+ this.redEyeReduction = false;
+ this.whiteBalanceMode = 0;
+ this.exposureMode = 0;
+ this.focusMode = 0;
+ this.pointsOfInterest = null;
+ this.exposureCompensation = 0;
+ this.colorTemperature = 0;
+ this.iso = 0;
+ this.brightness = 0;
+ this.contrast = 0;
+ this.saturation = 0;
+ this.sharpness = 0;
+ this.zoom = 0;
+ this.fillLightMode = 0;
+ this.width = 0;
+ this.height = 0;
+ };
+ PhotoSettings.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ PhotoSettings.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 120}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+ // validate PhotoSettings.whiteBalanceMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 4, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+ // validate PhotoSettings.exposureMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 8, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+ // validate PhotoSettings.focusMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 12, MeteringMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate PhotoSettings.pointsOfInterest
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 16, 8, new codec.PointerTo(Point2D), false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // validate PhotoSettings.fillLightMode
+ err = messageValidator.validateEnum(offset + codec.kStructHeaderSize + 88, FillLightMode);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+
+
+
+
+
+ return validator.validationError.NONE;
+ };
+
+ PhotoSettings.encodedSize = codec.kStructHeaderSize + 112;
+
+ PhotoSettings.decode = function(decoder) {
+ var packed;
+ var val = new PhotoSettings();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ packed = decoder.readUint8();
+ val.hasWhiteBalanceMode = (packed >> 0) & 1 ? true : false;
+ val.hasExposureMode = (packed >> 1) & 1 ? true : false;
+ val.hasFocusMode = (packed >> 2) & 1 ? true : false;
+ val.hasExposureCompensation = (packed >> 3) & 1 ? true : false;
+ val.hasColorTemperature = (packed >> 4) & 1 ? true : false;
+ val.hasIso = (packed >> 5) & 1 ? true : false;
+ val.hasBrightness = (packed >> 6) & 1 ? true : false;
+ val.hasContrast = (packed >> 7) & 1 ? true : false;
+ packed = decoder.readUint8();
+ val.hasSaturation = (packed >> 0) & 1 ? true : false;
+ val.hasSharpness = (packed >> 1) & 1 ? true : false;
+ val.hasZoom = (packed >> 2) & 1 ? true : false;
+ val.hasTorch = (packed >> 3) & 1 ? true : false;
+ val.torch = (packed >> 4) & 1 ? true : false;
+ val.hasFillLightMode = (packed >> 5) & 1 ? true : false;
+ val.hasWidth = (packed >> 6) & 1 ? true : false;
+ val.hasHeight = (packed >> 7) & 1 ? true : false;
+ packed = decoder.readUint8();
+ val.hasRedEyeReduction = (packed >> 0) & 1 ? true : false;
+ val.redEyeReduction = (packed >> 1) & 1 ? true : false;
+ decoder.skip(1);
+ val.whiteBalanceMode = decoder.decodeStruct(codec.Int32);
+ val.exposureMode = decoder.decodeStruct(codec.Int32);
+ val.focusMode = decoder.decodeStruct(codec.Int32);
+ val.pointsOfInterest = decoder.decodeArrayPointer(new codec.PointerTo(Point2D));
+ val.exposureCompensation = decoder.decodeStruct(codec.Double);
+ val.colorTemperature = decoder.decodeStruct(codec.Double);
+ val.iso = decoder.decodeStruct(codec.Double);
+ val.brightness = decoder.decodeStruct(codec.Double);
+ val.contrast = decoder.decodeStruct(codec.Double);
+ val.saturation = decoder.decodeStruct(codec.Double);
+ val.sharpness = decoder.decodeStruct(codec.Double);
+ val.zoom = decoder.decodeStruct(codec.Double);
+ val.fillLightMode = decoder.decodeStruct(codec.Int32);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ val.width = decoder.decodeStruct(codec.Double);
+ val.height = decoder.decodeStruct(codec.Double);
+ return val;
+ };
+
+ PhotoSettings.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(PhotoSettings.encodedSize);
+ encoder.writeUint32(0);
+ packed = 0;
+ packed |= (val.hasWhiteBalanceMode & 1) << 0
+ packed |= (val.hasExposureMode & 1) << 1
+ packed |= (val.hasFocusMode & 1) << 2
+ packed |= (val.hasExposureCompensation & 1) << 3
+ packed |= (val.hasColorTemperature & 1) << 4
+ packed |= (val.hasIso & 1) << 5
+ packed |= (val.hasBrightness & 1) << 6
+ packed |= (val.hasContrast & 1) << 7
+ encoder.writeUint8(packed);
+ packed = 0;
+ packed |= (val.hasSaturation & 1) << 0
+ packed |= (val.hasSharpness & 1) << 1
+ packed |= (val.hasZoom & 1) << 2
+ packed |= (val.hasTorch & 1) << 3
+ packed |= (val.torch & 1) << 4
+ packed |= (val.hasFillLightMode & 1) << 5
+ packed |= (val.hasWidth & 1) << 6
+ packed |= (val.hasHeight & 1) << 7
+ encoder.writeUint8(packed);
+ packed = 0;
+ packed |= (val.hasRedEyeReduction & 1) << 0
+ packed |= (val.redEyeReduction & 1) << 1
+ encoder.writeUint8(packed);
+ encoder.skip(1);
+ encoder.encodeStruct(codec.Int32, val.whiteBalanceMode);
+ encoder.encodeStruct(codec.Int32, val.exposureMode);
+ encoder.encodeStruct(codec.Int32, val.focusMode);
+ encoder.encodeArrayPointer(new codec.PointerTo(Point2D), val.pointsOfInterest);
+ encoder.encodeStruct(codec.Double, val.exposureCompensation);
+ encoder.encodeStruct(codec.Double, val.colorTemperature);
+ encoder.encodeStruct(codec.Double, val.iso);
+ encoder.encodeStruct(codec.Double, val.brightness);
+ encoder.encodeStruct(codec.Double, val.contrast);
+ encoder.encodeStruct(codec.Double, val.saturation);
+ encoder.encodeStruct(codec.Double, val.sharpness);
+ encoder.encodeStruct(codec.Double, val.zoom);
+ encoder.encodeStruct(codec.Int32, val.fillLightMode);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.encodeStruct(codec.Double, val.width);
+ encoder.encodeStruct(codec.Double, val.height);
+ };
+ function Blob(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ Blob.prototype.initDefaults_ = function() {
+ this.mimeType = null;
+ this.data = null;
+ };
+ Blob.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ Blob.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 24}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate Blob.mimeType
+ err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate Blob.data
+ err = messageValidator.validateArrayPointer(offset + codec.kStructHeaderSize + 8, 1, codec.Uint8, false, [0], 0);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ Blob.encodedSize = codec.kStructHeaderSize + 16;
+
+ Blob.decode = function(decoder) {
+ var packed;
+ var val = new Blob();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.mimeType = decoder.decodeStruct(codec.String);
+ val.data = decoder.decodeArrayPointer(codec.Uint8);
+ return val;
+ };
+
+ Blob.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(Blob.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.String, val.mimeType);
+ encoder.encodeArrayPointer(codec.Uint8, val.data);
+ };
+ function ImageCapture_GetPhotoState_Params(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_GetPhotoState_Params.prototype.initDefaults_ = function() {
+ this.sourceId = null;
+ };
+ ImageCapture_GetPhotoState_Params.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_GetPhotoState_Params.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_GetPhotoState_Params.sourceId
+ err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_GetPhotoState_Params.encodedSize = codec.kStructHeaderSize + 8;
+
+ ImageCapture_GetPhotoState_Params.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_GetPhotoState_Params();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.sourceId = decoder.decodeStruct(codec.String);
+ return val;
+ };
+
+ ImageCapture_GetPhotoState_Params.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_GetPhotoState_Params.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.String, val.sourceId);
+ };
+ function ImageCapture_GetPhotoState_ResponseParams(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_GetPhotoState_ResponseParams.prototype.initDefaults_ = function() {
+ this.state = null;
+ };
+ ImageCapture_GetPhotoState_ResponseParams.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_GetPhotoState_ResponseParams.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_GetPhotoState_ResponseParams.state
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, PhotoState, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_GetPhotoState_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;
+
+ ImageCapture_GetPhotoState_ResponseParams.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_GetPhotoState_ResponseParams();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.state = decoder.decodeStructPointer(PhotoState);
+ return val;
+ };
+
+ ImageCapture_GetPhotoState_ResponseParams.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_GetPhotoState_ResponseParams.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStructPointer(PhotoState, val.state);
+ };
+ function ImageCapture_SetOptions_Params(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_SetOptions_Params.prototype.initDefaults_ = function() {
+ this.sourceId = null;
+ this.settings = null;
+ };
+ ImageCapture_SetOptions_Params.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_SetOptions_Params.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 24}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_SetOptions_Params.sourceId
+ err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_SetOptions_Params.settings
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 8, PhotoSettings, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_SetOptions_Params.encodedSize = codec.kStructHeaderSize + 16;
+
+ ImageCapture_SetOptions_Params.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_SetOptions_Params();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.sourceId = decoder.decodeStruct(codec.String);
+ val.settings = decoder.decodeStructPointer(PhotoSettings);
+ return val;
+ };
+
+ ImageCapture_SetOptions_Params.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_SetOptions_Params.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.String, val.sourceId);
+ encoder.encodeStructPointer(PhotoSettings, val.settings);
+ };
+ function ImageCapture_SetOptions_ResponseParams(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_SetOptions_ResponseParams.prototype.initDefaults_ = function() {
+ this.success = false;
+ };
+ ImageCapture_SetOptions_ResponseParams.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_SetOptions_ResponseParams.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_SetOptions_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;
+
+ ImageCapture_SetOptions_ResponseParams.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_SetOptions_ResponseParams();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ packed = decoder.readUint8();
+ val.success = (packed >> 0) & 1 ? true : false;
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ decoder.skip(1);
+ return val;
+ };
+
+ ImageCapture_SetOptions_ResponseParams.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_SetOptions_ResponseParams.encodedSize);
+ encoder.writeUint32(0);
+ packed = 0;
+ packed |= (val.success & 1) << 0
+ encoder.writeUint8(packed);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ encoder.skip(1);
+ };
+ function ImageCapture_TakePhoto_Params(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_TakePhoto_Params.prototype.initDefaults_ = function() {
+ this.sourceId = null;
+ };
+ ImageCapture_TakePhoto_Params.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_TakePhoto_Params.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_TakePhoto_Params.sourceId
+ err = messageValidator.validateStringPointer(offset + codec.kStructHeaderSize + 0, false)
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_TakePhoto_Params.encodedSize = codec.kStructHeaderSize + 8;
+
+ ImageCapture_TakePhoto_Params.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_TakePhoto_Params();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.sourceId = decoder.decodeStruct(codec.String);
+ return val;
+ };
+
+ ImageCapture_TakePhoto_Params.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_TakePhoto_Params.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStruct(codec.String, val.sourceId);
+ };
+ function ImageCapture_TakePhoto_ResponseParams(values) {
+ this.initDefaults_();
+ this.initFields_(values);
+ }
+
+
+ ImageCapture_TakePhoto_ResponseParams.prototype.initDefaults_ = function() {
+ this.blob = null;
+ };
+ ImageCapture_TakePhoto_ResponseParams.prototype.initFields_ = function(fields) {
+ for(var field in fields) {
+ if (this.hasOwnProperty(field))
+ this[field] = fields[field];
+ }
+ };
+
+ ImageCapture_TakePhoto_ResponseParams.validate = function(messageValidator, offset) {
+ var err;
+ err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ var kVersionSizes = [
+ {version: 0, numBytes: 16}
+ ];
+ err = messageValidator.validateStructVersion(offset, kVersionSizes);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+
+ // validate ImageCapture_TakePhoto_ResponseParams.blob
+ err = messageValidator.validateStructPointer(offset + codec.kStructHeaderSize + 0, Blob, false);
+ if (err !== validator.validationError.NONE)
+ return err;
+
+ return validator.validationError.NONE;
+ };
+
+ ImageCapture_TakePhoto_ResponseParams.encodedSize = codec.kStructHeaderSize + 8;
+
+ ImageCapture_TakePhoto_ResponseParams.decode = function(decoder) {
+ var packed;
+ var val = new ImageCapture_TakePhoto_ResponseParams();
+ var numberOfBytes = decoder.readUint32();
+ var version = decoder.readUint32();
+ val.blob = decoder.decodeStructPointer(Blob);
+ return val;
+ };
+
+ ImageCapture_TakePhoto_ResponseParams.encode = function(encoder, val) {
+ var packed;
+ encoder.writeUint32(ImageCapture_TakePhoto_ResponseParams.encodedSize);
+ encoder.writeUint32(0);
+ encoder.encodeStructPointer(Blob, val.blob);
+ };
+ var kImageCapture_GetPhotoState_Name = 0;
+ var kImageCapture_SetOptions_Name = 1;
+ var kImageCapture_TakePhoto_Name = 2;
+
+ function ImageCapturePtr(handleOrPtrInfo) {
+ this.ptr = new bindings.InterfacePtrController(ImageCapture,
+ handleOrPtrInfo);
+ }
+
+ function ImageCaptureAssociatedPtr(associatedInterfacePtrInfo) {
+ this.ptr = new associatedBindings.AssociatedInterfacePtrController(
+ ImageCapture, associatedInterfacePtrInfo);
+ }
+
+ ImageCaptureAssociatedPtr.prototype =
+ Object.create(ImageCapturePtr.prototype);
+ ImageCaptureAssociatedPtr.prototype.constructor =
+ ImageCaptureAssociatedPtr;
+
+ function ImageCaptureProxy(receiver) {
+ this.receiver_ = receiver;
+ }
+ ImageCapturePtr.prototype.getPhotoState = function() {
+ return ImageCaptureProxy.prototype.getPhotoState
+ .apply(this.ptr.getProxy(), arguments);
+ };
+
+ ImageCaptureProxy.prototype.getPhotoState = function(sourceId) {
+ var params_ = new ImageCapture_GetPhotoState_Params();
+ params_.sourceId = sourceId;
+ return new Promise(function(resolve, reject) {
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_GetPhotoState_Name,
+ codec.align(ImageCapture_GetPhotoState_Params.encodedSize),
+ codec.kMessageExpectsResponse, 0);
+ builder.encodeStruct(ImageCapture_GetPhotoState_Params, params_);
+ var message = builder.finish();
+ this.receiver_.acceptAndExpectResponse(message).then(function(message) {
+ var reader = new codec.MessageReader(message);
+ var responseParams =
+ reader.decodeStruct(ImageCapture_GetPhotoState_ResponseParams);
+ resolve(responseParams);
+ }).catch(function(result) {
+ reject(Error("Connection error: " + result));
+ });
+ }.bind(this));
+ };
+ ImageCapturePtr.prototype.setOptions = function() {
+ return ImageCaptureProxy.prototype.setOptions
+ .apply(this.ptr.getProxy(), arguments);
+ };
+
+ ImageCaptureProxy.prototype.setOptions = function(sourceId, settings) {
+ var params_ = new ImageCapture_SetOptions_Params();
+ params_.sourceId = sourceId;
+ params_.settings = settings;
+ return new Promise(function(resolve, reject) {
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_SetOptions_Name,
+ codec.align(ImageCapture_SetOptions_Params.encodedSize),
+ codec.kMessageExpectsResponse, 0);
+ builder.encodeStruct(ImageCapture_SetOptions_Params, params_);
+ var message = builder.finish();
+ this.receiver_.acceptAndExpectResponse(message).then(function(message) {
+ var reader = new codec.MessageReader(message);
+ var responseParams =
+ reader.decodeStruct(ImageCapture_SetOptions_ResponseParams);
+ resolve(responseParams);
+ }).catch(function(result) {
+ reject(Error("Connection error: " + result));
+ });
+ }.bind(this));
+ };
+ ImageCapturePtr.prototype.takePhoto = function() {
+ return ImageCaptureProxy.prototype.takePhoto
+ .apply(this.ptr.getProxy(), arguments);
+ };
+
+ ImageCaptureProxy.prototype.takePhoto = function(sourceId) {
+ var params_ = new ImageCapture_TakePhoto_Params();
+ params_.sourceId = sourceId;
+ return new Promise(function(resolve, reject) {
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_TakePhoto_Name,
+ codec.align(ImageCapture_TakePhoto_Params.encodedSize),
+ codec.kMessageExpectsResponse, 0);
+ builder.encodeStruct(ImageCapture_TakePhoto_Params, params_);
+ var message = builder.finish();
+ this.receiver_.acceptAndExpectResponse(message).then(function(message) {
+ var reader = new codec.MessageReader(message);
+ var responseParams =
+ reader.decodeStruct(ImageCapture_TakePhoto_ResponseParams);
+ resolve(responseParams);
+ }).catch(function(result) {
+ reject(Error("Connection error: " + result));
+ });
+ }.bind(this));
+ };
+
+ function ImageCaptureStub(delegate) {
+ this.delegate_ = delegate;
+ }
+ ImageCaptureStub.prototype.getPhotoState = function(sourceId) {
+ return this.delegate_ && this.delegate_.getPhotoState && this.delegate_.getPhotoState(sourceId);
+ }
+ ImageCaptureStub.prototype.setOptions = function(sourceId, settings) {
+ return this.delegate_ && this.delegate_.setOptions && this.delegate_.setOptions(sourceId, settings);
+ }
+ ImageCaptureStub.prototype.takePhoto = function(sourceId) {
+ return this.delegate_ && this.delegate_.takePhoto && this.delegate_.takePhoto(sourceId);
+ }
+
+ ImageCaptureStub.prototype.accept = function(message) {
+ var reader = new codec.MessageReader(message);
+ switch (reader.messageName) {
+ default:
+ return false;
+ }
+ };
+
+ ImageCaptureStub.prototype.acceptWithResponder =
+ function(message, responder) {
+ var reader = new codec.MessageReader(message);
+ switch (reader.messageName) {
+ case kImageCapture_GetPhotoState_Name:
+ var params = reader.decodeStruct(ImageCapture_GetPhotoState_Params);
+ this.getPhotoState(params.sourceId).then(function(response) {
+ var responseParams =
+ new ImageCapture_GetPhotoState_ResponseParams();
+ responseParams.state = response.state;
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_GetPhotoState_Name,
+ codec.align(ImageCapture_GetPhotoState_ResponseParams.encodedSize),
+ codec.kMessageIsResponse, reader.requestID);
+ builder.encodeStruct(ImageCapture_GetPhotoState_ResponseParams,
+ responseParams);
+ var message = builder.finish();
+ responder.accept(message);
+ });
+ return true;
+ case kImageCapture_SetOptions_Name:
+ var params = reader.decodeStruct(ImageCapture_SetOptions_Params);
+ this.setOptions(params.sourceId, params.settings).then(function(response) {
+ var responseParams =
+ new ImageCapture_SetOptions_ResponseParams();
+ responseParams.success = response.success;
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_SetOptions_Name,
+ codec.align(ImageCapture_SetOptions_ResponseParams.encodedSize),
+ codec.kMessageIsResponse, reader.requestID);
+ builder.encodeStruct(ImageCapture_SetOptions_ResponseParams,
+ responseParams);
+ var message = builder.finish();
+ responder.accept(message);
+ });
+ return true;
+ case kImageCapture_TakePhoto_Name:
+ var params = reader.decodeStruct(ImageCapture_TakePhoto_Params);
+ this.takePhoto(params.sourceId).then(function(response) {
+ var responseParams =
+ new ImageCapture_TakePhoto_ResponseParams();
+ responseParams.blob = response.blob;
+ var builder = new codec.MessageV1Builder(
+ kImageCapture_TakePhoto_Name,
+ codec.align(ImageCapture_TakePhoto_ResponseParams.encodedSize),
+ codec.kMessageIsResponse, reader.requestID);
+ builder.encodeStruct(ImageCapture_TakePhoto_ResponseParams,
+ responseParams);
+ var message = builder.finish();
+ responder.accept(message);
+ });
+ return true;
+ default:
+ return false;
+ }
+ };
+
+ function validateImageCaptureRequest(messageValidator) {
+ var message = messageValidator.message;
+ var paramsClass = null;
+ switch (message.getName()) {
+ case kImageCapture_GetPhotoState_Name:
+ if (message.expectsResponse())
+ paramsClass = ImageCapture_GetPhotoState_Params;
+ break;
+ case kImageCapture_SetOptions_Name:
+ if (message.expectsResponse())
+ paramsClass = ImageCapture_SetOptions_Params;
+ break;
+ case kImageCapture_TakePhoto_Name:
+ if (message.expectsResponse())
+ paramsClass = ImageCapture_TakePhoto_Params;
+ break;
+ }
+ if (paramsClass === null)
+ return validator.validationError.NONE;
+ return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
+ }
+
+ function validateImageCaptureResponse(messageValidator) {
+ var message = messageValidator.message;
+ var paramsClass = null;
+ switch (message.getName()) {
+ case kImageCapture_GetPhotoState_Name:
+ if (message.isResponse())
+ paramsClass = ImageCapture_GetPhotoState_ResponseParams;
+ break;
+ case kImageCapture_SetOptions_Name:
+ if (message.isResponse())
+ paramsClass = ImageCapture_SetOptions_ResponseParams;
+ break;
+ case kImageCapture_TakePhoto_Name:
+ if (message.isResponse())
+ paramsClass = ImageCapture_TakePhoto_ResponseParams;
+ break;
+ }
+ if (paramsClass === null)
+ return validator.validationError.NONE;
+ return paramsClass.validate(messageValidator, messageValidator.message.getHeaderNumBytes());
+ }
+
+ var ImageCapture = {
+ name: 'media.mojom.ImageCapture',
+ kVersion: 0,
+ ptrClass: ImageCapturePtr,
+ proxyClass: ImageCaptureProxy,
+ stubClass: ImageCaptureStub,
+ validateRequest: validateImageCaptureRequest,
+ validateResponse: validateImageCaptureResponse,
+ };
+ ImageCaptureStub.prototype.validator = validateImageCaptureRequest;
+ ImageCaptureProxy.prototype.validator = validateImageCaptureResponse;
+ exports.MeteringMode = MeteringMode;
+ exports.RedEyeReduction = RedEyeReduction;
+ exports.FillLightMode = FillLightMode;
+ exports.Range = Range;
+ exports.PhotoState = PhotoState;
+ exports.Point2D = Point2D;
+ exports.PhotoSettings = PhotoSettings;
+ exports.Blob = Blob;
+ exports.ImageCapture = ImageCapture;
+ exports.ImageCapturePtr = ImageCapturePtr;
+ exports.ImageCaptureAssociatedPtr = ImageCaptureAssociatedPtr;
+})(); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js
new file mode 100644
index 00000000000..a700bc97b3e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/mock-imagecapture.js
@@ -0,0 +1,227 @@
+"use strict";
+
+var ImageCaptureTest = (() => {
+ // Class that mocks ImageCapture interface defined in
+ // https://cs.chromium.org/chromium/src/media/capture/mojom/image_capture.mojom
+ class MockImageCapture {
+ constructor() {
+ this.interceptor_ = new MojoInterfaceInterceptor(
+ media.mojom.ImageCapture.name);
+ this.interceptor_.oninterfacerequest =
+ e => this.bindingSet_.addBinding(this, e.handle);
+ this.interceptor_.start();
+
+ this.state_ = {
+ state: {
+ supportedWhiteBalanceModes: [
+ media.mojom.MeteringMode.SINGLE_SHOT,
+ media.mojom.MeteringMode.CONTINUOUS
+ ],
+ currentWhiteBalanceMode: media.mojom.MeteringMode.CONTINUOUS,
+ supportedExposureModes: [
+ media.mojom.MeteringMode.SINGLE_SHOT,
+ media.mojom.MeteringMode.CONTINUOUS
+ ],
+ currentExposureMode: media.mojom.MeteringMode.SINGLE_SHOT,
+ supportedFocusModes: [
+ media.mojom.MeteringMode.MANUAL,
+ media.mojom.MeteringMode.SINGLE_SHOT
+ ],
+ currentFocusMode: media.mojom.MeteringMode.MANUAL,
+ pointsOfInterest: [{
+ x: 0.4,
+ y: 0.6
+ }],
+
+ exposureCompensation: {
+ min: -200.0,
+ max: 200.0,
+ current: 33.0,
+ step: 33.0
+ },
+ colorTemperature: {
+ min: 2500.0,
+ max: 6500.0,
+ current: 6000.0,
+ step: 1000.0
+ },
+ iso: {
+ min: 100.0,
+ max: 12000.0,
+ current: 400.0,
+ step: 1.0
+ },
+
+ brightness: {
+ min: 1.0,
+ max: 10.0,
+ current: 5.0,
+ step: 1.0
+ },
+ contrast: {
+ min: 2.0,
+ max: 9.0,
+ current: 5.0,
+ step: 1.0
+ },
+ saturation: {
+ min: 3.0,
+ max: 8.0,
+ current: 6.0,
+ step: 1.0
+ },
+ sharpness: {
+ min: 4.0,
+ max: 7.0,
+ current: 7.0,
+ step: 1.0
+ },
+
+ zoom: {
+ min: 0.0,
+ max: 10.0,
+ current: 5.0,
+ step: 5.0
+ },
+
+ supportsTorch: true,
+ torch: false,
+
+ redEyeReduction: media.mojom.RedEyeReduction.CONTROLLABLE,
+ height: {
+ min: 240.0,
+ max: 2448.0,
+ current: 240.0,
+ step: 2.0
+ },
+ width: {
+ min: 320.0,
+ max: 3264.0,
+ current: 320.0,
+ step: 3.0
+ },
+ fillLightMode: [
+ media.mojom.FillLightMode.AUTO, media.mojom.FillLightMode.FLASH
+ ],
+ }
+ };
+ this.settings_ = null;
+ this.bindingSet_ = new mojo.BindingSet(media.mojom.ImageCapture);
+ }
+
+ reset() {
+ this.bindingSet_.closeAllBindings();
+ this.interceptor_.stop();
+ }
+
+ getPhotoState(source_id) {
+ return Promise.resolve(this.state_);
+ }
+
+ setOptions(source_id, settings) {
+ this.settings_ = settings;
+ if (settings.hasIso)
+ this.state_.state.iso.current = settings.iso;
+ if (settings.hasHeight)
+ this.state_.state.height.current = settings.height;
+ if (settings.hasWidth)
+ this.state_.state.width.current = settings.width;
+ if (settings.hasZoom)
+ this.state_.state.zoom.current = settings.zoom;
+ if (settings.hasFocusMode)
+ this.state_.state.currentFocusMode = settings.focusMode;
+
+ if (settings.pointsOfInterest.length > 0) {
+ this.state_.state.pointsOfInterest =
+ settings.pointsOfInterest;
+ }
+
+ if (settings.hasExposureMode)
+ this.state_.state.currentExposureMode = settings.exposureMode;
+
+ if (settings.hasExposureCompensation) {
+ this.state_.state.exposureCompensation.current =
+ settings.exposureCompensation;
+ }
+ if (settings.hasWhiteBalanceMode) {
+ this.state_.state.currentWhiteBalanceMode =
+ settings.whiteBalanceMode;
+ }
+ if (settings.hasFillLightMode)
+ this.state_.state.fillLightMode = [settings.fillLightMode];
+ if (settings.hasRedEyeReduction)
+ this.state_.state.redEyeReduction = settings.redEyeReduction;
+ if (settings.hasColorTemperature) {
+ this.state_.state.colorTemperature.current =
+ settings.colorTemperature;
+ }
+ if (settings.hasBrightness)
+ this.state_.state.brightness.current = settings.brightness;
+ if (settings.hasContrast)
+ this.state_.state.contrast.current = settings.contrast;
+ if (settings.hasSaturation)
+ this.state_.state.saturation.current = settings.saturation;
+ if (settings.hasSharpness)
+ this.state_.state.sharpness.current = settings.sharpness;
+
+ if (settings.hasTorch)
+ this.state_.state.torch = settings.torch;
+
+ return Promise.resolve({
+ success: true
+ });
+ }
+
+ takePhoto(source_id) {
+ return Promise.resolve({
+ blob: {
+ mimeType: 'image/cat',
+ data: new Array(2)
+ }
+ });
+ }
+
+ state() {
+ return this.state_.state;
+ }
+
+ options() {
+ return this.settings_;
+ }
+ }
+
+ let testInternal = {
+ initialized: false,
+ mockImageCapture: null
+ }
+
+ class ImageCaptureTestChromium {
+
+ constructor() {
+ Object.freeze(this); // Make it immutable.
+ }
+
+ initialize() {
+ if (testInternal.initialized)
+ throw new Error('Call reset() before initialize().');
+
+ testInternal.mockImageCapture = new MockImageCapture;
+ testInternal.initialized = true;
+ }
+ // Resets state of image capture mocks between test runs.
+ async reset() {
+ if (!testInternal.initialized)
+ throw new Error('Call initialize() before reset().');
+ testInternal.mockImageCapture.reset();
+ testInternal.mockImageCapture = null;
+ testInternal.initialized = false;
+
+ await new Promise(resolve => setTimeout(resolve, 0));
+ }
+ mockImageCapture() {
+ return testInternal.mockImageCapture;
+ }
+ }
+
+ return ImageCaptureTestChromium;
+})(); \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js
new file mode 100644
index 00000000000..add04fa5825
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js
@@ -0,0 +1,40 @@
+'use strict';
+
+// This polyfill prepares a child context to be attached to a parent context.
+// The parent must call navigator.usb.test.attachToContext() to attach to the
+// child context.
+(() => {
+ if (this.constructor.name === 'DedicatedWorkerGlobalScope' ||
+ this !== window.top) {
+
+ // Run Chromium specific set up code.
+ if (typeof MojoInterfaceInterceptor !== 'undefined') {
+ let messageChannel = new MessageChannel();
+ messageChannel.port1.onmessage = async (messageEvent) => {
+ if (messageEvent.data.type === 'Attach') {
+ messageEvent.data.interfaces.forEach(interfaceName => {
+ let interfaceInterceptor =
+ new MojoInterfaceInterceptor(interfaceName);
+ interfaceInterceptor.oninterfacerequest =
+ e => messageChannel.port1.postMessage({
+ type: interfaceName,
+ handle: e.handle
+ }, [e.handle]);
+ interfaceInterceptor.start();
+ });
+
+ // Wait for a call to GetDevices() to ensure that the interface
+ // handles are forwarded to the parent context.
+ await navigator.usb.getDevices();
+ messageChannel.port1.postMessage({ type: 'Complete' });
+ }
+ };
+
+ let message = { type: 'ReadyForAttachment', port: messageChannel.port2 };
+ if (typeof Window !== 'undefined')
+ parent.postMessage(message, '*', [messageChannel.port2]);
+ else
+ postMessage(message, [messageChannel.port2]);
+ }
+ }
+})();
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers
new file mode 100644
index 00000000000..6805c323df5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-child-test.js.headers
@@ -0,0 +1 @@
+Content-Type: text/javascript; charset=utf-8
diff --git a/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js b/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js
index 9037a109c91..5f9262655f3 100644
--- a/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js
+++ b/tests/wpt/web-platform-tests/resources/chromium/webusb-test.js
@@ -12,9 +12,23 @@ let internal = {
webUsbService: null,
webUsbServiceInterceptor: null,
- webUsbServiceCrossFrameProxy: null,
+
+ messagePort: null,
};
+function getMessagePort(target) {
+ return new Promise(resolve => {
+ target.addEventListener('message', messageEvent => {
+ if (messageEvent.data.type === 'ReadyForAttachment') {
+ if (internal.messagePort === null) {
+ internal.messagePort = messageEvent.data.port;
+ }
+ resolve();
+ }
+ }, {once: true});
+ });
+}
+
// Converts an ECMAScript String object to an instance of
// mojo_base.mojom.String16.
function mojoString16ToString(string16) {
@@ -421,25 +435,6 @@ class FakeUSBDevice {
}
}
-// A helper for forwarding MojoHandle instances from one frame to another.
-class CrossFrameHandleProxy {
- constructor(callback) {
- let {handle0, handle1} = Mojo.createMessagePipe();
- this.sender_ = handle0;
- this.receiver_ = handle1;
- this.receiver_.watch({readable: true}, () => {
- let message = this.receiver_.readMessage();
- assert_equals(message.buffer.byteLength, 0);
- assert_equals(message.handles.length, 1);
- callback(message.handles[0]);
- });
- }
-
- forwardHandle(handle) {
- this.sender_.writeMessage(new ArrayBuffer, [handle]);
- }
-}
-
class USBTest {
constructor() {
this.onrequestdevice = undefined;
@@ -449,14 +444,17 @@ class USBTest {
if (internal.initialized)
return;
+ // Be ready to handle 'ReadyForAttachment' message from child iframes.
+ if ('window' in self) {
+ getMessagePort(window);
+ }
+
internal.webUsbService = new FakeWebUsbService();
internal.webUsbServiceInterceptor =
new MojoInterfaceInterceptor(blink.mojom.WebUsbService.name);
internal.webUsbServiceInterceptor.oninterfacerequest =
e => internal.webUsbService.addBinding(e.handle);
internal.webUsbServiceInterceptor.start();
- internal.webUsbServiceCrossFrameProxy = new CrossFrameHandleProxy(
- handle => internal.webUsbService.addBinding(handle));
// Wait for a call to GetDevices() to pass between the renderer and the
// mock in order to establish that everything is set up.
@@ -464,20 +462,32 @@ class USBTest {
internal.initialized = true;
}
- async attachToWindow(otherWindow) {
+ // Returns a promise that is resolved when the implementation of |usb| in the
+ // global scope for |context| is controlled by the current context.
+ attachToContext(context) {
if (!internal.initialized)
- throw new Error('Call initialize() before attachToWindow().');
-
- otherWindow.webUsbServiceInterceptor =
- new otherWindow.MojoInterfaceInterceptor(
- blink.mojom.WebUsbService.name);
- otherWindow.webUsbServiceInterceptor.oninterfacerequest =
- e => internal.webUsbServiceCrossFrameProxy.forwardHandle(e.handle);
- otherWindow.webUsbServiceInterceptor.start();
-
- // Wait for a call to GetDevices() to pass between the renderer and the
- // mock in order to establish that everything is set up.
- await otherWindow.navigator.usb.getDevices();
+ throw new Error('Call initialize() before attachToContext()');
+
+ let target = context.constructor.name === 'Worker' ? context : window;
+ return getMessagePort(target).then(() => {
+ return new Promise(resolve => {
+ internal.messagePort.onmessage = channelEvent => {
+ switch (channelEvent.data.type) {
+ case blink.mojom.WebUsbService.name:
+ internal.webUsbService.addBinding(channelEvent.data.handle);
+ break;
+ case 'Complete':
+ resolve();
+ break;
+ }
+ };
+ internal.messagePort.postMessage({
+ type: 'Attach' ,
+ interfaces: [
+ blink.mojom.WebUsbService.name,
+ ]});
+ });
+ });
}
addFakeDevice(deviceInit) {
@@ -501,6 +511,9 @@ class USBTest {
// the fact that this polyfill can do this synchronously.
return new Promise(resolve => {
setTimeout(() => {
+ if (internal.messagePort !== null)
+ internal.messagePort.close();
+ internal.messagePort = null;
internal.webUsbService.removeAllDevices();
resolve();
}, 0);
diff --git a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html
index 3a0444733b5..9b66419cb0a 100644
--- a/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html
+++ b/tests/wpt/web-platform-tests/screen-capture/getdisplaymedia.https.html
@@ -74,4 +74,18 @@ promise_test(function() {
});
}, 'getDisplayMedia() call with non-bool constraint');
+// Content shell picks a fake desktop device by default.
+promise_test(function() {
+ assert_idl_attribute(navigator, 'getDisplayMedia');
+
+ return navigator.getDisplayMedia({video: true}).then(function(s) {
+ assert_equals(s.getVideoTracks().length, 1);
+ assert_equals(s.getAudioTracks().length, 0);
+ var settings = s.getVideoTracks()[0].getSettings();
+ assert_equals(settings.displaySurface, "monitor");
+ assert_equals(settings.logicalSurface, true);
+ assert_equals(settings.cursor, "never");
+ });
+}, 'getDisplayMedia() with getSettings');
+
</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py
deleted file mode 100644
index f77ef284ac0..00000000000
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/update-top-level-worker.py
+++ /dev/null
@@ -1,18 +0,0 @@
-import time
-
-def main(request, response):
- # no-cache itself to ensure the user agent finds a new version for each update.
- headers = [('Cache-Control', 'no-cache, must-revalidate'),
- ('Pragma', 'no-cache')]
- content_type = 'application/javascript'
-
- headers.append(('Content-Type', content_type))
-
- body = '''
-let promise = self.registration.update()
-onmessage = (evt) => {
- promise.then(r => {
- evt.source.postMessage(self.registration === r ? 'PASS' : 'FAIL');
- });
-};'''
- return headers, '/* %s %s */ %s' % (time.time(), time.clock(), body)
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html
deleted file mode 100644
index e382028b44a..00000000000
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/update-top-level.https.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<!DOCTYPE html>
-<title>Service Worker: Registration update()</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/test-helpers.sub.js"></script>
-<script>
-'use strict';
-
-function wait_for_message() {
- return new Promise(resolve => {
- navigator.serviceWorker.addEventListener("message",
- e => {
- resolve(e.data);
- }, { once: true });
- });
-}
-
-promise_test(async t => {
- const script = './resources/update-top-level-worker.py';
- const scope = './resources/empty.html?update-result';
-
- let reg = await navigator.serviceWorker.register(script, { scope });
- t.add_cleanup(async _ => await reg.unregister());
- await wait_for_state(t, reg.installing, 'activated');
-
- reg.addEventListener("updatefound",
- () => assert_unreached("shouldn't find an update"));
-
- reg.active.postMessage("ping");
- assert_equals(await wait_for_message(), 'PASS', 'did not hang');
-}, 'A serviceworker with a top-level update should not hang');
-</script>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html
index 637f494e4c1..9394ff75c4a 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/webvtt-cross-origin.https.html
@@ -7,11 +7,14 @@
<script src="resources/test-helpers.sub.js?pipe=sub"></script>
<body>
<script>
-// This file tests opaque responses for WebVTT text track. It creates
-// an iframe with a <track> element, controlled by a service worker.
+// This file tests responses for WebVTT text track from a service worker. It
+// creates an iframe with a <track> element, controlled by a service worker.
// Each test tries to load a text track, the service worker intercepts the
-// requests and responds with opaque or non-opaque responses. The opaque
-// responses should result in load errors.
+// requests and responds with opaque or non-opaque responses. As the
+// crossorigin attribute is not set, request's mode is always "same-origin",
+// and as specified in https://fetch.spec.whatwg.org/#http-fetch,
+// a response from a service worker whose type is neither "basic" nor
+// "default" is rejected.
const host_info = get_host_info();
const kScript = 'resources/fetch-rewrite-worker.js';
@@ -100,9 +103,9 @@ promise_test(t => {
url += '&credentials=same-origin';
return load_track(url)
.then(result => {
- assert_equals(result, 'load event');
+ assert_equals(result, 'error event');
});
- }, 'cross-origin text track with approved cors request should load');
+ }, 'cross-origin text track with approved cors request should not load');
// Redirect tests.
@@ -165,8 +168,8 @@ promise_test(t => {
url += '&credentials=same-origin';
return load_track(url)
.then(result => {
- assert_equals(result, 'load event');
+ assert_equals(result, 'error event');
});
- }, 'same-origin text track that redirects to a cross-origin text track with approved cors should load');
+ }, 'same-origin text track that redirects to a cross-origin text track with approved cors should not load');
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html b/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html
deleted file mode 100644
index 2366760bdbe..00000000000
--- a/tests/wpt/web-platform-tests/storage/estimate-indexeddb-worker.https.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>StorageManager: estimate() for indexeddb from worker</title>
- <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate">
- <meta name="author" title="Mozilla" href="https://www.mozilla.org">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
- <script>
- fetch_tests_from_worker(new Worker("storage-estimate-indexeddb.js"));
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/storage/storage-estimate-indexeddb.js b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.any.js
index 5f7895350ef..3e34ad19bab 100644
--- a/tests/wpt/web-platform-tests/storage/storage-estimate-indexeddb.js
+++ b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.any.js
@@ -1,15 +1,13 @@
-if (this.document === undefined) {
- importScripts("/resources/testharness.js");
-}
+// META: title=StorageManager: estimate() for indexeddb
-test(function(t) {
+test(t => {
assert_true('estimate' in navigator.storage);
assert_equals(typeof navigator.storage.estimate, 'function');
assert_true(navigator.storage.estimate() instanceof Promise);
}, 'estimate() method exists and returns a Promise');
-promise_test(function(t) {
- return navigator.storage.estimate().then(function(result) {
+promise_test(t => {
+ return navigator.storage.estimate().then(result => {
assert_true(typeof result === 'object');
assert_true('usage' in result);
assert_equals(typeof result.usage, 'number');
@@ -18,20 +16,20 @@ promise_test(function(t) {
});
}, 'estimate() resolves to dictionary with members');
-promise_test(function(t) {
+promise_test(t => {
const arraySize = 1e6;
const objectStoreName = "storageManager";
const dbname = this.window ? window.location.pathname :
- "estimate-worker.https.html";
+ "estimate-worker.https.html";
let db;
let usageBeforeCreate, usageAfterCreate, usageAfterPut;
function deleteDB(name) {
- return new Promise(function(resolve, reject) {
+ return new Promise((resolve, reject) => {
let deleteRequest = indexedDB.deleteDatabase(name);
- deleteRequest.onerror = function() { reject(deleteRequest.error); };
- deleteRequest.onsuccess = function() { resolve(); };
+ deleteRequest.onerror = () => { reject(deleteRequest.error); };
+ deleteRequest.onsuccess = () => { resolve(); };
});
}
@@ -41,13 +39,13 @@ promise_test(function(t) {
})
.then(estimate => {
usageBeforeCreate = estimate.usage;
- return new Promise(function(resolve, reject) {
+ return new Promise((resolve, reject) => {
let openRequest = indexedDB.open(dbname);
- openRequest.onerror = function() { reject(openRequest.error); };
- openRequest.onupgradeneeded = function(event) {
+ openRequest.onerror = () => { reject(openRequest.error); };
+ openRequest.onupgradeneeded = event => {
openRequest.result.createObjectStore(objectStoreName);
};
- openRequest.onsuccess = function() { resolve(openRequest.result); };
+ openRequest.onsuccess = () => { resolve(openRequest.result); };
});
})
.then(connection => {
@@ -56,8 +54,9 @@ promise_test(function(t) {
})
.then(estimate => {
usageAfterCreate = estimate.usage;
- assert_greater_than(usageAfterCreate, usageBeforeCreate,
- 'estimated usage should increase after object store is created');
+ assert_greater_than(
+ usageAfterCreate, usageBeforeCreate,
+ 'estimated usage should increase after object store is created');
let txn = db.transaction(objectStoreName, 'readwrite');
let buffer = new ArrayBuffer(arraySize);
@@ -70,9 +69,9 @@ promise_test(function(t) {
let testBlob = new Blob([buffer], {type: "binary/random"});
txn.objectStore(objectStoreName).add(testBlob, 1);
- return new Promise(function(resolve, reject) {
- txn.onabort = function() { reject(txn.error); };
- txn.oncomplete = function() { resolve(); };
+ return new Promise((resolve, reject) => {
+ txn.onabort = () => { reject(txn.error); };
+ txn.oncomplete = () => { resolve(); };
});
})
.then(() => {
@@ -80,15 +79,14 @@ promise_test(function(t) {
})
.then(estimate => {
usageAfterPut = estimate.usage;
- assert_greater_than(usageAfterPut, usageAfterCreate,
- 'estimated usage should increase after large value is stored');
+ assert_greater_than(
+ usageAfterPut, usageAfterCreate,
+ 'estimated usage should increase after large value is stored');
db.close();
- return deleteDB(dbname)
+ return deleteDB(dbname);
})
.then(() => {
t.done();
- })
+ });
}, 'estimate() shows usage increase after large value is stored');
-
-done();
diff --git a/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html b/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html
deleted file mode 100644
index 3f5e1589d34..00000000000
--- a/tests/wpt/web-platform-tests/storage/estimate-indexeddb.https.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>StorageManager: estimate() for indexeddb</title>
- <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate">
- <meta name="author" title="Mozilla" href="https://www.mozilla.org">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
- <script src="storage-estimate-indexeddb.js"></script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/storage/estimate-parallel.https.html b/tests/wpt/web-platform-tests/storage/estimate-parallel.https.any.js
index 571b08cd5e2..090f004b851 100644
--- a/tests/wpt/web-platform-tests/storage/estimate-parallel.https.html
+++ b/tests/wpt/web-platform-tests/storage/estimate-parallel.https.any.js
@@ -1,10 +1,5 @@
-<!DOCTYPE html>
-<meta charset="utf-8">
-<title>StorageManager: multiple estimate() calls in parallel</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
+// META: title=StorageManager: multiple estimate() calls in parallel
+
promise_test(async t => {
let r1, r2;
await Promise.all([
@@ -16,4 +11,3 @@ promise_test(async t => {
assert_true(('usage' in r2) && ('quota' in r2),
'second response should have expected fields');
}, 'Multiple estimate() calls in parallel should complete');
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/opaque-origin.https.html b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js
index 563f2fea3c5..3e101dde675 100644
--- a/tests/wpt/web-platform-tests/storage/opaque-origin.https.html
+++ b/tests/wpt/web-platform-tests/storage/opaque-origin.https.window.js
@@ -1,9 +1,4 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager API and opaque origins</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
+// META: title=StorageManager API and opaque origins
function load_iframe(src, sandbox) {
return new Promise(resolve => {
@@ -76,4 +71,3 @@ function make_script(snippet) {
});
}, `${snippet} in sandboxed iframe should reject with TypeError`);
});
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/permission-query.https.any.js b/tests/wpt/web-platform-tests/storage/permission-query.https.any.js
new file mode 100644
index 00000000000..9984bdab793
--- /dev/null
+++ b/tests/wpt/web-platform-tests/storage/permission-query.https.any.js
@@ -0,0 +1,10 @@
+// META: title=The Permission API registration for "persistent-storage"
+
+promise_test(async t => {
+ const status =
+ await navigator.permissions.query({name: 'persistent-storage'});
+ assert_equals(status.constructor, PermissionStatus,
+ 'query() result should resolve to a PermissionStatus');
+ assert_true(['granted','denied', 'prompt'].includes(status.state),
+ 'state should be a PermissionState');
+}, 'The "persistent-storage" permission is recognized');
diff --git a/tests/wpt/web-platform-tests/storage/persisted-worker.https.html b/tests/wpt/web-platform-tests/storage/persisted-worker.https.html
deleted file mode 100644
index 21f5c8bd92d..00000000000
--- a/tests/wpt/web-platform-tests/storage/persisted-worker.https.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>StorageManager: persisted() from worker</title>
- <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted">
- <meta name="author" title="Mozilla" href="https://www.mozilla.org">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
- <script>
- fetch_tests_from_worker(new Worker("storage-persisted.js"));
- </script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/storage/storage-persisted.js b/tests/wpt/web-platform-tests/storage/persisted.https.any.js
index 5bc86fea951..57e15f0e811 100644
--- a/tests/wpt/web-platform-tests/storage/storage-persisted.js
+++ b/tests/wpt/web-platform-tests/storage/persisted.https.any.js
@@ -1,6 +1,4 @@
-if (this.document === undefined) {
- importScripts("/resources/testharness.js");
-}
+// META: title=StorageManager: persisted()
test(function(t) {
assert_true('persisted' in navigator.storage);
@@ -14,5 +12,3 @@ promise_test(function(t) {
assert_equals(result, false);
});
}, 'persisted() returns a promise and resolves as boolean with false');
-
-done();
diff --git a/tests/wpt/web-platform-tests/storage/persisted.https.html b/tests/wpt/web-platform-tests/storage/persisted.https.html
deleted file mode 100644
index a5a91ff0b26..00000000000
--- a/tests/wpt/web-platform-tests/storage/persisted.https.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <title>StorageManager: persisted()</title>
- <meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted">
- <meta name="author" title="Mozilla" href="https://www.mozilla.org">
- <script src="/resources/testharness.js"></script>
- <script src="/resources/testharnessreport.js"></script>
- </head>
- <body>
- <script src="storage-persisted.js"></script>
- </body>
-</html>
diff --git a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js b/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js
deleted file mode 100644
index 979c8be3cd3..00000000000
--- a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persisted-worker.js
+++ /dev/null
@@ -1,13 +0,0 @@
-importScripts('/resources/testharness.js');
-
-promise_test(function() {
- var promise = navigator.storage.persisted();
- assert_true(promise instanceof Promise,
- 'navigator.storage.persisted() returned a Promise.');
- return promise.then(function (result) {
- assert_equals(typeof result, 'boolean',
- result + ' should be a boolean');
- });
-}, 'navigator.storage.persisted returns a promise that resolves.');
-
-done();
diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.any.js
index 08a699adfb0..d1d2e21924c 100644
--- a/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.html
+++ b/tests/wpt/web-platform-tests/storage/storagemanager-estimate.https.any.js
@@ -1,10 +1,4 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager: estimate()</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-estimate">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
+// META: title=StorageManager: estimate()
test(function(t) {
assert_true(navigator.storage.estimate() instanceof Promise);
@@ -64,5 +58,3 @@ promise_test(function(t) {
'estimated usage should increase');
});
}, 'estimate() shows usage increase after 1MB IndexedDB record is stored');
-
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html
deleted file mode 100644
index 9c89a2f6712..00000000000
--- a/tests/wpt/web-platform-tests/storage/storagemanager-persist-worker.https.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager: persist() (worker)</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-var worker = new Worker('resources/storagemanager-persist-worker.js');
-fetch_tests_from_worker(worker);
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.window.js
index 61624fe272a..13e17a16e14 100644
--- a/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.html
+++ b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.window.js
@@ -1,10 +1,4 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager: persist()</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
+// META: title=StorageManager: persist()
promise_test(function() {
var promise = navigator.storage.persist();
@@ -14,5 +8,3 @@ promise_test(function() {
assert_equals(typeof result, 'boolean', result + ' should be boolean');
});
}, 'navigator.storage.persist() returns a promise that resolves.');
-
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persist-worker.js b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.worker.js
index 1152e4ec734..fcf8175f706 100644
--- a/tests/wpt/web-platform-tests/storage/resources/storagemanager-persist-worker.js
+++ b/tests/wpt/web-platform-tests/storage/storagemanager-persist.https.worker.js
@@ -1,4 +1,5 @@
-importScripts('/resources/testharness.js');
+// META: title=StorageManager: persist() (worker)
+importScripts("/resources/testharness.js");
test(function() {
assert_false('persist' in navigator.storage);
diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html
deleted file mode 100644
index 75004946164..00000000000
--- a/tests/wpt/web-platform-tests/storage/storagemanager-persisted-worker.https.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager: persisted() (worker)</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persisted">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-var worker = new Worker('resources/storagemanager-persisted-worker.js');
-fetch_tests_from_worker(worker);
-</script>
diff --git a/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.html b/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.any.js
index 1d88c11bd8a..70999406690 100644
--- a/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.html
+++ b/tests/wpt/web-platform-tests/storage/storagemanager-persisted.https.any.js
@@ -1,10 +1,4 @@
-<!DOCTYPE html>
-<meta charset=utf-8>
-<title>StorageManager: persist()</title>
-<meta name="help" href="https://storage.spec.whatwg.org/#dom-storagemanager-persist">
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
+// META: title=StorageManager: persisted()
promise_test(function() {
var promise = navigator.storage.persisted();
@@ -14,5 +8,3 @@ promise_test(function() {
assert_equals(typeof result, 'boolean', result + ' should be boolean');
});
}, 'navigator.storage.persisted() returns a promise that resolves.');
-
-</script>
diff --git a/tests/wpt/web-platform-tests/tools/manifest/item.py b/tests/wpt/web-platform-tests/tools/manifest/item.py
index 61919fcc31e..ddf046a68fa 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/item.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/item.py
@@ -234,7 +234,7 @@ class Stub(URLManifestItem):
item_type = "stub"
-class WebdriverSpecTest(URLManifestItem):
+class WebDriverSpecTest(URLManifestItem):
item_type = "wdspec"
def __init__(self, source_file, url, url_base="/", timeout=None, manifest=None):
diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py
index 42a8e1ceb23..9b2f0a18a56 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py
@@ -4,7 +4,7 @@ import os
from collections import defaultdict
from six import iteritems, itervalues, viewkeys, string_types
-from .item import ManualTest, WebdriverSpecTest, Stub, RefTestNode, RefTest, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest
+from .item import ManualTest, WebDriverSpecTest, Stub, RefTestNode, RefTest, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest
from .log import get_logger
from .utils import from_os_path, to_os_path
@@ -193,7 +193,7 @@ class Manifest(object):
"reftest_node": RefTestNode,
"manual": ManualTest,
"stub": Stub,
- "wdspec": WebdriverSpecTest,
+ "wdspec": WebDriverSpecTest,
"conformancechecker": ConformanceCheckerTest,
"visual": VisualTest,
"support": SupportFile}
diff --git a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py
index 133f8b59828..9be0d8966ec 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py
@@ -12,7 +12,7 @@ except ImportError:
import html5lib
from . import XMLParser
-from .item import Stub, ManualTest, WebdriverSpecTest, RefTestNode, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest
+from .item import Stub, ManualTest, WebDriverSpecTest, RefTestNode, TestharnessTest, SupportFile, ConformanceCheckerTest, VisualTest
from .utils import rel_path_to_url, ContextManagerBytesIO, cached_property
wd_pattern = "*.py"
@@ -645,7 +645,7 @@ class SourceFile(object):
rv = TestharnessTest.item_type, tests
elif self.name_is_webdriver:
- rv = WebdriverSpecTest.item_type, [WebdriverSpecTest(self, self.url,
+ rv = WebDriverSpecTest.item_type, [WebDriverSpecTest(self, self.url,
timeout=self.timeout)]
elif self.content_is_css_manual and not self.name_is_reference:
diff --git a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
index 8bf7ef96c5f..f1241e04406 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/tests/test_manifest.py
@@ -43,7 +43,7 @@ def rel_dir_file_path(draw):
@hs.composite
def sourcefile_strategy(draw):
item_classes = [item.TestharnessTest, item.RefTest, item.RefTestNode,
- item.ManualTest, item.Stub, item.WebdriverSpecTest,
+ item.ManualTest, item.Stub, item.WebDriverSpecTest,
item.ConformanceCheckerTest, item.SupportFile]
cls = draw(hs.sampled_from(item_classes))
diff --git a/tests/wpt/web-platform-tests/tools/serve/serve.py b/tests/wpt/web-platform-tests/tools/serve/serve.py
index 97a5063c1b9..968b837979e 100644
--- a/tests/wpt/web-platform-tests/tools/serve/serve.py
+++ b/tests/wpt/web-platform-tests/tools/serve/serve.py
@@ -378,15 +378,17 @@ def build_routes(aliases):
class ServerProc(object):
- def __init__(self):
+ def __init__(self, scheme=None):
self.proc = None
self.daemon = None
self.stop = Event()
+ self.scheme = scheme
def start(self, init_func, host, port, paths, routes, bind_address, config, **kwargs):
self.proc = Process(target=self.create_daemon,
args=(init_func, host, port, paths, routes, bind_address,
config),
+ name='%s on port %s' % (self.scheme, port),
kwargs=kwargs)
self.proc.daemon = True
self.proc.start()
@@ -507,7 +509,7 @@ def start_servers(host, ports, paths, routes, bind_address, config, **kwargs):
"ws":start_ws_server,
"wss":start_wss_server}[scheme]
- server_proc = ServerProc()
+ server_proc = ServerProc(scheme=scheme)
server_proc.start(init_func, host, port, paths, routes, bind_address,
config, **kwargs)
servers[scheme].append((port, server_proc))
@@ -828,9 +830,16 @@ def run(**kwargs):
servers = start(config, build_routes(config["aliases"]), **kwargs)
try:
- while any(item.is_alive() for item in iter_procs(servers)):
+ while all(item.is_alive() for item in iter_procs(servers)):
for item in iter_procs(servers):
item.join(1)
+ exited = [item for item in iter_procs(servers) if not item.is_alive()]
+ subject = "subprocess" if len(exited) == 1 else "subprocesses"
+
+ logger.info("%s %s exited:" % (len(exited), subject))
+
+ for item in iter_procs(servers):
+ logger.info("Status of %s:\t%s" % (item.name, "running" if item.is_alive() else "not running"))
except KeyboardInterrupt:
logger.info("Shutting down")
diff --git a/tests/wpt/web-platform-tests/tools/serve/test_functional.py b/tests/wpt/web-platform-tests/tools/serve/test_functional.py
new file mode 100644
index 00000000000..87268ffc00d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/serve/test_functional.py
@@ -0,0 +1,77 @@
+try:
+ from importlib import reload
+except ImportError:
+ pass
+import json
+import os
+try:
+ import Queue as queue
+except ImportError:
+ import queue
+import tempfile
+import threading
+
+import pytest
+
+from . import serve
+from wptserve import logger
+
+
+class ServerProcSpy(serve.ServerProc):
+ instances = None
+
+ def start(self, *args, **kwargs):
+ result = super(ServerProcSpy, self).start(*args, **kwargs)
+
+ if ServerProcSpy.instances is not None:
+ ServerProcSpy.instances.put(self)
+
+ return result
+
+serve.ServerProc = ServerProcSpy
+
+@pytest.fixture()
+def server_subprocesses():
+ ServerProcSpy.instances = queue.Queue()
+ yield ServerProcSpy.instances
+ ServerProcSpy.instances = None
+
+@pytest.fixture()
+def tempfile_name():
+ name = tempfile.mkstemp()[1]
+ yield name
+ os.remove(name)
+
+
+def test_subprocess_exit(server_subprocesses, tempfile_name):
+ timeout = 30
+
+ def target():
+ # By default, the server initially creates a child process to validate
+ # local system configuration. That process is unrelated to the behavior
+ # under test, but at the time of this writing, the parent uses the same
+ # constructor that is also used to create the long-running processes
+ # which are relevant to this functionality. Disable the check so that
+ # the constructor is only used to create relevant processes.
+ with open(tempfile_name, 'w') as handle:
+ json.dump({"check_subdomains": False}, handle)
+
+ # The `logger` module from the wptserver package uses a singleton
+ # pattern which resists testing. In order to avoid conflicting with
+ # other tests which rely on that module, pre-existing state is
+ # discarded through an explicit "reload" operation.
+ reload(logger)
+
+ serve.run(config_path=tempfile_name)
+
+ thread = threading.Thread(target=target)
+
+ thread.start()
+
+ server_subprocesses.get(True, timeout)
+ subprocess = server_subprocesses.get(True, timeout)
+ subprocess.kill()
+
+ thread.join(timeout)
+
+ assert not thread.is_alive()
diff --git a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py
index b2337ff3b38..e148e8fe800 100644
--- a/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py
+++ b/tests/wpt/web-platform-tests/tools/webdriver/webdriver/error.py
@@ -113,7 +113,7 @@ class NoSuchWindowException(WebDriverException):
class ScriptTimeoutException(WebDriverException):
- http_status = 408
+ http_status = 500
status_code = "script timeout"
@@ -128,7 +128,7 @@ class StaleElementReferenceException(WebDriverException):
class TimeoutException(WebDriverException):
- http_status = 408
+ http_status = 500
status_code = "timeout"
diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py
index 6b098b41f70..aeeb22be961 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/run.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/run.py
@@ -105,7 +105,7 @@ def check_environ(product):
missing_hosts = set(expected_hosts)
if is_windows:
- hosts_path = "C:\Windows\System32\drivers\etc\hosts"
+ hosts_path = "%s\System32\drivers\etc\hosts" % os.environ.get("SystemRoot", "C:\Windows")
else:
hosts_path = "/etc/hosts"
@@ -120,7 +120,7 @@ def check_environ(product):
if is_windows:
message = """Missing hosts file configuration. Run
-python wpt make-hosts-file | Out-File %SystemRoot%\System32\drivers\etc\hosts -Encoding ascii -Append
+python wpt make-hosts-file | Out-File %s -Encoding ascii -Append
in PowerShell with Administrator privileges.""" % hosts_path
else:
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py
new file mode 100644
index 00000000000..097131d7ba5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_run.py
@@ -0,0 +1,18 @@
+import mock
+
+import pytest
+
+from tools.wpt import run
+
+
+@pytest.mark.parametrize("platform", ["Windows", "Linux", "Darwin"])
+def test_check_environ_fail(platform):
+ m_open = mock.mock_open(read_data=b"")
+
+ with mock.patch.object(run, "open", m_open):
+ with mock.patch.object(run.platform, "uname",
+ return_value=(platform, "", "", "", "", "")):
+ with pytest.raises(run.WptrunError) as excinfo:
+ run.check_environ("foo")
+
+ assert "wpt make-hosts-file" in excinfo.value.message
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tox.ini b/tests/wpt/web-platform-tests/tools/wpt/tox.ini
index e486bb221d7..cd45a76e179 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tox.ini
+++ b/tests/wpt/web-platform-tests/tools/wpt/tox.ini
@@ -7,6 +7,7 @@ deps =
pytest
pytest-cov
hypothesis
+ mock
-r{toxinidir}/../wptrunner/requirements.txt
-r{toxinidir}/../wptrunner/requirements_chrome.txt
-r{toxinidir}/../wptrunner/requirements_firefox.txt
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py
index 5c654c99a48..f8790815cf0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_update.py
@@ -32,7 +32,7 @@ item_classes = {"testharness": manifest_item.TestharnessTest,
"reftest_node": manifest_item.RefTestNode,
"manual": manifest_item.ManualTest,
"stub": manifest_item.Stub,
- "wdspec": manifest_item.WebdriverSpecTest,
+ "wdspec": manifest_item.WebDriverSpecTest,
"conformancechecker": manifest_item.ConformanceCheckerTest,
"visual": manifest_item.VisualTest,
"support": manifest_item.SupportFile}
diff --git a/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html b/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html
index 2fe9b31b787..2dfc37686bc 100644
--- a/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/DOMParser-parseFromString.tentative.html
@@ -4,14 +4,12 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- let parser = new DOMParser();
- let doc = parser.parseFromString(html, "text/html");
- assert_equals(doc.body.innerText, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ let parser = new DOMParser();
+ let doc = parser.parseFromString(html, "text/html");
+ assert_equals(doc.body.innerText, RESULTS.HTML);
}, "document.innerText assigned via policy (successful HTML transformation).");
test(t => {
diff --git a/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html
index 3a63e923543..79247fb4d68 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Document-write.tentative.html
@@ -4,12 +4,10 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- document.write(html);
- assert_equals(document.body.innerText, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ document.write(html);
+ assert_equals(document.body.innerText, RESULTS.HTML);
}, "document.write with html assigned via policy (successful URL transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html
index 599ade44ec1..d5db7936b1f 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Element-insertAdjacentHTML.tentative.html
@@ -7,32 +7,30 @@
<script>
var container = document.querySelector('#container');
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
- var d = document.createElement('div');
- container.appendChild(d);
+ var d = document.createElement('div');
+ container.appendChild(d);
- d.insertAdjacentHTML('beforebegin', html);
- assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
- assert_equals(d.previousSibling.data, RESULTS.HTML);
+ d.insertAdjacentHTML('beforebegin', html);
+ assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
+ assert_equals(d.previousSibling.data, RESULTS.HTML);
- d.insertAdjacentHTML('afterbegin', html);
- assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
- assert_equals(d.firstChild.data, RESULTS.HTML);
+ d.insertAdjacentHTML('afterbegin', html);
+ assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
+ assert_equals(d.firstChild.data, RESULTS.HTML);
- d.insertAdjacentHTML('beforeend', html);
- assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
- assert_equals(d.lastChild.data, RESULTS.HTML);
+ d.insertAdjacentHTML('beforeend', html);
+ assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
+ assert_equals(d.lastChild.data, RESULTS.HTML);
- d.insertAdjacentHTML('afterend', html);
- assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
- assert_equals(d.nextSibling.data, RESULTS.HTML);
+ d.insertAdjacentHTML('afterend', html);
+ assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
+ assert_equals(d.nextSibling.data, RESULTS.HTML);
- while (container.firstChild)
- container.firstChild.remove();
- }));
+ while (container.firstChild)
+ container.firstChild.remove();
}, "insertAdjacentHTML with html assigned via policy (successful HTML transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html
index a0bb6c1a5e3..c8daddfe995 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Element-outerHTML.tentative.html
@@ -5,20 +5,18 @@
<body>
<div id="container"></div>
<script>
- var container = document.querySelector('#container')
+ var container = document.querySelector('#container');
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
- var d = document.createElement('div');
- document.querySelector('#container').appendChild(d);
- d.outerHTML = html;
- assert_equals(container.innerText, RESULTS.HTML);
+ var d = document.createElement('div');
+ document.querySelector('#container').appendChild(d);
+ d.outerHTML = html;
+ assert_equals(container.innerText, RESULTS.HTML);
- while (container.firstChild)
- container.firstChild.remove();
- }));
+ while (container.firstChild)
+ container.firstChild.remove();
}, "outerHTML with html assigned via policy (successful HTML transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html
index cea32a5a2df..08d165a75d4 100644
--- a/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/HTMLElement-generic.tentative.html
@@ -24,8 +24,8 @@
];
testCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL);
+ test(t => {
+ assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL);
}, c[0] + "." + c[1] + " assigned via policy (successful URL transformation)");
});
@@ -36,8 +36,8 @@
];
scriptTestCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL);
+ test(t => {
+ assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL);
}, c[0] + "." + c[1] + " assigned via policy (successful ScriptURL transformation)");
});
@@ -48,8 +48,8 @@
];
HTMLTestCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML);
+ test(t => {
+ assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML);
}, c[0] + "." + c[1] + " assigned via policy (successful HTML transformation)");
});
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html
index 13cca567948..62f98e96d7f 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Location-assign.tentative.html
@@ -4,12 +4,10 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.assign(url);
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.assign(url);
+ assert_equals("" + url, location.href, "location href");
}, "location.assign via policy (successful URL transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html
index d759d28593e..bacadf6a91b 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Location-href.tentative.html
@@ -4,12 +4,10 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.href = url;
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.href = url;
+ assert_equals("" + url, location.href, "location href");
}, "location.href assigned via policy (successful URL transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html
index 7d84905d198..4fb53d02609 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Location-replace.tentative.html
@@ -4,12 +4,10 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.replace(url);
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.replace(url);
+ assert_equals("" + url, location.href, "location href");
}, "location.replace via policy (successful URL transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html
index 3d45b33486d..3a880a53778 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Range-createContextualFragment.tentative.html
@@ -4,14 +4,12 @@
<script src="support/helper.sub.js"></script>
<body>
<script>
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- var range = document.createRange();
- range.selectNodeContents(document.documentElement);
- var result = range.createContextualFragment(html);
- assert_equals(result.textContent, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ var range = document.createRange();
+ range.selectNodeContents(document.documentElement);
+ var result = range.createContextualFragment(html);
+ assert_equals(result.textContent, RESULTS.HTML);
}, "range.createContextualFragment assigned via policy (successful HTML transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html
new file mode 100644
index 00000000000..b20fcf2436e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html
@@ -0,0 +1,294 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+<body>
+<script>
+ //HTML tests
+ function createHTMLTest(policyName, policy, expectedHTML, t) {
+ let p = window.TrustedTypes.createPolicy(policyName, policy);
+ assert_true(p.createHTML('whatever') instanceof TrustedHTML);
+ assert_equals(p.createHTML('whatever') + "", expectedHTML);
+ }
+
+ test(t => {
+ createHTMLTest('TestPolicyHTML1', { createHTML: s => s }, 'whatever', t);
+ }, "html = identity function");
+
+ test(t => {
+ createHTMLTest('TestPolicyHTML2', { createHTML: s => null }, "null", t);
+ }, "html = null");
+
+ var HTMLstr = 'well, ';
+ test(t => {
+ createHTMLTest('TestPolicyHTML3', { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t);
+ }, "html = string + global string");
+
+ var HTMLx = 'global';
+ test(t => {
+ createHTMLTest('TestPolicyHTML4', { createHTML: s => { HTMLx = s; return s; } }, 'whatever', t);
+ assert_equals(HTMLx, 'whatever');
+ }, "html = identity function, global string changed");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyHTML5', { createHTML: s => { throw new Error(); }});
+ assert_throws(new Error(), _ => {
+ p.createHTML('whatever');
+ });
+ }, "html = callback that throws");
+
+ var obj = {
+ "foo": "well,"
+ }
+
+ function getHTML(s) {
+ return this.foo + " " + s;
+ }
+
+ test(t => {
+ createHTMLTest('TestPolicyHTML6', { createHTML: getHTML.bind(obj) }, 'well, whatever', t);
+ }, "html = this bound to an object");
+
+ var foo = "well,";
+ test(t => {
+ createHTMLTest('TestPolicyHTML7', { createHTML: s => getHTML(s) }, 'well, whatever', t);
+ }, "html = this without bind");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyHTML8', null);
+ assert_throws(new TypeError(), _ => {
+ p.createHTML('whatever');
+ });
+ }, "html - calling undefined callback throws");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyHTML9', { createHTML: createHTMLJS });
+ assert_throws(new TypeError(), _ => {
+ p.createScript(INPUTS.SCRIPT);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createScriptURL(INPUTS.SCRIPTURL);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createURL(INPUTS.URL);
+ });
+ }, "createHTML defined - calling undefined callbacks throws");
+
+ //Script tests
+ function createScriptTest(policyName, policy, expectedScript, t) {
+ let p = window.TrustedTypes.createPolicy(policyName, policy);
+ assert_true(p.createScript('whatever') instanceof TrustedScript);
+ assert_equals(p.createScript('whatever') + "", expectedScript);
+ }
+
+ test(t => {
+ createScriptTest('TestPolicyScript1', { createScript: s => s }, 'whatever', t);
+ }, "script = identity function");
+
+ test(t => {
+ createScriptTest('TestPolicyScript2', { createScript: s => null }, "null", t);
+ }, "script = null");
+
+ var Scriptstr = 'well, ';
+ test(t => {
+ createScriptTest('TestPolicyScript3', { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t);
+ }, "script = string + global string");
+
+ var Scriptx = 'global';
+ test(t => {
+ createScriptTest('TestPolicyScript4', { createScript: s => { Scriptx = s; return s; } }, 'whatever', t);
+ assert_equals(Scriptx, 'whatever');
+ }, "script = identity function, global string changed");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScript5', {
+ createScript: s => { throw new Error(); }
+ });
+ assert_throws(new Error(), _ => {
+ p.createScript('whatever');
+ });
+ }, "script = callback that throws");
+
+ var obj = {
+ "foo": "well,"
+ }
+
+ function getScript(s) {
+ return this.foo + " " + s;
+ }
+
+ test(t => {
+ createScriptTest('TestPolicyScript6', { createScript: getScript.bind(obj) }, 'well, whatever', t);
+ }, "script = this bound to an object");
+
+ var foo = "well,";
+ test(t => {
+ createScriptTest('TestPolicyScript7', { createScript: s => getScript(s) }, 'well, whatever', t);
+ }, "script = this without bind");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScript8', null);
+ assert_throws(new TypeError(), _ => {
+ p.createScript('whatever');
+ });
+ }, "script - calling undefined callback throws");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScript9', { createScript: createScriptJS });
+ assert_throws(new TypeError(), _ => {
+ p.createHTML(INPUTS.HTML);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createScriptURL(INPUTS.SCRIPTURL);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createURL(INPUTS.URL);
+ });
+ }, "createScript defined - calling undefined callbacks throws");
+
+
+ //ScriptURL tests
+ function createScriptURLTest(policyName, policy, expectedScriptURL, t) {
+ let p = window.TrustedTypes.createPolicy(policyName, policy);
+ assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
+ assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL);
+ }
+
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL1', { createScriptURL: s => s }, INPUTS.SCRIPTURL, t);
+ }, "script_url = identity function");
+
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL2', { createScriptURL: s => null }, "", t);
+ }, "script_url = null");
+
+ var scriptURLstr = '#duck';
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL3', { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t);
+ }, "script_url = string + global string");
+
+ var scriptURLx = 'global';
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL4', { createScriptURL: s => { ScriptURLx = s; return s; } }, INPUTS.SCRIPTURL, t);
+ assert_equals(ScriptURLx, INPUTS.SCRIPTURL);
+ }, "script_url = identity function, global string changed");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL5', {
+ createScriptURL: s => { throw new Error(); }
+ });
+ assert_throws(new Error(), _ => {
+ p.createScriptURL(INPUTS.SCRIPTURL);
+ });
+ }, "script_url = callback that throws");
+
+ function getScriptURL(s) {
+ return s + this.baz;
+ }
+
+ var obj = {
+ "baz": "#duck"
+ }
+
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL6', { createScriptURL: getScriptURL.bind(obj) }, INPUTS.SCRIPTURL + "#duck", t);
+ }, "script_url = this bound to an object");
+
+ var baz = "#duck";
+ test(t => {
+ createScriptURLTest('TestPolicyScriptURL7', { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t);
+ }, "script_url = this without bind");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL8', null);
+ assert_throws(new TypeError(), _ => {
+ p.createScriptURL(INPUTS.SCRIPTURL);
+ });
+ }, "script_url - calling undefined callback throws");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyScriptURL9', { createScriptURL: createScriptURLJS });
+ assert_throws(new TypeError(), _ => {
+ p.createHTML(INPUTS.HTML);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createScript(INPUTS.SCRIPT);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createURL(INPUTS.URL);
+ });
+ }, "createScriptURL defined - calling undefined callbacks throws");
+
+
+ //URL tests
+ function createURLTest(policyName, policy, expectedURL, t) {
+ let p = window.TrustedTypes.createPolicy(policyName, policy);
+ assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
+ assert_equals(p.createURL(INPUTS.URL) + "", expectedURL);
+ }
+
+ test(t => {
+ createURLTest('TestPolicyURL1', { createURL: s => s }, INPUTS.URL, t);
+ }, "url = identity function");
+
+ test(t => {
+ createURLTest('TestPolicyURL2', { createURL: s => null }, "", t);
+ }, "url = null");
+
+ var URLstr = '#x';
+ test(t => {
+ createURLTest('TestPolicyURL3', { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t);
+ }, "url = string + global string");
+
+ var URLx = 'global';
+ test(t => {
+ createURLTest('TestPolicyURL4', { createURL: s => { URLx = s; return s; } }, INPUTS.URL, t);
+ assert_equals(URLx, INPUTS.URL);
+ }, "url = identity function, global string changed");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyURL5', {
+ createURL: s => { throw new Error(); }
+ });
+ assert_throws(new Error(), _ => {
+ p.createURL(INPUTS.URL);
+ });
+ }, "url = callback that throws");
+
+ function getURL(s) {
+ return s + this.bar;
+ }
+
+ var obj = {
+ "bar": "#x"
+ }
+
+ test(t => {
+ createURLTest('TestPolicyURL6', { createURL: getURL.bind(obj) }, INPUTS.URL + "#x", t);
+ }, "url = this bound to an object");
+
+ var bar = "#x";
+ test(t => {
+ createURLTest('TestPolicyURL7', { createURL: s => getURL(s) }, INPUTS.URL + bar, t);
+ }, "url = this without bind");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyURL8', null);
+ assert_throws(new TypeError(), _ => {
+ p.createURL(INPUTS.URL);
+ });
+ }, "url - calling undefined callback throws");
+
+ test(t => {
+ let p = window.TrustedTypes.createPolicy('TestPolicyURL9', { createURL: createURLJS });
+ assert_throws(new TypeError(), _ => {
+ p.createHTML(INPUTS.HTML);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createScript(INPUTS.SCRIPT);
+ });
+ assert_throws(new TypeError(), _ => {
+ p.createScriptURL(INPUTS.SCRIPTURL);
+ });
+ }, "createURL defined - calling undefined callbacks throws");
+</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html
new file mode 100644
index 00000000000..af6e04941c3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+<body>
+<script>
+ //Not exposed policy test
+ test(t => {
+ let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
+ assert_equals(window.TrustedTypes.getExposedPolicy('SomeName'), null);
+ }, "Null is returned when policy is not exposed");
+
+ //Non-existent policy test
+ test(t => {
+ let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } );
+ assert_equals(window.TrustedTypes.getExposedPolicy('JustAName'), null);
+ }, "Null is returned when policy is non-existent");
+
+ //Exposed policy test
+ test(t => {
+ let policy = window.TrustedTypes.createPolicy('EvenSomeOtherName', { createHTML: s => s }, true );
+ assert_equals(window.TrustedTypes.getExposedPolicy('EvenSomeOtherName'), policy);
+ }, "Policy is returned when exposed == true");
+</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html
new file mode 100644
index 00000000000..6d43e0bafc6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js" ></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="support/helper.sub.js"></script>
+<body>
+<script>
+ //Policy name test
+ test(t => {
+ let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
+ assert_true(policy instanceof TrustedTypePolicy);
+ assert_equals(policy.name, 'SomeName');
+ }, "policy.name = name");
+
+ //Duplicate names test
+ test(t => {
+ assert_throws(new TypeError(), _ => {
+ window.TrustedTypes.createPolicy('SomeName', { createURL: s => s } );
+ });
+ }, "duplicate policy name attempt throws");
+
+ //Retrieve policy names tests
+ test(t => {
+ let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } );
+ let names = window.TrustedTypes.getPolicyNames();
+ assert_true(names.includes('SomeName'));
+ assert_true(names.includes('SomeOtherName'));
+ }, "Retrieving policy names");
+</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html b/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html
deleted file mode 100644
index 76e6d130b05..00000000000
--- a/tests/wpt/web-platform-tests/trusted-types/TrustedTypePolicyFactory-createPolicy.tentative.html
+++ /dev/null
@@ -1,299 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js" ></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="support/helper.sub.js"></script>
-<body>
-<script>
- //Policy name test
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', { createHTML: s => s } )
- .then(t.step_func_done(policy => {
- assert_true(policy instanceof TrustedTypePolicy);
- assert_equals(policy.name, 'SomeName');
- }));
- }, "policy.name = name");
-
- //HTML tests
- function createHTMLTest(policy, expectedHTML, t) {
- window.trustedTypes.createPolicy('SomeName', policy)
- .then(t.step_func_done(p => {
- assert_true(p.createHTML('whatever') instanceof TrustedHTML);
- assert_equals(p.createHTML('whatever') + "", expectedHTML);
- }));
- }
-
- async_test(t => {
- createHTMLTest( { createHTML: s => s }, 'whatever', t);
- }, "html = identity function");
-
- async_test(t => {
- createHTMLTest( { createHTML: s => null }, "null", t);
- }, "html = null");
-
- var HTMLstr = 'well, ';
- async_test(t => {
- createHTMLTest( { createHTML: s => HTMLstr + s }, HTMLstr + 'whatever', t);
- }, "html = string + global string");
-
- var HTMLx = 'global';
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createHTML: s => { HTMLx = s; return s; }
- })
- .then(t.step_func_done(p => {
- assert_true(p.createHTML('whatever') instanceof TrustedHTML);
- assert_equals(p.createHTML('whatever') + "", 'whatever');
- assert_equals(HTMLx, 'whatever');
- }));
- }, "html = identity function, global string changed");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createHTML: s => { throw new Error(); }
- })
- .then(t.step_func_done(p => {
- assert_throws(new Error(), _ => {
- p.createHTML('whatever');
- });
- }));
- }, "html = callback that throws");
-
- var obj = {
- "foo": "well,"
- }
-
- function getHTML(s) {
- return this.foo + " " + s;
- }
-
- async_test(t => {
- createHTMLTest( {
- createHTML: getHTML.bind(obj)},
- 'well, whatever', t);
- }, "html = this bound to an object");
-
- var foo = "well,";
- async_test(t => {
- createHTMLTest( { createHTML: s => getHTML(s) }, 'well, whatever', t);
- }, "html = this without bind");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', null)
- .then(t.step_func_done(p => {
- assert_equals(p.createHTML('whatever'), null);
- }));
- }, "html - calling undefined callback");
-
- //Script tests
- function createScriptTest(policy, expectedScript, t) {
- let p = window.trustedTypes.createPolicy('SomeName', policy)
- .then(t.step_func_done(p => {
- assert_true(p.createScript('whatever') instanceof TrustedScript);
- assert_equals(p.createScript('whatever') + "", expectedScript);
- }));
- }
-
- async_test(t => {
- createScriptTest( { createScript: s => s }, 'whatever', t);
- }, "script = identity function");
-
- async_test(t => {
- createScriptTest( { createScript: s => null }, "null", t);
- }, "script = null");
-
- var Scriptstr = 'well, ';
- async_test(t => {
- createScriptTest( { createScript: s => Scriptstr + s }, Scriptstr + 'whatever', t);
- }, "script = string + global string");
-
- var Scriptx = 'global';
- async_test(t => {
- let p = window.trustedTypes.createPolicy('SomeName', {
- createScript: s => { Scriptx = s; return s; }
- })
- .then(t.step_func_done(p => {
- assert_true(p.createScript('whatever') instanceof TrustedScript);
- assert_equals(p.createScript('whatever') + "", 'whatever');
- assert_equals(Scriptx, 'whatever');
- }));
- }, "script = identity function, global string changed");
-
- async_test(t => {
- let p = window.trustedTypes.createPolicy('SomeName', {
- createScript: s => { throw new Error(); }
- })
- .then(t.step_func_done(p => {
- assert_throws(new Error(), _ => {
- p.createScript('whatever');
- });
- }));
- }, "script = callback that throws");
-
- var obj = {
- "foo": "well,"
- }
-
- function getScript(s) {
- return this.foo + " " + s;
- }
-
- async_test(t => {
- createScriptTest( {
- createScript: getScript.bind(obj)},
- 'well, whatever', t);
- }, "script = this bound to an object");
-
- var foo = "well,";
- async_test(t => {
- createScriptTest( { createScript: s => getScript(s) }, 'well, whatever', t);
- }, "script = this without bind");
-
- async_test(t => {
- let p = window.trustedTypes.createPolicy('SomeName', null)
- .then(t.step_func_done(p => {
- assert_equals(p.createScript('whatever'), null);
- }));
- }, "script - calling undefined callback");
-
- //ScriptURL tests
- function createScriptURLTest(policy, expectedScriptURL, t) {
- window.trustedTypes.createPolicy('SomeName', policy)
- .then(t.step_func_done(p => {
- assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
- assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", expectedScriptURL);
- }));
- }
-
- async_test(t => {
- createScriptURLTest( { createScriptURL: s => s }, INPUTS.SCRIPTURL, t);
- }, "script_url = identity function");
-
- async_test(t => {
- createScriptURLTest( { createScriptURL: s => null }, "", t);
- }, "script_url = null");
-
- var scriptURLstr = '#duck';
- async_test(t => {
- createScriptURLTest( { createScriptURL: s => s + scriptURLstr }, INPUTS.SCRIPTURL + scriptURLstr, t);
- }, "script_url = string + global string");
-
- var scriptURLx = 'global';
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createScriptURL: s => { ScriptURLx = s; return s; }
- })
- .then(t.step_func_done(p => {
- assert_true(p.createScriptURL(INPUTS.SCRIPTURL) instanceof TrustedScriptURL);
- assert_equals(p.createScriptURL(INPUTS.SCRIPTURL) + "", INPUTS.SCRIPTURL);
- assert_equals(ScriptURLx, INPUTS.SCRIPTURL);
- }));
- }, "script_url = identity function, global string changed");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createScriptURL: s => { throw new Error(); }
- })
- .then(t.step_func_done(p => {
- assert_throws(new Error(), _ => {
- p.createScriptURL(INPUTS.SCRIPTURL);
- });
- }));
- }, "script_url = callback that throws");
-
- function getScriptURL(s) {
- return s + this.baz;
- }
-
- var obj = {
- "baz": "#duck"
- }
-
- async_test(t => {
- createScriptURLTest( {
- createScriptURL: getScriptURL.bind(obj)},
- INPUTS.SCRIPTURL + "#duck", t);
- }, "script_url = this bound to an object");
-
- var baz = "#duck";
- async_test(t => {
- createScriptURLTest( { createScriptURL: s => getScriptURL(s) }, INPUTS.SCRIPTURL + baz, t);
- }, "script_url = this without bind");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', null)
- .then(t.step_func_done(p => {
- assert_equals(p.createScriptURL(INPUTS.SCRIPTURL), null);
- }));
- }, "script_url - calling undefined callback");
-
- //URL tests
- function createURLTest(policy, expectedURL, t) {
- window.trustedTypes.createPolicy('SomeName', policy)
- .then(t.step_func_done(p => {
- assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
- assert_equals(p.createURL(INPUTS.URL) + "", expectedURL);
- }));
- }
-
- async_test(t => {
- createURLTest( { createURL: s => s }, INPUTS.URL, t);
- }, "url = identity function");
-
- async_test(t => {
- createURLTest( { createURL: s => null }, "", t);
- }, "url = null");
-
- var URLstr = '#x';
- async_test(t => {
- createURLTest( { createURL: s => s + URLstr }, INPUTS.URL + URLstr, t);
- }, "url = string + global string");
-
- var URLx = 'global';
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createURL: s => { URLx = s; return s; }
- })
- .then(t.step_func_done(p => {
- assert_true(p.createURL(INPUTS.URL) instanceof TrustedURL);
- assert_equals(p.createURL(INPUTS.URL) + "", INPUTS.URL);
- assert_equals(URLx, INPUTS.URL);
- }));
- }, "url = identity function, global string changed");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', {
- createURL: s => { throw new Error(); }
- })
- .then(t.step_func_done(p => {
- assert_throws(new Error(), _ => {
- p.createURL(INPUTS.URL);
- });
- }));
- }, "url = callback that throws");
-
- function getURL(s) {
- return s + this.bar;
- }
-
- var obj = {
- "bar": "#x"
- }
-
- async_test(t => {
- createURLTest( {
- createURL: getURL.bind(obj)},
- INPUTS.URL + "#x", t);
- }, "url = this bound to an object");
-
- var bar = "#x";
- async_test(t => {
- createURLTest( { createURL: s => getURL(s) }, INPUTS.URL + bar, t);
- }, "url = this without bind");
-
- async_test(t => {
- window.trustedTypes.createPolicy('SomeName', null)
- .then(t.step_func_done(p => {
- assert_equals(p.createURL(INPUTS.URL), null);
- }));
- }, "url - calling undefined callback");
-</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Window-trustedTypes.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Window-TrustedTypes.tentative.html
index ef4487749dd..8e20e492e6a 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Window-trustedTypes.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Window-TrustedTypes.tentative.html
@@ -5,7 +5,7 @@
<body>
<script>
test(t => {
- let factory = window.trustedTypes;
+ let factory = window.TrustedTypes;
assert_true(factory instanceof TrustedTypePolicyFactory);
- }, "factory = window.trustedTypes");
+ }, "factory = window.TrustedTypes");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html b/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html
index c005fbba143..172d566e57f 100644
--- a/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/Window-open.tentative.html
@@ -5,23 +5,21 @@
<body>
<script>
// helper functions for the tests
- function testWindowOpen(t, win) {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(INPUTS.URL);
- let child_window = win.open(url, "", "");
- child_window.onload = t.step_func_done(_ => {
- assert_equals(child_window.location.href, "" + url);
- child_window.close();
- });
- }));
+ function testWindowOpen(t, win, testNumber) {
+ let p = createURL_policy(window, testNumber);
+ let url = p.createURL(INPUTS.URL);
+ let child_window = win.open(url, "", "");
+ child_window.onload = t.step_func_done(_ => {
+ assert_equals(child_window.location.href, "" + url);
+ child_window.close();
+ });
}
- async_test(t => {
- testWindowOpen(t, window);
+ test(t => {
+ testWindowOpen(t, window, 1);
}, "window.open via policy (successful URL transformation).");
- async_test(t => {
- testWindowOpen(t, document);
+ test(t => {
+ testWindowOpen(t, document, 2);
}, "document.open via policy (successful URL transformation).");
</script>
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
index cc575dc0085..e5959a425a2 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-DOMParser-parseFromString.tentative.html
@@ -7,14 +7,12 @@
<body>
<script>
// Trusted HTML assignments do not throw.
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- let parser = new DOMParser();
- let doc = parser.parseFromString(html, "text/html");
- assert_equals(doc.body.innerText, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ let parser = new DOMParser();
+ let doc = parser.parseFromString(html, "text/html");
+ assert_equals(doc.body.innerText, RESULTS.HTML);
}, "document.innerText assigned via policy (successful HTML transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html
index 28813d72e0e..06532c3b479 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Document-write.tentative.html
@@ -10,13 +10,11 @@
<body>
<script>
// TrustedURL assignments do not throw.
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- document.write(html);
- assert_equals(document.body.innerText, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ document.write(html);
+ assert_equals(document.body.innerText, RESULTS.HTML);
}, "document.write with html assigned via policy (successful URL transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
index ad94b44e8fb..1fb3bbd994a 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html
@@ -13,33 +13,31 @@
var container = document.querySelector('#container');
// Trusted HTML assignments do not throw.
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
- var d = document.createElement('div');
- container.appendChild(d);
+ var d = document.createElement('div');
+ container.appendChild(d);
- d.insertAdjacentHTML('beforebegin', html);
- assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
- assert_equals(d.previousSibling.data, RESULTS.HTML);
+ d.insertAdjacentHTML('beforebegin', html);
+ assert_equals(d.previousSibling.nodeType, Node.TEXT_NODE);
+ assert_equals(d.previousSibling.data, RESULTS.HTML);
- d.insertAdjacentHTML('afterbegin', html);
- assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
- assert_equals(d.firstChild.data, RESULTS.HTML);
+ d.insertAdjacentHTML('afterbegin', html);
+ assert_equals(d.firstChild.nodeType, Node.TEXT_NODE);
+ assert_equals(d.firstChild.data, RESULTS.HTML);
- d.insertAdjacentHTML('beforeend', html);
- assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
- assert_equals(d.lastChild.data, RESULTS.HTML);
+ d.insertAdjacentHTML('beforeend', html);
+ assert_equals(d.lastChild.nodeType, Node.TEXT_NODE);
+ assert_equals(d.lastChild.data, RESULTS.HTML);
- d.insertAdjacentHTML('afterend', html);
- assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
- assert_equals(d.nextSibling.data, RESULTS.HTML);
+ d.insertAdjacentHTML('afterend', html);
+ assert_equals(d.nextSibling.nodeType, Node.TEXT_NODE);
+ assert_equals(d.nextSibling.data, RESULTS.HTML);
- while (container.firstChild)
- container.firstChild.remove();
- }));
+ while (container.firstChild)
+ container.firstChild.remove();
}, "insertAdjacentHTML with html assigned via policy (successful HTML transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
index 47f1165b1a6..abb595222ba 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Element-outerHTML.tentative.html
@@ -13,19 +13,17 @@
var container = document.querySelector('#container')
// TrustedHTML assignments do not throw.
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
- var d = document.createElement('div');
- document.querySelector('#container').appendChild(d);
- d.outerHTML = html;
- assert_equals(container.innerText, RESULTS.HTML);
+ var d = document.createElement('div');
+ document.querySelector('#container').appendChild(d);
+ d.outerHTML = html;
+ assert_equals(container.innerText, RESULTS.HTML);
- while (container.firstChild)
- container.firstChild.remove();
- }));
+ while (container.firstChild)
+ container.firstChild.remove();
}, "outerHTML with html assigned via policy (successful HTML transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
index eae52626190..7b1a5795d7c 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-HTMLElement-generic.tentative.html
@@ -27,8 +27,8 @@
];
testCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_url(window, t, c[0], c[1], RESULTS.URL);
+ test(t => {
+ assert_element_accepts_trusted_url(window, c, t, c[0], c[1], RESULTS.URL);
assert_throws_no_trusted_type(c[0], c[1], 'A string');
assert_throws_no_trusted_type(c[0], c[1], null);
}, c[0] + "." + c[1] + " accepts only TrustedURL");
@@ -41,8 +41,8 @@
];
scriptTestCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_script_url(window, t, c[0], c[1], RESULTS.SCRIPTURL);
+ test(t => {
+ assert_element_accepts_trusted_script_url(window, c, t, c[0], c[1], RESULTS.SCRIPTURL);
assert_throws_no_trusted_type(c[0], c[1], 'A string');
assert_throws_no_trusted_type(c[0], c[1], null);
}, c[0] + "." + c[1] + " accepts only TrustedScriptURL");
@@ -55,8 +55,8 @@
];
HTMLTestCases.forEach(c => {
- async_test(t => {
- assert_element_accepts_trusted_html(window, t, c[0], c[1], RESULTS.HTML);
+ test(t => {
+ assert_element_accepts_trusted_html(window, c, t, c[0], c[1], RESULTS.HTML);
assert_throws_no_trusted_type(c[0], c[1], 'A string');
assert_throws_no_trusted_type(c[0], c[1], null);
}, c[0] + "." + c[1] + " accepts only TrustedHTML");
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html
index 8079335bc58..cd375b9d016 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-assign.tentative.html
@@ -10,13 +10,11 @@
<body>
<script>
// TrustedURL assignments do not throw.
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.assign(url);
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.assign(url);
+ assert_equals("" + url, location.href, "location href");
}, "location.assign via policy (successful URL transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html
index 4e393f92506..14fbcb2fb3c 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-href.tentative.html
@@ -10,13 +10,11 @@
<body>
<script>
// TrustedURL assignments do not throw.
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.href = url;
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.href = url;
+ assert_equals("" + url, location.href, "location href");
}, "location.href assigned via policy (successful URL transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html
index 872f14e1448..9d00fcdeb35 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Location-replace.tentative.html
@@ -10,13 +10,11 @@
<body>
<script>
// TrustedURL replacements do not throw.
- async_test(t => {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(location.href + "#xxx");
- location.replace(url);
- assert_equals("" + url, location.href, "location href");
- }));
+ test(t => {
+ let p = createURL_policy(window, 1);
+ let url = p.createURL(location.href + "#xxx");
+ location.replace(url);
+ assert_equals("" + url, location.href, "location href");
}, "location.replace via policy (successful URL transformation).");
// String replacements throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
index 2afa2572c35..ff9be06251d 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html
@@ -7,15 +7,13 @@
<body>
<script>
// TrustedHTML assignments do not throw.
- async_test(t => {
- createHTML_policy(window)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- var range = document.createRange();
- range.selectNodeContents(document.documentElement);
- var result = range.createContextualFragment(html);
- assert_equals(result.textContent, RESULTS.HTML);
- }));
+ test(t => {
+ let p = createHTML_policy(window, 1);
+ let html = p.createHTML(INPUTS.HTML);
+ var range = document.createRange();
+ range.selectNodeContents(document.documentElement);
+ var result = range.createContextualFragment(html);
+ assert_equals(result.textContent, RESULTS.HTML);
}, "range.createContextualFragment assigned via policy (successful HTML transformation).");
// String assignments throw.
diff --git a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html
index f5712295d30..ae4b038dc0c 100644
--- a/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html
+++ b/tests/wpt/web-platform-tests/trusted-types/block-string-assignment-to-Window-open.tentative.html
@@ -9,54 +9,51 @@
</head>
<body>
<script>
+ var testnb = 0;
// helper functions for the tests
- function testWindowOpen(t, win) {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- let url = p.createURL(INPUTS.URL);
- let child_window = win.open(url, "", "");
- child_window.onload = t.step_func_done(_ => {
- assert_equals(child_window.location.href, "" + url);
- child_window.close();
- });
- }));
+ function testWindowOpen(t, win, nb) {
+ let p = createURL_policy(window, nb);
+ let url = p.createURL(INPUTS.URL);
+ let child_window = win.open(url, "", "");
+ child_window.onload = t.step_func_done(_ => {
+ assert_equals(child_window.location.href, "" + url);
+ child_window.close();
+ });
}
- function testWindowThrows(t, url, win) {
- createURL_policy(window)
- .then(t.step_func_done(p => {
- assert_throws(new TypeError(), _ => {
- let child_window = win.open(url, "", "");
- child_window.close();
- });
- }));
+ function testWindowThrows(t, url, win, nb) {
+ let p = createURL_policy(window, nb);
+ assert_throws(new TypeError(), _ => {
+ let child_window = win.open(url, "", "");
+ child_window.close();
+ });
}
// TrustedURL assignments do not throw.
- async_test(t => {
- testWindowOpen(t, window);
+ test(t => {
+ testWindowOpen(t, window, ++testnb);
}, "window.open via policy (successful URL transformation).");
- async_test(t => {
- testWindowOpen(t, document);
+ test(t => {
+ testWindowOpen(t, document, ++testnb);
}, "document.open via policy (successful URL transformation).");
// String assignments throw.
- async_test(t => {
- testWindowThrows(t, 'A string', window);
+ test(t => {
+ testWindowThrows(t, 'A string', window, ++testnb);
}, "`window.open(string)` throws.");
- async_test(t => {
- testWindowThrows(t, 'A string', document);
+ test(t => {
+ testWindowThrows(t, 'A string', document, ++testnb);
}, "`document.open(string)` throws.");
// Null assignment throws.
- async_test(t => {
- testWindowThrows(t, null, window);
+ test(t => {
+ testWindowThrows(t, null, window, ++testnb);
}, "`window.open(null)` throws.");
- async_test(t => {
- testWindowThrows(t, null, document);
+ test(t => {
+ testWindowThrows(t, null, document, ++testnb);
}, "`document.open(null)` throws.");
</script>
</body>
diff --git a/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js b/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js
index b5435917bec..617e02aa6ba 100644
--- a/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js
+++ b/tests/wpt/web-platform-tests/trusted-types/support/helper.sub.js
@@ -31,52 +31,44 @@ function createURLJS(url) {
.replace("an.url", "successfully.transformed");
}
-function createHTML_policy(win) {
- return win.trustedTypes.createPolicy('SomeName', { createHTML: createHTMLJS });
+function createHTML_policy(win, c) {
+ return win.TrustedTypes.createPolicy('SomeHTMLPolicyName' + c, { createHTML: createHTMLJS });
}
-function createScript_policy(win) {
- return win.trustedTypes.createPolicy('SomeName', { createScript: createScriptJS });
+function createScript_policy(win, c) {
+ return win.TrustedTypes.createPolicy('SomeScriptPolicyName' + c, { createScript: createScriptJS });
}
-function createScriptURL_policy(win) {
- return win.trustedTypes.createPolicy('SomeName', { createScriptURL: createScriptURLJS });
+function createScriptURL_policy(win, c) {
+ return win.TrustedTypes.createPolicy('SomeScriptURLPolicyName' + c, { createScriptURL: createScriptURLJS });
}
-function createURL_policy(win) {
- return win.trustedTypes.createPolicy('SomeName', { createURL: createURLJS });
+function createURL_policy(win, c) {
+ return win.TrustedTypes.createPolicy('SomeURLPolicyName' + c, { createURL: createURLJS });
}
-function assert_element_accepts_trusted_html(win, t, tag, attribute, expected) {
- createHTML_policy(win)
- .then(t.step_func_done(p => {
- let html = p.createHTML(INPUTS.HTML);
- assert_element_accepts_trusted_type(tag, attribute, html, expected);
- }));
+function assert_element_accepts_trusted_html(win, c, t, tag, attribute, expected) {
+ let p = createHTML_policy(win, c);
+ let html = p.createHTML(INPUTS.HTML);
+ assert_element_accepts_trusted_type(tag, attribute, html, expected);
}
-function assert_element_accepts_trusted_script(win, t, tag, attribute, expected) {
- createScript_policy(win)
- .then(t.step_func_done(p => {
- let script = p.createScript(INPUTS.SCRIPT);
- assert_element_accepts_trusted_type(tag, attribute, script, expected);
- }));
+function assert_element_accepts_trusted_script(win, c, t, tag, attribute, expected) {
+ let p = createScript_policy(win, c);
+ let script = p.createScript(INPUTS.SCRIPT);
+ assert_element_accepts_trusted_type(tag, attribute, script, expected);
}
-function assert_element_accepts_trusted_script_url(win, t, tag, attribute, expected) {
- createScriptURL_policy(win)
- .then(t.step_func_done(p => {
- let scripturl = p.createScriptURL(INPUTS.SCRIPTURL);
- assert_element_accepts_trusted_type(tag, attribute, scripturl, expected);
- }));
+function assert_element_accepts_trusted_script_url(win, c, t, tag, attribute, expected) {
+ let p = createScriptURL_policy(win, c);
+ let scripturl = p.createScriptURL(INPUTS.SCRIPTURL);
+ assert_element_accepts_trusted_type(tag, attribute, scripturl, expected);
}
-function assert_element_accepts_trusted_url(win, t, tag, attribute, expected) {
- createURL_policy(win)
- .then(t.step_func_done(p => {
- let url = p.createURL(INPUTS.URL);
- assert_element_accepts_trusted_type(tag, attribute, url, expected);
- }));
+function assert_element_accepts_trusted_url(win, c, t, tag, attribute, expected) {
+ let p = createURL_policy(win, c);
+ let url = p.createURL(INPUTS.URL);
+ assert_element_accepts_trusted_type(tag, attribute, url, expected);
}
function assert_element_accepts_trusted_type(tag, attribute, value, expected) {
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
new file mode 100644
index 00000000000..7a45cc4191c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
@@ -0,0 +1,121 @@
+// META: global=jsshell
+// META: script=/wasm/jsapi/assertions.js
+
+function assert_Global(actual, expected) {
+ assert_equals(Object.getPrototypeOf(actual), WebAssembly.Global.prototype,
+ "prototype");
+ assert_true(Object.isExtensible(actual), "extensible");
+
+ assert_equals(actual.value, expected, "value");
+ assert_equals(actual.valueOf(), expected, "valueOf");
+}
+
+test(() => {
+ assert_function_name(WebAssembly.Global, "Global", "WebAssembly.Global");
+}, "name");
+
+test(() => {
+ assert_function_length(WebAssembly.Global, 1, "WebAssembly.Global");
+}, "length");
+
+test(() => {
+ assert_throws(new TypeError(), () => new WebAssembly.Global());
+}, "No arguments");
+
+test(() => {
+ const argument = { "value": "i32" };
+ assert_throws(new TypeError(), () => WebAssembly.Global(argument));
+}, "Calling");
+
+test(() => {
+ const order = [];
+
+ new WebAssembly.Global({
+ get value() {
+ order.push("descriptor value");
+ return {
+ toString() {
+ order.push("descriptor value toString");
+ return "f64";
+ },
+ };
+ },
+
+ get mutable() {
+ order.push("descriptor mutable");
+ return false;
+ },
+ }, {
+ valueOf() {
+ order.push("value valueOf()");
+ }
+ });
+
+ assert_array_equals(order, [
+ "descriptor mutable",
+ "descriptor value",
+ "descriptor value toString",
+ "value valueOf()",
+ ]);
+}, "Order of evaluation");
+
+test(() => {
+ const invalidArguments = [
+ undefined,
+ null,
+ false,
+ true,
+ "",
+ "test",
+ Symbol(),
+ 1,
+ NaN,
+ {},
+ ];
+ for (const invalidArgument of invalidArguments) {
+ assert_throws(new TypeError(),
+ () => new WebAssembly.Global(invalidArgument),
+ `new Global(${format_value(invalidArgument)})`);
+ }
+}, "Invalid descriptor argument");
+
+test(() => {
+ const invalidTypes = ["i16", "i128", "f16", "f128", "u32", "u64", "i32\0"];
+ for (const value of invalidTypes) {
+ const argument = { value };
+ assert_throws(new TypeError(), () => new WebAssembly.Global(argument));
+ }
+}, "Invalid type argument");
+
+test(() => {
+ const argument = { "value": "i64" };
+ const global = new WebAssembly.Global(argument);
+ assert_throws(new TypeError(), () => global.value);
+ assert_throws(new TypeError(), () => global.valueOf());
+}, "i64 with default");
+
+for (const type of ["i32", "f32", "f64"]) {
+ test(() => {
+ const argument = { "value": type };
+ const global = new WebAssembly.Global(argument);
+ assert_Global(global, 0);
+ }, `Default value for type ${type}`);
+
+ const valueArguments = [
+ [undefined, 0],
+ [null, 0],
+ [true, 1],
+ [false, 0],
+ [2, 2],
+ ["3", 3],
+ [{ toString() { return "5" } }, 5, "object with toString"],
+ [{ valueOf() { return "8" } }, 8, "object with valueOf"],
+ ];
+ for (const [value, expected, name = format_value(value)] of valueArguments) {
+ test(() => {
+ const argument = { "value": type };
+ const global = new WebAssembly.Global(argument, value);
+ assert_Global(global, expected);
+ }, `Explicit value ${name} for type ${type}`);
+ }
+}
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js
new file mode 100644
index 00000000000..ca025576c2b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/toString.any.js
@@ -0,0 +1,7 @@
+// META: global=jsshell
+
+test(() => {
+ const argument = { "value": "i32" };
+ const global = new WebAssembly.Global(argument);
+ assert_class_string(global, "WebAssembly.Global");
+}, "Object.prototype.toString on an Global");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js
new file mode 100644
index 00000000000..b4e6770f10e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js
@@ -0,0 +1,94 @@
+// META: global=jsshell
+
+test(() => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Global,
+ WebAssembly.Global.prototype,
+ ];
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Global.prototype, "value");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ const setter = desc.set;
+ assert_equals(typeof setter, "function");
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => getter.call(thisValue), `getter with this=${format_value(thisValue)}`);
+ assert_throws(new TypeError(), () => setter.call(thisValue, 1), `setter with this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+for (const type of ["i32", "f32", "f64"]) {
+ const immutableOptions = [
+ [{}, "missing"],
+ [{ "mutable": undefined }, "undefined"],
+ [{ "mutable": null }, "null"],
+ [{ "mutable": false }, "false"],
+ [{ "mutable": "" }, "empty string"],
+ [{ "mutable": 0 }, "zero"],
+ ];
+ for (const [opts, name] of immutableOptions) {
+ test(() => {
+ opts.value = type;
+ const global = new WebAssembly.Global(opts);
+ assert_equals(global.value, 0, "initial value");
+ assert_equals(global.valueOf(), 0, "initial valueOf");
+
+ assert_throws(new TypeError(), () => global.value = 1);
+
+ assert_equals(global.value, 0, "post-set value");
+ assert_equals(global.valueOf(), 0, "post-set valueOf");
+ }, `Immutable ${type} (${name})`);
+ }
+
+ const mutableOptions = [
+ [{ "mutable": true }, "true"],
+ [{ "mutable": 1 }, "one"],
+ [{ "mutable": "x" }, "string"],
+ [Object.create({ "mutable": true }), "true on prototype"],
+ ];
+ for (const [opts, name] of mutableOptions) {
+ test(() => {
+ opts.value = type;
+ const global = new WebAssembly.Global(opts);
+ assert_equals(global.value, 0, "initial value");
+ assert_equals(global.valueOf(), 0, "initial valueOf");
+
+ global.value = 1;
+
+ assert_equals(global.value, 1, "post-set value");
+ assert_equals(global.valueOf(), 1, "post-set valueOf");
+ }, `Mutable ${type} (${name})`);
+ }
+}
+
+test(() => {
+ const argument = { "value": "i64", "mutable": true };
+ const global = new WebAssembly.Global(argument);
+ assert_throws(new TypeError(), () => global.value);
+ assert_throws(new TypeError(), () => global.value = 0);
+ assert_throws(new TypeError(), () => global.valueOf());
+}, "i64 with default");
+
+
+test(() => {
+ const argument = { "value": "i32", "mutable": true };
+ const global = new WebAssembly.Global(argument);
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Global.prototype, "value");
+ assert_equals(typeof desc, "object");
+
+ const setter = desc.set;
+ assert_equals(typeof setter, "function");
+
+ assert_throws(new TypeError(), () => setter.call(global));
+}, "Calling setter without argument");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js
new file mode 100644
index 00000000000..176c5a78469
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js
@@ -0,0 +1,22 @@
+// META: global=jsshell
+
+test(() => {
+ const argument = { "value": "i32" };
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Global,
+ WebAssembly.Global.prototype,
+ ];
+
+ const fn = WebAssembly.Global.prototype.valueOf;
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => fn.call(thisValue), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
index 93a3ffda033..61a8f53a014 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/constructor.any.js
@@ -28,6 +28,7 @@ function assert_Instance(instance, expected_exports) {
assert_true(property.enumerable, `${key}: enumerable`);
assert_false(property.configurable, `${key}: configurable`);
const actual = property.value;
+ assert_true(Object.isExtensible(actual), `${key}: extensible`);
switch (expected.kind) {
case "function":
@@ -76,6 +77,39 @@ test(() => {
}, "No arguments");
test(() => {
+ const invalidArguments = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Module,
+ WebAssembly.Module.prototype,
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => new WebAssembly.Instance(argument),
+ `new Instance(${format_value(argument)})`);
+ }
+}, "Non-Module arguments");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const invalidArguments = [
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => new WebAssembly.Instance(module, argument),
+ `new Instance(module, ${format_value(argument)})`);
+ }
+}, "Non-object imports");
+
+test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_throws(new TypeError(), () => WebAssembly.Instance(module));
}, "Calling");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js
new file mode 100644
index 00000000000..31423918720
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js
@@ -0,0 +1,53 @@
+// META: global=jsshell
+// META: script=/wasm/jsapi/wasm-constants.js
+// META: script=/wasm/jsapi/wasm-module-builder.js
+
+let emptyModuleBinary;
+setup(() => {
+ emptyModuleBinary = new WasmModuleBuilder().toBuffer();
+});
+
+test(() => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Instance,
+ WebAssembly.Instance.prototype,
+ ];
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, "exports");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(typeof desc.set, "undefined");
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const instance = new WebAssembly.Instance(module);
+ const exports = instance.exports;
+ instance.exports = {};
+ assert_equals(instance.exports, exports, "Should not change the exports");
+}, "Setting (sloppy mode)");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const instance = new WebAssembly.Instance(module);
+ const exports = instance.exports;
+ assert_throws(new TypeError(), () => {
+ "use strict";
+ instance.exports = {};
+ });
+ assert_equals(instance.exports, exports, "Should not change the exports");
+}, "Setting (strict mode)");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js
new file mode 100644
index 00000000000..08dcb14a50d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/toString.any.js
@@ -0,0 +1,10 @@
+// META: global=jsshell
+// META: script=/wasm/jsapi/wasm-constants.js
+// META: script=/wasm/jsapi/wasm-module-builder.js
+
+test(() => {
+ const emptyModuleBinary = new WasmModuleBuilder().toBuffer();
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const instance = new WebAssembly.Instance(module);
+ assert_class_string(instance, "WebAssembly.Instance");
+}, "Object.prototype.toString on an Instance");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js
index 64c1f60da1c..5d76ac56ec5 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/interface.any.js
@@ -63,6 +63,10 @@ test(() => {
}, "WebAssembly: property descriptor");
test(() => {
+ assert_throws(new TypeError(), () => WebAssembly());
+}, "WebAssembly: calling");
+
+test(() => {
assert_throws(new TypeError(), () => new WebAssembly());
}, "WebAssembly: constructing");
@@ -89,6 +93,15 @@ for (const name of interfaces) {
test(() => {
const interface_object = WebAssembly[name];
+ const propdesc = Object.getOwnPropertyDescriptor(interface_object, "prototype");
+ assert_equals(typeof propdesc, "object");
+ assert_false(propdesc.writable, "writable");
+ assert_false(propdesc.enumerable, "enumerable");
+ assert_false(propdesc.configurable, "configurable");
+ }, `WebAssembly.${name}: prototype`);
+
+ test(() => {
+ const interface_object = WebAssembly[name];
const interface_prototype_object = interface_object.prototype;
const propdesc = Object.getOwnPropertyDescriptor(interface_prototype_object, "constructor");
assert_equals(typeof propdesc, "object");
@@ -96,7 +109,7 @@ for (const name of interfaces) {
assert_false(propdesc.enumerable, "enumerable");
assert_true(propdesc.configurable, "configurable");
assert_equals(propdesc.value, interface_object);
- }, `WebAssembly.${name}: prototype`);
+ }, `WebAssembly.${name}: prototype.constructor`);
}
test_operations(WebAssembly, "WebAssembly", [
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js
new file mode 100644
index 00000000000..b04460b6c5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js
@@ -0,0 +1,50 @@
+// META: global=jsshell
+
+test(() => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Memory,
+ WebAssembly.Memory.prototype,
+ ];
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(typeof desc.set, "undefined");
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ const memory2 = new WebAssembly.Memory(argument);
+ const buffer = memory.buffer;
+ assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers");
+ memory.buffer = memory2.buffer;
+ assert_equals(memory.buffer, buffer, "Should not change the buffer");
+}, "Setting (sloppy mode)");
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ const memory2 = new WebAssembly.Memory(argument);
+ const buffer = memory.buffer;
+ assert_not_equals(buffer, memory2.buffer, "Need two distinct buffers");
+ assert_throws(new TypeError(), () => {
+ "use strict";
+ memory.buffer = memory2.buffer;
+ });
+ assert_equals(memory.buffer, buffer, "Should not change the buffer");
+}, "Setting (strict mode)");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
index 33256f85e45..f9907ca6104 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js
@@ -1,12 +1,23 @@
// META: global=jsshell
-// META: script=/wasm/jsapi/wasm-constants.js
-// META: script=/wasm/jsapi/wasm-module-builder.js
// META: script=/wasm/jsapi/assertions.js
-let emptyModuleBinary;
-setup(() => {
- emptyModuleBinary = new WasmModuleBuilder().toBuffer();
-});
+function assert_Memory(memory, expected) {
+ assert_equals(Object.getPrototypeOf(memory), WebAssembly.Memory.prototype,
+ "prototype");
+ assert_true(Object.isExtensible(memory), "extensible");
+
+ // https://github.com/WebAssembly/spec/issues/840
+ assert_equals(memory.buffer, memory.buffer, "buffer should be idempotent");
+ assert_equals(Object.getPrototypeOf(memory.buffer), ArrayBuffer.prototype,
+ "prototype of buffer");
+ assert_true(Object.isExtensible(memory.buffer), "buffer extensibility");
+ assert_equals(memory.buffer.byteLength, 0x10000 * expected.size, "size of buffer");
+ if (expected.size > 0) {
+ const array = new Uint8Array(memory.buffer);
+ assert_equals(array[0], 0, "first element of buffer");
+ assert_equals(array[array.byteLength - 1], 0, "last element of buffer");
+ }
+}
test(() => {
assert_function_name(WebAssembly.Memory, "Memory", "WebAssembly.Memory");
@@ -26,8 +37,24 @@ test(() => {
}, "Calling");
test(() => {
- assert_throws(new TypeError(), () => new WebAssembly.Memory({}));
-}, "Empty descriptor");
+ const invalidArguments = [
+ undefined,
+ null,
+ false,
+ true,
+ "",
+ "test",
+ Symbol(),
+ 1,
+ NaN,
+ {},
+ ];
+ for (const invalidArgument of invalidArguments) {
+ assert_throws(new TypeError(),
+ () => new WebAssembly.Memory(invalidArgument),
+ `new Memory(${format_value(invalidArgument)})`);
+ }
+}, "Invalid descriptor argument");
test(() => {
assert_throws(new TypeError(), () => new WebAssembly.Memory({ "initial": undefined }));
@@ -65,7 +92,46 @@ test(() => {
}, "Proxy descriptor");
test(() => {
+ const order = [];
+
+ new WebAssembly.Memory({
+ get maximum() {
+ order.push("maximum");
+ return {
+ valueOf() {
+ order.push("maximum valueOf");
+ return 1;
+ },
+ };
+ },
+
+ get initial() {
+ order.push("initial");
+ return {
+ valueOf() {
+ order.push("initial valueOf");
+ return 1;
+ },
+ };
+ },
+ });
+
+ assert_array_equals(order, [
+ "initial",
+ "initial valueOf",
+ "maximum",
+ "maximum valueOf",
+ ]);
+}, "Order of evaluation for descriptor");
+
+test(() => {
const argument = { "initial": 0 };
const memory = new WebAssembly.Memory(argument);
- assert_equals(Object.getPrototypeOf(memory), WebAssembly.Memory.prototype);
-}, "Prototype");
+ assert_Memory(memory, { "size": 0 });
+}, "Zero initial");
+
+test(() => {
+ const argument = { "initial": 4 };
+ const memory = new WebAssembly.Memory(argument);
+ assert_Memory(memory, { "size": 4 });
+}, "Non-zero initial");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js
new file mode 100644
index 00000000000..95300399f19
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js
@@ -0,0 +1,170 @@
+// META: global=jsshell
+
+function assert_ArrayBuffer(actual, expected, message) {
+ // https://github.com/WebAssembly/spec/issues/840
+ assert_equals(Object.getPrototypeOf(actual), ArrayBuffer.prototype,
+ `${message}: prototype`);
+ if (expected.detached) {
+ // https://github.com/tc39/ecma262/issues/678
+ let byteLength;
+ try {
+ byteLength = actual.byteLength;
+ } catch (e) {
+ byteLength = 0;
+ }
+ assert_equals(byteLength, 0, `${message}: detached size`);
+ } else {
+ assert_equals(actual.byteLength, 0x10000 * expected.size, `${message}: size`);
+ if (expected.size > 0) {
+ const array = new Uint8Array(actual);
+ assert_equals(array[0], 0, `${message}: first element`);
+ assert_equals(array[array.byteLength - 1], 0, `${message}: last element`);
+ }
+ }
+}
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ assert_throws(new TypeError(), () => memory.grow());
+}, "Missing arguments");
+
+test(t => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Memory,
+ WebAssembly.Memory.prototype,
+ ];
+
+ const argument = {
+ valueOf: t.unreached_func("Should not touch the argument (valueOf)"),
+ toString: t.unreached_func("Should not touch the argument (toString)"),
+ };
+
+ const fn = WebAssembly.Memory.prototype.grow;
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing");
+
+ const result = memory.grow(2);
+ assert_equals(result, 0);
+
+ const newMemory = memory.buffer;
+ assert_not_equals(oldMemory, newMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing");
+ assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing");
+}, "Zero initial");
+
+test(() => {
+ const argument = { "initial": { valueOf() { return 0 } } };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing");
+
+ const result = memory.grow({ valueOf() { return 2 } });
+ assert_equals(result, 0);
+
+ const newMemory = memory.buffer;
+ assert_not_equals(oldMemory, newMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing");
+ assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing");
+}, "Zero initial with valueOf");
+
+test(() => {
+ const argument = { "initial": 3 };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 3 }, "Buffer before growing");
+
+ const result = memory.grow(2);
+ assert_equals(result, 3);
+
+ const newMemory = memory.buffer;
+ assert_not_equals(oldMemory, newMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing");
+ assert_ArrayBuffer(newMemory, { "size": 5 }, "New buffer after growing");
+}, "Non-zero initial");
+
+test(() => {
+ const argument = { "initial": 0, "maximum": 2 };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing");
+
+ const result = memory.grow(2);
+ assert_equals(result, 0);
+
+ const newMemory = memory.buffer;
+ assert_not_equals(oldMemory, newMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing");
+ assert_ArrayBuffer(newMemory, { "size": 2 }, "New buffer after growing");
+}, "Zero initial with respected maximum");
+
+test(() => {
+ const argument = { "initial": 0, "maximum": 2 };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 0 }, "Buffer before growing");
+
+ const result = memory.grow(1);
+ assert_equals(result, 0);
+
+ const newMemory = memory.buffer;
+ assert_not_equals(oldMemory, newMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "Old buffer after growing once");
+ assert_ArrayBuffer(newMemory, { "size": 1 }, "New buffer after growing once");
+
+ const result2 = memory.grow(1);
+ assert_equals(result2, 1);
+
+ const newestMemory = memory.buffer;
+ assert_not_equals(newMemory, newestMemory);
+ assert_ArrayBuffer(oldMemory, { "detached": true }, "New buffer after growing twice");
+ assert_ArrayBuffer(newMemory, { "detached": true }, "New buffer after growing twice");
+ assert_ArrayBuffer(newestMemory, { "size": 2 }, "Newest buffer after growing twice");
+}, "Zero initial with respected maximum grown twice");
+
+test(() => {
+ const argument = { "initial": 1, "maximum": 2 };
+ const memory = new WebAssembly.Memory(argument);
+ const oldMemory = memory.buffer;
+ assert_ArrayBuffer(oldMemory, { "size": 1 }, "Buffer before growing");
+
+ assert_throws(new RangeError(), () => memory.grow(2));
+ assert_equals(memory.buffer, oldMemory);
+ assert_ArrayBuffer(memory.buffer, { "size": 1 }, "Buffer before trying to grow");
+}, "Zero initial growing too much");
+
+const outOfRangeValues = [
+ undefined,
+ NaN,
+ Infinity,
+ -Infinity,
+ -1,
+ 0x100000000,
+ 0x1000000000,
+ "0x100000000",
+ { valueOf() { return 0x100000000; } },
+];
+
+for (const value of outOfRangeValues) {
+ test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ assert_throws(new TypeError(), () => memory.grow(value));
+ }, `Out-of-range argument: ${format_value(value)}`);
+}
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js
new file mode 100644
index 00000000000..4e15d75ea20
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/toString.any.js
@@ -0,0 +1,7 @@
+// META: global=jsshell
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument);
+ assert_class_string(memory, "WebAssembly.Memory");
+}, "Object.prototype.toString on an Memory");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
index 0f5eecf957e..32f183fac87 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js
@@ -25,6 +25,26 @@ test(() => {
}, "Calling");
test(() => {
+ const invalidArguments = [
+ undefined,
+ null,
+ true,
+ "test",
+ Symbol(),
+ 7,
+ NaN,
+ {},
+ ArrayBuffer,
+ ArrayBuffer.prototype,
+ Array.from(emptyModuleBinary),
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => new WebAssembly.Module(argument),
+ `new Module(${format_value(argument)})`);
+ }
+}, "Invalid arguments");
+
+test(() => {
const buffer = new Uint8Array();
assert_throws(new WebAssembly.CompileError(), () => new WebAssembly.Module(buffer));
}, "Empty buffer");
@@ -33,3 +53,8 @@ test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype);
}, "Prototype");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ assert_true(Object.isExtensible(module));
+}, "Extensibility");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
index 146aa7fd332..58ac63b61c9 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js
@@ -4,12 +4,14 @@
function assert_ArrayBuffer(buffer, expected) {
assert_equals(Object.getPrototypeOf(buffer), ArrayBuffer.prototype, "Prototype");
+ assert_true(Object.isExtensible(buffer), "isExtensible");
assert_array_equals(new Uint8Array(buffer), expected);
}
function assert_sections(sections, expected) {
assert_true(Array.isArray(sections), "Should be array");
assert_equals(Object.getPrototypeOf(sections), Array.prototype, "Prototype");
+ assert_true(Object.isExtensible(sections), "isExtensible");
assert_equals(sections.length, expected.length);
for (let i = 0; i < expected.length; ++i) {
@@ -29,10 +31,21 @@ test(() => {
}, "Missing arguments");
test(() => {
- assert_throws(new TypeError(), () => WebAssembly.Module.customSections({}, ""));
- assert_throws(new TypeError(), () => WebAssembly.Module.customSections("", ""));
- assert_throws(new TypeError(), () => WebAssembly.Module.customSections(undefined, ""));
- assert_throws(new TypeError(), () => WebAssembly.Module.customSections(null, ""));
+ const invalidArguments = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Module,
+ WebAssembly.Module.prototype,
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => WebAssembly.Module.customSections(argument, ""),
+ `customSections(${format_value(argument)})`);
+ }
}, "Non-Module arguments");
test(() => {
@@ -102,3 +115,48 @@ test(() => {
assert_sections(WebAssembly.Module.customSections(module, "name\0"), [])
assert_sections(WebAssembly.Module.customSections(module, "foo\0"), [])
}, "Custom sections");
+
+test(() => {
+ const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121];
+ const name = "yee\uD801\uDC37eey"
+
+ const binary = new Binary;
+ binary.emit_section(kUnknownSectionCode, section => {
+ section.emit_string(name);
+ section.emit_bytes(bytes);
+ });
+
+ const builder = new WasmModuleBuilder();
+ builder.addExplicitSection(binary);
+ const buffer = builder.toBuffer();
+ const module = new WebAssembly.Module(buffer);
+
+ assert_sections(WebAssembly.Module.customSections(module, name), [
+ bytes,
+ ]);
+ assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFDeey"), []);
+ assert_sections(WebAssembly.Module.customSections(module, "yee\uFFFD\uFFFDeey"), []);
+}, "Custom sections with surrogate pairs");
+
+test(() => {
+ const bytes = [87, 101, 98, 65, 115, 115, 101, 109, 98, 108, 121];
+
+ const binary = new Binary;
+ binary.emit_section(kUnknownSectionCode, section => {
+ section.emit_string("na\uFFFDme");
+ section.emit_bytes(bytes);
+ });
+
+ const builder = new WasmModuleBuilder();
+ builder.addExplicitSection(binary);
+ const buffer = builder.toBuffer();
+ const module = new WebAssembly.Module(buffer);
+
+ assert_sections(WebAssembly.Module.customSections(module, "name"), []);
+ assert_sections(WebAssembly.Module.customSections(module, "na\uFFFDme"), [
+ bytes,
+ ]);
+ assert_sections(WebAssembly.Module.customSections(module, "na\uDC01me"), [
+ bytes,
+ ]);
+}, "Custom sections with U+FFFD");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
index c7ecdcf6b61..e63a885a4c3 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js
@@ -7,15 +7,54 @@ setup(() => {
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
});
+function assert_ModuleExportDescriptor(export_, expected) {
+ assert_equals(Object.getPrototypeOf(export_), Object.prototype, "Prototype");
+ assert_true(Object.isExtensible(export_), "isExtensible");
+
+ const name = Object.getOwnPropertyDescriptor(export_, "name");
+ assert_true(name.writable, "name: writable");
+ assert_true(name.enumerable, "name: enumerable");
+ assert_true(name.configurable, "name: configurable");
+ assert_equals(name.value, expected.name);
+
+ const kind = Object.getOwnPropertyDescriptor(export_, "kind");
+ assert_true(kind.writable, "kind: writable");
+ assert_true(kind.enumerable, "kind: enumerable");
+ assert_true(kind.configurable, "kind: configurable");
+ assert_equals(kind.value, expected.kind);
+}
+
+function assert_exports(exports, expected) {
+ assert_true(Array.isArray(exports), "Should be array");
+ assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype");
+ assert_true(Object.isExtensible(exports), "isExtensible");
+
+ assert_equals(exports.length, expected.length);
+ for (let i = 0; i < expected.length; ++i) {
+ assert_ModuleExportDescriptor(exports[i], expected[i]);
+ }
+}
+
test(() => {
assert_throws(new TypeError(), () => WebAssembly.Module.exports());
}, "Missing arguments");
test(() => {
- assert_throws(new TypeError(), () => WebAssembly.Module.exports({}));
- assert_throws(new TypeError(), () => WebAssembly.Module.exports(""));
- assert_throws(new TypeError(), () => WebAssembly.Module.exports(undefined));
- assert_throws(new TypeError(), () => WebAssembly.Module.exports(null));
+ const invalidArguments = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Module,
+ WebAssembly.Module.prototype,
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => WebAssembly.Module.exports(argument),
+ `exports(${format_value(argument)})`);
+ }
}, "Non-Module arguments");
test(() => {
@@ -40,15 +79,7 @@ test(() => {
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
const exports = WebAssembly.Module.exports(module);
- assert_true(Array.isArray(exports));
-}, "Return type");
-
-test(() => {
- const module = new WebAssembly.Module(emptyModuleBinary);
- const exports = WebAssembly.Module.exports(module);
- assert_true(Array.isArray(exports), "Should be array");
- assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype");
- assert_array_equals(exports, []);
+ assert_exports(exports, []);
}, "Empty module");
test(() => {
@@ -56,22 +87,6 @@ test(() => {
assert_not_equals(WebAssembly.Module.exports(module), WebAssembly.Module.exports(module));
}, "Empty module: array caching");
-function assert_ModuleExportDescriptor(export_, expected) {
- assert_equals(Object.getPrototypeOf(export_), Object.prototype, "Prototype");
-
- const name = Object.getOwnPropertyDescriptor(export_, "name");
- assert_true(name.writable, "name: writable");
- assert_true(name.enumerable, "name: enumerable");
- assert_true(name.configurable, "name: configurable");
- assert_equals(name.value, expected.name);
-
- const kind = Object.getOwnPropertyDescriptor(export_, "kind");
- assert_true(kind.writable, "kind: writable");
- assert_true(kind.enumerable, "kind: enumerable");
- assert_true(kind.configurable, "kind: configurable");
- assert_equals(kind.value, expected.kind);
-}
-
test(() => {
const builder = new WasmModuleBuilder();
@@ -103,9 +118,6 @@ test(() => {
const buffer = builder.toBuffer()
const module = new WebAssembly.Module(buffer);
const exports = WebAssembly.Module.exports(module);
- assert_true(Array.isArray(exports), "Should be array");
- assert_equals(Object.getPrototypeOf(exports), Array.prototype, "Prototype");
-
const expected = [
{ "kind": "function", "name": "fn" },
{ "kind": "function", "name": "fn2" },
@@ -114,8 +126,5 @@ test(() => {
{ "kind": "global", "name": "global2" },
{ "kind": "memory", "name": "memory" },
];
- assert_equals(exports.length, expected.length);
- for (let i = 0; i < expected.length; ++i) {
- assert_ModuleExportDescriptor(exports[i], expected[i]);
- }
+ assert_exports(exports, expected);
}, "exports");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
index 522b262f549..640da591d21 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js
@@ -2,6 +2,40 @@
// META: script=/wasm/jsapi/wasm-constants.js
// META: script=/wasm/jsapi/wasm-module-builder.js
+function assert_ModuleImportDescriptor(import_, expected) {
+ assert_equals(Object.getPrototypeOf(import_), Object.prototype, "Prototype");
+ assert_true(Object.isExtensible(import_), "isExtensible");
+
+ const module = Object.getOwnPropertyDescriptor(import_, "module");
+ assert_true(module.writable, "module: writable");
+ assert_true(module.enumerable, "module: enumerable");
+ assert_true(module.configurable, "module: configurable");
+ assert_equals(module.value, expected.module);
+
+ const name = Object.getOwnPropertyDescriptor(import_, "name");
+ assert_true(name.writable, "name: writable");
+ assert_true(name.enumerable, "name: enumerable");
+ assert_true(name.configurable, "name: configurable");
+ assert_equals(name.value, expected.name);
+
+ const kind = Object.getOwnPropertyDescriptor(import_, "kind");
+ assert_true(kind.writable, "kind: writable");
+ assert_true(kind.enumerable, "kind: enumerable");
+ assert_true(kind.configurable, "kind: configurable");
+ assert_equals(kind.value, expected.kind);
+}
+
+function assert_imports(imports, expected) {
+ assert_true(Array.isArray(imports), "Should be array");
+ assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype");
+ assert_true(Object.isExtensible(imports), "isExtensible");
+
+ assert_equals(imports.length, expected.length);
+ for (let i = 0; i < expected.length; ++i) {
+ assert_ModuleImportDescriptor(imports[i], expected[i]);
+ }
+}
+
let emptyModuleBinary;
setup(() => {
emptyModuleBinary = new WasmModuleBuilder().toBuffer();
@@ -12,10 +46,21 @@ test(() => {
}, "Missing arguments");
test(() => {
- assert_throws(new TypeError(), () => WebAssembly.Module.imports({}));
- assert_throws(new TypeError(), () => WebAssembly.Module.imports(""));
- assert_throws(new TypeError(), () => WebAssembly.Module.imports(undefined));
- assert_throws(new TypeError(), () => WebAssembly.Module.imports(null));
+ const invalidArguments = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Module,
+ WebAssembly.Module.prototype,
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => WebAssembly.Module.imports(argument),
+ `imports(${format_value(argument)})`);
+ }
}, "Non-Module arguments");
test(() => {
@@ -46,9 +91,7 @@ test(() => {
test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
const imports = WebAssembly.Module.imports(module);
- assert_true(Array.isArray(imports), "Should be array");
- assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype");
- assert_array_equals(imports, []);
+ assert_imports(imports, []);
}, "Empty module");
test(() => {
@@ -56,28 +99,6 @@ test(() => {
assert_not_equals(WebAssembly.Module.imports(module), WebAssembly.Module.imports(module));
}, "Empty module: array caching");
-function assert_ModuleImportDescriptor(import_, expected) {
- assert_equals(Object.getPrototypeOf(import_), Object.prototype, "Prototype");
-
- const module = Object.getOwnPropertyDescriptor(import_, "module");
- assert_true(module.writable, "module: writable");
- assert_true(module.enumerable, "module: enumerable");
- assert_true(module.configurable, "module: configurable");
- assert_equals(module.value, expected.module);
-
- const name = Object.getOwnPropertyDescriptor(import_, "name");
- assert_true(name.writable, "name: writable");
- assert_true(name.enumerable, "name: enumerable");
- assert_true(name.configurable, "name: configurable");
- assert_equals(name.value, expected.name);
-
- const kind = Object.getOwnPropertyDescriptor(import_, "kind");
- assert_true(kind.writable, "kind: writable");
- assert_true(kind.enumerable, "kind: enumerable");
- assert_true(kind.configurable, "kind: configurable");
- assert_equals(kind.value, expected.kind);
-}
-
test(() => {
const builder = new WasmModuleBuilder();
@@ -89,17 +110,11 @@ test(() => {
const buffer = builder.toBuffer()
const module = new WebAssembly.Module(buffer);
const imports = WebAssembly.Module.imports(module);
- assert_true(Array.isArray(imports), "Should be array");
- assert_equals(Object.getPrototypeOf(imports), Array.prototype, "Prototype");
-
const expected = [
{ "module": "module", "kind": "function", "name": "fn" },
{ "module": "module", "kind": "global", "name": "global" },
{ "module": "module", "kind": "memory", "name": "memory" },
{ "module": "module", "kind": "table", "name": "table" },
];
- assert_equals(imports.length, expected.length);
- for (let i = 0; i < expected.length; ++i) {
- assert_ModuleImportDescriptor(imports[i], expected[i]);
- }
+ assert_imports(imports, expected);
}, "imports");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js
new file mode 100644
index 00000000000..d9231a132ca
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/module/toString.any.js
@@ -0,0 +1,9 @@
+// META: global=jsshell
+// META: script=/wasm/jsapi/wasm-constants.js
+// META: script=/wasm/jsapi/wasm-module-builder.js
+
+test(() => {
+ const emptyModuleBinary = new WasmModuleBuilder().toBuffer();
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ assert_class_string(module, "WebAssembly.Module");
+}, "Object.prototype.toString on an Module");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js
new file mode 100644
index 00000000000..dde2fd77090
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/assertions.js
@@ -0,0 +1,11 @@
+function assert_equal_to_array(table, expected, message) {
+ assert_equals(table.length, expected.length, `${message}: length`);
+ assert_throws(new RangeError(), () => table.get(-1), `${message}: table.get(-1)`);
+ for (let i = 0; i < expected.length; ++i) {
+ assert_equals(table.get(i), expected[i], `${message}: table.get(${i} of ${expected.length})`);
+ }
+ assert_throws(new RangeError(), () => table.get(expected.length),
+ `${message}: table.get(${expected.length} of ${expected.length})`);
+ assert_throws(new RangeError(), () => table.get(expected.length + 1),
+ `${message}: table.get(${expected.length + 1} of ${expected.length})`);
+}
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
index 4aeac10f7ad..e924bdb2ba4 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js
@@ -1,12 +1,16 @@
// META: global=jsshell
-// META: script=/wasm/jsapi/wasm-constants.js
-// META: script=/wasm/jsapi/wasm-module-builder.js
// META: script=/wasm/jsapi/assertions.js
-let emptyModuleBinary;
-setup(() => {
- emptyModuleBinary = new WasmModuleBuilder().toBuffer();
-});
+function assert_Table(actual, expected) {
+ assert_equals(Object.getPrototypeOf(actual), WebAssembly.Table.prototype,
+ "prototype");
+ assert_true(Object.isExtensible(actual), "extensible");
+
+ assert_equals(actual.length, expected.length, "length");
+ for (let i = 0; i < expected.length; ++i) {
+ assert_equals(actual.get(i), null, `actual.get(${i})`);
+ }
+}
test(() => {
assert_function_name(WebAssembly.Table, "Table", "WebAssembly.Table");
@@ -21,7 +25,7 @@ test(() => {
}, "No arguments");
test(() => {
- const argument = { "initial": 0 };
+ const argument = { "element": "anyfunc", "initial": 0 };
assert_throws(new TypeError(), () => WebAssembly.Table(argument));
}, "Calling");
@@ -30,6 +34,26 @@ test(() => {
}, "Empty descriptor");
test(() => {
+ const invalidArguments = [
+ undefined,
+ null,
+ false,
+ true,
+ "",
+ "test",
+ Symbol(),
+ 1,
+ NaN,
+ {},
+ ];
+ for (const invalidArgument of invalidArguments) {
+ assert_throws(new TypeError(),
+ () => new WebAssembly.Table(invalidArgument),
+ `new Table(${format_value(invalidArgument)})`);
+ }
+}, "Invalid descriptor argument");
+
+test(() => {
assert_throws(new TypeError(), () => new WebAssembly.Table({ "element": "anyfunc", "initial": undefined }));
}, "Undefined initial value in descriptor");
@@ -57,6 +81,22 @@ for (const value of outOfRangeValues) {
}
test(() => {
+ assert_throws(new RangeError(), () => new WebAssembly.Table({ "element": "anyfunc", "initial": 10, "maximum": 9 }));
+}, "Initial value exceeds maximum");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 0 };
+ const table = new WebAssembly.Table(argument);
+ assert_Table(table, { "length": 0 });
+}, "Basic (zero)");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_Table(table, { "length": 5 });
+}, "Basic (non-zero)");
+
+test(() => {
const proxy = new Proxy({}, {
has(o, x) {
assert_unreached(`Should not call [[HasProperty]] with ${x}`);
@@ -73,11 +113,61 @@ test(() => {
}
},
});
- new WebAssembly.Table(proxy);
+ const table = new WebAssembly.Table(proxy);
+ assert_Table(table, { "length": 0 });
}, "Proxy descriptor");
test(() => {
- const argument = { "element": "anyfunc", "initial": 0 };
- const table = new WebAssembly.Table(argument);
- assert_equals(Object.getPrototypeOf(table), WebAssembly.Table.prototype);
-}, "Prototype");
+ const table = new WebAssembly.Table({
+ "element": {
+ toString() { return "anyfunc"; },
+ },
+ "initial": 1,
+ });
+ assert_Table(table, { "length": 1 });
+}, "Type conversion for descriptor.element");
+
+test(() => {
+ const order = [];
+
+ new WebAssembly.Table({
+ get maximum() {
+ order.push("maximum");
+ return {
+ valueOf() {
+ order.push("maximum valueOf");
+ return 1;
+ },
+ };
+ },
+
+ get initial() {
+ order.push("initial");
+ return {
+ valueOf() {
+ order.push("initial valueOf");
+ return 1;
+ },
+ };
+ },
+
+ get element() {
+ order.push("element");
+ return {
+ toString() {
+ order.push("element toString");
+ return "anyfunc";
+ },
+ };
+ },
+ });
+
+ assert_array_equals(order, [
+ "element",
+ "element toString",
+ "initial",
+ "initial valueOf",
+ "maximum",
+ "maximum valueOf",
+ ]);
+}, "Order of evaluation for descriptor");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js
new file mode 100644
index 00000000000..2bb43a9308d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js
@@ -0,0 +1,220 @@
+// META: global=jsshell
+// META: script=/wasm/jsapi/wasm-constants.js
+// META: script=/wasm/jsapi/wasm-module-builder.js
+// META: script=assertions.js
+
+let functions;
+setup(() => {
+ const builder = new WasmModuleBuilder();
+
+ builder
+ .addFunction("fn", kSig_v_d)
+ .addBody([
+ kExprEnd
+ ])
+ .exportFunc();
+ builder
+ .addFunction("fn2", kSig_v_v)
+ .addBody([
+ kExprEnd
+ ])
+ .exportFunc();
+
+ const buffer = builder.toBuffer()
+ const module = new WebAssembly.Module(buffer);
+ const instance = new WebAssembly.Instance(module, {});
+ functions = instance.exports;
+});
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.get());
+}, "Missing arguments: get");
+
+test(t => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Table,
+ WebAssembly.Table.prototype,
+ ];
+
+ const argument = {
+ valueOf: t.unreached_func("Should not touch the argument (valueOf)"),
+ toString: t.unreached_func("Should not touch the argument (toString)"),
+ };
+
+ const fn = WebAssembly.Table.prototype.get;
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`);
+ }
+}, "Branding: get");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.set());
+ assert_throws(new TypeError(), () => table.set(0));
+}, "Missing arguments: set");
+
+test(t => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Table,
+ WebAssembly.Table.prototype,
+ ];
+
+ const argument = {
+ valueOf: t.unreached_func("Should not touch the argument (valueOf)"),
+ toString: t.unreached_func("Should not touch the argument (toString)"),
+ };
+
+ const fn = WebAssembly.Table.prototype.set;
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => fn.call(thisValue, argument, null), `this=${format_value(thisValue)}`);
+ }
+}, "Branding: set");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null, null, null, null, null]);
+
+ const {fn, fn2} = functions;
+
+ assert_equals(table.set(0, fn), undefined, "set() returns undefined.");
+ table.set(2, fn2);
+ table.set(4, fn);
+
+ assert_equal_to_array(table, [fn, null, fn2, null, fn]);
+
+ table.set(0, null);
+ assert_equal_to_array(table, [null, null, fn2, null, fn]);
+}, "Basic");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null, null, null, null, null]);
+
+ const {fn, fn2} = functions;
+
+ table.set(0, fn);
+ table.set(2, fn2);
+ table.set(4, fn);
+
+ assert_equal_to_array(table, [fn, null, fn2, null, fn]);
+
+ table.grow(4);
+
+ assert_equal_to_array(table, [fn, null, fn2, null, fn, null, null, null, null]);
+}, "Growing");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null, null, null, null, null]);
+
+ const {fn} = functions;
+
+ assert_throws(new RangeError(), () => table.set(-1, fn));
+ assert_throws(new RangeError(), () => table.set(5, fn));
+ assert_equal_to_array(table, [null, null, null, null, null]);
+}, "Setting out-of-bounds");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null]);
+
+ const invalidArguments = [
+ undefined,
+ true,
+ false,
+ "test",
+ Symbol(),
+ 7,
+ NaN,
+ {},
+ ];
+ for (const argument of invalidArguments) {
+ assert_throws(new TypeError(), () => table.set(0, argument),
+ `set(${format_value(argument)})`);
+ }
+ assert_equal_to_array(table, [null]);
+}, "Setting non-function");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null]);
+
+ const fn = function() {};
+ assert_throws(new TypeError(), () => table.set(0, fn));
+ assert_equal_to_array(table, [null]);
+}, "Setting non-wasm function");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, [null]);
+
+ const fn = () => {};
+ assert_throws(new TypeError(), () => table.set(0, fn));
+ assert_equal_to_array(table, [null]);
+}, "Setting non-wasm arrow function");
+
+const outOfRangeValues = [
+ undefined,
+ NaN,
+ Infinity,
+ -Infinity,
+ -1,
+ 0x100000000,
+ 0x1000000000,
+ "0x100000000",
+ { valueOf() { return 0x100000000; } },
+];
+
+for (const value of outOfRangeValues) {
+ test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.get(value));
+ }, `Getting out-of-range argument: ${format_value(value)}`);
+
+ test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.set(value, null));
+ }, `Setting out-of-range argument: ${format_value(value)}`);
+}
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ let called = 0;
+ const value = {
+ valueOf() {
+ called++;
+ return 0;
+ },
+ };
+ assert_throws(new TypeError(), () => table.set(value, {}));
+ assert_equals(called, 1);
+}, "Order of argument conversion");
+
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js
new file mode 100644
index 00000000000..d3efb511e4b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js
@@ -0,0 +1,86 @@
+// META: global=jsshell
+// META: script=assertions.js
+
+function nulls(n) {
+ return Array(n).fill(null);
+}
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.grow());
+}, "Missing arguments");
+
+test(t => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Table,
+ WebAssembly.Table.prototype,
+ ];
+
+ const argument = {
+ valueOf: t.unreached_func("Should not touch the argument (valueOf)"),
+ toString: t.unreached_func("Should not touch the argument (toString)"),
+ };
+
+ const fn = WebAssembly.Table.prototype.grow;
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => fn.call(thisValue, argument), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, nulls(5), "before");
+
+ const result = table.grow(3);
+ assert_equals(result, 5);
+ assert_equal_to_array(table, nulls(8), "after");
+}, "Basic");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 3, "maximum": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, nulls(3), "before");
+
+ const result = table.grow(2);
+ assert_equals(result, 3);
+ assert_equal_to_array(table, nulls(5), "after");
+}, "Reached maximum");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 2, "maximum": 5 };
+ const table = new WebAssembly.Table(argument);
+ assert_equal_to_array(table, nulls(2), "before");
+
+ assert_throws(new RangeError(), () => table.grow(4));
+ assert_equal_to_array(table, nulls(2), "after");
+}, "Exceeded maximum");
+
+const outOfRangeValues = [
+ undefined,
+ NaN,
+ Infinity,
+ -Infinity,
+ -1,
+ 0x100000000,
+ 0x1000000000,
+ "0x100000000",
+ { valueOf() { return 0x100000000; } },
+];
+
+for (const value of outOfRangeValues) {
+ test(() => {
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+ assert_throws(new TypeError(), () => table.grow(value));
+ }, `Out-of-range argument: ${format_value(value)}`);
+}
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js
new file mode 100644
index 00000000000..a6a9661dbad
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js
@@ -0,0 +1,46 @@
+// META: global=jsshell
+
+test(() => {
+ const thisValues = [
+ undefined,
+ null,
+ true,
+ "",
+ Symbol(),
+ 1,
+ {},
+ WebAssembly.Table,
+ WebAssembly.Table.prototype,
+ ];
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, "length");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(typeof desc.set, "undefined");
+
+ for (const thisValue of thisValues) {
+ assert_throws(new TypeError(), () => getter.call(thisValue), `this=${format_value(thisValue)}`);
+ }
+}, "Branding");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 2 };
+ const table = new WebAssembly.Table(argument);
+ assert_equals(table.length, 2, "Initial length");
+ table.length = 4;
+ assert_equals(table.length, 2, "Should not change the length");
+}, "Setting (sloppy mode)");
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 2 };
+ const table = new WebAssembly.Table(argument);
+ assert_equals(table.length, 2, "Initial length");
+ assert_throws(new TypeError(), () => {
+ "use strict";
+ table.length = 4;
+ });
+ assert_equals(table.length, 2, "Should not change the length");
+}, "Setting (strict mode)");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js
new file mode 100644
index 00000000000..e576477910a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/toString.any.js
@@ -0,0 +1,7 @@
+// META: global=jsshell
+
+test(() => {
+ const argument = { "element": "anyfunc", "initial": 0 };
+ const table = new WebAssembly.Table(argument);
+ assert_class_string(table, "WebAssembly.Table");
+}, "Object.prototype.toString on an Table");
diff --git a/tests/wpt/web-platform-tests/wasm/resources/frame.html b/tests/wpt/web-platform-tests/wasm/resources/frame.html
deleted file mode 100644
index d1c83e114a0..00000000000
--- a/tests/wpt/web-platform-tests/wasm/resources/frame.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<script>
-function listener(event) {
- var mod = event.data;
- try {
- var i = new WebAssembly.Instance(mod);
- var ans = i.exports.increment(42);
- event.source.postMessage(ans, event.origin);
- } catch (e) {
- event.source.postMessage(e, event.origin);
- }
-}
-
-if (window.addEventListener){
- addEventListener("message", listener, false)
-} else {
- attachEvent("onmessage", listener)
-}
-</script>
diff --git a/tests/wpt/web-platform-tests/wasm/resources/service-worker.js b/tests/wpt/web-platform-tests/wasm/resources/service-worker.js
deleted file mode 100644
index 684eaf64878..00000000000
--- a/tests/wpt/web-platform-tests/wasm/resources/service-worker.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var port;
-
-importScripts('load_wasm.js');
-
-self.onmessage = function(e) {
- var message = e.data;
- if ('port' in message) {
- port = message.port;
- }
-};
-
-// And an event listener:
-self.addEventListener('message', function(e) {
- var message = e.data;
- if ("compile" in message) {
- createWasmModule()
- .then(m => {
- try {
- port.postMessage({type:"OK", module:m});
- } catch (e) {
- port.postMessage({type:"SEND ERROR"});
- }
- })
- .catch(e => port.postMessage({type:"OTHER ERROR"}));
- }
-});
-
-self.addEventListener('messageerror', function(e) {
- port.postMessage({type:"RECEIVE ERROR"});
-});
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html
new file mode 100644
index 00000000000..0d11cc595be
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success-and-failure.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<title>WebAssembly.Module cannot cross agent clusters, BroadcastChannel edition</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+<script>
+async_test(t => {
+ const channel = new BroadcastChannel("anne was here"),
+ dw = new Worker("resources/broadcastchannel-worker.js"),
+ sw = new SharedWorker("resources/broadcastchannel-sharedworker.js");
+ let startCounter = 0,
+ dwStatus = "unknown",
+ swStatus = "unknown";
+
+ channel.onmessage = t.step_func(({ data }) => {
+ if(data === "hi") {
+ startCounter++;
+ if(startCounter === 2) {
+ createWasmModule().then(module => {
+ channel.postMessage(module);
+ });
+ } else if(startCounter > 2) {
+ assert_unreached();
+ }
+ } else if(data === "dw-success") {
+ dwStatus = "success";
+ } else if(data === "sw-success") {
+ swStatus = "success";
+ } else {
+ assert_unreached();
+ }
+ if(dwStatus === "success" && swStatus === "success") {
+ t.done();
+ }
+ });
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html
new file mode 100644
index 00000000000..cd5f8d0b56a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/broadcastchannel-success.html
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>Structured cloning of WebAssembly.Module: BroadcastChannel within the same agent cluster</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+
+promise_test(t => {
+ return createWasmModule().then(module => {
+ let loadedIframes = 0;
+ return Promise.all([
+ createIFrame("resources/broadcastchannel-iframe.html"),
+ createIFrame("resources/broadcastchannel-iframe.html"),
+ createIFrame("resources/broadcastchannel-iframe.html")
+ ]).then(() => {
+ const thisIframe = loadedIframes++;
+ const channel = new BroadcastChannel("channel name");
+
+ return new Promise(resolve => {
+ let soFar = 0;
+ channel.onmessage = t.step_func(msg => {
+ if (msg.module) {
+ // We only care about "broadcasts" from the workers.
+ return;
+ }
+
+ let {i, result} = msg;
+
+ assert_in_array(i, [0, 1, 2], "Any message events must come from expected sources");
+ assert_equals(result, i + 1, `iframe ${i} must return ${i+1}`);
+ ++soFar;
+
+ if (soFar === 3) {
+ resolve();
+ }
+ });
+
+ channel.postMessage({ module, i: thisIframe });
+ });
+ });
+ });
+});
+
+function createIFrame(src) {
+ return new Promise((resolve, reject) => {
+ const iframe = document.createElement("iframe");
+ iframe.src = src;
+ iframe.onload = () => resolve(iframe);
+ iframe.onerror = () => reject(`iframe with URL ${src} failed to load`);
+ document.body.appendChild(iframe);
+ });
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html b/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html
new file mode 100644
index 00000000000..24bb3b16d8c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/identity-not-preserved.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>WebAssembly.Modules, when cloned, do not give back the same object</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+
+async_test(t => {
+ createWasmModule().then(module => {
+ window.addEventListener("message", t.step_func(({ data }) => {
+ if (data.testId !== 1) {
+ return;
+ }
+
+ assert_not_equals(data.module, module);
+
+ t.done();
+ }));
+
+ window.postMessage({ module, testId: 1 }, "*");
+ });
+}, "postMessaging to this window does not give back the same WebAssembly.Module");
+
+async_test(t => {
+ createWasmModule().then(module => {
+ const worker = new Worker("resources/echo-worker.js");
+
+ worker.addEventListener("message", t.step_func(({ data }) => {
+ if (data.testId !== 2) {
+ return;
+ }
+
+ assert_not_equals(data.module, module);
+ t.done();
+ }));
+
+ worker.postMessage({ testId: 2, module });
+ });
+}, "postMessaging to a worker and back does not give back the same WebAssembly.Module");
+
+async_test(t => {
+ createWasmModule().then(module => {
+ window.addEventListener("message", t.step_func(({ data }) => {
+ if (data.testId !== 3) {
+ return;
+ }
+
+ assert_not_equals(data.module, module);
+ t.done();
+ }));
+
+ const iframe = document.createElement("iframe");
+ iframe.onload = t.step_func(() => {
+ iframe.contentWindow.postMessage({ testId: 3, module }, "*");
+ });
+ iframe.src = "resources/echo-iframe.html";
+ document.body.appendChild(iframe);
+ });
+}, "postMessaging to an iframe and back does not give back the same WebAssembly.Module");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm b/tests/wpt/web-platform-tests/wasm/serialization/incrementer.wasm
index 47afcdef2a2..47afcdef2a2 100644
--- a/tests/wpt/web-platform-tests/wasm/resources/incrementer.wasm
+++ b/tests/wpt/web-platform-tests/wasm/serialization/incrementer.wasm
Binary files differ
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js b/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js
new file mode 100644
index 00000000000..5388ebcc39b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/nested-worker-success.any.js
@@ -0,0 +1,9 @@
+// META: global=!default,dedicatedworker,sharedworker
+// META: script=resources/test-incrementer.js
+"use strict";
+
+promise_test(t => {
+ const worker = new Worker("resources/incrementer-worker.js");
+
+ return testSharingViaIncrementerScript(t, worker, "parent worker", worker, "sub-worker");
+}, "postMessaging to a dedicated sub-worker allows them to see each others' modifications");
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html b/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html
new file mode 100644
index 00000000000..a0bf11f01dd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/no-transferring.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>WebAssembly.Modules cannot be transferred</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/create-empty-wasm-module.js"></script>
+
+<script>
+"use strict";
+
+test(() => {
+ const module = createEmptyWasmModule();
+ assert_throws("DataCloneError", () => window.postMessage(module, "*", [module]));
+ assert_throws("DataCloneError", () => window.postMessage("test", "*", [module]));
+}, "Trying to transfer a WebAssembly.Module to this window throws");
+
+test(() => {
+ const module = createEmptyWasmModule();
+ const worker = new Worker("resources/echo-worker.js");
+ assert_throws("DataCloneError", () => worker.postMessage(module, [module]));
+ assert_throws("DataCloneError", () => worker.postMessage("test", [module]));
+}, "Trying to transfer a WebAssembly.Module to a worker throws");
+
+test(() => {
+ const module = createEmptyWasmModule();
+ const channel = new MessageChannel();
+ assert_throws("DataCloneError", () => channel.port1.postMessage(module, [module]));
+ assert_throws("DataCloneError", () => channel.port1.postMessage("test", [module]));
+}, "Trying to transfer a WebAssembly.Module through a MessagePort throws");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/resources/blank.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/blank.html
index a3c3a4689a6..a3c3a4689a6 100644
--- a/tests/wpt/web-platform-tests/wasm/resources/blank.html
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/blank.html
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html
new file mode 100644
index 00000000000..83e347b5cb3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-iframe.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that uses a given WebAssembly.Module sent from a BroadcastChannel</title>
+
+<script>
+"use strict";
+const channel = new BroadcastChannel("channel name");
+
+channel.onmessage = ({ data: { module, i }, source }) => {
+ if (!module) {
+ // We only care about "broadcasts" from the window
+ return;
+ }
+
+ let instance = new WebAssembly.Instance(module);
+ let increment = instance.exports["increment"];
+ let result = increment(i);
+ channel.postMessage({i, result});
+};
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js
new file mode 100644
index 00000000000..310e0e93584
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-sharedworker.js
@@ -0,0 +1,7 @@
+const channel = new BroadcastChannel("anne was here");
+channel.onmessageerror = ({ data }) => {
+ if(data === null) {
+ channel.postMessage("sw-success");
+ }
+}
+channel.postMessage("hi");
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js
new file mode 100644
index 00000000000..76a81770604
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/broadcastchannel-worker.js
@@ -0,0 +1,9 @@
+const channel = new BroadcastChannel("anne was here");
+channel.onmessage = ({ data }) => {
+ if(data === "hi" || data === "sw-success") {
+ return;
+ } else if(data instanceof WebAssembly.Module) {
+ channel.postMessage("dw-success");
+ }
+}
+channel.postMessage("hi");
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js
new file mode 100644
index 00000000000..7326710c9e4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/create-empty-wasm-module.js
@@ -0,0 +1,4 @@
+function createEmptyWasmModule() {
+ return new WebAssembly.Module(
+ new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]));
+}
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html
new file mode 100644
index 00000000000..c4fd5824a1c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-iframe.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that echos back anything postMessaged to it to its parent</title>
+
+<script>
+"use strict";
+
+window.onmessage = ({ data }) => {
+ parent.postMessage(data, "*");
+};
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js
new file mode 100644
index 00000000000..cbbde8a73c8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/echo-worker.js
@@ -0,0 +1,5 @@
+"use strict";
+
+self.onmessage = ({ data }) => {
+ self.postMessage(data);
+};
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html
new file mode 100644
index 00000000000..d2d18de4995
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe-domain.sub.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that is sent a WebAssembly Module</title>
+<script src="/resources/testharness.js"></script>
+<script src="test-incrementer.js"></script>
+
+<script>
+"use strict";
+
+document.domain = "{{host}}";
+setupDestinationIncrementer(self, parent, "*");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html
new file mode 100644
index 00000000000..5c8bc0735e2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-iframe.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that is sent a WebAssembly Module</title>
+<script src="/resources/testharness.js"></script>
+<script src="test-incrementer.js"></script>
+
+<script>
+"use strict";
+
+setupDestinationIncrementer(self, parent, "*");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html
new file mode 100644
index 00000000000..660e472b27c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-popup.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that is sent a WebAssembly Module</title>
+<script src="/resources/testharness.js"></script>
+<script src="test-incrementer.js"></script>
+
+<script>
+"use strict";
+
+setupDestinationIncrementer(self, opener, "*");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js
new file mode 100644
index 00000000000..0323b3e52e7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker-with-channel.js
@@ -0,0 +1,8 @@
+"use strict";
+importScripts("/resources/testharness.js");
+importScripts("./test-incrementer.js");
+
+self.onmessage = ({ data }) => {
+ // data will be a MessagePort
+ setupDestinationIncrementer(data, data);
+};
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js
new file mode 100644
index 00000000000..1779ceea520
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer-worker.js
@@ -0,0 +1,5 @@
+"use strict";
+importScripts("/resources/testharness.js");
+importScripts("./test-incrementer.js");
+
+setupDestinationIncrementer(self, self);
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm
new file mode 100644
index 00000000000..47afcdef2a2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/incrementer.wasm
Binary files differ
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html
new file mode 100644
index 00000000000..fe93cc0c4b0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-1.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Nesting level 1</title>
+
+<iframe src="nested-iframe-2.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html
new file mode 100644
index 00000000000..fad52ce9de3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-2.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Nesting level 2</title>
+
+<iframe src="nested-iframe-3.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html
new file mode 100644
index 00000000000..7971022b2cd
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-3.html
@@ -0,0 +1,5 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Nesting level 3</title>
+
+<iframe src="nested-iframe-4-incrementer.html"></iframe>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html
new file mode 100644
index 00000000000..f419f4bc36c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/nested-iframe-4-incrementer.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>A test page that is sent a WebAssembly Module, nested 4 levels deep in iframes</title>
+<script src="/resources/testharness.js"></script>
+<script src="test-incrementer.js"></script>
+
+<script>
+"use strict";
+
+setupDestinationIncrementer(self, parent.parent.parent.parent.parent, "*");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js
new file mode 100644
index 00000000000..39796f9d94a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/serviceworker-failure.js
@@ -0,0 +1,34 @@
+// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/.
+"use strict";
+self.importScripts("/resources/testharness.js");
+self.importScripts("./create-empty-wasm-module.js");
+
+let state = "start in worker";
+
+self.onmessage = e => {
+ if (e.data === "start in window") {
+ assert_equals(state, "start in worker");
+ e.source.postMessage(state);
+ state = "we are expecting a messageerror due to the window sending us a WebAssembly.Module";
+ } else if (e.data === "we are expecting a messageerror due to the worker sending us a WebAssembly.Module") {
+ assert_equals(state, "onmessageerror was received in worker");
+ e.source.postMessage(createEmptyWasmModule());
+ state = "done in worker";
+ } else {
+ e.source.postMessage(`worker onmessage was reached when in state "${state}" and data ${e.data}`);
+ }
+};
+
+self.onmessageerror = e => {
+ if (state === "we are expecting a messageerror due to the window sending us a WebAssembly.Module") {
+ assert_equals(e.data, null, "data");
+ assert_equals(e.origin, self.origin, "origin");
+ assert_not_equals(e.source, null, "source");
+ assert_equals(e.ports.length, 0, "ports length");
+
+ state = "onmessageerror was received in worker";
+ e.source.postMessage(state);
+ } else {
+ e.source.postMessage(`worker onmessageerror was reached when in state "${state}" and data ${e.data}`);
+ }
+};
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js
new file mode 100644
index 00000000000..854c70b9e84
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/sharedworker-failure.js
@@ -0,0 +1,21 @@
+importScripts("./test-incrementer.js");
+importScripts("./create-empty-wasm-module.js");
+
+let state = "send-sw-failure"
+onconnect = initialE => {
+ let port = initialE.source;
+ port.postMessage(state)
+ port.onmessage = e => {
+ if(state === "" && e.data === "send-window-failure") {
+ port.postMessage(createEmptyWasmModule())
+ } else {
+ port.postMessage("failure")
+ }
+ }
+ port.onmessageerror = e => {
+ if(state === "send-sw-failure") {
+ port.postMessage("send-sw-failure-success")
+ state = ""
+ }
+ }
+}
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js b/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js
new file mode 100644
index 00000000000..65cb33227a3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/resources/test-incrementer.js
@@ -0,0 +1,57 @@
+// Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/.
+//
+// This file is simplified from the one there, because it only tests that the
+// module can be passed and that functions can be run. The SharedArrayBuffer
+// version also tests that the memory is shared between the agents.
+
+"use strict";
+
+function createWasmModule() {
+ return fetch('incrementer.wasm')
+ .then(response => {
+ if (!response.ok)
+ throw new Error(response.statusText);
+ return response.arrayBuffer();
+ })
+ .then(WebAssembly.compile);
+}
+
+function testModule(module) {
+ let instance = new WebAssembly.Instance(module);
+ let increment = instance.exports["increment"];
+ assert_equals(typeof increment, "function", `The type of the increment export should be "function", got ${typeof increment}`);
+ let result = increment(42);
+ assert_equals(result, 43, `increment(42) should be 43, got ${result}`);
+}
+
+self.testSharingViaIncrementerScript = (t, whereToListen, whereToListenLabel, whereToSend, whereToSendLabel, origin) => {
+ return createWasmModule().then(module => {
+ return new Promise(resolve => {
+
+ whereToListen.onmessage = t.step_func(({ data }) => {
+ switch (data.message) {
+ case "module received": {
+ testModule(data.module);
+ resolve();
+ break;
+ }
+ }
+ });
+
+ whereToSend.postMessage({ message: "send module", module }, origin);
+ });
+ });
+};
+
+self.setupDestinationIncrementer = (whereToListen, whereToSendBackTo, origin) => {
+ whereToListen.onmessage = ({ data }) => {
+ switch (data.message) {
+ case "send module": {
+ let module = data.module;
+ testModule(data.module);
+ whereToSendBackTo.postMessage({ message: "module received", module }, origin);
+ break;
+ }
+ }
+ };
+};
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html
new file mode 100644
index 00000000000..35dc17b6701
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-history.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>WebAssembly.Module cloning via history's methods invoking StructuredSerializeForStorage</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/create-empty-wasm-module.js"></script>
+
+<script>
+"use strict";
+
+for (const method of ["pushState", "replaceState"]) {
+ test(() => {
+ assert_throws("DataCloneError", () => {
+ history[method](createEmptyWasmModule(), "dummy title");
+ });
+ }, `history.${method}(): simple case`);
+
+ test(() => {
+ let getter1Called = false;
+ let getter2Called = false;
+ assert_throws("DataCloneError", () => {
+ history[method]([
+ { get x() { getter1Called = true; return 5; } },
+ createEmptyWasmModule(),
+ { get x() { getter2Called = true; return 5; } }
+ ], "dummy title");
+ });
+
+ assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called");
+ assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called");
+ }, `history.${method}(): is interleaved correctly`);
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js
new file mode 100644
index 00000000000..1d861c3d3aa
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-idb.any.js
@@ -0,0 +1,45 @@
+// META: script=/IndexedDB/support.js
+"use strict";
+
+function createEmptyWasmModule() {
+ return new WebAssembly.Module(
+ new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]));
+}
+
+async_test(t => {
+ const openReq = createdb(t);
+
+ openReq.onupgradeneeded = e => {
+ const db = e.target.result;
+ const store = db.createObjectStore("store", { keyPath: "key" });
+
+ assert_throws("DataCloneError", () => {
+ store.put({ key: 1, property: createEmptyWasmModule() });
+ });
+ t.done();
+ };
+}, "WebAssembly.Module cloning via IndexedDB: basic case");
+
+async_test(t => {
+ const openReq = createdb(t);
+
+ openReq.onupgradeneeded = e => {
+ const db = e.target.result;
+ const store = db.createObjectStore("store", { keyPath: "key" });
+
+ let getter1Called = false;
+ let getter2Called = false;
+
+ assert_throws("DataCloneError", () => {
+ store.put({ key: 1, property: [
+ { get x() { getter1Called = true; return 5; } },
+ createEmptyWasmModule(),
+ { get x() { getter2Called = true; return 5; } }
+ ]});
+ });
+
+ assert_true(getter1Called, "The getter before the WebAssembly.Module must have been called");
+ assert_false(getter2Called, "The getter after the WebAssembly.Module must not have been called");
+ t.done();
+ };
+}, "WebAssembly.Module cloning via the IndexedDB: is interleaved correctly");
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js
new file mode 100644
index 00000000000..84105651d3b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/serialization-via-notifications-api.any.js
@@ -0,0 +1,28 @@
+"use strict";
+
+function createEmptyWasmModule() {
+ return new WebAssembly.Module(
+ new Uint8Array([0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00]));
+}
+
+test(() => {
+ assert_throws("DataCloneError", () => {
+ new Notification("Bob: Hi", { data: createEmptyWasmModule() });
+ })
+}, "WebAssembly.Module cloning via the Notifications API's data member: basic case");
+
+test(() => {
+ let getter1Called = false;
+ let getter2Called = false;
+
+ assert_throws("DataCloneError", () => {
+ new Notification("Bob: Hi", { data: [
+ { get x() { getter1Called = true; return 5; } },
+ createEmptyWasmModule(),
+ { get x() { getter2Called = true; return 5; } }
+ ]});
+ });
+
+ assert_true(getter1Called, "The getter before the SAB must have been called");
+ assert_false(getter2Called, "The getter after the SAB must not have been called");
+}, "WebAssembly.Module cloning via the Notifications API's data member: is interleaved correctly");
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html
new file mode 100644
index 00000000000..51d4c5cb0ea
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-domain-success.sub.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>Structured cloning of WebAssembly.Module into same-origin-domain windows</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+document.domain = "{{host}}";
+
+promise_test(t => {
+ return new Promise(resolve => {
+ const iframe = document.createElement("iframe");
+ iframe.onload = t.step_func(() => {
+ resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*"));
+ });
+ iframe.src = "//{{domains[www1]}}:{{location[port]}}/wasm/serialization/resources/incrementer-iframe-domain.sub.html";
+ document.body.appendChild(iframe);
+ });
+}, "postMessaging to a same-origin-domain (but not same-origin) iframe allows them to instantiate");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html b/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html
new file mode 100644
index 00000000000..e686c811356
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-messagechannel-success.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>Structured cloning of WebAssembly.Module using MessageChannel</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+
+promise_test(t => {
+ const worker = new Worker("resources/incrementer-worker-with-channel.js");
+ const channel = new MessageChannel();
+ worker.postMessage(channel.port2, [channel.port2]);
+
+ return testSharingViaIncrementerScript(t, channel.port1, "window", channel.port1, "worker");
+}, "postMessaging to a dedicated worker via MessageChannel allows them to instantiate");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html b/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html
new file mode 100644
index 00000000000..97c5a1decdb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-serviceworker-failure.https.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<title>WebAssembly.Module cannot cross agent clusters, service worker edition</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
+<script src="./resources/create-empty-wasm-module.js"></script>
+
+<script>
+"use strict";
+promise_test(t => {
+ const scope = "resources/blank.html";
+ return service_worker_unregister_and_register(t, "resources/serviceworker-failure.js", scope).then(reg => {
+ return wait_for_state(t, reg.installing, "activated");
+ })
+ .then(() => {
+ return with_iframe(scope);
+ }).then(iframe => {
+ const sw = iframe.contentWindow.navigator.serviceWorker;
+ let state = "start in window";
+
+ return new Promise(resolve => {
+ sw.onmessage = t.step_func(e => {
+ if (e.data === "start in worker") {
+ assert_equals(state, "start in window");
+ sw.controller.postMessage(createEmptyWasmModule());
+ state = "we are expecting confirmation of an onmessageerror in the worker";
+ } else if (e.data === "onmessageerror was received in worker") {
+ assert_equals(state, "we are expecting confirmation of an onmessageerror in the worker");
+ state = "we are expecting a messageerror due to the worker sending us a WebAssembly.Module";
+ sw.controller.postMessage(state);
+ } else {
+ assert_unreached("Got an unexpected message from the service worker: " + e.data);
+ }
+ });
+
+ sw.onmessageerror = t.step_func(e => {
+ assert_equals(state, "we are expecting a messageerror due to the worker sending us a WebAssembly.Module");
+
+ assert_equals(e.data, null, "data");
+ assert_equals(e.origin, self.origin, "origin");
+ assert_equals(e.source, null, "source");
+ assert_equals(e.ports.length, 0, "ports length");
+
+ state = "done in window";
+ resolve();
+ });
+
+ sw.controller.postMessage(state);
+ });
+ });
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html b/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html
new file mode 100644
index 00000000000..667e985a30b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-sharedworker-failure.html
@@ -0,0 +1,33 @@
+<!doctype html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<title>WebAssembly.Modules cannot cross agent clusters, shared worker edition</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/create-empty-wasm-module.js"></script>
+<script>
+async_test(t => {
+ const sw = new SharedWorker("resources/sharedworker-failure.js")
+ let state = ""
+ sw.port.onmessage = t.step_func(e => {
+ if(e.data === "send-sw-failure") {
+ sw.port.postMessage(createEmptyWasmModule())
+ } else if(e.data === "send-sw-failure-success") {
+ state = "send-window-failure"
+ sw.port.postMessage(state)
+ } else {
+ assert_unreached()
+ }
+ })
+ sw.port.onmessageerror = t.step_func(e => {
+ if(state === "send-window-failure") {
+ assert_equals(e.data, null, "data")
+ assert_equals(e.origin, "", "origin")
+ assert_equals(e.source, null, "source")
+ assert_equals(e.ports.length, 0, "ports length")
+ t.done()
+ } else {
+ assert_unreached()
+ }
+ })
+})
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html b/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html
new file mode 100644
index 00000000000..070cf0a49a8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-similar-but-cross-origin-success.sub.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>Structured cloning of WebAssembly.Module to similar-origin, but not same-origin, windows</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+document.domain = "{{host}}";
+
+promise_test(t => {
+ return new Promise(resolve => {
+ const iframe = document.createElement("iframe");
+ iframe.onload = t.step_func(() => {
+ resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*"));
+ });
+ iframe.src = "//{{domains[www1]}}:{{location[port]}}/wasm/serialization/resources/incrementer-iframe.html";
+ document.body.appendChild(iframe);
+ });
+}, "postMessaging to a not same-origin-domain, but similar origin, iframe allows them to instantiate");
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html b/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html
new file mode 100644
index 00000000000..6f2ccf465e9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/wasm/serialization/window-simple-success.html
@@ -0,0 +1,57 @@
+<!DOCTYPE html>
+<!-- Based on similar tests in html/infrastructure/safe-passing-of-structured-data/shared-array-buffers/ -->
+<meta charset="utf-8">
+<title>Structured cloning of WebAssembly.Module: simple success cases that don't need dedicated files</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="./resources/test-incrementer.js"></script>
+
+<div id="log"></div>
+
+<script>
+"use strict";
+
+promise_test(t => {
+ const worker = new Worker("resources/incrementer-worker.js");
+
+ return testSharingViaIncrementerScript(t, worker, "window", worker, "worker", undefined);
+}, "postMessaging to a dedicated worker allows them to instantiate");
+
+promise_test(t => {
+ return new Promise(resolve => {
+ const iframe = document.createElement("iframe");
+ iframe.onload = t.step_func(() => {
+ resolve(testSharingViaIncrementerScript(t, window, "window", iframe.contentWindow, "iframe", "*"));
+ });
+ iframe.src = "resources/incrementer-iframe.html";
+ document.body.appendChild(iframe);
+ });
+}, "postMessaging to a same-origin iframe allows them to instantiate");
+
+promise_test(t => {
+ return new Promise(resolve => {
+ const iframe = document.createElement("iframe");
+ iframe.onload = t.step_func(() => {
+ const level1 = iframe.contentWindow;
+ const level2 = level1.frames[0];
+ const level3 = level2.frames[0];
+ const targetWindow = level3.frames[0];
+ resolve(testSharingViaIncrementerScript(t, window, "window", targetWindow, "nested iframe", "*"));
+ });
+ iframe.src = "resources/nested-iframe-1.html";
+ document.body.appendChild(iframe);
+ });
+}, "postMessaging to a same-origin deeply-nested iframe allows them to instantiate");
+
+promise_test(t => {
+ return new Promise(resolve => {
+ const w = window.open("resources/incrementer-popup.html");
+ w.onload = t.step_func(() => {
+ resolve(testSharingViaIncrementerScript(t, window, "window", w, "popup window", "*").then(() => {
+ w.close();
+ }));
+ });
+ });
+}, "postMessaging to a same-origin opened window allows them to instantiate");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html b/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html
deleted file mode 100644
index 0f4fbd0c719..00000000000
--- a/tests/wpt/web-platform-tests/wasm/wasm_local_iframe_test.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/load_wasm.js"></script>
-<script>
- function runTests(iframe) {
- iframe = iframe.contentWindow;
- promise_test(async function() {
- var mod = await createWasmModule();
- assert_true(mod instanceof WebAssembly.Module);
- var ans = await new Promise((resolve, reject) => {
- iframe.postMessage(mod, '*');
- window.addEventListener("message", (reply) => resolve(reply.data), false);
- });
- assert_equals(ans, 43);
- }, "send wasm module to iframe");
- }
-</script>
-<iframe src="resources/frame.html" onload="runTests(this)"></iframe>
diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html
deleted file mode 100644
index 49766c77052..00000000000
--- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<!DOCTYPE html>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="resources/load_wasm.js"></script>
-<script src="wasm_serialization_tests.js"></script>
-<script>
- promise_test(TestInstantiateInWorker, "serialize wasm to worker");
-</script>
diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js
deleted file mode 100644
index 3cc4166168b..00000000000
--- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_tests.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-function TestInstantiateInWorker() {
- return createWasmModule()
- .then((mod) => {
- var worker = new Worker("wasm_serialization_worker.js");
- return new Promise((resolve, reject) => {
- worker.postMessage(mod);
- worker.onmessage = function(event) {
- resolve(event.data);
- }
- });
- })
- .then(data => assert_equals(data, 43))
- .catch(error => assert_unreached(error));
-}
diff --git a/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js b/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js
deleted file mode 100644
index 3361ed73951..00000000000
--- a/tests/wpt/web-platform-tests/wasm/wasm_serialization_worker.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-onmessage = function(e) {
- var compiled_module = e.data;
- var instance = new WebAssembly.Instance(compiled_module);
- if (instance === undefined) {
- postMessage("error!");
- return;
- }
- var entrypoint = instance.exports["increment"];
-
- if (typeof entrypoint !== "function") {
- postMessage("error!");
- return;
- }
-
- var ret = entrypoint(42);
- postMessage(ret);
-}
diff --git a/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html b/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html
deleted file mode 100644
index cced4b8f6ec..00000000000
--- a/tests/wpt/web-platform-tests/wasm/wasm_service_worker_test.https.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<!DOCTYPE html>
-<title>Service Worker: postMessage with wasm</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script src="/common/get-host-info.sub.js"></script>
-<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
-<script>
- promise_test(async test => {
- var registration = await service_worker_unregister_and_register(
- test, 'resources/service-worker.js', 'resources/blank.html');
- add_completion_callback(() => registration.unregister());
- var worker = registration.installing;
- var event = await new Promise((resolve, reject) => {
- var messageChannel = new MessageChannel();
- worker.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
- worker.postMessage({compile: true});
- messageChannel.port1.onmessage = event => reject(event);
- messageChannel.port1.onmessageerror = event => resolve(event);
- });
- assert_equals(event.type, "messageerror");
- assert_equals(event.data, null);
- }, 'postMessaging wasm from a service worker should fail');
-</script>
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js b/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js
index 0d90a9c6300..df0090c6d60 100644
--- a/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js
+++ b/tests/wpt/web-platform-tests/webaudio/resources/audionodeoptions.js
@@ -40,19 +40,19 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) {
{channelCount: testChannelCount}));
},
'new ' + nodeName + '(c, {channelCount: ' + testChannelCount + '}}')
- .throw(expectedNodeOptions.channelCount.errorType || TypeError);
+ .throw(DOMException,
+ expectedNodeOptions.channelCount.exceptionType);
} else {
// The channel count is not fixed. Try to set the count to invalid
// values and make sure an error is thrown.
- let errorType = 'NotSupportedError';
-
[0, 99].forEach(testValue => {
should(() => {
node = new window[nodeName](
context, Object.assign({}, expectedNodeOptions.additionalOptions, {
channelCount: testValue
}));
- }, `new ${nodeName}(c, {channelCount: ${testValue}})`).throw(errorType);
+ }, `new ${nodeName}(c, {channelCount: ${testValue}})`)
+ .throw(DOMException, 'NotSupportedError');
});
}
@@ -88,7 +88,8 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) {
{channelCountMode: testValue}));
},
`new ${nodeName}(c, {channelCountMode: "${testValue}"})`)
- .throw(expectedNodeOptions.channelCountMode.errorType);
+ .throw(DOMException,
+ expectedNodeOptions.channelCountMode.exceptionType);
}
});
} else {
@@ -140,7 +141,8 @@ function testAudioNodeOptions(should, context, nodeName, expectedNodeOptions) {
{channelInterpretation: testValue}));
},
`new ${nodeName}(c, {channelInterpretation: "${testValue}"})`)
- .throw(expectedNodeOptions.channelInterpretation.errorType);
+ .throw(DOMException,
+ expectedNodeOptions.channelCountMode.exceptionType);
}
});
} else {
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/audit.js b/tests/wpt/web-platform-tests/webaudio/resources/audit.js
index 7ffa4392b05..b7ca0201610 100644
--- a/tests/wpt/web-platform-tests/webaudio/resources/audit.js
+++ b/tests/wpt/web-platform-tests/webaudio/resources/audit.js
@@ -274,21 +274,25 @@ window.Audit = (function() {
/**
* Check if |actual| operation wrapped in a function throws an exception
- * with a expected error type correctly. |expected| is optional. If it is a
- * String, then it is considered to be the name of a DOMException. It can
- * also be an instance of either an Error or a DOMException, to be more
- * strict about the actual error type.
+ * with a expected error type correctly. |expected| is optional. If it is an
+ * instance of DOMException, then the description (second argument) can be
+ * provided to be more strict about the expected exception type. |expected|
+ * also can be other generic error types such as TypeError, RangeError or
+ * etc.
*
* @example
* should(() => { let a = b; }, 'A bad code').throw();
- * should(() => { let c = d; }, 'Assigning d to c.')
- * .throw('ReferenceError');
- * should(() => { let e = f; }, 'Assigning e to f.')
- * .throw('ReferenceError', { omitErrorMessage: true });
+ * should(() => { new SomeConstructor(); }, 'A bad construction')
+ * .throw(DOMException, 'NotSupportedError');
+ * should(() => { let c = d; }, 'Assigning d to c')
+ * .throw(ReferenceError);
+ * should(() => { let e = f; }, 'Assigning e to f')
+ * .throw(ReferenceError, { omitErrorMessage: true });
*
* @result
* "PASS A bad code threw an exception of ReferenceError: b is not
* defined."
+ * "PASS A bad construction threw DOMException:NotSupportedError."
* "PASS Assigning d to c threw ReferenceError: d is not defined."
* "PASS Assigning e to f threw ReferenceError: [error message
* omitted]."
@@ -313,17 +317,16 @@ window.Audit = (function() {
// The expected error type was not given.
didThrowCorrectly = true;
passDetail = '${actual} threw ' + error.name + errorMessage + '.';
- } else if (typeof(this._expected) == "string" &&
- error instanceof DOMException &&
- error.name === this._expected) {
- // A DOMException was thrown and expected, and the names match
+ } else if (this._expected === DOMException &&
+ (this._expectedDescription === undefined ||
+ this._expectedDescription === error.name)) {
+ // Handles DOMException with the associated name.
didThrowCorrectly = true;
passDetail = '${actual} threw ${expected}' + errorMessage + '.';
- } else if (this._expected == error.constructor &&
- this._expected.name == error.name) {
- // The expected error type and names match the actual one.
+ } else if (this._expected == error.constructor) {
+ // Handler other error types.
didThrowCorrectly = true;
- passDetail = '${actual} threw ${expected}' + errorMessage + '.';
+ passDetail = '${actual} threw ' + error.name + errorMessage + '.';
} else {
didThrowCorrectly = false;
failDetail =
diff --git a/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js b/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js
index 9a77e67ed86..0d2ea12f6db 100644
--- a/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js
+++ b/tests/wpt/web-platform-tests/webaudio/resources/start-stop-exceptions.js
@@ -13,7 +13,7 @@ function testStartStop(should, node, options) {
should(() => {
node.stop();
- }, 'Calling stop() before start()').throw('InvalidStateError');
+ }, 'Calling stop() before start()').throw(DOMException, 'InvalidStateError');
should(() => {
node.start(-1);
@@ -29,7 +29,7 @@ function testStartStop(should, node, options) {
node.start();
should(() => {
node.start();
- }, 'Calling start() twice').throw('InvalidStateError');
+ }, 'Calling start() twice').throw(DOMException, 'InvalidStateError');
should(() => {
node.stop(-1);
}, 'stop(-1)').throw(RangeError);
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html
index 2112edeeffc..4e27f842dde 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/ctor-analyser.html
@@ -91,25 +91,25 @@
node = new AnalyserNode(context, {fftSize: 33});
},
'node = new AnalyserNode(c, { fftSize: 33 })')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(
() => {
node = new AnalyserNode(context, {maxDecibels: -500});
},
'node = new AnalyserNode(c, { maxDecibels: -500 })')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(
() => {
node = new AnalyserNode(context, {minDecibels: -10});
},
'node = new AnalyserNode(c, { minDecibels: -10 })')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(
() => {
node = new AnalyserNode(context, {smoothingTimeConstant: 2});
},
'node = new AnalyserNode(c, { smoothingTimeConstant: 2 })')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(function() {
node = new AnalyserNode(context, {frequencyBinCount: 33});
}, 'node = new AnalyserNode(c, { frequencyBinCount: 33 })').notThrow();
@@ -164,7 +164,7 @@
node = new AnalyserNode(context, options);
},
'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
options = {minDecibels: -10, maxDecibels: -150};
should(
@@ -172,7 +172,7 @@
node = new AnalyserNode(context, options);
},
'node = new AnalyserNode(c, ' + JSON.stringify(options) + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html
index b3de37f119f..7ee6a2237ed 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-analysernode-interface/realtimeanalyser-fft-sizing.html
@@ -22,7 +22,7 @@
};
if (illegal) {
- should(tester, message).throw('IndexSizeError');
+ should(tester, message).throw(DOMException, 'IndexSizeError');
} else {
should(tester, message).notThrow();
}
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html
index b71078d8f80..e0359953d2e 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer-copy-channel.html
@@ -127,27 +127,27 @@
}, '2: buffer.copyFromChannel(context, 0)').throw(TypeError);
should(() => {
buffer.copyFromChannel(x, -1);
- }, '3: buffer.copyFromChannel(x, -1)').throw('IndexSizeError');
+ }, '3: buffer.copyFromChannel(x, -1)').throw(DOMException, 'IndexSizeError');
should(
() => {
buffer.copyFromChannel(x, numberOfChannels);
},
'4: buffer.copyFromChannel(x, ' + numberOfChannels + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
;
should(() => {
buffer.copyFromChannel(x, 0, -1);
- }, '5: buffer.copyFromChannel(x, 0, -1)').throw('IndexSizeError');
+ }, '5: buffer.copyFromChannel(x, 0, -1)').throw(DOMException, 'IndexSizeError');
should(
() => {
buffer.copyFromChannel(x, 0, bufferLength);
},
'6: buffer.copyFromChannel(x, 0, ' + bufferLength + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(() => {
buffer.copyFromChannel(x, 3);
- }, '7: buffer.copyFromChannel(x, 3)').throw('IndexSizeError');
+ }, '7: buffer.copyFromChannel(x, 3)').throw(DOMException, 'IndexSizeError');
if (window.SharedArrayBuffer) {
let shared_buffer = new Float32Array(new SharedArrayBuffer(32));
@@ -183,26 +183,26 @@
}, '1: buffer.copyToChannel(context, 0)').throw(TypeError);
should(() => {
buffer.copyToChannel(x, -1);
- }, '2: buffer.copyToChannel(x, -1)').throw('IndexSizeError');
+ }, '2: buffer.copyToChannel(x, -1)').throw(DOMException, 'IndexSizeError');
should(
() => {
buffer.copyToChannel(x, numberOfChannels);
},
'3: buffer.copyToChannel(x, ' + numberOfChannels + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(() => {
buffer.copyToChannel(x, 0, -1);
- }, '4: buffer.copyToChannel(x, 0, -1)').throw('IndexSizeError');
+ }, '4: buffer.copyToChannel(x, 0, -1)').throw(DOMException, 'IndexSizeError');
should(
() => {
buffer.copyToChannel(x, 0, bufferLength);
},
'5: buffer.copyToChannel(x, 0, ' + bufferLength + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(() => {
buffer.copyToChannel(x, 3);
- }, '6: buffer.copyToChannel(x, 3)').throw('IndexSizeError');
+ }, '6: buffer.copyToChannel(x, 3)').throw(DOMException, 'IndexSizeError');
if (window.SharedArrayBuffer) {
let shared_buffer = new Float32Array(new SharedArrayBuffer(32));
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html
index 07a34f07c18..a2c4581c4e8 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/audiobuffer.html
@@ -53,7 +53,7 @@
buffer.getChannelData(buffer.numberOfChannels);
},
'buffer.getChannelData(' + buffer.numberOfChannels + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
let buffer2 = context.createBuffer(1, 1000, 24576);
let expectedDuration = 1000 / 24576;
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html
index c5aae1ad532..9845d5eaba3 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffer-interface/ctor-audiobuffer.html
@@ -96,7 +96,7 @@
let buffer = new AudioBuffer(options);
},
'new AudioBuffer(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {numberOfChannels: 99, length: 0, sampleRate: 16000};
should(
@@ -104,7 +104,7 @@
let buffer = new AudioBuffer(options);
},
'new AudioBuffer(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {numberOfChannels: 1, length: 0, sampleRate: 16000};
should(
@@ -112,7 +112,7 @@
let buffer = new AudioBuffer(options);
},
'new AudioBuffer(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {numberOfChannels: 1, length: 1, sampleRate: 100};
should(
@@ -120,7 +120,7 @@
let buffer = new AudioBuffer(options);
},
'new AudioBuffer(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
task.done();
});
@@ -178,7 +178,7 @@
buffer.getChannelData(options.numberOfChannels);
},
'buffer.getChannelData(' + options.numberOfChannels + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html
index 5527f44cc9c..f3f16c4c648 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audiobuffersourcenode-interface/audiobuffersource-channels.html
@@ -47,7 +47,7 @@
should(function() {
source.buffer =
new AudioBuffer({length: 128, sampleRate: context.sampleRate})
- }, 'source.buffer = new buffer').throw('InvalidStateError');
+ }, 'source.buffer = new buffer').throw(DOMException, 'InvalidStateError');
// The buffer has been set; it's ok to set it to null.
should(function() {
@@ -58,7 +58,7 @@
// again.
should(function() {
source.buffer = buffer;
- }, 'source.buffer = buffer again').throw('InvalidStateError');
+ }, 'source.buffer = buffer again').throw(DOMException, 'InvalidStateError');
// But setting to null is ok.
should(function() {
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
index 0a8c73160e5..4163a8439cd 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-connect-method-chaining.html
@@ -114,7 +114,7 @@
// does not have the second output, so it should throw.
should(function() {
gain1.connect(gain2, 1).connect(contextA.destination);
- }, 'Connecting with an invalid output').throw('IndexSizeError');
+ }, 'Connecting with an invalid output').throw(DOMException, 'IndexSizeError');
// Test if the second connection throws correctly. The contextB's
// destination is not compatible with the nodes from contextA, thus the
@@ -124,7 +124,7 @@
gain1.connect(gain2).connect(contextB.destination);
},
'Connecting to a node from the different context')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html
index c3d3fae2155..386614ff2e2 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html
@@ -193,17 +193,17 @@
// gain1 is not connected to gain3.gain. Exception should be thrown.
should(function() {
gain1.disconnect(gain3.gain);
- }, 'gain1.disconnect(gain3.gain)').throw('InvalidAccessError');
+ }, 'gain1.disconnect(gain3.gain)').throw(DOMException, 'InvalidAccessError');
// When the output index is good but the destination is invalid.
should(function() {
splitter.disconnect(gain1.gain, 1);
- }, 'splitter.disconnect(gain1.gain, 1)').throw('InvalidAccessError');
+ }, 'splitter.disconnect(gain1.gain, 1)').throw(DOMException, 'InvalidAccessError');
// When both arguments are wrong, throw IndexSizeError first.
should(function() {
splitter.disconnect(gain1.gain, 2);
- }, 'splitter.disconnect(gain1.gain, 2)').throw('IndexSizeError');
+ }, 'splitter.disconnect(gain1.gain, 2)').throw(DOMException, 'IndexSizeError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html
index b29c09d395f..65b93222d10 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect.html
@@ -230,7 +230,7 @@
// There is no output #2. An exception should be thrown.
should(function() {
splitter.disconnect(2);
- }, 'splitter.disconnect(2)').throw('IndexSizeError');
+ }, 'splitter.disconnect(2)').throw(DOMException, 'IndexSizeError');
// Disconnecting the output already disconnected should not throw.
should(function() {
@@ -241,34 +241,34 @@
// gain1 is not connected gain2. An exception should be thrown.
should(function() {
gain1.disconnect(gain2);
- }, 'gain1.disconnect(gain2)').throw('InvalidAccessError');
+ }, 'gain1.disconnect(gain2)').throw(DOMException, 'InvalidAccessError');
// gain1 and gain3 are not connected. An exception should be thrown.
should(function() {
gain1.disconnect(gain3);
- }, 'gain1.disconnect(gain3)').throw('InvalidAccessError');
+ }, 'gain1.disconnect(gain3)').throw(DOMException, 'InvalidAccessError');
// There is no output #2 in the splitter. An exception should be thrown.
should(function() {
splitter.disconnect(gain2, 2);
- }, 'splitter.disconnect(gain2, 2)').throw('IndexSizeError');
+ }, 'splitter.disconnect(gain2, 2)').throw(DOMException, 'IndexSizeError');
// The splitter and gain1 are not connected. An exception should be
// thrown.
should(function() {
splitter.disconnect(gain1, 0);
- }, 'splitter.disconnect(gain1, 0)').throw('InvalidAccessError');
+ }, 'splitter.disconnect(gain1, 0)').throw(DOMException, 'InvalidAccessError');
// The splitter output #0 and the gain3 output #0 are not connected. An
// exception should be thrown.
should(function() {
splitter.disconnect(gain3, 0, 0);
- }, 'splitter.disconnect(gain3, 0, 0)').throw('InvalidAccessError');
+ }, 'splitter.disconnect(gain3, 0, 0)').throw(DOMException, 'InvalidAccessError');
// The output index is out of bound. An exception should be thrown.
should(function() {
splitter.disconnect(merger, 3, 0);
- }, 'splitter.disconnect(merger, 3, 0)').throw('IndexSizeError');
+ }, 'splitter.disconnect(merger, 3, 0)').throw(DOMException, 'IndexSizeError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html
index 14cfbff7e27..0b57d27e8e1 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode.html
@@ -54,11 +54,11 @@
should(
() => audioNode.connect(context.destination, 5, 0),
'audioNode.connect(context.destination, 5, 0)')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(
() => audioNode.connect(context.destination, 0, 5),
'audioNode.connect(context.destination, 0, 5)')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
should(
() => audioNode.connect(context.destination, 0, 0),
@@ -71,7 +71,7 @@
should(
() => window.audioNode.connect(context2.destination),
'Connecting a node to a different context')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
// 3-arg AudioContext doesn't create an offline context anymore.
should(
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html
index c928b3dc165..982731d3384 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-exceptional-values.html
@@ -174,11 +174,16 @@
},
]);
- // One final test for setValueCurve: duration can't be 0.
+ // Two final tests for setValueCurve: duration must be strictly
+ // positive.
should(
() => gain.gain.setValueCurveAtTime(curve, 1, 0),
'gain.gain.setValueCurveAtTime(curve, 1, 0)')
.throw(RangeError);
+ should(
+ () => gain.gain.setValueCurveAtTime(curve, 1, -1),
+ 'gain.gain.setValueCurveAtTime(curve, 1, -1)')
+ .throw(RangeError);
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html
index 31405ebfcd2..9609d5d1026 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/audioparam-setValueCurve-exceptions.html
@@ -30,7 +30,7 @@
let curveStartTime = 0.1 * testDurationSec;
let duration = 0.1 * testDurationSec;
- // Some time that is known to during the setValueCurveTime interval.
+ // Some time that is known to be during the setValueCurveTime interval.
let automationTime = curveStartTime + duration / 2;
should(
@@ -46,28 +46,28 @@
g.gain.setValueAtTime(1, automationTime);
},
'setValueAtTime(1, ' + automationTime + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
g.gain.linearRampToValueAtTime(1, automationTime);
},
'linearRampToValueAtTime(1, ' + automationTime + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
g.gain.exponentialRampToValueAtTime(1, automationTime);
},
'exponentialRampToValueAtTime(1, ' + automationTime + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
g.gain.setTargetAtTime(1, automationTime, 1);
},
'setTargetAtTime(1, ' + automationTime + ', 1)')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
@@ -120,7 +120,7 @@
g.gain.setValueCurveAtTime(curve, time, 0.01);
},
'setValueCurveAtTime(curve, ' + time + ', 0.01)')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
}
// Elements of setValueCurve should be finite.
@@ -167,7 +167,7 @@
g.gain.setValueCurveAtTime(curve, time, 0.01);
},
'setValueCurveAtTime(curve, ' + time + ', 0.01)')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
task.done();
});
@@ -286,6 +286,61 @@
task.done();
});
+ audit.define('curve overlap', (task, should) => {
+ let context =
+ new OfflineAudioContext(1, testDurationFrames, sampleRate);
+ let g = context.createGain();
+ let startTime = 5;
+ let startTimeLater = 10;
+ let startTimeEarlier = 2.5;
+ let curveDuration = 10;
+ let curveDurationShorter = 5;
+ let curve = [1, 2, 3];
+
+ // An initial curve event
+ should(
+ () => {
+ g.gain.setValueCurveAtTime(curve, startTime, curveDuration);
+ },
+ `g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDuration})`)
+ .notThrow();
+
+ // Check that an exception is thrown when trying to overlap two curves,
+ // in various ways
+
+ // Same start time and end time (curve exactly overlapping)
+ should(
+ () => {
+ g.gain.setValueCurveAtTime(curve, startTime, curveDuration);
+ },
+ `second g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDuration})`)
+ .throw('NotSupportedError');
+ // Same start time, shorter end time
+ should(
+ () => {
+ g.gain.setValueCurveAtTime(curve, startTime, curveDurationShorter);
+ },
+ `g.gain.setValueCurveAtTime([${curve}], ${startTime}, ${curveDurationShorter})`)
+ .throw('NotSupportedError');
+ // Earlier start time, end time after the start time an another curve
+ should(
+ () => {
+ g.gain.setValueCurveAtTime(curve, startTimeEarlier, curveDuration);
+ },
+ `g.gain.setValueCurveAtTime([${curve}], ${startTimeEarlier}, ${curveDuration})`)
+ .throw('NotSupportedError');
+ // Start time after the start time of the other curve, but earlier that
+ // its end.
+ should(
+ () => {
+ g.gain.setValueCurveAtTime(curve, startTimeLater, curveDuration);
+ },
+ `g.gain.setValueCurveAtTime([${curve}], ${startTimeLater}, ${curveDuration})`)
+ .throw('NotSupportedError');
+
+ task.done();
+ });
+
audit.define('curve lengths', (task, should) => {
let context =
new OfflineAudioContext(1, testDurationFrames, sampleRate);
@@ -298,14 +353,14 @@
g.gain.setValueCurveAtTime(Float32Array.from([]), time, 0.01);
},
'setValueCurveAtTime([], ' + time + ', 0.01)')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
should(
() => {
g.gain.setValueCurveAtTime(Float32Array.from([1]), time, 0.01);
},
'setValueCurveAtTime([1], ' + time + ', 0.01)')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
should(() => {
g.gain.setValueCurveAtTime(Float32Array.from([1, 2]), time, 0.01);
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html
index a3c789e2f2c..a3c11994bbe 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/automation-rate.html
@@ -151,7 +151,7 @@
if (param.isFixed) {
should(() => audioParam.automationRate = newRate, setMessage)
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
}
else {
should(() => audioParam.automationRate = newRate, setMessage)
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html
index eab77c494d1..688d0478235 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioparam-interface/event-insertion.html
@@ -30,8 +30,8 @@
// An array of tests to be done. Each entry specifies the event
// type and the event time. The events are inserted in the order
- // given (in |values|), and the second event should replace the
- // first, as required by the spec.
+ // given (in |values|), and the second event should be inserted
+ // after the first one, as required by the spec.
let testCases = [
{
event: 'setValueAtTime',
@@ -57,7 +57,7 @@
{
event: 'setValueCurveAtTime',
frame: 3 * RENDER_QUANTUM_FRAMES,
- values: [[98, 99], [3, 4]],
+ values: [[3, 4]],
extraArgs: RENDER_QUANTUM_FRAMES / context.sampleRate,
outputTestFrame: 4 * RENDER_QUANTUM_FRAMES,
expectedOutputValue: 4
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html
index 7cfd423c071..8b7704a781b 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-construction.https.html
@@ -23,7 +23,7 @@
(task, should) => {
should(() => new AudioWorkletNode(realtimeContext, 'dummy'),
'Creating a node before loading a module should throw.')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html
index 31e204cdc8d..cee9ec82c20 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-audioworklet-interface/audioworkletnode-constructor-options.https.html
@@ -90,13 +90,13 @@
should(
() => new AudioWorkletNode(context, 'dummy', options2),
'Creating AudioWorkletNode with channelCount 0')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
const options3 = {channelCount: 33};
should(
() => new AudioWorkletNode(context, 'dummy', options3),
'Creating AudioWorkletNode with channelCount 33')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html
index 83f53aafb19..441e98a2511 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-biquadfilternode-interface/biquad-basic.html
@@ -110,7 +110,7 @@
'new Float32Array(10), ' +
'new Float32Array(1), ' +
'new Float32Array(20))')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
should(
function() {
@@ -123,7 +123,7 @@
'new Float32Array(10), ' +
'new Float32Array(20), ' +
'new Float32Array(1))')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html
index f967f0699a3..71a62f176f8 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/audiochannelmerger-basic.html
@@ -24,7 +24,7 @@
should(function() {
merger = context.createChannelMerger(0);
- }, 'context.createChannelMerger(0)').throw('IndexSizeError');
+ }, 'context.createChannelMerger(0)').throw(DOMException, 'IndexSizeError');
should(function() {
merger = context.createChannelMerger(32);
@@ -34,7 +34,7 @@
// context has a 32-channel-limit in Chrome.
should(function() {
merger = context.createChannelMerger(33);
- }, 'context.createChannelMerger(33)').throw('IndexSizeError');
+ }, 'context.createChannelMerger(33)').throw(DOMException, 'IndexSizeError');
task.done();
});
@@ -49,14 +49,14 @@
should(function() {
merger.channelCount = 3;
- }, 'merger.channelCount = 3').throw('InvalidStateError');
+ }, 'merger.channelCount = 3').throw(DOMException, 'InvalidStateError');
should(merger.channelCountMode, 'merger.channelCountMode')
.beEqualTo('explicit');
should(function() {
merger.channelCountMode = 'max';
- }, 'merger.channelCountMode = "max"').throw('InvalidStateError');
+ }, 'merger.channelCountMode = "max"').throw(DOMException, 'InvalidStateError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html
index 115bd994349..0d6b45c56df 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelmergernode-interface/ctor-channelmerger.html
@@ -43,12 +43,15 @@
audit.define('test AudioNodeOptions', (task, should) => {
testAudioNodeOptions(should, context, 'ChannelMergerNode', {
- channelCount:
- {value: 1, isFixed: true, errorType: 'InvalidStateError'},
+ channelCount: {
+ value: 1,
+ isFixed: true,
+ exceptionType: 'InvalidStateError'
+ },
channelCountMode: {
value: 'explicit',
isFixed: true,
- errorType: 'InvalidStateError'
+ exceptionType: 'InvalidStateError'
}
});
task.done();
@@ -82,7 +85,7 @@
node = new ChannelMergerNode(context, options);
},
'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
options = {channelCount: 3};
should(
@@ -90,7 +93,7 @@
node = new ChannelMergerNode(context, options);
},
'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
options = {channelCountMode: 'max'};
should(
@@ -98,7 +101,7 @@
node = new ChannelMergerNode(context, options);
},
'new ChannelMergerNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html
index e0449919ad5..954c71a96b2 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/audiochannelsplitter.html
@@ -75,11 +75,11 @@ Tests that AudioChannelSplitter works correctly.
let splitternode;
should(() => {
let splitternode = context.createChannelSplitter(0);
- }, 'createChannelSplitter(0)').throw('IndexSizeError');
+ }, 'createChannelSplitter(0)').throw(DOMException, 'IndexSizeError');
should(() => {
splitternode = context.createChannelSplitter(33);
- }, 'createChannelSplitter(33)').throw('IndexSizeError');
+ }, 'createChannelSplitter(33)').throw(DOMException, 'IndexSizeError');
should(() => {
splitternode = context.createChannelSplitter(32);
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html
index 7fa9d6fa546..9cbb46b6d96 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-channelsplitternode-interface/ctor-channelsplitter.html
@@ -41,8 +41,11 @@
audit.define('test AudioNodeOptions', (task, should) => {
testAudioNodeOptions(should, context, 'ChannelSplitterNode', {
- channelCount:
- {value: 6, isFixed: true, errorType: 'InvalidStateError'},
+ channelCount: {
+ value: 6,
+ isFixed: true,
+ exceptionType: 'InvalidStateError'
+ },
channelCountMode: {
value: 'explicit',
isFixed: true,
@@ -50,7 +53,7 @@
channelInterpretation: {
value: 'discrete',
isFixed: true,
- errorType: 'InvalidStateError'
+ exceptionType: 'InvalidStateError'
},
});
task.done();
@@ -84,7 +87,7 @@
node = new ChannelSplitterNode(context, options);
},
'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')')
- .throw('IndexSizeError');
+ .throw(DOMException, 'IndexSizeError');
options = {channelCount: 3};
should(
@@ -92,7 +95,7 @@
node = new ChannelSplitterNode(context, options);
},
'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
options = {channelCountMode: 'max'};
should(
@@ -100,7 +103,7 @@
node = new ChannelSplitterNode(context, options);
},
'new ChannelSplitterNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html
index 11d6f332a1b..ac4f198d7c1 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-channels.html
@@ -30,7 +30,7 @@
should(() => convolver.buffer = buffer, message).notThrow();
} else {
should(() => convolver.buffer = buffer, message)
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
}
}
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html
index 31f115da532..c8dbeb941bc 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/convolver-setBuffer-already-has-value.html
@@ -27,7 +27,7 @@
should(() => {
convolver.buffer = audioBuffer;
- }, 'Set buffer a second time').throw('InvalidStateError');
+ }, 'Set buffer a second time').throw(DOMException, 'InvalidStateError');
should(() => {
convolver.buffer = null;
@@ -40,7 +40,7 @@
should(() => {
convolver.buffer = audioBuffer;
}, 'Set buffer to non-null to verify to throw an error')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html
index cf818330060..935ceeb715e 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-convolvernode-interface/ctor-convolver.html
@@ -46,12 +46,15 @@
audit.define('test AudioNodeOptions', (task, should) => {
testAudioNodeOptions(should, context, 'ConvolverNode', {
- channelCount:
- {value: 2, isFixed: true, errorType: 'NotSupportedError'},
+ channelCount: {
+ value: 2,
+ isFixed: true,
+ exceptionType: 'NotSupportedError'
+ },
channelCountMode: {
value: 'clamped-max',
isFixed: true,
- errorType: 'NotSupportedError'
+ exceptionType: 'NotSupportedError'
},
});
task.done();
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html
index 7bbff410650..caf2f85dfd4 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-delaynode-interface/delaynode-maxdelaylimit.html
@@ -32,14 +32,18 @@
bufferSource.buffer = toneBuffer;
window.context = context;
- should(() => context.createDelay(180)).throw("NotSupportedError",
- "Delay length cannot be 180 seconds or more");
- should(() => context.createDelay(0)).throw("NotSupportedError",
- "Delay length cannot be 0");
- should(() => context.createDelay(-1)).throw("NotSupportedError",
- "Delay length cannot be negative");
- should(() => context.createDelay(NaN)).throw(TypeError,
- "Delay length cannot be a NaN");
+ should(() => context.createDelay(180),
+ 'Setting Delay length to 180 seconds or more')
+ .throw(DOMException, 'NotSupportedError');
+ should(() => context.createDelay(0),
+ 'Setting Delay length to 0 seconds')
+ .throw(DOMException, 'NotSupportedError');
+ should(() => context.createDelay(-1),
+ 'Setting Delay length to negative')
+ .throw(DOMException, 'NotSupportedError');
+ should(() => context.createDelay(NaN),
+ 'Setting Delay length to NaN')
+ .throw(TypeError);
let delay = context.createDelay(179);
delay.delayTime.value = delayTimeSeconds;
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html
index 98d5dbfded1..c2460dfa1dd 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-dynamicscompressornode-interface/ctor-dynamicscompressor.html
@@ -182,9 +182,12 @@
let message = 'new DynamicsCompressorNode(c, ' +
JSON.stringify(options.nodeOptions) + ')';
- if (options.expectedErrorType) {
+ if (options.expectedErrorType === TypeError) {
should(createNodeFunction(), message)
.throw(options.expectedErrorType);
+ } else if (options.expectedErrorType === 'NotSupportedError') {
+ should(createNodeFunction(), message)
+ .throw(DOMException, 'NotSupportedError');
} else {
should(createNodeFunction(), message).notThrow();
should(node[options.testAttribute], 'node.' + options.testAttribute)
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html
index 79c40dc0847..7828f052261 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-iirfilternode-interface/iirfilter-basic.html
@@ -66,17 +66,17 @@
should(function() {
// There has to be at least one coefficient.
context.createIIRFilter([], []);
- }, 'createIIRFilter([], [])').throw('NotSupportedError');
+ }, 'createIIRFilter([], [])').throw(DOMException, 'NotSupportedError');
should(function() {
// There has to be at least one coefficient.
context.createIIRFilter([1], []);
- }, 'createIIRFilter([1], [])').throw('NotSupportedError');
+ }, 'createIIRFilter([1], [])').throw(DOMException, 'NotSupportedError');
should(function() {
// There has to be at least one coefficient.
context.createIIRFilter([], [1]);
- }, 'createIIRFilter([], [1])').throw('NotSupportedError');
+ }, 'createIIRFilter([], [1])').throw(DOMException, 'NotSupportedError');
should(
function() {
@@ -96,7 +96,7 @@
context.createIIRFilter(coef, [1]);
},
'createIIRFilter(new Float32Array(21), [1])')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
@@ -106,7 +106,7 @@
context.createIIRFilter([1], coef);
},
'createIIRFilter([1], new Float32Array(21))')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
should(
function() {
@@ -114,7 +114,7 @@
context.createIIRFilter([1], new Float32Array(2));
},
'createIIRFilter([1], new Float32Array(2))')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
should(
function() {
@@ -122,7 +122,7 @@
context.createIIRFilter(new Float32Array(10), [1]);
},
'createIIRFilter(new Float32Array(10), [1])')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
should(function() {
// Feedback coefficients must be finite.
@@ -183,7 +183,7 @@
new Float32Array(20));
},
'getFrequencyResponse(new Float32Array(10), new Float32Array(1), new Float32Array(20))')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
should(
function() {
@@ -193,7 +193,7 @@
new Float32Array(1));
},
'getFrequencyResponse(new Float32Array(10), new Float32Array(20), new Float32Array(1))')
- .throw('InvalidAccessError');
+ .throw(DOMException, 'InvalidAccessError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html
index f480ec8ce51..4b686310362 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-offlineaudiocontext-interface/ctor-offlineaudiocontext.html
@@ -129,7 +129,7 @@
new OfflineAudioContext(options);
},
'new OfflineAudioContext(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
// length cannot be 0
options = {length: 0, sampleRate: 8000};
@@ -138,7 +138,7 @@
new OfflineAudioContext(options);
},
'new OfflineAudioContext(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
// sampleRate outside valid range
options = {length: 1, sampleRate: 1};
@@ -147,7 +147,7 @@
new OfflineAudioContext(options);
},
'new OfflineAudioContext(' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
task.done();
});
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html
index aaf77aec555..36bf604b296 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-oscillatornode-interface/ctor-oscillator.html
@@ -87,7 +87,7 @@
node = new OscillatorNode(context, options);
},
'new OscillatorNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
+ .throw(DOMException, 'InvalidStateError');
options = {
type: 'custom',
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html
index 95e914a75f6..98a171ad059 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-pannernode-interface/ctor-panner.html
@@ -107,7 +107,7 @@
node = new PannerNode(context, options);
},
'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {channelCount: 3};
should(
@@ -115,7 +115,7 @@
node = new PannerNode(context, options);
},
'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {channelCount: 99};
should(
@@ -123,7 +123,7 @@
node = new PannerNode(context, options);
},
'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
// Test channelCountMode. A mode of "max" is illegal, but others are
// ok.
@@ -153,7 +153,7 @@
node = new PannerNode(context, options);
},
'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('NotSupportedError');
+ .throw(DOMException, 'NotSupportedError');
options = {channelCountMode: 'foobar'};
should(
@@ -192,67 +192,6 @@
'new PannerNode(c, ' + JSON.stringify(options) + ')')
.throw(TypeError);
- // Test maxDistance
- options = {maxDistance: -1};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw(RangeError);
- options = {maxDistance: 100};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'node7 = new PannerNode(c, ' + JSON.stringify(options) + ')')
- .notThrow();
- should(node.maxDistance, 'node7.maxDistance')
- .beEqualTo(options.maxDistance);
-
- // Test rolloffFactor
- options = {rolloffFactor: -1};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw(RangeError);
- options = {rolloffFactor: 0.5};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'node8 = new PannerNode(c, ' + JSON.stringify(options) + ')')
- .notThrow();
- should(node.rolloffFactor, 'node8.rolloffFactor')
- .beEqualTo(options.rolloffFactor);
-
- // Test coneOuterGain
- options = {coneOuterGain: -1};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
- options = {coneOuterGain: 1.1};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'new PannerNode(c, ' + JSON.stringify(options) + ')')
- .throw('InvalidStateError');
- options = {coneOuterGain: 0.5};
- should(
- () => {
- node = new PannerNode(context, options);
- },
- 'node9 = new PannerNode(c, ' + JSON.stringify(options) + ')')
- .notThrow();
- should(node.coneOuterGain, 'node9.coneOuterGain')
- .beEqualTo(options.coneOuterGain);
-
task.done();
});
@@ -279,7 +218,7 @@
rolloffFactor: 3 * Math.PI,
coneInnerAngle: 4 * Math.PI,
coneOuterAngle: 5 * Math.PI,
- coneOuterGain: 0.1 * Math.PI
+ coneOuterGain: 6 * Math.PI
};
should(
diff --git a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html
index caa99aa4031..9409f1ffce2 100644
--- a/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html
+++ b/tests/wpt/web-platform-tests/webaudio/the-audio-api/the-stereopanner-interface/ctor-stereopanner.html
@@ -80,17 +80,23 @@
entry.tests.forEach(testItem => {
let options = {};
options[entry.attribute] = testItem.value;
- let method = testItem.error ? 'throw' : 'notThrow';
-
- should(
- () => {
- node = new StereoPannerNode(context, options);
- },
- `new StereoPannerNode(c, ${JSON.stringify(options)})`)[method](
- testItem.error);
- if (!testItem.error)
+
+ const testFunction = () => {
+ node = new StereoPannerNode(context, options);
+ };
+ const testDescription =
+ `new StereoPannerNode(c, ${JSON.stringify(options)})`;
+
+ if (testItem.error) {
+ testItem.error === TypeError
+ ? should(testFunction, testDescription).throw(TypeError)
+ : should(testFunction, testDescription)
+ .throw(DOMException, 'NotSupportedError');
+ } else {
+ should(testFunction, testDescription).notThrow();
should(node[entry.attribute], `node.${entry.attribute}`)
.beEqualTo(options[entry.attribute]);
+ }
});
});
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py
index 9e220d02687..2af16c1e5e8 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/execute.py
@@ -27,6 +27,11 @@ def test_no_browsing_context(session, closed_window):
assert_error(response, "no such window")
+def test_ending_comment(session):
+ response = execute_script(session, "return 1; // foo")
+ assert_success(response, 1)
+
+
@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
def test_abort_by_user_prompt(session, dialog_type):
response = execute_script(
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_attribute/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py
new file mode 100644
index 00000000000..88a56e1ad45
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/get.py
@@ -0,0 +1,48 @@
+from tests.support.asserts import assert_error, assert_success
+from tests.support.inline import inline
+
+
+def get_element_css_value(session, element_id, prop):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/css/{prop}".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ prop=prop
+ )
+ )
+
+
+def test_no_browsing_context(session, closed_window):
+ response = get_element_css_value(session, "foo", "bar")
+ assert_error(response, "no such window")
+
+
+def test_element_not_found(session):
+ result = get_element_css_value(session, "foo", "display")
+ assert_error(result, "no such element")
+
+
+def test_element_stale(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+ session.refresh()
+
+ result = get_element_css_value(session, element.id, "display")
+ assert_error(result, "stale element reference")
+
+
+def test_property_name_value(session):
+ session.url = inline("""<input style="display: block">""")
+ element = session.find.css("input", all=False)
+
+ result = get_element_css_value(session, element.id, "display")
+ assert_success(result, "block")
+
+
+def test_property_name_not_existent(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ result = get_element_css_value(session, element.id, "foo")
+ assert_success(result, "")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py
new file mode 100644
index 00000000000..529b6ae9183
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_css_value/user_prompts.py
@@ -0,0 +1,121 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.inline import inline
+
+
+def get_element_css_value(session, element_id, prop):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/css/{prop}".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ prop=prop
+ )
+ )
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("""<input style="display: block">""")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_css_value(session, element.id, "display")
+ assert_success(response, "block")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("""<input style="display: block">""")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_css_value(session, element.id, "display")
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("""<input style="display: block">""")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_css_value(session, element.id, "display")
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py
new file mode 100644
index 00000000000..abf1a913675
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/__init__.py
@@ -0,0 +1,10 @@
+def retrieve_element_rect(session, element):
+ return session.execute_script("""
+ let rect = arguments[0].getBoundingClientRect();
+ return {
+ x: rect.left + window.pageXOffset,
+ y: rect.top + window.pageYOffset,
+ width: rect.width,
+ height: rect.height,
+ };
+ """, args=(element,))
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py
new file mode 100644
index 00000000000..433e2f6bf8b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/get.py
@@ -0,0 +1,41 @@
+from tests.support.asserts import assert_error, assert_success
+from tests.support.inline import inline
+
+from . import retrieve_element_rect
+
+
+def get_element_rect(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/rect".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ )
+ )
+
+
+def test_no_browsing_context(session, closed_window):
+ response = get_element_rect(session, "foo")
+ assert_error(response, "no such window")
+
+
+def test_element_not_found(session):
+ result = get_element_rect(session, "foo")
+ assert_error(result, "no such element")
+
+
+def test_element_stale(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+ session.refresh()
+
+ result = get_element_rect(session, element.id)
+ assert_error(result, "stale element reference")
+
+
+def test_basic(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ result = get_element_rect(session, element.id)
+ assert_success(result, retrieve_element_rect(session, element))
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py
new file mode 100644
index 00000000000..ec1047bd389
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_rect/user_prompts.py
@@ -0,0 +1,122 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
+from tests.support.inline import inline
+
+from . import retrieve_element_rect
+
+
+def get_element_rect(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/rect".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ )
+ )
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_rect(session, element.id)
+ assert_success(response, retrieve_element_rect(session, element))
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_rect(session, element.id)
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = get_element_rect(session, element.id)
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py
new file mode 100644
index 00000000000..dd56084d8d0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/enabled.py
@@ -0,0 +1,109 @@
+import pytest
+
+from tests.support.asserts import assert_error, assert_success
+from tests.support.inline import inline
+
+
+def is_element_enabled(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/enabled".format(
+ session_id=session.session_id,
+ element_id=element_id
+ )
+ )
+
+
+def test_no_browsing_context(session, closed_window):
+ response = is_element_enabled(session, "foo")
+ assert_error(response, "no such window")
+
+
+def test_element_stale(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+ session.refresh()
+
+ result = is_element_enabled(session, element.id)
+ assert_error(result, "stale element reference")
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_form_control_disabled(session, element):
+ session.url = inline("<{} disabled/>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, False)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_form_control_enabled(session, element):
+ session.url = inline("<{}/>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, True)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_fieldset_disabled_descendant(session, element):
+ session.url = inline("<fieldset disabled><{}/></fieldset>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, False)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_fieldset_enabled_descendant(session, element):
+ session.url = inline("<fieldset><{}/></fieldset>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, True)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_fieldset_disabled_descendant_legend(session, element):
+ session.url = inline("<fieldset disabled><legend><{}/></legend></fieldset>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, True)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_fieldset_enabled_descendant_legend(session, element):
+ session.url = inline("<fieldset><legend><{}/></legend></fieldset>".format(element))
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, True)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_xhtml_form_control_disabled(session, element):
+ session.url = inline("""<{} disabled="disabled"/>""".format(element),
+ doctype="xhtml")
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, False)
+
+
+@pytest.mark.parametrize("element", ["button", "input", "select", "textarea"])
+def test_xhtml_form_control_enabled(session, element):
+ session.url = inline("""<{}/>""".format(element), doctype="xhtml")
+ element = session.find.css(element, all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, True)
+
+
+def test_xml_always_not_enabled(session):
+ session.url = inline("""<note></note>""", doctype="xml")
+ element = session.find.css("note", all=False)
+
+ result = is_element_enabled(session, element.id)
+ assert_success(result, False)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py
new file mode 100644
index 00000000000..bd8bc81bdfc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/is_element_enabled/user_prompts.py
@@ -0,0 +1,120 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import assert_error, assert_dialog_handled, assert_success
+from tests.support.inline import inline
+
+
+def is_element_enabled(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/enabled".format(
+ session_id=session.session_id,
+ element_id=element_id
+ )
+ )
+
+
+@pytest.fixture
+def check_user_prompt_closed_without_exception(session, create_dialog):
+ def check_user_prompt_closed_without_exception(dialog_type, retval):
+ session.url = inline("<input id=foo disabled>")
+ element = session.find.css("#foo", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = is_element_enabled(session, element.id)
+ assert_success(response, False)
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_without_exception
+
+
+@pytest.fixture
+def check_user_prompt_closed_with_exception(session, create_dialog):
+ def check_user_prompt_closed_with_exception(dialog_type, retval):
+ session.url = inline("<input id=foo disabled>")
+ element = session.find.css("#foo", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = is_element_enabled(session, element.id)
+ assert_error(response, "unexpected alert open")
+
+ assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
+
+ return check_user_prompt_closed_with_exception
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_but_exception(session, create_dialog):
+ def check_user_prompt_not_closed_but_exception(dialog_type):
+ session.url = inline("<input id=foo disabled>")
+ element = session.find.css("#foo", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = is_element_enabled(session, element.id)
+ assert_error(response, "unexpected alert open")
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_but_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", True),
+ ("prompt", ""),
+])
+def test_accept_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss(check_user_prompt_closed_without_exception, dialog_type, retval):
+ check_user_prompt_closed_without_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_dismiss_and_notify(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_but_exception, dialog_type):
+ check_user_prompt_not_closed_but_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type, retval", [
+ ("alert", None),
+ ("confirm", False),
+ ("prompt", None),
+])
+def test_default(check_user_prompt_closed_with_exception, dialog_type, retval):
+ check_user_prompt_closed_with_exception(dialog_type, retval)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py b/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py
index 83f93ea22f7..f31ce3b8b6f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/new_session/invalid_capabilities.py
@@ -1,8 +1,10 @@
import pytest
-from tests.support.asserts import assert_error
from conftest import product, flatten
+from tests.new_session.support.create import invalid_data, invalid_extensions
+from tests.support.asserts import assert_error
+
@pytest.mark.parametrize("value", [None, 1, "{}", []])
def test_invalid_capabilites(new_session, value):
@@ -26,29 +28,6 @@ def test_invalid_first_match(new_session, add_browser_capabilities, value):
assert_error(response, "invalid argument")
-invalid_data = [
- ("acceptInsecureCerts", [1, [], {}, "false"]),
- ("browserName", [1, [], {}, False]),
- ("browserVersion", [1, [], {}, False]),
- ("platformName", [1, [], {}, False]),
- ("pageLoadStrategy", [1, [], {}, False, "invalid", "NONE", "Eager", "eagerblah", "interactive",
- " eager", "eager "]),
- ("proxy", [1, [], "{}", {"proxyType": "SYSTEM"}, {"proxyType": "systemSomething"},
- {"proxy type": "pac"}, {"proxy-Type": "system"}, {"proxy_type": "system"},
- {"proxytype": "system"}, {"PROXYTYPE": "system"}, {"proxyType": None},
- {"proxyType": 1}, {"proxyType": []}, {"proxyType": {"value": "system"}},
- {" proxyType": "system"}, {"proxyType ": "system"}, {"proxyType ": " system"},
- {"proxyType": "system "}]),
- ("timeouts", [1, [], "{}", False, {"pageLOAD": 10}, {"page load": 10},
- {"page load": 10}, {"pageLoad": "10"}, {"pageLoad": {"value": 10}},
- {"invalid": 10}, {"pageLoad": -1}, {"pageLoad": 2**64},
- {"pageLoad": None}, {"pageLoad": 1.1}, {"pageLoad": 10, "invalid": 10},
- {" pageLoad": 10}, {"pageLoad ": 10}]),
- ("unhandledPromptBehavior", [1, [], {}, False, "DISMISS", "dismissABC", "Accept",
- " dismiss", "dismiss "])
-]
-
-
@pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}},
lambda key, value: {"firstMatch": [{key: value}]}])
@pytest.mark.parametrize("key,value", flatten(product(*item) for item in invalid_data))
@@ -63,31 +42,6 @@ def test_invalid_values(new_session, add_browser_capabilities, body, key, value)
assert_error(response, "invalid argument")
-invalid_extensions = [
- "firefox",
- "firefox_binary",
- "firefoxOptions",
- "chromeOptions",
- "automaticInspection",
- "automaticProfiling",
- "platform",
- "version",
- "browser",
- "platformVersion",
- "javascriptEnabled",
- "nativeEvents",
- "seleniumProtocol",
- "profile",
- "trustAllSSLCertificates",
- "initialBrowserUrl",
- "requireWindowFocus",
- "logFile",
- "logLevel",
- "safari.options",
- "ensureCleanSession",
-]
-
-
@pytest.mark.parametrize("body", [lambda key, value: {"alwaysMatch": {key: value}},
lambda key, value: {"firstMatch": [{key: value}]}])
@pytest.mark.parametrize("key", invalid_extensions)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py b/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py
index 85ae1cd4ea8..475fe5a424f 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/new_session/support/create.py
@@ -1,15 +1,130 @@
# Note that we can only test things here all implementations must support
valid_data = [
- ("acceptInsecureCerts", [False, None]),
- ("browserName", [None]),
- ("browserVersion", [None]),
- ("platformName", [None]),
- ("pageLoadStrategy", ["none", "eager", "normal", None]),
- ("proxy", [None]),
- ("timeouts", [{"script": 0, "pageLoad": 2.0, "implicit": 2**53 - 1},
- {"script": 50, "pageLoad": 25},
- {"script": 500},
- {}]),
- ("unhandledPromptBehavior", ["dismiss", "accept", None]),
- ("test:extension", [True, "abc", 123, [], {"key": "value"}, None]),
+ ("acceptInsecureCerts", [
+ False, None,
+ ]),
+ ("browserName", [
+ None,
+ ]),
+ ("browserVersion", [
+ None,
+ ]),
+ ("platformName", [
+ None,
+ ]),
+ ("pageLoadStrategy", [
+ None,
+ "none",
+ "eager",
+ "normal",
+ ]),
+ ("proxy", [
+ None,
+ ]),
+ ("timeouts", [
+ None, {},
+ {"script": 0, "pageLoad": 2.0, "implicit": 2**53 - 1},
+ {"script": 50, "pageLoad": 25},
+ {"script": 500},
+ ]),
+ ("unhandledPromptBehavior", [
+ "dismiss",
+ "accept",
+ None,
+ ]),
+ ("test:extension", [
+ None, False, "abc", 123, [],
+ {"key": "value"},
+ ]),
+]
+
+invalid_data = [
+ ("acceptInsecureCerts", [
+ 1, [], {}, "false",
+ ]),
+ ("browserName", [
+ 1, [], {}, False,
+ ]),
+ ("browserVersion", [
+ 1, [], {}, False,
+ ]),
+ ("platformName", [
+ 1, [], {}, False,
+ ]),
+ ("pageLoadStrategy", [
+ 1, [], {}, False,
+ "invalid",
+ "NONE",
+ "Eager",
+ "eagerblah",
+ "interactive",
+ " eager",
+ "eager "]),
+ ("proxy", [
+ 1, [], "{}",
+ {"proxyType": "SYSTEM"},
+ {"proxyType": "systemSomething"},
+ {"proxy type": "pac"},
+ {"proxy-Type": "system"},
+ {"proxy_type": "system"},
+ {"proxytype": "system"},
+ {"PROXYTYPE": "system"},
+ {"proxyType": None},
+ {"proxyType": 1},
+ {"proxyType": []},
+ {"proxyType": {"value": "system"}},
+ {" proxyType": "system"},
+ {"proxyType ": "system"},
+ {"proxyType ": " system"},
+ {"proxyType": "system "},
+ ]),
+ ("timeouts", [
+ 1, [], "{}", False,
+ {"invalid": 10},
+ {"PAGELOAD": 10},
+ {"page load": 10},
+ {" pageLoad": 10},
+ {"pageLoad ": 10},
+ {"pageLoad": None},
+ {"pageLoad": False},
+ {"pageLoad": []},
+ {"pageLoad": "10"},
+ {"pageLoad": 2.5},
+ {"pageLoad": -1},
+ {"pageLoad": 2**53},
+ {"pageLoad": {"value": 10}},
+ {"pageLoad": 10, "invalid": 10},
+ ]),
+ ("unhandledPromptBehavior", [
+ 1, [], {}, False,
+ "DISMISS",
+ "dismissABC",
+ "Accept",
+ " dismiss",
+ "dismiss ",
+ ])
+]
+
+invalid_extensions = [
+ "firefox",
+ "firefox_binary",
+ "firefoxOptions",
+ "chromeOptions",
+ "automaticInspection",
+ "automaticProfiling",
+ "platform",
+ "version",
+ "browser",
+ "platformVersion",
+ "javascriptEnabled",
+ "nativeEvents",
+ "seleniumProtocol",
+ "profile",
+ "trustAllSSLCertificates",
+ "initialBrowserUrl",
+ "requireWindowFocus",
+ "logFile",
+ "logLevel",
+ "safari.options",
+ "ensureCleanSession",
]
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py
index edc37d6edb4..6dbc03f9401 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/send_alert_text/send.py
@@ -6,6 +6,13 @@ from tests.support.asserts import assert_error, assert_success
from tests.support.inline import inline
+@pytest.fixture
+def page(session):
+ session.url = inline("""
+ <script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>
+ """)
+
+
def send_alert_text(session, text=None):
return session.transport.send(
"POST", "session/{session_id}/alert/text".format(**vars(session)),
@@ -18,64 +25,41 @@ def test_null_parameter_value(session, http):
assert_error(Response.from_http(response), "invalid argument")
-def test_null_response_value(session, url):
- session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>")
-
+def test_null_response_value(session, page):
response = send_alert_text(session, "Federer")
value = assert_success(response)
assert value is None
-def test_no_browsing_context(session, closed_window):
- response = send_alert_text(session, "foo")
- assert_error(response, "no such window")
-
-
@pytest.mark.parametrize("text", [None, {}, [], 42, True])
-def test_invalid_input(session, text):
- session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>")
+def test_invalid_input(session, page, text):
response = send_alert_text(session, text)
assert_error(response, "invalid argument")
-def test_no_user_prompt(session):
+def test_no_browsing_context(session, closed_window):
response = send_alert_text(session, "Federer")
- assert_error(response, "no such alert")
-
+ assert_error(response, "no such window")
-def test_alert_element_not_interactable(session):
- session.url = inline("<script>window.alert('Hello');</script>")
+def test_no_user_prompt(session):
response = send_alert_text(session, "Federer")
- assert_error(response, "element not interactable")
+ assert_error(response, "no such alert")
-def test_confirm_element_not_interactable(session):
- session.url = inline("<script>window.confirm('Hello');</script>")
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm"])
+def test_alert_element_not_interactable(session, dialog_type):
+ session.url = inline("<script>window.{}('Hello');</script>".format(dialog_type))
response = send_alert_text(session, "Federer")
assert_error(response, "element not interactable")
-def test_send_alert_text(session):
- session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>")
-
- send_response = send_alert_text(session, "Federer")
+@pytest.mark.parametrize("text", ["", "Federer", " Fed erer "])
+def test_send_alert_text(session, page, text):
+ send_response = send_alert_text(session, text)
assert_success(send_response)
- accept_response = session.transport.send("POST", "session/{session_id}/alert/accept"
- .format(session_id=session.session_id))
- assert_success(accept_response)
- assert session.execute_script("return window.result") == "Federer"
-
-
-def test_send_alert_text_with_whitespace(session):
- session.url = inline("<script>window.result = window.prompt('Enter Your Name: ', 'Name');</script>")
-
- send_response = send_alert_text(session, " Fed erer ")
- assert_success(send_response)
+ session.alert.accept()
- accept_response = session.transport.send("POST", "session/{session_id}/alert/accept"
- .format(session_id=session.session_id))
- assert_success(accept_response)
- assert session.execute_script("return window.result") == " Fed erer "
+ assert session.execute_script("return window.result") == text
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py
index e603e217ec7..a78ab2e68e8 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/set.py
@@ -1,3 +1,5 @@
+import pytest
+
from webdriver.transport import Response
from tests.support.asserts import assert_error, assert_success
@@ -16,14 +18,60 @@ def test_null_parameter_value(session, http):
def test_null_response_value(session):
- response = set_timeouts(session, {"implicit": 1000})
+ timeouts = {"implicit": 10, "pageLoad": 10, "script": 10}
+ response = set_timeouts(session, timeouts)
value = assert_success(response)
assert value is None
- response = set_timeouts(session, {"pageLoad": 1000})
- value = assert_success(response)
- assert value is None
- response = set_timeouts(session, {"script": 1000})
- value = assert_success(response)
- assert value is None
+@pytest.mark.parametrize("value", [1, "{}", False, []])
+def test_parameters_invalid(session, value):
+ response = set_timeouts(session, value)
+ assert_error(response, "invalid argument")
+
+
+def test_parameters_empty_no_change(session):
+ original = session.timeouts._get()
+
+ response = set_timeouts(session, {})
+ assert_success(response)
+
+ assert session.timeouts._get() == original
+
+
+def test_key_invalid(session):
+ response = set_timeouts(session, {"foo": 1000})
+ assert_error(response, "invalid argument")
+
+
+@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"])
+@pytest.mark.parametrize("value", [0, 2.0, 2**53 - 1])
+def test_positive_integer(session, typ, value):
+ response = set_timeouts(session, {typ: value})
+ assert_success(response)
+
+ assert session.timeouts._get(typ) == value
+
+
+@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"])
+@pytest.mark.parametrize("value", [None, [], {}, False, "10"])
+def test_value_invalid_types(session, typ, value):
+ response = set_timeouts(session, {typ: value})
+ assert_error(response, "invalid argument")
+
+
+@pytest.mark.parametrize("typ", ["implicit", "pageLoad", "script"])
+@pytest.mark.parametrize("value", [-1, 2.5, 2**53])
+def test_value_positive_integer(session, typ, value):
+ response = set_timeouts(session, {typ: value})
+ assert_error(response, "invalid argument")
+
+
+def test_set_all_fields(session):
+ timeouts = {"implicit": 10, "pageLoad": 20, "script": 30}
+ response = set_timeouts(session, timeouts)
+ assert_success(response)
+
+ assert session.timeouts.implicit == 10
+ assert session.timeouts.page_load == 20
+ assert session.timeouts.script == 30
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py
new file mode 100644
index 00000000000..a98d87e9b2e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/set_timeouts/user_prompts.py
@@ -0,0 +1,62 @@
+# META: timeout=long
+
+import pytest
+
+from tests.support.asserts import assert_success
+
+
+def set_timeouts(session, timeouts):
+ return session.transport.send(
+ "POST", "session/{session_id}/timeouts".format(**vars(session)),
+ timeouts)
+
+
+@pytest.fixture
+def check_user_prompt_not_closed(session, create_dialog):
+ def check_user_prompt_not_closed(dialog_type):
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = set_timeouts(session, {"script": 100})
+ assert_success(response)
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ assert session.timeouts.script == 100
+
+ return check_user_prompt_not_closed
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept_and_notify(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss_and_notify(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_default(check_user_prompt_not_closed, dialog_type):
+ check_user_prompt_not_closed(dialog_type)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
index 44c76a96b09..2d305a0f3be 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/asserts.py
@@ -20,10 +20,10 @@ errors = {
"no such element": 404,
"no such frame": 404,
"no such window": 404,
- "script timeout": 408,
+ "script timeout": 500,
"session not created": 500,
"stale element reference": 404,
- "timeout": 408,
+ "timeout": 500,
"unable to set cookie": 500,
"unable to capture screen": 500,
"unexpected alert open": 500,
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
index 1ef379093cb..3bf56c84bed 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/support/inline.py
@@ -9,7 +9,7 @@ def inline(doc, doctype="html", mime="text/html;charset=utf-8", protocol="http")
mime = "text/html;charset=utf-8"
elif doctype == "xhtml":
mime = "application/xhtml+xml"
- doc = r"""<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ doc = """<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
@@ -20,6 +20,9 @@ def inline(doc, doctype="html", mime="text/html;charset=utf-8", protocol="http")
{}
</body>
</html>""".format(doc)
+ elif doctype == "xml":
+ mime = "text/xml"
+ doc = """<?xml version="1.0" encoding="UTF-8"?>{}""".format(doc)
query = {"doc": doc}
if mime != "text/html;charset=utf8":
@@ -41,8 +44,8 @@ def main(request, response):
rv = 404, [("Content-Type", "text/plain")], "Missing doc parameter in query"
else:
response.headers.update([
- ("Content-Type", content_type),
- ("X-XSS-Protection", "0")
+ ("Content-Type", content_type),
+ ("X-XSS-Protection", "0")
])
rv = doc
return rv
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py
new file mode 100644
index 00000000000..e4d2869af4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/screenshot.py
@@ -0,0 +1,40 @@
+import base64
+import imghdr
+
+from tests.support.asserts import assert_error, assert_success
+from tests.support.inline import inline
+
+
+def take_element_screenshot(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/screenshot".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ )
+ )
+
+
+def test_no_browsing_context(session, closed_window):
+ response = take_element_screenshot(session, "foo")
+ assert_error(response, "no such window")
+
+
+def test_screenshot(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+
+ response = take_element_screenshot(session, element.id)
+ value = assert_success(response)
+
+ image = base64.decodestring(value)
+ assert imghdr.what("", image) == "png"
+
+
+def test_stale(session):
+ session.url = inline("<input>")
+ element = session.find.css("input", all=False)
+ session.refresh()
+
+ result = take_element_screenshot(session, element.id)
+ assert_error(result, "stale element reference")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py
new file mode 100644
index 00000000000..fa239999e4f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_element_screenshot/user_prompts.py
@@ -0,0 +1,74 @@
+# META: timeout=long
+
+import base64
+import imghdr
+
+import pytest
+
+from tests.support.asserts import assert_success
+from tests.support.inline import inline
+
+
+def take_element_screenshot(session, element_id):
+ return session.transport.send(
+ "GET",
+ "session/{session_id}/element/{element_id}/screenshot".format(
+ session_id=session.session_id,
+ element_id=element_id,
+ )
+ )
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_without_exception(session, create_dialog):
+ def check_user_prompt_not_closed_without_exception(dialog_type):
+ session.url = inline("<input/>")
+ element = session.find.css("input", all=False)
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = take_element_screenshot(session, element.id)
+ value = assert_success(response)
+
+ image = base64.decodestring(value)
+ assert imghdr.what("", image) == "png"
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_without_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_default(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py
new file mode 100644
index 00000000000..d3153710f7b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/screenshot.py
@@ -0,0 +1,25 @@
+import base64
+import imghdr
+
+from tests.support.asserts import assert_error, assert_success
+from tests.support.inline import inline
+
+
+def take_screenshot(session):
+ return session.transport.send(
+ "GET", "session/{session_id}/screenshot".format(**vars(session)))
+
+
+def test_no_browsing_context(session, closed_window):
+ response = take_screenshot(session)
+ assert_error(response, "no such window")
+
+
+def test_screenshot(session):
+ session.url = inline("<input>")
+
+ response = take_screenshot(session)
+ value = assert_success(response)
+
+ image = base64.decodestring(value)
+ assert imghdr.what("", image) == "png"
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py
new file mode 100644
index 00000000000..4d4840f08ba
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/take_screenshot/user_prompts.py
@@ -0,0 +1,68 @@
+# META: timeout=long
+
+import base64
+import imghdr
+
+import pytest
+
+from tests.support.asserts import assert_success
+from tests.support.inline import inline
+
+
+def take_screenshot(session):
+ return session.transport.send(
+ "GET", "session/{session_id}/screenshot".format(**vars(session)))
+
+
+@pytest.fixture
+def check_user_prompt_not_closed_without_exception(session, create_dialog):
+ def check_user_prompt_not_closed_without_exception(dialog_type):
+ session.url = inline("<input/>")
+
+ create_dialog(dialog_type, text=dialog_type)
+
+ response = take_screenshot(session)
+ value = assert_success(response)
+
+ image = base64.decodestring(value)
+ assert imghdr.what("", image) == "png"
+
+ assert session.alert.text == dialog_type
+ session.alert.dismiss()
+
+ return check_user_prompt_not_closed_without_exception
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "accept and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_accept_and_notify(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "dismiss and notify"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_dismiss_and_notify(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.capabilities({"unhandledPromptBehavior": "ignore"})
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_ignore(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
+
+
+@pytest.mark.parametrize("dialog_type", ["alert", "confirm", "prompt"])
+def test_default(check_user_prompt_not_closed_without_exception, dialog_type):
+ check_user_prompt_not_closed_without_exception(dialog_type)
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html
new file mode 100644
index 00000000000..1e08016d75a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicStream.https.html
@@ -0,0 +1,43 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>RTCQuicStream.https.html</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="RTCQuicTransport-helper.js"></script>
+<script>
+'use strict';
+
+// These tests are based on the following specification:
+// https://w3c.github.io/webrtc-quic/
+
+// The following helper functions are called from RTCQuicTransport-helper.js:
+// makeQuicTransport
+
+test(t => {
+ const quicTransport = makeQuicTransport(t, []);
+ const quicStream = quicTransport.createStream();
+ assert_equals(quicStream.transport, quicTransport,
+ 'Expect transport to be set to the creating RTCQuicTransport.');
+ assert_equals(quicStream.state, 'new', `Expect state to be 'new'.`);
+ assert_equals(quicStream.readBufferedAmount, 0,
+ 'Expect read buffered amount to be 0.');
+ assert_equals(quicStream.writeBufferedAmount, 0,
+ 'Expect write buffered amount to be 0.');
+}, 'createStream() returns an RTCQuicStream with initial properties set.');
+
+test(t => {
+ const quicTransport = makeQuicTransport(t, []);
+ quicTransport.stop();
+ assert_throws('InvalidStateError', () => quicTransport.createStream());
+}, 'createStream() throws if the transport is closed.');
+
+test(t => {
+ const quicTransport = makeQuicTransport(t, []);
+ const firstQuicStream = quicTransport.createStream();
+ const secondQuicStream = quicTransport.createStream();
+ quicTransport.stop();
+ assert_equals(firstQuicStream.state, 'closed');
+ assert_equals(secondQuicStream.state, 'closed');
+}, 'RTCQuicTransport.stop() closes all streams.');
+
+</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js
new file mode 100644
index 00000000000..50d9e6666a2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport-helper.js
@@ -0,0 +1,10 @@
+'use strict';
+
+function makeQuicTransport(t, certificates) {
+ const iceTransport = new RTCIceTransport();
+ t.add_cleanup(() => iceTransport.stop());
+ const quicTransport = new RTCQuicTransport(iceTransport, certificates);
+ t.add_cleanup(() => quicTransport.stop());
+ return quicTransport;
+}
+
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
index 8eaa4aa78fa..703f424a638 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCQuicTransport.https.html
@@ -3,19 +3,15 @@
<title>RTCQuicTransport.https.html</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src="RTCQuicTransport-helper.js"></script>
<script>
'use strict';
// These tests are based on the following specification:
// https://w3c.github.io/webrtc-quic/
-function makeQuicTransport(t, certificates) {
- const iceTransport = new RTCIceTransport();
- t.add_cleanup(() => iceTransport.stop());
- const quicTransport = new RTCQuicTransport(iceTransport, certificates);
- t.add_cleanup(() => quicTransport.stop());
- return quicTransport;
-}
+// The following helper functions are called from RTCQuicTransport-helper.js:
+// makeQuicTransport
function generateCertificate(keygenAlgorithm) {
return RTCPeerConnection.generateCertificate({
diff --git a/tests/wpt/web-platform-tests/webrtc/no-media-call.html b/tests/wpt/web-platform-tests/webrtc/no-media-call.html
index c4979e85214..8f4f5962d4a 100644
--- a/tests/wpt/web-platform-tests/webrtc/no-media-call.html
+++ b/tests/wpt/web-platform-tests/webrtc/no-media-call.html
@@ -37,9 +37,9 @@ This test uses the legacy callback API with no media, and thus does not require
var parsedOffer = new RTCSessionDescription({ type: 'offer',
sdp: offerSdp });
// These functions use the legacy interface extensions to RTCPeerConnection.
- gSecondConnection.setRemoteDescription(parsedOffer,
+ gSecondConnection.setRemoteDescription(parsedOffer).then(
function() {
- gSecondConnection.createAnswer(onAnswerCreated,
+ gSecondConnection.createAnswer().then(onAnswerCreated,
failed('createAnswer'));
},
failed('setRemoteDescription second'));
@@ -56,7 +56,7 @@ This test uses the legacy callback API with no media, and thus does not require
function handleAnswer(answerSdp) {
var parsedAnswer = new RTCSessionDescription({ type: 'answer',
sdp: answerSdp });
- gFirstConnection.setRemoteDescription(parsedAnswer, ignoreSuccess,
+ gFirstConnection.setRemoteDescription(parsedAnswer).then(ignoreSuccess,
failed('setRemoteDescription first'));
};
@@ -125,8 +125,8 @@ This test uses the legacy callback API with no media, and thus does not require
// The offerToReceiveVideo is necessary and sufficient to make
// an actual connection.
- gFirstConnection.createOffer(onOfferCreated, failed('createOffer'),
- {offerToReceiveVideo: true});
+ gFirstConnection.createOffer({offerToReceiveVideo: true})
+ .then(onOfferCreated, failed('createOffer'));
});
</script>
diff --git a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
index 6adefe77492..681c42d4cd8 100644
--- a/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/simplecall.https.html
@@ -36,7 +36,7 @@
localStream.getTracks().forEach(function(track) {
gFirstConnection.addTrack(track, localStream);
});
- gFirstConnection.createOffer(onOfferCreated, failed('createOffer'));
+ gFirstConnection.createOffer().then(onOfferCreated, failed('createOffer'));
var videoTag = document.getElementById('local-view');
videoTag.srcObject = localStream;
@@ -59,7 +59,7 @@
sdp: offerSdp });
gSecondConnection.setRemoteDescription(parsedOffer);
- gSecondConnection.createAnswer(onAnswerCreated,
+ gSecondConnection.createAnswer().then(onAnswerCreated,
failed('createAnswer'));
};
diff --git a/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html b/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html
index 0b04a3e03aa..ec80bff3c23 100644
--- a/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html
+++ b/tests/wpt/web-platform-tests/webusb/resources/open-in-iframe.html
@@ -1,4 +1,5 @@
<!DOCTYPE html>
+<script src="usb-helpers.js"></script>
<script>
'use strict';
window.onmessage = messageEvent => {
diff --git a/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js b/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js
new file mode 100644
index 00000000000..b715184e04d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/resources/open-in-worker.js
@@ -0,0 +1,15 @@
+importScripts('/webusb/resources/usb-helpers.js');
+'use strict';
+
+onmessage = messageEvent => {
+ if (messageEvent.data.type === 'Ready') {
+ navigator.usb.addEventListener('connect', connectEvent => {
+ connectEvent.device.open().then(() => {
+ postMessage({ type: 'Success' });
+ }).catch(error => {
+ postMessage({ type: `FAIL: open rejected ${error}` });
+ });
+ });
+ postMessage({ type: 'Ready' });
+ }
+}; \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js
index 93740920dee..a3a4a31ba88 100644
--- a/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js
+++ b/tests/wpt/web-platform-tests/webusb/resources/usb-helpers.js
@@ -8,6 +8,29 @@
// these tests the browser must be run with these options:
//
// --enable-blink-features=MojoJS,MojoJSTest
+
+(() => {
+ // Load scripts needed by the test API on context creation.
+ if ('MojoInterfaceInterceptor' in self) {
+ let prefix = '/resources/chromium';
+ if ('window' in self) {
+ if (window.location.pathname.includes('/LayoutTests/')) {
+ let root = window.location.pathname.match(/.*LayoutTests/);
+ prefix = `${root}/external/wpt/resources/chromium`;
+ }
+ }
+ let scriptPath = `${prefix}/webusb-child-test.js`;
+ if (typeof document == 'undefined') {
+ importScripts(scriptPath);
+ } else {
+ let script = document.createElement('script');
+ script.src = scriptPath;
+ script.async = false;
+ document.head.appendChild(script);
+ }
+ }
+})();
+
let loadChromiumResources = Promise.resolve().then(() => {
if (!('MojoInterfaceInterceptor' in self)) {
// Do nothing on non-Chromium-based browsers or when the Mojo bindings are
diff --git a/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html
index 3a8a9183591..97e66b2a373 100644
--- a/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html
+++ b/tests/wpt/web-platform-tests/webusb/usb-disabled-by-feature-policy.https.sub.html
@@ -1,8 +1,8 @@
<!DOCTYPE html>
<body>
-<script src=/resources/testharness.js></script>
-<script src=/resources/testharnessreport.js></script>
-<script src=/feature-policy/resources/featurepolicy.js></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/feature-policy/resources/featurepolicy.js"></script>
<script>
'use strict';
const sub = 'https://{{domains[www]}}:{{ports[https][0]}}';
@@ -19,7 +19,16 @@ promise_test(() => {
}, error => {
assert_equals(error.name, 'SecurityError');
});
-}, header + ' disallows the top-level document.');
+}, header + ' disallows getDevices in the top-level document.');
+
+promise_test(async () => {
+ try {
+ await navigator.usb.requestDevice({ filters: [] });
+ assert_unreached('expected promise to reject with SecurityError');
+ } catch(error) {
+ assert_equals(error.name, 'SecurityError');
+ }
+}, header + ' disallows requestDevice in the top-level document.');
async_test(t => {
test_feature_availability('usb.getDevices()', t, same_origin_src,
diff --git a/tests/wpt/web-platform-tests/webusb/usb.https.window.js b/tests/wpt/web-platform-tests/webusb/usb.https.window.js
index ee26619cf22..8c9e676cdfc 100644
--- a/tests/wpt/web-platform-tests/webusb/usb.https.window.js
+++ b/tests/wpt/web-platform-tests/webusb/usb.https.window.js
@@ -60,7 +60,8 @@ usb_test(() => {
usb_test(() => {
const expectedFilters = [
{ vendorId: 1234, classCode: 0xFF, serialNumber: "123ABC" },
- { vendorId: 5678, productId: 0xF00F }
+ { vendorId: 5678, productId: 0xF00F },
+ { vendorId: 9012, classCode: 0xFF, subclassCode: 0xEE, protocolCode: 0xDD },
];
navigator.usb.test.onrequestdevice = event => {
@@ -77,7 +78,8 @@ usb_test(() => {
return callWithTrustedClick(() => {
return navigator.usb.requestDevice({ filters: expectedFilters })
.then(device => {
- assert_unreachable('requestDevice should reject because no device selected');
+ assert_unreached(
+ 'requestDevice should reject because no device selected');
})
.catch(error => {
assert_equals(error.code, DOMException.NOT_FOUND_ERR);
@@ -85,6 +87,26 @@ usb_test(() => {
});
}, 'filters are sent correctly');
+usb_test(async () => {
+ const badFilters = [
+ { productId: 1234 }, // productId requires vendorId
+ { subclassCode: 5678 }, // subclassCode requires classCode
+ { protocolCode: 9012 }, // protocolCode requires subclassCode
+ ];
+
+ for (const filter of badFilters) {
+ await callWithTrustedClick(async () => {
+ try {
+ await navigator.usb.requestDevice({ filters: [filter] });
+ assert_unreached(
+ 'requestDevice should reject because of invalid filters');
+ } catch (error) {
+ assert_equals(error.name, 'TypeError');
+ }
+ });
+ }
+}, 'requestDevice rejects on invalid filters');
+
usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => {
navigator.usb.test.onrequestdevice = event => {
diff --git a/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js b/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js
new file mode 100644
index 00000000000..e5ef3844ae4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/usbAlternateInterface.https.any.js
@@ -0,0 +1,33 @@
+// META: script=/webusb/resources/fake-devices.js
+// META: script=/webusb/resources/usb-helpers.js
+'use strict';
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ let alternateInterface = new USBAlternateInterface(
+ usbInterface, usbInterface.alternates[1].alternateSetting);
+ assertDeviceInfoEquals(
+ alternateInterface,
+ fakeDeviceInit.configurations[1].interfaces[0].alternates[1]);
+}, 'Can construct a USBAlternateInterface.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ try {
+ let alternateInterface = new USBAlternateInterface(
+ usbInterface, usbInterface.alternates.length);
+ assert_unreached(
+ 'USBAlternateInterface should reject an invalid alternate setting');
+ } catch (error) {
+ assert_equals(error.name, 'RangeError');
+ }
+}, 'Constructing a USBAlternateInterface with an invalid alternate setting ' +
+ 'throws a range error.');
diff --git a/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js b/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js
new file mode 100644
index 00000000000..e7d1c7fb146
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/usbConfiguration.https.any.js
@@ -0,0 +1,23 @@
+// META: script=/webusb/resources/fake-devices.js
+// META: script=/webusb/resources/usb-helpers.js
+'use strict';
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ assertDeviceInfoEquals(configuration, fakeDeviceInit.configurations[1]);
+}, 'Can construct a USBConfiguration.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ try {
+ let configuration =
+ new USBConfiguration(device, device.configurations.length + 1);
+ assert_unreached(
+ 'USBConfiguration should reject an invalid configuration value');
+ } catch (error) {
+ assert_equals(error.name, 'RangeError');
+ }
+}, 'Constructing a USBConfiguration with an invalid configuration value ' +
+ 'throws a range error.');
diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html b/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html
index 02b2c5010fb..75bad9e0c9f 100644
--- a/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html
+++ b/tests/wpt/web-platform-tests/webusb/usbDevice-iframe.https.html
@@ -6,46 +6,39 @@
<script>
'use strict';
-function runIframeDisconnectTest(onDeviceConnected) {
- return new Promise((resolve, reject) => {
- let opened = false;
+async function connectInIframe() {
+ let iframe = document.createElement('iframe');
+ let opened = false;
- let iframe = document.createElement('iframe');
- iframe.src = 'resources/open-in-iframe.html';
- iframe.onload = () => {
- navigator.usb.test.attachToWindow(iframe.contentWindow).then(() => {
- iframe.contentWindow.postMessage('Ready', '*');
- });
- };
+ iframe.src = 'resources/open-in-iframe.html';
+ document.body.appendChild(iframe);
- window.onmessage = messageEvent => {
- if (messageEvent.data == 'Ready') {
- let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit);
- fakeDevice.onclose = () => {
- assert_true(opened);
- resolve();
- };
- } else if (messageEvent.data == 'Success') {
- opened = true;
- onDeviceConnected(iframe);
- } else {
- reject(messageEvent.data);
- }
- };
+ await navigator.usb.test.attachToContext(iframe);
+ function nextIFrameMessage() {
+ return new Promise(resolve => window.addEventListener(
+ 'message', e => resolve(e.data)));
+ }
+ iframe.contentWindow.postMessage('Ready', '*');
- document.body.appendChild(iframe);
- });
+ assert_equals('Ready', (await nextIFrameMessage()));
+ let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit);
+ let closedPromise = new Promise(resolve => fakeDevice.onclose = resolve)
+ .then(() => assert_true(opened));
+
+ assert_equals('Success', (await nextIFrameMessage()));
+ opened = true;
+ return { iframe, closedPromise };
}
-usb_test(() => {
- return runIframeDisconnectTest(iframe => {
- document.body.removeChild(iframe);
- });
+usb_test(async () => {
+ let { iframe, closedPromise } = await connectInIframe();
+ document.body.removeChild(iframe);
+ await closedPromise;
}, 'detaching iframe disconnects device.');
-usb_test(() => {
- return runIframeDisconnectTest(iframe => {
- iframe.src = 'about:blank';
- });
+usb_test(async () => {
+ let { iframe, closedPromise } = await connectInIframe();
+ iframe.src = 'about:blank';
+ await closedPromise;
}, 'navigating iframe disconnects device.');
</script>
diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html b/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html
new file mode 100644
index 00000000000..119f5d66882
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/usbDevice-worker.https.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/webusb/resources/fake-devices.js"></script>
+<script src="/webusb/resources/usb-helpers.js"></script>
+<script>
+'use strict';
+
+async function connectInWorker() {
+ let worker = new Worker('/webusb/resources/open-in-worker.js');
+ let opened = false;
+
+ await navigator.usb.test.attachToContext(worker);
+ function nextWorkerMessage() {
+ return new Promise(resolve => worker.addEventListener(
+ 'message', e => resolve(e.data)));
+ }
+ worker.postMessage({ type: 'Ready' });
+
+ assert_equals('Ready', (await nextWorkerMessage()).type);
+ let fakeDevice = navigator.usb.test.addFakeDevice(fakeDeviceInit);
+ let closedPromise = new Promise(resolve => fakeDevice.onclose = resolve)
+ .then(() => assert_true(opened));
+
+ assert_equals('Success', (await nextWorkerMessage()).type);
+ opened = true;
+ return { worker, closedPromise };
+}
+
+usb_test(async () => {
+ let { worker, closedPromise } = await connectInWorker();
+ worker.terminate();
+ await closedPromise;
+}, 'terminating worker disconnects device.');
+</script>
diff --git a/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js b/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js
index da7df081b8b..046de82b1bd 100644
--- a/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js
+++ b/tests/wpt/web-platform-tests/webusb/usbDevice.https.any.js
@@ -6,6 +6,10 @@ function assertRejectsWithNotFoundError(promise) {
return assertRejectsWithError(promise, 'NotFoundError');
}
+function assertRejectsWithTypeError(promise) {
+ return assertRejectsWithError(promise, 'TypeError');
+}
+
function assertRejectsWithNotOpenError(promise) {
return assertRejectsWithError(
promise, 'InvalidStateError', 'The device must be opened first.');
@@ -17,6 +21,18 @@ function assertRejectsWithNotConfiguredError(promise) {
'The device must have a configuration selected.');
}
+function assertRejectsWithDeviceStateChangeInProgressError(promise) {
+ return assertRejectsWithError(
+ promise, 'InvalidStateError',
+ 'An operation that changes the device state is in progress.');
+}
+
+function assertRejectsWithInterfaceStateChangeInProgressError(promise) {
+ return assertRejectsWithError(
+ promise, 'InvalidStateError',
+ 'An operation that changes interface state is in progress.');
+}
+
usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => {
return waitForDisconnect(fakeDevice)
@@ -59,22 +75,63 @@ usb_test(() => {
});
}, 'open and close can be called multiple times');
-usb_test(() => {
- return getFakeDevice().then(({ device }) => {
- const message =
- 'An operation that changes the device state is in progress.';
- return Promise.all([
- device.open(),
- assertRejectsWithError(device.open(), 'InvalidStateError', message),
- assertRejectsWithError(device.close(), 'InvalidStateError', message),
- ]).then(() => Promise.all([
- device.close(),
- assertRejectsWithError(device.open(), 'InvalidStateError', message),
- assertRejectsWithError(device.close(), 'InvalidStateError', message),
- ]));
- });
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await Promise.all([
+ device.open(),
+ assertRejectsWithDeviceStateChangeInProgressError(device.open()),
+ assertRejectsWithDeviceStateChangeInProgressError(device.close()),
+ ]);
+ await Promise.all([
+ device.close(),
+ assertRejectsWithDeviceStateChangeInProgressError(device.open()),
+ assertRejectsWithDeviceStateChangeInProgressError(device.close()),
+ ]);
}, 'open and close cannot be called again while open or close are in progress');
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ return Promise.all([
+ device.selectConfiguration(1),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.claimInterface(0)),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.releaseInterface(0)),
+ assertRejectsWithDeviceStateChangeInProgressError(device.open()),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.selectConfiguration(1)),
+ assertRejectsWithDeviceStateChangeInProgressError(device.reset()),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.selectAlternateInterface(0, 0)),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.controlTransferOut({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000,
+ })),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.controlTransferOut({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000,
+ }, new Uint8Array([1, 2, 3]))),
+ assertRejectsWithDeviceStateChangeInProgressError(
+ device.controlTransferIn({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000
+ }, 0)),
+ assertRejectsWithDeviceStateChangeInProgressError(device.close()),
+ ]);
+}, 'device operations reject if an device state change is in progress');
+
usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => {
return device.open()
@@ -138,6 +195,21 @@ usb_test(() => {
});
}, 'device configuration can be set and queried');
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ assert_equals(device.configuration, null);
+ await device.open();
+ assert_equals(device.configuration, null);
+ await device.selectConfiguration(1);
+ await device.selectConfiguration(1);
+ assertDeviceInfoEquals(
+ device.configuration, fakeDeviceInit.configurations[0]);
+ await device.selectConfiguration(2);
+ assertDeviceInfoEquals(
+ device.configuration, fakeDeviceInit.configurations[1]);
+ await device.close();
+}, 'a device configuration value can be set again');
+
usb_test(() => {
return getFakeDevice().then(({ device }) => {
assert_equals(device.configuration, null);
@@ -198,19 +270,82 @@ usb_test(() => {
});
}, 'an interface can be claimed and released');
-usb_test(() => {
- return getFakeDevice().then(({ device }) => {
- return device.open()
- .then(() => device.selectConfiguration(1))
- .then(() => device.claimInterface(0))
- .then(() => {
- assert_true(device.configuration.interfaces[0].claimed);
- return device.close(0);
- })
- .then(() => {
- assert_false(device.configuration.interfaces[0].claimed);
- });
- });
+usb_test(async () => {
+ let { device } = await getFakeDevice()
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assert_true(device.configuration.interfaces[0].claimed);
+ await device.claimInterface(0);
+ assert_true(device.configuration.interfaces[0].claimed);
+ await device.close();
+}, 'an interface can be claimed multiple times');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assert_true(device.configuration.interfaces[0].claimed);
+ await device.releaseInterface(0);
+ assert_false(device.configuration.interfaces[0].claimed);
+ await device.releaseInterface(0);
+ assert_false(device.configuration.interfaces[0].claimed);
+ await device.close();
+}, 'an interface can be released multiple times');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ return Promise.all([
+ device.claimInterface(0),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.claimInterface(0)),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.releaseInterface(0)),
+ assertRejectsWithInterfaceStateChangeInProgressError(device.open()),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.selectConfiguration(1)),
+ assertRejectsWithInterfaceStateChangeInProgressError(device.reset()),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.selectAlternateInterface(0, 0)),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.controlTransferOut({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000,
+ })),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.controlTransferOut({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000,
+ }, new Uint8Array([1, 2, 3]))),
+ assertRejectsWithInterfaceStateChangeInProgressError(
+ device.controlTransferIn({
+ requestType: 'standard',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0000
+ }, 0)),
+ assertRejectsWithInterfaceStateChangeInProgressError(device.close()),
+ ]);
+}, 'device operations reject if an interface state change is in progress');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assert_true(device.configuration.interfaces[0].claimed);
+ await device.close(0);
+ assert_false(device.configuration.interfaces[0].claimed);
}, 'interfaces are released on close');
usb_test(() => {
@@ -281,29 +416,35 @@ usb_test(() => {
});
}, 'selectAlternateInterface rejects when called on a disconnected device');
-usb_test(() => {
- return getFakeDevice().then(({ device }) => {
- return device.open()
- .then(() => device.selectConfiguration(1))
- .then(() => device.controlTransferIn({
- requestType: 'vendor',
- recipient: 'device',
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let usbRequestTypes = ['standard', 'class', 'vendor'];
+ let usbRecipients = ['device', 'interface', 'endpoint', 'other'];
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ await device.selectAlternateInterface(0, 0);
+ for (const requestType of usbRequestTypes) {
+ for (const recipient of usbRecipients) {
+ let index = recipient === 'interface' ? 0x5600 : 0x5681;
+ let result = await device.controlTransferIn({
+ requestType: requestType,
+ recipient: recipient,
request: 0x42,
value: 0x1234,
- index: 0x5678
- }, 7))
- .then(result => {
- assert_true(result instanceof USBInTransferResult);
- assert_equals(result.status, 'ok');
- assert_equals(result.data.byteLength, 7);
- assert_equals(result.data.getUint16(0), 0x07);
- assert_equals(result.data.getUint8(2), 0x42);
- assert_equals(result.data.getUint16(3), 0x1234);
- assert_equals(result.data.getUint16(5), 0x5678);
- return device.close();
- });
- });
-}, 'can issue IN control transfer');
+ index: index
+ }, 7);
+ assert_true(result instanceof USBInTransferResult);
+ assert_equals(result.status, 'ok');
+ assert_equals(result.data.byteLength, 7);
+ assert_equals(result.data.getUint16(0), 0x07);
+ assert_equals(result.data.getUint8(2), 0x42);
+ assert_equals(result.data.getUint16(3), 0x1234);
+ assert_equals(result.data.getUint16(5), index);
+ }
+ }
+ await device.close();
+}, 'can issue all types of IN control transfers');
usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => {
@@ -320,25 +461,39 @@ usb_test(() => {
});
}, 'controlTransferIn rejects when called on a disconnected device');
-usb_test(() => {
- return getFakeDevice().then(({ device }) => {
- return device.open()
- .then(() => device.selectConfiguration(1))
- .then(() => device.controlTransferOut({
- requestType: 'vendor',
- recipient: 'device',
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let usbRequestTypes = ['standard', 'class', 'vendor'];
+ let usbRecipients = ['device', 'interface', 'endpoint', 'other'];
+ let dataArray = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);
+ let dataTypes = [dataArray, dataArray.buffer];
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ await device.selectAlternateInterface(0, 0);
+ for (const requestType of usbRequestTypes) {
+ for (const recipient of usbRecipients) {
+ let index = recipient === 'interface' ? 0x5600 : 0x5681;
+ let transferParams = {
+ requestType: requestType,
+ recipient: recipient,
request: 0x42,
value: 0x1234,
- index: 0x5678
- }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])))
- .then(result => {
+ index: index
+ };
+ for (const data of dataTypes) {
+ let result = await device.controlTransferOut(transferParams, data);
+ assert_true(result instanceof USBOutTransferResult);
+ assert_equals(result.status, 'ok');
+ assert_equals(result.bytesWritten, 8);
+ }
+ let result = await device.controlTransferOut(transferParams);
assert_true(result instanceof USBOutTransferResult);
assert_equals(result.status, 'ok');
- assert_equals(result.bytesWritten, 8);
- return device.close();
- });
- });
-}, 'can issue OUT control transfer');
+ }
+ }
+ await device.close();
+}, 'can issue all types of OUT control transfers');
usb_test(() => {
return getFakeDevice().then(({ device, fakeDevice }) => {
@@ -355,6 +510,70 @@ usb_test(() => {
});
}, 'controlTransferOut rejects when called on a disconnected device');
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assertRejectsWithTypeError(device.controlTransferOut({
+ requestType: 'invalid',
+ recipient: 'device',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x5678
+ }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])));
+ assertRejectsWithTypeError(device.controlTransferIn({
+ requestType: 'invalid',
+ recipient: 'device',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x5678
+ }, 0));
+ await device.close();
+}, 'control transfers with a invalid request type reject');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assertRejectsWithTypeError(device.controlTransferOut({
+ requestType: 'vendor',
+ recipient: 'invalid',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x5678
+ }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])));
+ assertRejectsWithTypeError(device.controlTransferIn({
+ requestType: 'vendor',
+ recipient: 'invalid',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x5678
+ }, 0));
+}, 'control transfers with a invalid recipient type reject');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(1);
+ await device.claimInterface(0);
+ assertRejectsWithNotFoundError(device.controlTransferOut({
+ requestType: 'vendor',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0002 // Last byte of index is interface number.
+ }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8])));
+ assertRejectsWithNotFoundError(device.controlTransferIn({
+ requestType: 'vendor',
+ recipient: 'interface',
+ request: 0x42,
+ value: 0x1234,
+ index: 0x0002 // Last byte of index is interface number.
+ }, 0));
+}, 'control transfers to a non-existant interface reject');
+
usb_test(() => {
return getFakeDevice().then(({ device }) => {
let interfaceRequest = {
diff --git a/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js b/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js
new file mode 100644
index 00000000000..e57639c3d4b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/usbEndpoint.https.any.js
@@ -0,0 +1,45 @@
+// META: script=/webusb/resources/fake-devices.js
+// META: script=/webusb/resources/usb-helpers.js
+'use strict';
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ let alternateInterface = new USBAlternateInterface(
+ usbInterface, usbInterface.alternates[1].alternateSetting);
+ let inEndpoint = new USBEndpoint(
+ alternateInterface, alternateInterface.endpoints[0].endpointNumber, 'in');
+ let outEndpoint = new USBEndpoint(
+ alternateInterface,
+ alternateInterface.endpoints[1].endpointNumber,
+ 'out');
+ assertDeviceInfoEquals(
+ inEndpoint,
+ fakeDeviceInit.configurations[1].interfaces[0].alternates[1]
+ .endpoints[0]);
+ assertDeviceInfoEquals(
+ outEndpoint,
+ fakeDeviceInit.configurations[1].interfaces[0].alternates[1]
+ .endpoints[1]);
+}, 'Can construct a USBEndpoint.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ let alternateInterface = new USBAlternateInterface(
+ usbInterface, usbInterface.alternates[1].alternateSetting);
+ try {
+ let endpoint = new USBEndpoint(
+ alternateInterface, alternateInterface.endpoints.length, 'in');
+ assert_unreached('USBEndpoint should reject an invalid endpoint number');
+ } catch (error) {
+ assert_equals(error.name, 'RangeError');
+ }
+}, 'Constructing a USBEndpoint with an invalid endpoint number throws a ' +
+ 'range error.');
diff --git a/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js b/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js
new file mode 100644
index 00000000000..7fbf660bbce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webusb/usbInterface.https.any.js
@@ -0,0 +1,53 @@
+// META: script=/webusb/resources/fake-devices.js
+// META: script=/webusb/resources/usb-helpers.js
+'use strict';
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ assertDeviceInfoEquals(
+ usbInterface, fakeDeviceInit.configurations[1].interfaces[0]);
+}, 'Can construct a USBInterface.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ try {
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces.length);
+ assert_unreached('USBInterface should reject an invalid interface number');
+ } catch (error) {
+ assert_equals(error.name, 'RangeError');
+ }
+}, 'Constructing a USBInterface with an invalid interface number ' +
+ 'throws a range error.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(2);
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ assert_equals(usbInterface.alternate, null);
+}, 'The alternate attribute of USBInterface returns null if the interface' +
+ 'has not been claimed.');
+
+usb_test(async () => {
+ let { device } = await getFakeDevice();
+ await device.open();
+ await device.selectConfiguration(2);
+ await device.claimInterface(0);
+ await device.selectAlternateInterface(0, 1);
+ let configuration = new USBConfiguration(
+ device, device.configurations[1].configurationValue);
+ let usbInterface = new USBInterface(
+ configuration, configuration.interfaces[0].interfaceNumber);
+ assert_equals(usbInterface.alternate.alternateSetting, 1);
+}, 'The alternate attribute of USBInterface returns the active alternate ' +
+ 'interface.');
diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html
new file mode 100644
index 00000000000..9d867db7ce0
--- /dev/null
+++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-credentials.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/worklet-test-utils.js"></script>
+ <script src="resources/credentials-tests.js"></script>
+</head>
+<body>
+<script>
+ runCredentialsTests("audio");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html
new file mode 100644
index 00000000000..ef148a4a098
--- /dev/null
+++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-csp.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/worklet-test-utils.js"></script>
+ <script src="resources/csp-tests.js"></script>
+</head>
+<body>
+<script>
+ runContentSecurityPolicyTests("audio");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html
new file mode 100644
index 00000000000..cff063a4361
--- /dev/null
+++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-import.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/worklet-test-utils.js"></script>
+ <script src="resources/import-tests.js"></script>
+</head>
+<body>
+<script>
+ runImportTests("audio");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html
new file mode 100644
index 00000000000..f258cd5a452
--- /dev/null
+++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-referrer.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <script src="/common/get-host-info.sub.js"></script>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/worklet-test-utils.js"></script>
+ <script src="resources/referrer-tests.js"></script>
+</head>
+<body>
+<script>
+ runReferrerTests("audio");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html b/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html
new file mode 100644
index 00000000000..479ae176f9d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/worklets/audio-worklet-service-worker-interception.https.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="resources/worklet-test-utils.js"></script>
+ <script src="resources/service-worker-interception-tests.js"></script>
+ <script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
+</head>
+<body>
+<script>
+ runServiceWorkerInterceptionTests("audio");
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js b/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js
index 499999f22df..797edc9e563 100644
--- a/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js
+++ b/tests/wpt/web-platform-tests/worklets/resources/worklet-test-utils.js
@@ -6,5 +6,7 @@ function get_worklet(type) {
return CSS.layoutWorklet;
if (type == 'paint')
return CSS.paintWorklet;
+ if (type == 'audio')
+ return new OfflineAudioContext(2,44100*40,44100).audioWorklet;
return undefined;
}
diff --git a/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm b/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm
index 466b0d977cc..84f2fc85821 100644
--- a/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm
+++ b/tests/wpt/web-platform-tests/xhr/headers-normalize-response.htm
@@ -3,13 +3,15 @@
<title>Whitespace and null in header values</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
-<script src=support.js?pipe=sub></script>
-
-<h1>Whitespace and null in response header values</h1>
-
<div id=log></div>
-
<script>
+function error(val) {
+ test(() => {
+ const client = new XMLHttpRequest();
+ client.open("GET", "resources/parse-headers.py?my-custom-header="+encodeURIComponent(val), false);
+ assert_throws("NetworkError", () => client.send());
+ }, "Header value: " + val.replace("\0", "\\0"));
+}
function matchHeaderValue(val) {
test(function () {
@@ -20,12 +22,12 @@ function matchHeaderValue(val) {
var r = client.getResponseHeader("My-Custom-Header");
assert_equals(r, trimmed);
- }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_").replace("\0", "\\0"));
+ }, "Header value: " + val.replace(/\t/g, "[tab]").replace(/ /g, "_"));
}
-matchHeaderValue("hello world\0");
-matchHeaderValue("\0hello world");
-matchHeaderValue("hello\0world");
+error("hello world\0");
+error("\0hello world");
+error("hello\0world");
matchHeaderValue(" hello world");
matchHeaderValue("hello world ");
matchHeaderValue(" hello world ");
@@ -34,9 +36,8 @@ matchHeaderValue("hello world\t");
matchHeaderValue("\thello world\t");
matchHeaderValue("hello world");
matchHeaderValue("hello\tworld");
-matchHeaderValue("\0");
+error("\0");
matchHeaderValue(" ");
matchHeaderValue("\t");
matchHeaderValue("");
-
</script>
diff --git a/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html b/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html
index 30d6b736c56..4f4998c4285 100644
--- a/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html
+++ b/tests/wpt/web-platform-tests/xhr/timeout-multiple-fetches.html
@@ -3,12 +3,13 @@
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/common/get-host-info.sub.js></script>
+<script src=/common/utils.js></script>
<div id=log></div>
<script>
async_test(t => {
const client = new XMLHttpRequest
client.open("GET", "resources/redirect.py?delay=500&location=delay.py") // 500 + 500 = 1000
- client.timeout = 1000
+ client.timeout = 750
client.send()
client.ontimeout = t.step_func_done(() => {
assert_equals(client.readyState, 4)
@@ -17,9 +18,11 @@ async_test(t => {
}, "Redirects should not reset the timer")
async_test(t => {
+ // Use a unique ID to prevent caching of the preflight making the test flaky.
+ const uuid = token();
const client = new XMLHttpRequest
- client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/delay.py")
- client.timeout = 1000
+ client.open("YO", get_host_info().HTTP_REMOTE_ORIGIN + "/xhr/resources/delay.py?uuid=" + uuid)
+ client.timeout = 750
client.send()
client.ontimeout = t.step_func_done(() => {
assert_equals(client.readyState, 4)