aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini6
-rw-r--r--tests/wpt/metadata/MANIFEST.json1299
-rw-r--r--tests/wpt/metadata/css/css-animations/animationevent-interface.html.ini72
-rw-r--r--tests/wpt/metadata/css/css-text/i18n/ja/css-text-line-break-ja-hyphens-strict.html.ini9
-rw-r--r--tests/wpt/metadata/css/css-text/tab-size/tab-min-rendered-width-1.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini179
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitionevent-interface.html.ini7
-rw-r--r--tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini68
-rw-r--r--tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini4
-rw-r--r--tests/wpt/metadata/encoding/single-byte-decoder.html.ini2
-rw-r--r--tests/wpt/metadata/eventsource/format-field-id-2.htm.ini5
-rw-r--r--tests/wpt/metadata/eventsource/format-field-id.htm.ini5
-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_3.html.ini (renamed from tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_4.html.ini)2
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini17
-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/tables/transformed-tbody-tr-collapsed-border.html.ini2
-rw-r--r--tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html.ini2
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini36
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html.ini37
-rw-r--r--tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html.ini31
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini18
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/forms/the-form-element/form-autocomplete.html.ini15
-rw-r--r--tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini3
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini283
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini283
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/quirks.html.ini283
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/child-css/external-import-stylesheet.html.ini4
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/child-css/internal-import-stylesheet.html.ini4
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/child-css/processing-instruction.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/font-face/external-import-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/font-face/external-stylesheet.html.ini4
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-import-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-stylesheet.html.ini4
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/font-face/processing-instruction.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/external-import-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/external-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/inline-style.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/internal-import-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/internal-stylesheet.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/presentation-attribute.html.ini4
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/image/processing-instruction.html.ini5
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/svg/external-stylesheet.html.ini8
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/svg/inline-style.html.ini8
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/svg/internal-stylesheet.html.ini8
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/svg/presentation-attribute.html.ini8
-rw-r--r--tests/wpt/metadata/referrer-policy/css-integration/svg/processing-instruction.html.ini8
-rw-r--r--tests/wpt/metadata/url/urlencoded-parser.any.js.ini17
-rw-r--r--tests/wpt/metadata/wasm/jsapi/constructor/compile.any.js.ini6
-rw-r--r--tests/wpt/metadata/wasm/jsapi/constructor/instantiate.any.js.ini12
-rw-r--r--tests/wpt/metadata/wasm/jsapi/global/constructor.any.js.ini6
-rw-r--r--tests/wpt/metadata/wasm/jsapi/global/value-get-set.any.js.ini207
-rw-r--r--tests/wpt/metadata/wasm/jsapi/global/valueOf.any.js.ini6
-rw-r--r--tests/wpt/metadata/wasm/jsapi/table/grow.any.js.ini6
-rw-r--r--tests/wpt/mozilla/meta/css/transition_calc_implicit.html.ini2
-rw-r--r--tests/wpt/mozilla/meta/mozilla/unitless-length.html.ini2
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/only-valid-whitespaces-are-allowed.html67
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html11
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers1
-rw-r--r--tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_meta.sub.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/animationevent-interface.js128
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/historical.html18
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-color-repaint.html1
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/contain-size-fieldset-001.html19
-rw-r--r--tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-fieldset-001-ref.html15
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-001.html62
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-002.html63
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-003.html63
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-004.html64
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-005.html63
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-006.html64
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-007.html65
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-008.html65
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html89
-rw-r--r--tests/wpt/web-platform-tests/css/css-grid/alignment/support/style-change.js9
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll.html11
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/registered-properties-inheritance.html14
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/unit-cycles.html38
-rw-r--r--tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-tables/caption-writing-mode-001.html40
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1-ref.html34
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1.html27
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/transitionevent-interface.html229
-rw-r--r--tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md8
-rw-r--r--tests/wpt/web-platform-tests/dom/events/shadow-relatedTarget.html30
-rw-r--r--tests/wpt/web-platform-tests/eventsource/eventsource-prototype.htm2
-rw-r--r--tests/wpt/web-platform-tests/fetch/corb/script-html-via-cross-origin-blob-url.sub.html2
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-timing-manual.html2
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-containing-iframe-manual.html29
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-allowed-manual.html22
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html65
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html34
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html49
-rw-r--r--tests/wpt/web-platform-tests/fullscreen/rendering/ua-style-iframe-manual.html19
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/001.html4
-rw-r--r--tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/002.html4
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html18
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html23
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html16
-rw-r--r--tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html17
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html17
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html7
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html7
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/css.py7
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-style-error.js47
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html2
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html26
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-autocomplete.html63
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/credentials.sub.html32
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html58
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html12
-rw-r--r--tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html26
-rw-r--r--tests/wpt/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html1
-rw-r--r--tests/wpt/web-platform-tests/lint.whitelist2
-rw-r--r--tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html3
-rw-r--r--tests/wpt/web-platform-tests/media-capabilities/encodingInfo.html328
-rw-r--r--tests/wpt/web-platform-tests/mediacapture-streams/MediaStream-default-feature-policy.https.html2
-rw-r--r--tests/wpt/web-platform-tests/navigation-timing/dom_interactive_image_document.html25
-rw-r--r--tests/wpt/web-platform-tests/navigation-timing/dom_interactive_media_document.html25
-rw-r--r--tests/wpt/web-platform-tests/payment-method-id/payment-request-ctor-pmi-handling.https.html149
-rw-r--r--tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html8
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/README.md14
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/external-import-stylesheet.html48
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/internal-import-stylesheet.html45
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/processing-instruction.html47
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/css-test-helper.js66
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-import-stylesheet.html53
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-stylesheet.html47
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-import-stylesheet.html45
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-stylesheet.html45
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/processing-instruction.html51
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-import-stylesheet.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/external-import-stylesheet.html)9
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-stylesheet.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/external-stylesheet.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/inline-style.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/inline-style.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-import-stylesheet.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-import-stylesheet.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-stylesheet.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-stylesheet.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/presentation-attribute.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/presentation-attribute.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/image/processing-instruction.html (renamed from tests/wpt/web-platform-tests/referrer-policy/css-integration/processing-instruction.html)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/external-stylesheet.html41
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/inline-style.html35
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/internal-stylesheet.html35
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/presentation-attribute.html40
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/processing-instruction.html38
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/subresource/font.py72
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/subresource/stylesheet.py56
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/subresource/svg.py36
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/template/font.css.template9
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/template/image.css.template (renamed from tests/wpt/web-platform-tests/referrer-policy/generic/template/stylesheet.css.template)0
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.css.template3
-rw-r--r--tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.embedded.template5
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py10
-rw-r--r--tests/wpt/web-platform-tests/resources/test/conftest.py11
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html4
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tests/functional/log-insertion.html33
-rw-r--r--tests/wpt/web-platform-tests/resources/test/tox.ini5
-rw-r--r--tests/wpt/web-platform-tests/resources/test/wptserver.py6
-rw-r--r--tests/wpt/web-platform-tests/resources/testharness.js47
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html8
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py4
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope1.py4
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope2.py4
-rw-r--r--tests/wpt/web-platform-tests/svg/import/animate-elem-83-t-manual.svg2
-rw-r--r--tests/wpt/web-platform-tests/tools/ci/check_stability.py1
-rwxr-xr-xtests/wpt/web-platform-tests/tools/ci/taskcluster-run.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/manifest/vcs.py10
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/browser.py35
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/run.py7
-rw-r--r--tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py34
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_webdriver.py6
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py19
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py7
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py3
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py5
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py21
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py52
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py37
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py30
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py32
-rw-r--r--tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/constructor/compile.any.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js4
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/value-get-set.any.js (renamed from tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js)17
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js14
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/instanceTestFactory.js12
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js14
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/constructor.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js15
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/constructor.any.js5
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/customSections.any.js5
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/exports.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/module/imports.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/constructor.any.js6
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/get-set.any.js8
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js10
-rw-r--r--tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js14
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/actions/special_keys.py82
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/__init__.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/__init__.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/conftest.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/conftest.py)2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key.py25
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_events.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/key.py)222
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_modifiers.py24
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_shortcuts.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/key_shortcuts.py)4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_special_keys.py38
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/none.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/none.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py)9
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py)4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_dblclick.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py)2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_modifier_click.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/modifier_click.py)4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_origin.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/pointer_origin.py)2
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_pause_dblclick.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_pause_dblclick.py)4
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/sequence.py9
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/__init__.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/support/__init__.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/keys.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/mouse.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/refine.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/support/refine.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/test_actions_wdspec.html (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/support/test_actions_wdspec.html)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/perform_actions/validity.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/validity.py)0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/conftest.py40
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/release.py18
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/sequence.py (renamed from tests/wpt/web-platform-tests/webdriver/tests/actions/sequence.py)8
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/__init__.py0
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/refine.py33
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/test_actions_wdspec.html197
-rw-r--r--tests/wpt/web-platform-tests/webrtc/getstats.html2
-rw-r--r--tests/wpt/web-platform-tests/webrtc/tools/.eslintrc.js2
-rw-r--r--tests/wpt/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js4
-rw-r--r--tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini3
245 files changed, 5931 insertions, 1866 deletions
diff --git a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
index 3a3d15b8406..947e223fb28 100644
--- a/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
+++ b/tests/wpt/metadata/FileAPI/url/url-with-fetch.any.js.ini
@@ -14,9 +14,6 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
[url-with-fetch.any.html]
[Untitled]
@@ -37,6 +34,3 @@
[Revoke blob URL after creating Request, will fetch]
expected: FAIL
- [Revoke blob URL after calling fetch, fetch should succeed]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 5b8ebce0eb8..53405b9febb 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -110749,6 +110749,18 @@
{}
]
],
+ "css/css-contain/contain-size-fieldset-001.html": [
+ [
+ "/css/css-contain/contain-size-fieldset-001.html",
+ [
+ [
+ "/css/css-contain/reference/contain-size-fieldset-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-contain/contain-size-flexbox-001.html": [
[
"/css/css-contain/contain-size-flexbox-001.html",
@@ -127713,6 +127725,18 @@
{}
]
],
+ "css/css-multicol/multicol-under-vertical-rl-scroll.html": [
+ [
+ "/css/css-multicol/multicol-under-vertical-rl-scroll.html",
+ [
+ [
+ "/css/css-multicol/multicol-under-vertical-rl-scroll-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-width-001.xht": [
[
"/css/css-multicol/multicol-width-001.xht",
@@ -137329,6 +137353,18 @@
{}
]
],
+ "css/css-text/tab-size/tab-min-rendered-width-1.html": [
+ [
+ "/css/css-text/tab-size/tab-min-rendered-width-1.html",
+ [
+ [
+ "/css/css-text/tab-size/tab-min-rendered-width-1-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/tab-size/tab-size-integer-001.html": [
[
"/css/css-text/tab-size/tab-size-integer-001.html",
@@ -185989,6 +186025,18 @@
{}
]
],
+ "html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html": [
+ [
+ "/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-negative-margin.html": [
[
"/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/fieldset-border-gap-negative-margin.html",
@@ -186157,6 +186205,18 @@
{}
]
],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html": [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html",
+ [
+ [
+ "/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html": [
[
"/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item.html",
@@ -221103,6 +221163,21 @@
{}
]
],
+ "content-security-policy/generic/support/load_img_and_post_result_header.html": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers": [
+ [
+ {}
+ ]
+ ],
+ "content-security-policy/generic/support/load_img_and_post_result_meta.sub.html": [
+ [
+ {}
+ ]
+ ],
"content-security-policy/generic/support/log-pass.html": [
[
{}
@@ -248288,6 +248363,11 @@
{}
]
],
+ "css/css-contain/reference/contain-size-fieldset-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-contain/reference/contain-size-flexbox-001-ref.html": [
[
{}
@@ -260128,6 +260208,11 @@
{}
]
],
+ "css/css-multicol/multicol-under-vertical-rl-scroll-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-multicol/multicol-width-001-ref.xht": [
[
{}
@@ -264688,6 +264773,11 @@
{}
]
],
+ "css/css-text/tab-size/tab-min-rendered-width-1-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/tab-size/tab-size-integer-001-ref.html": [
[
{}
@@ -288928,6 +289018,11 @@
{}
]
],
+ "html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html": [
+ [
+ {}
+ ]
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [
[
{}
@@ -289018,6 +289113,11 @@
{}
]
],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html": [
+ [
+ {}
+ ]
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [
[
{}
@@ -289243,6 +289343,11 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/resources/css.py": [
+ [
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
[
{}
@@ -289263,6 +289368,11 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/resources/link-style-error.js": [
+ [
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
[
{}
@@ -291448,6 +291558,11 @@
{}
]
],
+ "html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html": [
+ [
+ {}
+ ]
+ ],
"html/semantics/scripting-1/the-script-element/module/resources/fast-module.js": [
[
{}
@@ -296493,6 +296608,11 @@
{}
]
],
+ "referrer-policy/css-integration/css-test-helper.js": [
+ [
+ {}
+ ]
+ ],
"referrer-policy/generic/common.js": [
[
{}
@@ -296518,6 +296638,11 @@
{}
]
],
+ "referrer-policy/generic/subresource/font.py": [
+ [
+ {}
+ ]
+ ],
"referrer-policy/generic/subresource/image.py": [
[
{}
@@ -296538,6 +296663,11 @@
{}
]
],
+ "referrer-policy/generic/subresource/svg.py": [
+ [
+ {}
+ ]
+ ],
"referrer-policy/generic/subresource/worker.py": [
[
{}
@@ -296558,6 +296688,16 @@
{}
]
],
+ "referrer-policy/generic/template/font.css.template": [
+ [
+ {}
+ ]
+ ],
+ "referrer-policy/generic/template/image.css.template": [
+ [
+ {}
+ ]
+ ],
"referrer-policy/generic/template/script.js.template": [
[
{}
@@ -296568,7 +296708,12 @@
{}
]
],
- "referrer-policy/generic/template/stylesheet.css.template": [
+ "referrer-policy/generic/template/svg.css.template": [
+ [
+ {}
+ ]
+ ],
+ "referrer-policy/generic/template/svg.embedded.template": [
[
{}
]
@@ -299703,6 +299848,11 @@
{}
]
],
+ "resources/test/tests/functional/log-insertion.html": [
+ [
+ {}
+ ]
+ ],
"resources/test/tests/functional/order.html": [
[
{}
@@ -313493,41 +313643,6 @@
{}
]
],
- "webdriver/tests/actions/__init__.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/conftest.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/support/__init__.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/support/keys.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/support/mouse.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/support/refine.py": [
- [
- {}
- ]
- ],
- "webdriver/tests/actions/support/test_actions_wdspec.html": [
- [
- {}
- ]
- ],
"webdriver/tests/add_cookie/__init__.py": [
[
{}
@@ -313773,11 +313888,71 @@
{}
]
],
+ "webdriver/tests/perform_actions/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/conftest.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/support/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/support/keys.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/support/mouse.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/support/refine.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/support/test_actions_wdspec.html": [
+ [
+ {}
+ ]
+ ],
"webdriver/tests/refresh/__init__.py": [
[
{}
]
],
+ "webdriver/tests/release_actions/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/release_actions/conftest.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/release_actions/support/__init__.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/release_actions/support/refine.py": [
+ [
+ {}
+ ]
+ ],
+ "webdriver/tests/release_actions/support/test_actions_wdspec.html": [
+ [
+ {}
+ ]
+ ],
"webdriver/tests/send_alert_text/__init__.py": [
[
{}
@@ -328702,6 +328877,12 @@
{}
]
],
+ "content-security-policy/generic/only-valid-whitespaces-are-allowed.html": [
+ [
+ "/content-security-policy/generic/only-valid-whitespaces-are-allowed.html",
+ {}
+ ]
+ ],
"content-security-policy/generic/policy-does-not-affect-child.sub.html": [
[
"/content-security-policy/generic/policy-does-not-affect-child.sub.html",
@@ -331790,6 +331971,12 @@
{}
]
],
+ "css/css-animations/historical.html": [
+ [
+ "/css/css-animations/historical.html",
+ {}
+ ]
+ ],
"css/css-animations/idlharness.html": [
[
"/css/css-animations/idlharness.html",
@@ -333756,6 +333943,54 @@
{}
]
],
+ "css/css-grid/alignment/grid-alignment-style-changes-001.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-001.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-002.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-002.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-003.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-003.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-004.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-004.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-005.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-005.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-006.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-006.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-007.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-007.html",
+ {}
+ ]
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-008.html": [
+ [
+ "/css/css-grid/alignment/grid-alignment-style-changes-008.html",
+ {}
+ ]
+ ],
"css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [
[
"/css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html",
@@ -334518,6 +334753,12 @@
{}
]
],
+ "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html": [
+ [
+ "/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html",
+ {}
+ ]
+ ],
"css/css-grid/grid-definition/grid-change-fit-content-argument-001.html": [
[
"/css/css-grid/grid-definition/grid-change-fit-content-argument-001.html",
@@ -336624,6 +336865,12 @@
{}
]
],
+ "css/css-tables/caption-writing-mode-001.html": [
+ [
+ "/css/css-tables/caption-writing-mode-001.html",
+ {}
+ ]
+ ],
"css/css-tables/fixed-layout-1.html": [
[
"/css/css-tables/fixed-layout-1.html",
@@ -338550,6 +338797,12 @@
{}
]
],
+ "css/css-transitions/transitionevent-interface.html": [
+ [
+ "/css/css-transitions/transitionevent-interface.html",
+ {}
+ ]
+ ],
"css/css-transitions/transitions-animatable-properties-01.html": [
[
"/css/css-transitions/transitions-animatable-properties-01.html",
@@ -343940,6 +344193,12 @@
{}
]
],
+ "dom/events/shadow-relatedTarget.html": [
+ [
+ "/dom/events/shadow-relatedTarget.html",
+ {}
+ ]
+ ],
"dom/historical.html": [
[
"/dom/historical.html",
@@ -360890,6 +361149,18 @@
{}
]
],
+ "html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html",
+ {}
+ ]
+ ],
+ "html/semantics/document-metadata/the-link-element/link-style-error-quirks.html": [
+ [
+ "/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html",
+ {}
+ ]
+ ],
"html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html": [
[
"/html/semantics/document-metadata/the-meta-element/pragma-directives/attr-meta-http-equiv-refresh/allow-scripts-flag-changing-1.html",
@@ -363610,6 +363881,12 @@
{}
]
],
+ "html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html": [
+ [
+ "/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html",
+ {}
+ ]
+ ],
"html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html": [
[
"/html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html",
@@ -366668,6 +366945,12 @@
{}
]
],
+ "html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html": [
+ [
+ "/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html",
+ {}
+ ]
+ ],
"html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-fetch-error.sub.html": [
[
"/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-fetch-error.sub.html",
@@ -368995,7 +369278,9 @@
"html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html": [
[
"/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html",
- {}
+ {
+ "timeout": "long"
+ }
]
],
"html/syntax/parsing/the-end.html": [
@@ -371438,6 +371723,12 @@
{}
]
],
+ "media-capabilities/encodingInfo.html": [
+ [
+ "/media-capabilities/encodingInfo.html",
+ {}
+ ]
+ ],
"media-capabilities/idlharness.any.js": [
[
"/media-capabilities/idlharness.any.html",
@@ -374964,6 +375255,18 @@
{}
]
],
+ "navigation-timing/dom_interactive_image_document.html": [
+ [
+ "/navigation-timing/dom_interactive_image_document.html",
+ {}
+ ]
+ ],
+ "navigation-timing/dom_interactive_media_document.html": [
+ [
+ "/navigation-timing/dom_interactive_media_document.html",
+ {}
+ ]
+ ],
"navigation-timing/idlharness.window.js": [
[
"/navigation-timing/idlharness.window.html",
@@ -385114,6 +385417,12 @@
{}
]
],
+ "payment-method-id/payment-request-ctor-pmi-handling.https.html": [
+ [
+ "/payment-method-id/payment-request-ctor-pmi-handling.https.html",
+ {}
+ ]
+ ],
"payment-request/MerchantValidationEvent/complete-method.https.html": [
[
"/payment-request/MerchantValidationEvent/complete-method.https.html",
@@ -386004,45 +386313,123 @@
{}
]
],
- "referrer-policy/css-integration/external-import-stylesheet.html": [
+ "referrer-policy/css-integration/child-css/external-import-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/child-css/external-import-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/child-css/internal-import-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/child-css/internal-import-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/child-css/processing-instruction.html": [
+ [
+ "/referrer-policy/css-integration/child-css/processing-instruction.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/font-face/external-import-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/font-face/external-import-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/font-face/external-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/font-face/external-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/font-face/internal-import-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/font-face/internal-import-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/font-face/internal-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/font-face/internal-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/font-face/processing-instruction.html": [
+ [
+ "/referrer-policy/css-integration/font-face/processing-instruction.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/image/external-import-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/image/external-import-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/image/external-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/image/external-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/image/inline-style.html": [
[
- "/referrer-policy/css-integration/external-import-stylesheet.html",
+ "/referrer-policy/css-integration/image/inline-style.html",
{}
]
],
- "referrer-policy/css-integration/external-stylesheet.html": [
+ "referrer-policy/css-integration/image/internal-import-stylesheet.html": [
[
- "/referrer-policy/css-integration/external-stylesheet.html",
+ "/referrer-policy/css-integration/image/internal-import-stylesheet.html",
{}
]
],
- "referrer-policy/css-integration/inline-style.html": [
+ "referrer-policy/css-integration/image/internal-stylesheet.html": [
[
- "/referrer-policy/css-integration/inline-style.html",
+ "/referrer-policy/css-integration/image/internal-stylesheet.html",
{}
]
],
- "referrer-policy/css-integration/internal-import-stylesheet.html": [
+ "referrer-policy/css-integration/image/presentation-attribute.html": [
[
- "/referrer-policy/css-integration/internal-import-stylesheet.html",
+ "/referrer-policy/css-integration/image/presentation-attribute.html",
{}
]
],
- "referrer-policy/css-integration/internal-stylesheet.html": [
+ "referrer-policy/css-integration/image/processing-instruction.html": [
[
- "/referrer-policy/css-integration/internal-stylesheet.html",
+ "/referrer-policy/css-integration/image/processing-instruction.html",
{}
]
],
- "referrer-policy/css-integration/presentation-attribute.html": [
+ "referrer-policy/css-integration/svg/external-stylesheet.html": [
[
- "/referrer-policy/css-integration/presentation-attribute.html",
+ "/referrer-policy/css-integration/svg/external-stylesheet.html",
{}
]
],
- "referrer-policy/css-integration/processing-instruction.html": [
+ "referrer-policy/css-integration/svg/inline-style.html": [
[
- "/referrer-policy/css-integration/processing-instruction.html",
+ "/referrer-policy/css-integration/svg/inline-style.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/svg/internal-stylesheet.html": [
+ [
+ "/referrer-policy/css-integration/svg/internal-stylesheet.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/svg/presentation-attribute.html": [
+ [
+ "/referrer-policy/css-integration/svg/presentation-attribute.html",
+ {}
+ ]
+ ],
+ "referrer-policy/css-integration/svg/processing-instruction.html": [
+ [
+ "/referrer-policy/css-integration/svg/processing-instruction.html",
{}
]
],
@@ -400628,19 +401015,19 @@
{}
]
],
- "wasm/jsapi/global/value-set.any.js": [
+ "wasm/jsapi/global/value-get-set.any.js": [
[
- "/wasm/jsapi/global/value-set.any.html",
+ "/wasm/jsapi/global/value-get-set.any.html",
{}
],
[
- "/wasm/jsapi/global/value-set.any.js",
+ "/wasm/jsapi/global/value-get-set.any.js",
{
"jsshell": true
}
],
[
- "/wasm/jsapi/global/value-set.any.worker.html",
+ "/wasm/jsapi/global/value-get-set.any.worker.html",
{}
]
],
@@ -430848,82 +431235,6 @@
{}
]
],
- "webdriver/tests/actions/control_click.py": [
- [
- "/webdriver/tests/actions/control_click.py",
- {}
- ]
- ],
- "webdriver/tests/actions/key.py": [
- [
- "/webdriver/tests/actions/key.py",
- {}
- ]
- ],
- "webdriver/tests/actions/key_shortcuts.py": [
- [
- "/webdriver/tests/actions/key_shortcuts.py",
- {}
- ]
- ],
- "webdriver/tests/actions/modifier_click.py": [
- [
- "/webdriver/tests/actions/modifier_click.py",
- {}
- ]
- ],
- "webdriver/tests/actions/mouse.py": [
- [
- "/webdriver/tests/actions/mouse.py",
- {}
- ]
- ],
- "webdriver/tests/actions/mouse_dblclick.py": [
- [
- "/webdriver/tests/actions/mouse_dblclick.py",
- {}
- ]
- ],
- "webdriver/tests/actions/mouse_pause_dblclick.py": [
- [
- "/webdriver/tests/actions/mouse_pause_dblclick.py",
- {}
- ]
- ],
- "webdriver/tests/actions/none.py": [
- [
- "/webdriver/tests/actions/none.py",
- {}
- ]
- ],
- "webdriver/tests/actions/pointer_origin.py": [
- [
- "/webdriver/tests/actions/pointer_origin.py",
- {}
- ]
- ],
- "webdriver/tests/actions/sequence.py": [
- [
- "/webdriver/tests/actions/sequence.py",
- {
- "timeout": "long"
- }
- ]
- ],
- "webdriver/tests/actions/special_keys.py": [
- [
- "/webdriver/tests/actions/special_keys.py",
- {
- "timeout": "long"
- }
- ]
- ],
- "webdriver/tests/actions/validity.py": [
- [
- "/webdriver/tests/actions/validity.py",
- {}
- ]
- ],
"webdriver/tests/add_cookie/add.py": [
[
"/webdriver/tests/add_cookie/add.py",
@@ -431492,6 +431803,94 @@
{}
]
],
+ "webdriver/tests/perform_actions/key.py": [
+ [
+ "/webdriver/tests/perform_actions/key.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/key_events.py": [
+ [
+ "/webdriver/tests/perform_actions/key_events.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "webdriver/tests/perform_actions/key_modifiers.py": [
+ [
+ "/webdriver/tests/perform_actions/key_modifiers.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/key_shortcuts.py": [
+ [
+ "/webdriver/tests/perform_actions/key_shortcuts.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/key_special_keys.py": [
+ [
+ "/webdriver/tests/perform_actions/key_special_keys.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/none.py": [
+ [
+ "/webdriver/tests/perform_actions/none.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer_contextmenu.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer_contextmenu.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer_dblclick.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer_dblclick.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer_modifier_click.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer_modifier_click.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer_origin.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer_origin.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/pointer_pause_dblclick.py": [
+ [
+ "/webdriver/tests/perform_actions/pointer_pause_dblclick.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/perform_actions/sequence.py": [
+ [
+ "/webdriver/tests/perform_actions/sequence.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
+ "webdriver/tests/perform_actions/validity.py": [
+ [
+ "/webdriver/tests/perform_actions/validity.py",
+ {}
+ ]
+ ],
"webdriver/tests/refresh/refresh.py": [
[
"/webdriver/tests/refresh/refresh.py",
@@ -431506,6 +431905,20 @@
}
]
],
+ "webdriver/tests/release_actions/release.py": [
+ [
+ "/webdriver/tests/release_actions/release.py",
+ {}
+ ]
+ ],
+ "webdriver/tests/release_actions/sequence.py": [
+ [
+ "/webdriver/tests/release_actions/sequence.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/send_alert_text/send.py": [
[
"/webdriver/tests/send_alert_text/send.py",
@@ -461001,6 +461414,10 @@
"a7337acceb93238bb5105f335e5b25323d99619b",
"support"
],
+ "content-security-policy/generic/only-valid-whitespaces-are-allowed.html": [
+ "d7567a93a377b2ec3c360d2ef030618a4046c8aa",
+ "testharness"
+ ],
"content-security-policy/generic/pass-0_1.js": [
"3a08dd5621ff4150fc0c974398df81bfc033eaeb",
"support"
@@ -461021,6 +461438,18 @@
"63c99919623e396a41870273e35e3e8999a712f0",
"support"
],
+ "content-security-policy/generic/support/load_img_and_post_result_header.html": [
+ "c7a2e75dba37c85ae1710d92a2a8071ea229bf85",
+ "support"
+ ],
+ "content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers": [
+ "e9bf21bab413b87e0c936ad93d26629b3a6bf59b",
+ "support"
+ ],
+ "content-security-policy/generic/support/load_img_and_post_result_meta.sub.html": [
+ "ac0cf39dd038626d111d842f4e24ac5446154eed",
+ "support"
+ ],
"content-security-policy/generic/support/log-pass.html": [
"4334ea4c66b53bc02382189839feaf261fa504d4",
"support"
@@ -525642,7 +526071,7 @@
"testharness"
],
"css/css-animations/animationevent-interface.js": [
- "56d30a4a37770fa2a32698d5401246e882e1f6e0",
+ "e35b7fcb0f98656cdeff41d8d7f4a7620fa52eea",
"support"
],
"css/css-animations/animationevent-pseudoelement.html": [
@@ -525665,6 +526094,10 @@
"93d452ace07163b10af18245d6799d9823448e1e",
"testharness"
],
+ "css/css-animations/historical.html": [
+ "5b96a422f55f45cddabdf011acb83e5081ec1ef3",
+ "testharness"
+ ],
"css/css-animations/idlharness.html": [
"1d3ed2b9b806792c7efaeeee9ab264101dd222bc",
"testharness"
@@ -525962,7 +526395,7 @@
"support"
],
"css/css-backgrounds/background-clip-color-repaint.html": [
- "6052db526a3a4d0f35bf5c433f718b257049514d",
+ "4a5cee080096d1bec9c07655b988ab163e9e6131",
"reftest"
],
"css/css-backgrounds/background-clip-color.html": [
@@ -530817,6 +531250,10 @@
"1e4965e9daf380aec19cf43902c409ad6b457370",
"reftest"
],
+ "css/css-contain/contain-size-fieldset-001.html": [
+ "f92424716ce55fdfbc0ad9954ab2893d63b389b2",
+ "reftest"
+ ],
"css/css-contain/contain-size-flexbox-001.html": [
"31e82f5d24c4aa673291a2ce25c660cf10977e28",
"reftest"
@@ -531061,6 +531498,10 @@
"1cbaaccd1a0751c5dadf913e1fc31d130ff95259",
"support"
],
+ "css/css-contain/reference/contain-size-fieldset-001-ref.html": [
+ "85f5c73c2ece9a324511356d6f33798b3cfbe811",
+ "support"
+ ],
"css/css-contain/reference/contain-size-flexbox-001-ref.html": [
"85628b59c48f7931e7d3e5a498da60cc264dc363",
"support"
@@ -544701,6 +545142,38 @@
"634e5c7e1b5151d2c37e4622535f51e85c8cad89",
"testharness"
],
+ "css/css-grid/alignment/grid-alignment-style-changes-001.html": [
+ "25ce0619dbf6184219b0b430d6495c09c5c2c657",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-002.html": [
+ "c97be7ddb81bfc3331bf5a438e75bc365c03079c",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-003.html": [
+ "bca78d76569efb1b12cc3570cde394233db18345",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-004.html": [
+ "3064f42396f6da1e3c111a3979da839f43733711",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-005.html": [
+ "550eed73f50e6d4c7f4e600c15e7ae33f11a03e2",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-006.html": [
+ "1df78c051f7ddd0c0a38bea6913bdf7351ecf80b",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-007.html": [
+ "4d0231bf393249b6756c30973ce08f58bfd115f3",
+ "testharness"
+ ],
+ "css/css-grid/alignment/grid-alignment-style-changes-008.html": [
+ "026f035ba925433e99ed23ea7d64bfeb76121083",
+ "testharness"
+ ],
"css/css-grid/alignment/grid-column-axis-alignment-positioned-items-001.html": [
"32ea4e34820c2d3ccab5d8575f818e63fc0bd57f",
"testharness"
@@ -545453,6 +545926,10 @@
"3232913cb1328c0367f09ca8996b8c22e09cc2e0",
"testharness"
],
+ "css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html": [
+ "5ffacfdb2b45dbb5fe259a2255456a993313c615",
+ "testharness"
+ ],
"css/css-grid/alignment/self-baseline/grid-self-baseline-changes-grid-area-size-001.html": [
"a7d69063189d78e4a2d9bfe080df9e9731569ac8",
"reftest"
@@ -545506,7 +545983,7 @@
"support"
],
"css/css-grid/alignment/support/style-change.js": [
- "5619394da2bc9c5d5902db03e6dcf257e63c303f",
+ "766d140d2b239bcc0c11e92481c5ff302d12db5c",
"support"
],
"css/css-grid/grid-definition/fr-unit-with-percentage.html": [
@@ -549405,6 +549882,14 @@
"ab68c7a74317249187a3cfb419539f21f073d306",
"support"
],
+ "css/css-multicol/multicol-under-vertical-rl-scroll-ref.html": [
+ "1a7cfb6e2303ce8778fed9587e208a7df950ff6f",
+ "support"
+ ],
+ "css/css-multicol/multicol-under-vertical-rl-scroll.html": [
+ "f96a26ae77be3b8171335f07efefce4bc0bef937",
+ "reftest"
+ ],
"css/css-multicol/multicol-width-001-ref.xht": [
"dddb96880af819d730b83604a487c4938fda4933",
"support"
@@ -550794,7 +551279,7 @@
"testharness"
],
"css/css-properties-values-api/registered-properties-inheritance.html": [
- "8f9eafee19e5c2500811f05723902808a27760df",
+ "614a72a797bc91a76742efc990e07669bee87c11",
"testharness"
],
"css/css-properties-values-api/registered-property-computation.html": [
@@ -550834,7 +551319,7 @@
"testharness"
],
"css/css-properties-values-api/unit-cycles.html": [
- "d65348543c4145bbd693aac67372390bfd91fc11",
+ "c26e1cda1f6842655e7e0158d6a934e470f486ae",
"testharness"
],
"css/css-properties-values-api/url-resolution.html": [
@@ -550846,7 +551331,7 @@
"testharness"
],
"css/css-properties-values-api/var-reference-registered-properties.html": [
- "d8a831571252cdeb3e6c3c6e582a2b74376e905c",
+ "5de6d20f11b1aec41c7b54653ef482db6c7d8c93",
"testharness"
],
"css/css-pseudo/META.yml": [
@@ -555389,6 +555874,10 @@
"302e51ae239307a49c239bf0ad5ade17a5c9d940",
"testharness"
],
+ "css/css-tables/caption-writing-mode-001.html": [
+ "835a5116ae36bca9f92698b7766d0b65f1514f9f",
+ "testharness"
+ ],
"css/css-tables/fixed-layout-1.html": [
"3e0d013af1c6970a1180cf19db37e8e7b82cc0c0",
"testharness"
@@ -558633,6 +559122,14 @@
"59843ae54b64f6ce4f7e616d4be491c911ea84cf",
"support"
],
+ "css/css-text/tab-size/tab-min-rendered-width-1-ref.html": [
+ "7623adb59e65bed4787a9105ce54caa8fed63fa8",
+ "support"
+ ],
+ "css/css-text/tab-size/tab-min-rendered-width-1.html": [
+ "6b014260e3678e579110cf16cfed5413a02c3d01",
+ "reftest"
+ ],
"css/css-text/tab-size/tab-size-integer-001-ref.html": [
"db1d6b0ed5b9f16779841931ef5a999dbcd1ea50",
"support"
@@ -566353,6 +566850,10 @@
"abc2f38b956096a4e09826c2e812dd8c606c0911",
"testharness"
],
+ "css/css-transitions/transitionevent-interface.html": [
+ "cd47469ec742106ace7d904dc588d746ac514ba5",
+ "testharness"
+ ],
"css/css-transitions/transitions-animatable-properties-01.html": [
"534f81839ac875ff6b5c5c7b17784258d7a8932c",
"testharness"
@@ -591254,7 +591755,7 @@
"support"
],
"docs/_writing-tests/testharness-api.md": [
- "952c8365fb7028c00eeca7ee5949310ecce95913",
+ "9f93ea844d7395b5f2461b342805c7371cb90727",
"support"
],
"docs/_writing-tests/testharness.md": [
@@ -591585,6 +592086,10 @@
"241dda8b66f8c8fe128e736bcb073479aee634a9",
"support"
],
+ "dom/events/shadow-relatedTarget.html": [
+ "713555b7d8ab6117d12c70d08185335246e44e1a",
+ "testharness"
+ ],
"dom/historical.html": [
"921fa07b3f6de0f9a579b75b14d6509039765205",
"testharness"
@@ -595782,7 +596287,7 @@
"testharness"
],
"eventsource/eventsource-prototype.htm": [
- "38f63eb5f0053c737e4e9f89755b4906f9bcf8f6",
+ "24bf9954007d6aeb2087484bd805d0f26f89cbe2",
"testharness"
],
"eventsource/eventsource-reconnect.htm": [
@@ -597430,7 +597935,7 @@
"testharness"
],
"fetch/corb/script-html-via-cross-origin-blob-url.sub.html": [
- "8ce7987ff89d456fb166427f174c38f0fc327bcf",
+ "c8a90c79b3f7f5136dbad30dd3299fc57365b272",
"testharness"
],
"fetch/corb/script-js-mislabeled-as-html-nosniff.sub.html": [
@@ -598498,7 +599003,7 @@
"manual"
],
"fullscreen/api/document-exit-fullscreen-timing-manual.html": [
- "7a536363a213782bde010c93bc26677b62bb2f2a",
+ "6ccc365c711500024898c336d0cbe8679c2cf32c",
"manual"
],
"fullscreen/api/document-exit-fullscreen-twice-manual.html": [
@@ -598534,7 +599039,7 @@
"manual"
],
"fullscreen/api/element-ready-check-containing-iframe-manual.html": [
- "8ba2ab71b158603e1af466d69b91412626ff8722",
+ "0649549265682b7eb8c0f851603d816e89e1cf47",
"manual"
],
"fullscreen/api/element-ready-check-fullscreen-element-sibling-manual.html": [
@@ -598554,7 +599059,7 @@
"manual"
],
"fullscreen/api/element-ready-check-not-allowed-manual.html": [
- "1e18be5e677b3b27c553e961f71ae44d85225a8e",
+ "fa5a923b2b2641b8d3181c587560a554ab621b3e",
"manual"
],
"fullscreen/api/element-ready-check-not-in-document-manual.html": [
@@ -598566,7 +599071,7 @@
"testharness"
],
"fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html": [
- "dc2a99c1e83369ca72d3ea564e056cd21cba63ab",
+ "6d5bed19f3b12c0b83dfb29cb0df282d52980ef3",
"manual"
],
"fullscreen/api/element-request-fullscreen-and-move-manual.html": [
@@ -598622,7 +599127,7 @@
"manual"
],
"fullscreen/api/element-request-fullscreen-timing-manual.html": [
- "359b688b42722678182b7809baca65c64a59c824",
+ "1ebf7518c3c0712994dafdcd2bf02a467b4aae9e",
"manual"
],
"fullscreen/api/element-request-fullscreen-top-manual.html": [
@@ -598666,7 +599171,7 @@
"testharness"
],
"fullscreen/model/move-to-fullscreen-iframe-manual.html": [
- "69082cacc2b451556ad0675f9fb876dcf3136d92",
+ "59b2c4330f25bd3811cd088fcabd925022038947",
"manual"
],
"fullscreen/model/move-to-iframe-manual.html": [
@@ -598714,7 +599219,7 @@
"manual"
],
"fullscreen/rendering/ua-style-iframe-manual.html": [
- "bf93aa28c3f10e65cf975f5a14833eff7b9ee688",
+ "f2a227437a5455e530e46cb0ff06d1ec18fc9bab",
"manual"
],
"fullscreen/trusted-click.js": [
@@ -600114,11 +600619,11 @@
"testharness"
],
"html/browsers/history/the-history-interface/001.html": [
- "0e5632bbcdffdd6d7ab808a12bb65a8441234162",
+ "7273593547964e92b0e69fbeb018f3b5905dec00",
"testharness"
],
"html/browsers/history/the-history-interface/002.html": [
- "eb0c15aab896969b0d8f6561860bbf55c46301f3",
+ "c5bae3407c89989466b5ca1897a0c93f889d9988",
"testharness"
],
"html/browsers/history/the-history-interface/004.html": [
@@ -607697,6 +608202,14 @@
"59c5ca70d41cc969aed7ac6a531c1ca9a5f82f0f",
"reftest"
],
+ "html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html": [
+ "2f313f3395ff237c131fdf7646b07541734e5dad",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html": [
+ "5f131e6658ae1bc7f013974d6975122d5cba2c97",
+ "reftest"
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/META.yml": [
"f5b533c377160c77541187a301647e174069bd6d",
"support"
@@ -607905,6 +608418,14 @@
"edd2600d4a0749d281e7ed1b4da4aefbd7c686ba",
"testharness"
],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html": [
+ "8023c5255ff2db03f315246ecb7cfdea829f08cc",
+ "support"
+ ],
+ "html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html": [
+ "ba58d353a01f2b284e5c296455e6b54b6f705d0b",
+ "reftest"
+ ],
"html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-ref.html": [
"ee76e93b64e1da9ab5883c328d9fff1eb865acb1",
"support"
@@ -608418,13 +608939,25 @@
"testharness"
],
"html/semantics/document-metadata/the-link-element/link-style-error-01.html": [
- "7a86a86381d85426c20f0cf1c031e316226777c0",
+ "575324d761a15fb2a793d306306804091882e6ca",
+ "testharness"
+ ],
+ "html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html": [
+ "d3c520ba75f56c3e4a33e63716a476a2176ce7a9",
+ "testharness"
+ ],
+ "html/semantics/document-metadata/the-link-element/link-style-error-quirks.html": [
+ "ae2efa415ee51e4b2b54df2f3f90965746b43ed3",
"testharness"
],
"html/semantics/document-metadata/the-link-element/resources/bad.css": [
"4e1fe36165c52792e3a3816962c36e6090f04f67",
"support"
],
+ "html/semantics/document-metadata/the-link-element/resources/css.py": [
+ "eb981373a3e2b1694a295d58b4d5baf4c3c5a034",
+ "support"
+ ],
"html/semantics/document-metadata/the-link-element/resources/empty-href.css": [
"60f1eab97137f7dc51fc53c8e4f3e49f63342c38",
"support"
@@ -608441,6 +608974,10 @@
"fa95e11ba9ef9a5106663a6a0c00f21a1b9ac577",
"support"
],
+ "html/semantics/document-metadata/the-link-element/resources/link-style-error.js": [
+ "d1fa5ac2d6fcb4d94561c18b2d2e22a5a2afd6e3",
+ "support"
+ ],
"html/semantics/document-metadata/the-link-element/resources/stylesheet.css": [
"e1b2552ffea7300e3ffba041dd3e5d3ab26c2c33",
"support"
@@ -609794,7 +610331,7 @@
"testharness"
],
"html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html": [
- "6794126473087f6b3f37cbff4f6481a3bd3a027a",
+ "a9cd73435a3aa3921edc70b76bb8e9a84a21a000",
"testharness"
],
"html/semantics/embedded-content/media-elements/track/track-element/track-css-cue-pseudo-class.html": [
@@ -611025,6 +611562,10 @@
"d245bf0b96451b3419e0e69bda86fe4859c9cbfe",
"testharness"
],
+ "html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html": [
+ "57189a0b884d3a55e4bb2ba1a1d3aa83066c0eb3",
+ "testharness"
+ ],
"html/semantics/embedded-content/the-iframe-element/iframe-synchronously-discard.html": [
"c339525ebd177ac6249b4cf802b89881bfd99b1a",
"testharness"
@@ -612218,7 +612759,7 @@
"testharness"
],
"html/semantics/forms/the-form-element/form-autocomplete.html": [
- "5c1d05b301e78cea0970535883602844eb0dc801",
+ "618aa0a6c4793701fb1c16fe5924482c94a99e46",
"testharness"
],
"html/semantics/forms/the-form-element/form-checkvalidity.html": [
@@ -614054,7 +614595,7 @@
"testharness"
],
"html/semantics/scripting-1/the-script-element/module/credentials.sub.html": [
- "1293d7f6913453118f2adf4e3453be250053278c",
+ "cf23e67ae40c59c7707e90bba642fc4f18ff99ae",
"testharness"
],
"html/semantics/scripting-1/the-script-element/module/crossorigin-common.js": [
@@ -614137,6 +614678,10 @@
"6a01495c333d196313d2d26f1ec101e15d224699",
"testharness"
],
+ "html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html": [
+ "b939a3ef1639db8027519ac004cd3197e254c0b9",
+ "testharness"
+ ],
"html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-fetch-error.sub.html": [
"5cc600c5a3db0cdc96de0b957db654aa733a39e0",
"testharness"
@@ -614658,13 +615203,17 @@
"support"
],
"html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html": [
- "f086e702822a42d318396d2aeb348ffac0276a05",
+ "8a0506ccec63b1c7f04b3818e980d0faea45f5eb",
"support"
],
"html/semantics/scripting-1/the-script-element/module/resources/delayed-modulescript.py": [
"6ed16212d719203dc9c8b385ee044edff5accf55",
"support"
],
+ "html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html": [
+ "836ece62c5f601b91a9f255f4e6a646160fa7f48",
+ "support"
+ ],
"html/semantics/scripting-1/the-script-element/module/resources/fast-module.js": [
"3a76cf71f6c592ce15e2bd2bd158ef4945c9d96b",
"support"
@@ -616154,7 +616703,7 @@
"testharness"
],
"html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html": [
- "e1f9995117f7b9974576e7e4ffb3d01e15b2deaa",
+ "bec3364adffec6c3ea66fb3e3f5bcaa6d244a3da",
"testharness"
],
"html/syntax/parsing/test.js": [
@@ -618954,7 +619503,7 @@
"support"
],
"lint.whitelist": [
- "e39672d0c6eebcba441c089ce358cf5b2dcf79dd",
+ "46c2550e72884c3f060b0fc7355f44562d2803d4",
"support"
],
"longtask-timing/META.yml": [
@@ -619550,7 +620099,11 @@
"support"
],
"media-capabilities/decodingInfo.html": [
- "f3fca4184e4c3f56db700dae390a7416bc3a910a",
+ "982bc1746685871bfa424c88b6eab8d1d00478de",
+ "testharness"
+ ],
+ "media-capabilities/encodingInfo.html": [
+ "5c0e3189082eda87fe44a77262f3b4156783fa39",
"testharness"
],
"media-capabilities/idlharness.any.js": [
@@ -620326,7 +620879,7 @@
"testharness"
],
"mediacapture-streams/MediaStream-default-feature-policy.https.html": [
- "0b45ac6f594a695b28545ee3a99c0c6a7f8bbc12",
+ "21e3f5b9af8567cb015604bbcb021cc04216e4c2",
"testharness"
],
"mediacapture-streams/MediaStream-finished-add.https.html": [
@@ -623149,6 +623702,14 @@
"c09a6e03fd19f5a405b391c2c4671df6ff04edf1",
"support"
],
+ "navigation-timing/dom_interactive_image_document.html": [
+ "36742f0eff6d07c7c0694b066dfa017f0d1042be",
+ "testharness"
+ ],
+ "navigation-timing/dom_interactive_media_document.html": [
+ "e4e45725d83605b519ce74ea8ff4561dcd3d7595",
+ "testharness"
+ ],
"navigation-timing/idlharness.window.js": [
"8cc3546b3c27a9d93ee5621584d83d56a308513c",
"testharness"
@@ -630385,6 +630946,10 @@
"3d1bb8ddda2b999858fba14ec9420f127fb5dd13",
"support"
],
+ "payment-method-id/payment-request-ctor-pmi-handling.https.html": [
+ "5f888f0389f6c756ede8c3e481ece7bcf8b71ccf",
+ "testharness"
+ ],
"payment-request/META.yml": [
"f8460d403ffa42d9dfc1bae6e0c3e500f7742fc9",
"support"
@@ -630818,7 +631383,7 @@
"testharness"
],
"picture-in-picture/request-picture-in-picture.html": [
- "a0c3217603b8fdb3529d5aa456226cda4109722d",
+ "403d416c7d454fb0a6a2f8442cc23c53f83212e1",
"testharness"
],
"picture-in-picture/resources/picture-in-picture-helpers.js": [
@@ -631874,37 +632439,93 @@
"support"
],
"referrer-policy/css-integration/README.md": [
- "2edb24fb41edef2ace4b3ea5cf044e78240c1648",
+ "14da25c4d9702f0dcfb87aca255e0ea5df9063a6",
+ "support"
+ ],
+ "referrer-policy/css-integration/child-css/external-import-stylesheet.html": [
+ "a2d3e8ced0412b97422847d4d81c1403cf9ae52c",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/child-css/internal-import-stylesheet.html": [
+ "aebf5031484b799989d6b6a9dd72a5bc28575214",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/child-css/processing-instruction.html": [
+ "b6333e2c7b248c3f3b863bd06f1c99abd472f162",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/css-test-helper.js": [
+ "f5886dbbcbe358438dfbac45c5a0127e9e990ad4",
"support"
],
- "referrer-policy/css-integration/external-import-stylesheet.html": [
- "7b6ec6431bdbb0fc1bfd4d070b27cb5546abf163",
+ "referrer-policy/css-integration/font-face/external-import-stylesheet.html": [
+ "c344c56c5bf322f35e8d8c74427d80391e6637d3",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/font-face/external-stylesheet.html": [
+ "24e4bb99900a556cb0b44144a25c9f8249224eb7",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/font-face/internal-import-stylesheet.html": [
+ "54e2383423cab8679635d05c256c32e27a94c024",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/font-face/internal-stylesheet.html": [
+ "b3869bcebdcdadea3e50d7e8713c853d46ba4816",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/font-face/processing-instruction.html": [
+ "89ee918e24e14b8ea5d35a7dfaf09610eb89ee11",
"testharness"
],
- "referrer-policy/css-integration/external-stylesheet.html": [
+ "referrer-policy/css-integration/image/external-import-stylesheet.html": [
+ "0023af31b17ee883e6e9fe6cdd8f09b8eacf83d1",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/image/external-stylesheet.html": [
"d14769db4a1221bb6e220aa594c4a3b6bab97aa1",
"testharness"
],
- "referrer-policy/css-integration/inline-style.html": [
+ "referrer-policy/css-integration/image/inline-style.html": [
"42128ae062093c0e8feb5d90ab62a6cb281cf8e9",
"testharness"
],
- "referrer-policy/css-integration/internal-import-stylesheet.html": [
+ "referrer-policy/css-integration/image/internal-import-stylesheet.html": [
"90003547f4d4e2048cc33f7125d756d42507140d",
"testharness"
],
- "referrer-policy/css-integration/internal-stylesheet.html": [
+ "referrer-policy/css-integration/image/internal-stylesheet.html": [
"943108d66e4b273a6d3be30b2ea8a0edb0490c7b",
"testharness"
],
- "referrer-policy/css-integration/presentation-attribute.html": [
+ "referrer-policy/css-integration/image/presentation-attribute.html": [
"78401d3ec16866f1e51618bdb5cb028f5eea8490",
"testharness"
],
- "referrer-policy/css-integration/processing-instruction.html": [
+ "referrer-policy/css-integration/image/processing-instruction.html": [
"1ca18547dd54c4707250f400999a041f16f77ddf",
"testharness"
],
+ "referrer-policy/css-integration/svg/external-stylesheet.html": [
+ "148584a0b23bbd900d62e28e679d308aa1b204c9",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/svg/inline-style.html": [
+ "1f46acb4a3216e3e5ac81afee50b83ba72ef4852",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/svg/internal-stylesheet.html": [
+ "08be4effa475b232bc2be621dbf24f34ab0e39dd",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/svg/presentation-attribute.html": [
+ "edeceb1a785484111858b650da55a6ec965f5b40",
+ "testharness"
+ ],
+ "referrer-policy/css-integration/svg/processing-instruction.html": [
+ "ba0e6673a3871495c226baf8d3c3daf8ae9e138d",
+ "testharness"
+ ],
"referrer-policy/generic/common.js": [
"c98056f680b49b7d765064e9c6d5403ed0cfd21b",
"support"
@@ -631973,6 +632594,10 @@
"b2d6c4dfabeafcf1d22a94141d52d04b669f5721",
"support"
],
+ "referrer-policy/generic/subresource/font.py": [
+ "50a5bd2f3996133d4b5904166dc5672e5ae36031",
+ "support"
+ ],
"referrer-policy/generic/subresource/image.py": [
"7bc9c657e6b35528d63b6f2d72d73391dedfdf5b",
"support"
@@ -631982,13 +632607,17 @@
"support"
],
"referrer-policy/generic/subresource/stylesheet.py": [
- "328db29b957c4eb355a7907576919cb659d84bf0",
+ "54378216774e49ba564e393b4d1f879ae2d14763",
"support"
],
"referrer-policy/generic/subresource/subresource.py": [
"9ba839a133d96d7373a707aa9c71e01b1569297e",
"support"
],
+ "referrer-policy/generic/subresource/svg.py": [
+ "8618875c79f062205c57bac20a322b207914feea",
+ "support"
+ ],
"referrer-policy/generic/subresource/worker.py": [
"895bc0d84d12a99c146ba02776138248318b9c1d",
"support"
@@ -632005,6 +632634,14 @@
"141711c1483fd13e87e95f151fe6f3191704d7c7",
"support"
],
+ "referrer-policy/generic/template/font.css.template": [
+ "9b19df3cf1f54556f3c2409495d8b6abdd10d2fc",
+ "support"
+ ],
+ "referrer-policy/generic/template/image.css.template": [
+ "0eebd0a45264aa00b5072a8b489a84a85b778a54",
+ "support"
+ ],
"referrer-policy/generic/template/script.js.template": [
"e2edf21819dff6afc8a4f5816a0be58f987341ff",
"support"
@@ -632013,8 +632650,12 @@
"e4cbd03425968819d773460335404584d9d375fc",
"support"
],
- "referrer-policy/generic/template/stylesheet.css.template": [
- "0eebd0a45264aa00b5072a8b489a84a85b778a54",
+ "referrer-policy/generic/template/svg.css.template": [
+ "ffaefed4aa42aa62ca9d3dd9ff5bf989e75cbe01",
+ "support"
+ ],
+ "referrer-policy/generic/template/svg.embedded.template": [
+ "5986c4800a7add03db721f2bf116fe405e5d56cf",
"support"
],
"referrer-policy/generic/template/test.debug.html.template": [
@@ -640046,7 +640687,7 @@
"testharness"
],
"resource-timing/resources/TAOResponse.py": [
- "060f9b0c9a7dcd12473a10561de9c80a63694328",
+ "fefc75b7b7fc68872b36f56bcb0fa59dd41d2918",
"support"
],
"resource-timing/resources/all_resource_types.htm": [
@@ -640374,7 +641015,7 @@
"support"
],
"resources/test/conftest.py": [
- "5fca1d24c419cc5570eed657532c1ae3d3ddaada",
+ "dde9e9dc0a76ab2a34bf45913702ab148b31c2b6",
"support"
],
"resources/test/harness.html": [
@@ -640430,7 +641071,7 @@
"support"
],
"resources/test/tests/functional/api-tests-1.html": [
- "a9d92b12f81fd2ec7e70ded78f4697cfba6fc12e",
+ "c65d026edbaddeee595bc610ce7c955d0bf4529d",
"support"
],
"resources/test/tests/functional/api-tests-2.html": [
@@ -640497,6 +641138,10 @@
"cd2c26c278ec36a07f7d0da051d6cb44bf33c5f0",
"support"
],
+ "resources/test/tests/functional/log-insertion.html": [
+ "3f28266d576d31b41861446a03392441ac4f726d",
+ "support"
+ ],
"resources/test/tests/functional/order.html": [
"ec9978d898082193a11b646bc23e96f029f5ebe6",
"support"
@@ -640638,7 +641283,7 @@
"support"
],
"resources/test/tox.ini": [
- "d3a30f870a1572d4423ae99f64c67d63afa345da",
+ "7a9e4fa5228931057e9a1b0fc04f7c32ff6f9135",
"support"
],
"resources/test/variants.js": [
@@ -640646,7 +641291,7 @@
"support"
],
"resources/test/wptserver.py": [
- "fa32c33b9d78d6d5a3af1424b845444b7afeeadc",
+ "d47e325fbef64a425ba91f21a49a6d27e03a7e3b",
"support"
],
"resources/testdriver-vendor.js": [
@@ -640670,7 +641315,7 @@
"support"
],
"resources/testharness.js": [
- "352e8b76266b7f5ce3e17278721b55a0fe80a505",
+ "0a92cf10a3d57f8a38921f316f78f2fccc029fb0",
"support"
],
"resources/testharness.js.headers": [
@@ -643482,7 +644127,7 @@
"testharness"
],
"service-workers/service-worker/navigation-redirect.https.html": [
- "0490f2b4058ce808115442b09859fe7a350b2303",
+ "b6281b9e6c30540aae97c31454e4a2a5ac2c62b9",
"testharness"
],
"service-workers/service-worker/navigation-timing.https.html": [
@@ -644282,15 +644927,15 @@
"support"
],
"service-workers/service-worker/resources/navigation-redirect-out-scope.py": [
- "907cefa3b1afa96a55d54935ad8357b232118f9b",
+ "16850723f968fd3fac51a33c6e983c4f013a8823",
"support"
],
"service-workers/service-worker/resources/navigation-redirect-scope1.py": [
- "907cefa3b1afa96a55d54935ad8357b232118f9b",
+ "16850723f968fd3fac51a33c6e983c4f013a8823",
"support"
],
"service-workers/service-worker/resources/navigation-redirect-scope2.py": [
- "907cefa3b1afa96a55d54935ad8357b232118f9b",
+ "16850723f968fd3fac51a33c6e983c4f013a8823",
"support"
],
"service-workers/service-worker/resources/navigation-redirect-to-http-iframe.html": [
@@ -647398,7 +648043,7 @@
"manual"
],
"svg/import/animate-elem-83-t-manual.svg": [
- "2de478b531530f054594215ea812527a5ee5cdb0",
+ "46b9bedc41b6b4e492b22534a6dfa6342d9031d9",
"manual"
],
"svg/import/animate-elem-84-t-manual.svg": [
@@ -650342,7 +650987,7 @@
"support"
],
"tools/ci/check_stability.py": [
- "2b32eb50c0f62448fed0417d1fe0f7882bf64f14",
+ "a0633110860a729f632e7035743cf57d14260b4c",
"support"
],
"tools/ci/ci_built_diff.sh": [
@@ -650406,7 +651051,7 @@
"support"
],
"tools/ci/taskcluster-run.py": [
- "45416501e0393405b53c00360ef3c3081a9df867",
+ "5a720baa2e9bba12c53a8db898273d7a7a6be4fa",
"support"
],
"tools/ci/tcdownload.py": [
@@ -650686,7 +651331,7 @@
"support"
],
"tools/manifest/vcs.py": [
- "42e9863712f41d5cfdf9279513931b1cbe47f98b",
+ "675eb01714fd82081b2192c74892eb1ccb819285",
"support"
],
"tools/pytest.ini": [
@@ -655126,7 +655771,7 @@
"support"
],
"tools/wpt/browser.py": [
- "7b943c2e73ccbb57f55304a167904efe089b4713",
+ "052ec66a091cf6dde0573006490f19a9cc45afbe",
"support"
],
"tools/wpt/commands.json": [
@@ -655150,7 +655795,7 @@
"support"
],
"tools/wpt/run.py": [
- "7e8827b10698d30fb47f1625ccbb5f7a344daafe",
+ "d08b0f9380712d618ae96593634c84458fc25621",
"support"
],
"tools/wpt/testfiles.py": [
@@ -655166,7 +655811,7 @@
"support"
],
"tools/wpt/tests/test_wpt.py": [
- "d0cb2b85c99e86e9bb039d29c0074a3df17c0afd",
+ "8387dc9613e518e4fefd1181423c8c0ed4c5e0ec",
"support"
],
"tools/wpt/tox.ini": [
@@ -655242,35 +655887,35 @@
"support"
],
"tools/wptrunner/requirements_chrome.txt": [
- "22a07532657dadb79c404fcb61a26e1a127b8cc2",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_chrome_android.txt": [
- "22a07532657dadb79c404fcb61a26e1a127b8cc2",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_edge.txt": [
- "22a07532657dadb79c404fcb61a26e1a127b8cc2",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_firefox.txt": [
- "f1e6a8585caa63b5bd4b9b2594f7170fa49f04ed",
+ "bfe0d4bc347e907a48a256caa48e8e343115d388",
"support"
],
"tools/wptrunner/requirements_ie.txt": [
- "22a07532657dadb79c404fcb61a26e1a127b8cc2",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_opera.txt": [
- "22a07532657dadb79c404fcb61a26e1a127b8cc2",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_safari.txt": [
- "5a1d26b8b9bccd5cbbe637c7d115808b4fd85f49",
+ "3f86182b7d0897fc9ec97dd831edd399ebce70fd",
"support"
],
"tools/wptrunner/requirements_sauce.txt": [
- "77a74222433a693c8458f4a05857c7ed6db85601",
+ "07c525a67fd6de50b8639627a750bbfd1a106b9d",
"support"
],
"tools/wptrunner/requirements_servo.txt": [
@@ -655414,7 +656059,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome.py": [
- "8b0ba4585a943598b4c908f2e2da56b0b61505a6",
+ "d41df8dec0ed004b517df5cc245c44e3d8188fd2",
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome_android.py": [
@@ -655422,7 +656067,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome_webdriver.py": [
- "a63460f4544af67ccef3800ddfb64bc654868832",
+ "2ee8ec41ed668a3ac6130908e0c1dce1fbca4a90",
"support"
],
"tools/wptrunner/wptrunner/browsers/edge.py": [
@@ -655438,7 +656083,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/firefox.py": [
- "9f7ebfa2ca544616e2feaeb53c8af73220d7271a",
+ "b370b5d7a5e3308fabe3e21ec5145df57074eca5",
"support"
],
"tools/wptrunner/wptrunner/browsers/ie.py": [
@@ -655614,7 +656259,7 @@
"support"
],
"tools/wptrunner/wptrunner/stability.py": [
- "e684bf68076752d50b3271c1d4c74ef45aad4242",
+ "db388bbca0a2beacd11af1083cdf0cba76e5e9d8",
"support"
],
"tools/wptrunner/wptrunner/testdriver-extra.js": [
@@ -655646,7 +656291,7 @@
"support"
],
"tools/wptrunner/wptrunner/testrunner.py": [
- "7e386b881d4c83a93d2543b7e5b9afd01623a5bc",
+ "353e2ada1eb7cc27e0b70590743a8a3bb5bcc2b8",
"support"
],
"tools/wptrunner/wptrunner/tests/__init__.py": [
@@ -655678,7 +656323,7 @@
"support"
],
"tools/wptrunner/wptrunner/tests/test_stability.py": [
- "5a051b6c8998682e69d9c74bd4e5458986731b1f",
+ "c3c89f2f192e9fbbd1fc9046837ba1bc854401e5",
"support"
],
"tools/wptrunner/wptrunner/tests/test_testloader.py": [
@@ -655730,7 +656375,7 @@
"support"
],
"tools/wptrunner/wptrunner/wptcommandline.py": [
- "d25e561ad195ef3de91a42871820ad372269f016",
+ "467903f277347511f23e66cfe0ecb1defa4d351a",
"support"
],
"tools/wptrunner/wptrunner/wptlogging.py": [
@@ -655790,7 +656435,7 @@
"support"
],
"tools/wptrunner/wptrunner/wptrunner.py": [
- "a6a29724ad71794b8e1492d1c1ba792dfdfcacd4",
+ "6bd1db9927cb738202ace43541c25a44923afe8c",
"support"
],
"tools/wptrunner/wptrunner/wpttest.py": [
@@ -655878,7 +656523,7 @@
"support"
],
"tools/wptserve/tests/functional/base.py": [
- "e49c8287c5985aa5ebbed04ef3070bc785831733",
+ "741ab0bcb745753f72f2e26e37258f877caae513",
"support"
],
"tools/wptserve/tests/functional/docroot/document.txt": [
@@ -655998,7 +656643,7 @@
"support"
],
"tools/wptserve/tests/functional/test_handlers.py": [
- "15c7cb7e803d771bb3814de2b0e85ac606f2759f",
+ "759a096b79957079429ae387186d6e7891651ecf",
"support"
],
"tools/wptserve/tests/functional/test_input_file.py": [
@@ -656006,11 +656651,11 @@
"support"
],
"tools/wptserve/tests/functional/test_pipes.py": [
- "83b2c621641ca17b670eb5a8c08b38f8d37cc2a7",
+ "7739af5e26e17c7b7930a612816151772f3f5cc0",
"support"
],
"tools/wptserve/tests/functional/test_request.py": [
- "97d75eb71289adf643ab073ddc740f1f24cffc76",
+ "983539260a5215cab779e76b256f678894f654f3",
"support"
],
"tools/wptserve/tests/functional/test_response.py": [
@@ -656054,7 +656699,7 @@
"support"
],
"tools/wptserve/wptserve/pipes.py": [
- "ad96f591a3a8c8b7e8d13a4ad95a1aae500f66da",
+ "33a43e1f06b9835a2acf9be78b38a765cc9fdb60",
"support"
],
"tools/wptserve/wptserve/ranges.py": [
@@ -656062,11 +656707,11 @@
"support"
],
"tools/wptserve/wptserve/request.py": [
- "cb575ccdba4514a456c0cbf73904bb63c12fd7ff",
+ "233ff151c28e482f1087a853e385ab2f9c819276",
"support"
],
"tools/wptserve/wptserve/response.py": [
- "44299cc994ef43ebe72053e1444f5af7cd7f9598",
+ "483265bf084666069c21dd91310a005d2162268b",
"support"
],
"tools/wptserve/wptserve/router.py": [
@@ -658302,7 +658947,7 @@
"support"
],
"wasm/jsapi/constructor/compile.any.js": [
- "0139a18fda3f928dc0eed0bef86098dcbabf5979",
+ "bd23a8666e76f30d212524bc30ffd00c0a546e70",
"testharness"
],
"wasm/jsapi/constructor/instantiate-bad-imports.any.js": [
@@ -658314,23 +658959,23 @@
"testharness"
],
"wasm/jsapi/constructor/validate.any.js": [
- "70bd9f7022ad616c2d5e0be636f6935923e19173",
+ "c8613cbd9b3a467a919d87d3244c4f508dce6317",
"testharness"
],
"wasm/jsapi/global/constructor.any.js": [
- "7a45cc4191c55684cde187fc73fb9741d6f5c2c5",
+ "237f99c8b298183a557c10778c70e1d359b9d6b6",
"testharness"
],
"wasm/jsapi/global/toString.any.js": [
"ca025576c2b49604f053c83002f3a9cc8ef41a7b",
"testharness"
],
- "wasm/jsapi/global/value-set.any.js": [
- "b4e6770f10ed9e3ad55b9ae18ee96deda3ff171e",
+ "wasm/jsapi/global/value-get-set.any.js": [
+ "6de62d5f58362bab593ae7eb453fa14c1424cf2c",
"testharness"
],
"wasm/jsapi/global/valueOf.any.js": [
- "176c5a784698399351eedeaac0ec305aa8ab7b81",
+ "d4a84b254f76ea50284619967ab6dc98c99bfea2",
"testharness"
],
"wasm/jsapi/instance/constructor-bad-imports.any.js": [
@@ -658342,7 +658987,7 @@
"testharness"
],
"wasm/jsapi/instance/exports.any.js": [
- "31423918720543da2ba25e392267bf541b756242",
+ "cad468660e099b33f0a03b83a09df0498d67a7e0",
"testharness"
],
"wasm/jsapi/instance/toString.any.js": [
@@ -658350,7 +658995,7 @@
"testharness"
],
"wasm/jsapi/instanceTestFactory.js": [
- "1663ffb34699b7b9ebed6bb6aced99b84da0b4d4",
+ "24f849e6f943d9008343909a00b2f2b0d1ea0c3d",
"support"
],
"wasm/jsapi/interface.any.js": [
@@ -658358,15 +659003,15 @@
"testharness"
],
"wasm/jsapi/memory/buffer.any.js": [
- "b04460b6c5e56cf1fe990e3107aa9efcb4964ed5",
+ "4788ffcf84ff8d88adbafbe416dd7d5b80ec89d1",
"testharness"
],
"wasm/jsapi/memory/constructor.any.js": [
- "5caf7cc8bb98eb4f47766011d31e7bde5c126edd",
+ "a584a23ecf0a582b21b913a780accee38e277927",
"testharness"
],
"wasm/jsapi/memory/grow.any.js": [
- "95300399f192b7eab70dd8f07c43f4db37eebe01",
+ "1ccfb946756fef71b89672dfc86830c620a9e981",
"testharness"
],
"wasm/jsapi/memory/toString.any.js": [
@@ -658374,19 +659019,19 @@
"testharness"
],
"wasm/jsapi/module/constructor.any.js": [
- "32f183fac8738d30cc8a432768da315949320257",
+ "a467c1a17bb62ac52d323e1976cd067d92a9410d",
"testharness"
],
"wasm/jsapi/module/customSections.any.js": [
- "58ac63b61c93a015bfa9d5daab39f8d5b48548da",
+ "04c5abed52435714a18467c419dce17dfcf4073d",
"testharness"
],
"wasm/jsapi/module/exports.any.js": [
- "e63a885a4c34add0f6787d3642de83d9766568d1",
+ "9d95b652233b3d7687d4fe14371144519719e97b",
"testharness"
],
"wasm/jsapi/module/imports.any.js": [
- "640da591d21d8924d261fdc58b8e7cc762187a11",
+ "b3bb8598b080c376f4de1294780e6072eac2b354",
"testharness"
],
"wasm/jsapi/module/toString.any.js": [
@@ -658398,19 +659043,19 @@
"support"
],
"wasm/jsapi/table/constructor.any.js": [
- "e924bdb2ba42c67bcc6d4a949c2eeb50eac63e31",
+ "99eee19fecd49e432c7f6774c0968218e6d931a3",
"testharness"
],
"wasm/jsapi/table/get-set.any.js": [
- "66c41340c2096602c81c1ef3ae8acbfb9f75d98f",
+ "f8a0194364fde1b25eeb998d1837349c3a8bafc2",
"testharness"
],
"wasm/jsapi/table/grow.any.js": [
- "d3efb511e4b1db1efa089322c0a3079705dfbdbd",
+ "4978e3ca23d0261aaccf4aad97dd348da22a54d0",
"testharness"
],
"wasm/jsapi/table/length.any.js": [
- "a6a9661dbaddc800cb99b7b8e2b804cb0c8e3c62",
+ "b1bfa6cfd1f44fbdbf18769b3f3e8129310c7e0e",
"testharness"
],
"wasm/jsapi/table/toString.any.js": [
@@ -660185,82 +660830,6 @@
"a111f103bf142b4041f2a8d1c6017de79b54560e",
"wdspec"
],
- "webdriver/tests/actions/__init__.py": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
- "support"
- ],
- "webdriver/tests/actions/conftest.py": [
- "55cecd117828e525ac5712176f6f31787b301226",
- "support"
- ],
- "webdriver/tests/actions/control_click.py": [
- "2ec819b772fcfa4d0a37395aa64fb89ad7686bda",
- "wdspec"
- ],
- "webdriver/tests/actions/key.py": [
- "50c4ed9132b10cf63ad515bbfcbd30970b2c1974",
- "wdspec"
- ],
- "webdriver/tests/actions/key_shortcuts.py": [
- "ec062f752244d3f3fe1c0c83b22f48d972ba5984",
- "wdspec"
- ],
- "webdriver/tests/actions/modifier_click.py": [
- "fbfd837710b1c04c1dc606edb63b62a574eb0d9b",
- "wdspec"
- ],
- "webdriver/tests/actions/mouse.py": [
- "ca8bffceb71ff9621ae3359024c8d55ff17f7478",
- "wdspec"
- ],
- "webdriver/tests/actions/mouse_dblclick.py": [
- "fc53a51ab7691e817139e0a5a8477c9a96dda842",
- "wdspec"
- ],
- "webdriver/tests/actions/mouse_pause_dblclick.py": [
- "ad179673176b9d8ae90837c7cf09d33c75780a75",
- "wdspec"
- ],
- "webdriver/tests/actions/none.py": [
- "07944a68ffeedfdbd5adac44244f6435b5c5c6cb",
- "wdspec"
- ],
- "webdriver/tests/actions/pointer_origin.py": [
- "cad59f0a13b1f584ea45226f061be0038b9de220",
- "wdspec"
- ],
- "webdriver/tests/actions/sequence.py": [
- "b62d00c3e9b82d6200b3f6a0cd99d8a208281601",
- "wdspec"
- ],
- "webdriver/tests/actions/special_keys.py": [
- "416cbdcf20fc9e964aefd9683098d90289f3705c",
- "wdspec"
- ],
- "webdriver/tests/actions/support/__init__.py": [
- "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
- "support"
- ],
- "webdriver/tests/actions/support/keys.py": [
- "5995f78c71016d35cdf6cbd3317c5579e24f182d",
- "support"
- ],
- "webdriver/tests/actions/support/mouse.py": [
- "b3672eb213af68a9e4d9f931ca6499723a1a5019",
- "support"
- ],
- "webdriver/tests/actions/support/refine.py": [
- "3a6d63e04ce941d26ab3898cb2fc2a730d46c1ce",
- "support"
- ],
- "webdriver/tests/actions/support/test_actions_wdspec.html": [
- "6f844cd255a075d31caf1c19957af3d6ac833778",
- "support"
- ],
- "webdriver/tests/actions/validity.py": [
- "ce8a0d60f7df192e21c6abbad1871bb0ac8f5f78",
- "wdspec"
- ],
"webdriver/tests/add_cookie/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -660805,6 +661374,90 @@
"0deb1b46488f9b6e79e98931fca54e6b5f693c2a",
"wdspec"
],
+ "webdriver/tests/perform_actions/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/conftest.py": [
+ "dffae0b98cd67c664883f4e4efd608415c82b179",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/key.py": [
+ "2b3414c5ebfd62955860de540b4614471efbe8ad",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/key_events.py": [
+ "462688a55e527ffd5d075e4bd981489e5e029f8c",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/key_modifiers.py": [
+ "55dc9280c6267172a96a4f3c02f2503aa0c22500",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/key_shortcuts.py": [
+ "31b533ac8504108037ecccb76de2d089c1ad2a58",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/key_special_keys.py": [
+ "003bba4294105eb2757bfbe9e4f808b4ea13047c",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/none.py": [
+ "07944a68ffeedfdbd5adac44244f6435b5c5c6cb",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer.py": [
+ "9a68f322d70b585ad32e3814bb424fa5d817cc74",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer_contextmenu.py": [
+ "c64c51252a5a4a5be3464fe92e0ced0a81a486a1",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer_dblclick.py": [
+ "8c89cef5f380d769705be704698232c7f9c928ec",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer_modifier_click.py": [
+ "ba81f6d090b248c512cf896bc8e6059f252db8c8",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer_origin.py": [
+ "3ebf14c348c798fb77bbd0f052207f0470a94b60",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/pointer_pause_dblclick.py": [
+ "85679f3614a8fe010cba7dcd698ce5e82bc26660",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/sequence.py": [
+ "3536abeb12bcf667e4b6eab2cb723baa10c9ffa7",
+ "wdspec"
+ ],
+ "webdriver/tests/perform_actions/support/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/support/keys.py": [
+ "5995f78c71016d35cdf6cbd3317c5579e24f182d",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/support/mouse.py": [
+ "b3672eb213af68a9e4d9f931ca6499723a1a5019",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/support/refine.py": [
+ "3a6d63e04ce941d26ab3898cb2fc2a730d46c1ce",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/support/test_actions_wdspec.html": [
+ "6f844cd255a075d31caf1c19957af3d6ac833778",
+ "support"
+ ],
+ "webdriver/tests/perform_actions/validity.py": [
+ "ce8a0d60f7df192e21c6abbad1871bb0ac8f5f78",
+ "wdspec"
+ ],
"webdriver/tests/refresh/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -660817,6 +661470,34 @@
"b8ef418e115fcdafa861dcb8f61b01116e9e81f6",
"wdspec"
],
+ "webdriver/tests/release_actions/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/release_actions/conftest.py": [
+ "df86db63067d158922281678c2ed8847a8b64afe",
+ "support"
+ ],
+ "webdriver/tests/release_actions/release.py": [
+ "84719043d1c5095c0831136067e38a2f96f2ca1d",
+ "wdspec"
+ ],
+ "webdriver/tests/release_actions/sequence.py": [
+ "2d816f8094b3975523904c9e197390dfc058dd06",
+ "wdspec"
+ ],
+ "webdriver/tests/release_actions/support/__init__.py": [
+ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
+ "support"
+ ],
+ "webdriver/tests/release_actions/support/refine.py": [
+ "3a6d63e04ce941d26ab3898cb2fc2a730d46c1ce",
+ "support"
+ ],
+ "webdriver/tests/release_actions/support/test_actions_wdspec.html": [
+ "6f844cd255a075d31caf1c19957af3d6ac833778",
+ "support"
+ ],
"webdriver/tests/send_alert_text/__init__.py": [
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
"support"
@@ -661866,7 +662547,7 @@
"support"
],
"webrtc/getstats.html": [
- "9775f2090f2203473d0a75a2edeff8e3b785ddc1",
+ "937f54b74ec8266f890d60a4c67e75c3d6714826",
"testharness"
],
"webrtc/historical.html": [
@@ -661902,7 +662583,7 @@
"testharness"
],
"webrtc/tools/.eslintrc.js": [
- "9368cf4593eaa76075f212af592ece829422dce9",
+ "1778f8505e04cf4ba9eb4154c5396e0fc60186f6",
"support"
],
"webrtc/tools/README.md": [
@@ -668774,7 +669455,7 @@
"support"
],
"xhr/resources/responseXML-unavailable-in-worker.js": [
- "2f3fdf25c3382fd2f34c8235c69f3f0f39f71635",
+ "06da02a71f5471e16d71268ad8ec7fa576bd0546",
"support"
],
"xhr/resources/send-after-setting-document-domain-window-1.htm": [
diff --git a/tests/wpt/metadata/css/css-animations/animationevent-interface.html.ini b/tests/wpt/metadata/css/css-animations/animationevent-interface.html.ini
index 68e78563596..a4d160df59e 100644
--- a/tests/wpt/metadata/css/css-animations/animationevent-interface.html.ini
+++ b/tests/wpt/metadata/css/css-animations/animationevent-interface.html.ini
@@ -50,3 +50,75 @@
[animationName has default value of empty string]
expected: FAIL
+ [elapsedTime set to -0.5]
+ expected: FAIL
+
+ [elapsedTime cannot be set to -Infinity]
+ expected: FAIL
+
+ [elapsedTime cannot be set to Infinity]
+ expected: FAIL
+
+ [animationName set to [\]]
+ expected: FAIL
+
+ [elapsedTime set to null]
+ expected: FAIL
+
+ [elapsedTime set to an object with a valueOf function]
+ expected: FAIL
+
+ [animationName set to an object with a valueOf function]
+ expected: FAIL
+
+ [elapsedTime cannot be set to NaN]
+ expected: FAIL
+
+ [elapsedTime set to true]
+ expected: FAIL
+
+ [elapsedTime set to '']
+ expected: FAIL
+
+ [elapsedTime set to [0.5\]]
+ expected: FAIL
+
+ [elapsedTime set to undefined]
+ expected: FAIL
+
+ [animationName set to true]
+ expected: FAIL
+
+ [elapsedTime set to false]
+ expected: FAIL
+
+ [elapsedTime set to [\]]
+ expected: FAIL
+
+ [elapsedTime cannot be set to [0.5, 1.0\]]
+ expected: FAIL
+
+ [animationName set to null]
+ expected: FAIL
+
+ [animationName set to an object]
+ expected: FAIL
+
+ [elapsedTime cannot be set to 'sample']
+ expected: FAIL
+
+ [animationName set to undefined]
+ expected: FAIL
+
+ [animationName set to [1, 2, 3\]]
+ expected: FAIL
+
+ [animationName set to false]
+ expected: FAIL
+
+ [animationName set to a number]
+ expected: FAIL
+
+ [elapsedTime cannot be set to an object]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-text/i18n/ja/css-text-line-break-ja-hyphens-strict.html.ini b/tests/wpt/metadata/css/css-text/i18n/ja/css-text-line-break-ja-hyphens-strict.html.ini
index 973c4163895..d769457c57c 100644
--- a/tests/wpt/metadata/css/css-text/i18n/ja/css-text-line-break-ja-hyphens-strict.html.ini
+++ b/tests/wpt/metadata/css/css-text/i18n/ja/css-text-line-break-ja-hyphens-strict.html.ini
@@ -1,13 +1,4 @@
[css-text-line-break-ja-hyphens-strict.html]
- [2010 HYPHEN may NOT appear at line start if ja and strict]
- expected: FAIL
-
- [2013 EN DASH may NOT appear at line start if ja and strict]
- expected: FAIL
-
- [30A0 KATAKANA-HIRAGANA DOUBLE HYPHEN may NOT appear at line start if ja and strict]
- expected: FAIL
-
[301C WAVE DASH may NOT appear at line start if ja and strict]
expected:
if os == "linux": FAIL
diff --git a/tests/wpt/metadata/css/css-text/tab-size/tab-min-rendered-width-1.html.ini b/tests/wpt/metadata/css/css-text/tab-size/tab-min-rendered-width-1.html.ini
new file mode 100644
index 00000000000..bcd481f82f6
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/tab-size/tab-min-rendered-width-1.html.ini
@@ -0,0 +1,2 @@
+[tab-min-rendered-width-1.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
index d53af6b3960..a2e15ddcf05 100644
--- a/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/properties-value-inherit-002.html.ini
@@ -1,6 +1,7 @@
[properties-value-inherit-002.html]
+ expected: TIMEOUT
[outline-width length(px) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-left-width length(em) / values]
expected: FAIL
@@ -24,13 +25,13 @@
expected: FAIL
[opacity number[0,1\](zero-to-one) / values]
- expected: FAIL
+ expected: TIMEOUT
[line-height number(integer) / values]
expected: FAIL
[outline-offset length(px) / values]
- expected: FAIL
+ expected: TIMEOUT
[font-size length(pt) / values]
expected: FAIL
@@ -39,7 +40,7 @@
expected: FAIL
[vertical-align length(in) / values]
- expected: FAIL
+ expected: TIMEOUT
[max-height percentage(%) / values]
expected: FAIL
@@ -75,7 +76,7 @@
expected: FAIL
[vertical-align percentage(%) / values]
- expected: FAIL
+ expected: TIMEOUT
[background-position length(in) / events]
expected: FAIL
@@ -99,10 +100,10 @@
expected: FAIL
[vertical-align length(em) / values]
- expected: FAIL
+ expected: TIMEOUT
[clip rectangle(rectangle) / values]
- expected: FAIL
+ expected: TIMEOUT
[word-spacing length(em) / values]
expected: FAIL
@@ -126,7 +127,7 @@
expected: FAIL
[outline-offset length(ex) / values]
- expected: FAIL
+ expected: TIMEOUT
[min-width length(cm) / values]
expected: FAIL
@@ -141,16 +142,16 @@
expected: FAIL
[vertical-align length(pc) / values]
- expected: FAIL
+ expected: TIMEOUT
[vertical-align length(cm) / values]
- expected: FAIL
+ expected: TIMEOUT
[max-height length(ex) / values]
expected: FAIL
[vertical-align length(ex) / values]
- expected: FAIL
+ expected: TIMEOUT
[min-height percentage(%) / values]
expected: FAIL
@@ -159,7 +160,7 @@
expected: FAIL
[outline-offset length(mm) / values]
- expected: FAIL
+ expected: TIMEOUT
[font-weight font-weight(keyword) / values]
expected: FAIL
@@ -168,7 +169,7 @@
expected: FAIL
[outline-offset length(pt) / values]
- expected: FAIL
+ expected: TIMEOUT
[line-height length(mm) / values]
expected: FAIL
@@ -201,7 +202,7 @@
expected: FAIL
[vertical-align length(pt) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-left-color color(rgba) / values]
expected: FAIL
@@ -270,10 +271,10 @@
expected: FAIL
[outline-offset length(in) / values]
- expected: FAIL
+ expected: TIMEOUT
[outline-width length(pt) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-top-width length(pc) / values]
expected: FAIL
@@ -291,7 +292,7 @@
expected: FAIL
[outline-width length(in) / values]
- expected: FAIL
+ expected: TIMEOUT
[word-spacing length(pt) / values]
expected: FAIL
@@ -303,7 +304,7 @@
expected: FAIL
[outline-color color(rgba) / values]
- expected: FAIL
+ expected: TIMEOUT
[background-position length(ex) / events]
expected: FAIL
@@ -327,7 +328,7 @@
expected: FAIL
[outline-width length(ex) / values]
- expected: FAIL
+ expected: TIMEOUT
[font-size length(pc) / values]
expected: FAIL
@@ -339,7 +340,7 @@
expected: FAIL
[outline-width length(cm) / values]
- expected: FAIL
+ expected: TIMEOUT
[max-width percentage(%) / values]
expected: FAIL
@@ -354,19 +355,19 @@
expected: FAIL
[outline-width length(mm) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-left-width length(pc) / values]
expected: FAIL
[outline-width length(pc) / values]
- expected: FAIL
+ expected: TIMEOUT
[font-weight font-weight(numeric) / values]
expected: FAIL
[vertical-align length(px) / values]
- expected: FAIL
+ expected: TIMEOUT
[letter-spacing length(px) / values]
expected: FAIL
@@ -393,7 +394,7 @@
expected: FAIL
[outline-width length(em) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-right-width length(em) / values]
expected: FAIL
@@ -405,10 +406,10 @@
expected: FAIL
[outline-offset length(em) / values]
- expected: FAIL
+ expected: TIMEOUT
[outline-offset length(cm) / values]
- expected: FAIL
+ expected: TIMEOUT
[background-position length(mm) / events]
expected: FAIL
@@ -420,13 +421,13 @@
expected: FAIL
[z-index integer(integer) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-left-width length(pt) / values]
expected: FAIL
[vertical-align length(mm) / values]
- expected: FAIL
+ expected: TIMEOUT
[border-bottom-width length(pc) / values]
expected: FAIL
@@ -447,7 +448,7 @@
expected: FAIL
[outline-offset length(pc) / values]
- expected: FAIL
+ expected: TIMEOUT
[max-height length(pc) / values]
expected: FAIL
@@ -473,39 +474,135 @@
[min-width length(ex) / values]
expected: FAIL
- [text-indent length(pc) / values]
+ [word-spacing length(in) / values]
expected: FAIL
- [text-indent length(ex) / values]
+ [text-indent length(pt) / values]
expected: FAIL
- [text-indent length(px) / values]
+ [word-spacing percentage(%) / values]
expected: FAIL
- [text-indent length(mm) / values]
+ [outline-width length(pc) / events]
+ expected: TIMEOUT
+
+ [height percentage(%) / values]
expected: FAIL
- [word-spacing length(in) / values]
+ [vertical-align length(px) / events]
+ expected: TIMEOUT
+
+ [padding-right length(em) / values]
expected: FAIL
- [text-indent length(cm) / values]
+ [outline-offset length(mm) / events]
+ expected: TIMEOUT
+
+ [vertical-align length(in) / events]
+ expected: TIMEOUT
+
+ [padding-left length(px) / values]
expected: FAIL
- [text-indent length(pt) / values]
+ [vertical-align length(em) / events]
+ expected: TIMEOUT
+
+ [vertical-align length(cm) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(cm) / events]
+ expected: TIMEOUT
+
+ [vertical-align length(mm) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(em) / events]
+ expected: TIMEOUT
+
+ [z-index integer(integer) / events]
+ expected: TIMEOUT
+
+ [vertical-align length(ex) / events]
+ expected: TIMEOUT
+
+ [outline-width length(em) / events]
+ expected: TIMEOUT
+
+ [visibility visibility(keyword) / events]
+ expected: TIMEOUT
+
+ [width length(pc) / values]
expected: FAIL
- [text-shadow shadow(shadow) / values]
+ [opacity number[0,1\](zero-to-one) / events]
+ expected: TIMEOUT
+
+ [margin-bottom length(px) / values]
expected: FAIL
- [word-spacing percentage(%) / values]
+ [visibility visibility(keyword) / values]
+ expected: TIMEOUT
+
+ [width length(pt) / values]
+ expected: FAIL
+
+ [outline-width length(cm) / events]
+ expected: TIMEOUT
+
+ [clip rectangle(rectangle) / events]
+ expected: TIMEOUT
+
+ [outline-width length(ex) / events]
+ expected: TIMEOUT
+
+ [outline-width length(mm) / events]
+ expected: TIMEOUT
+
+ [width length(mm) / values]
expected: FAIL
- [text-indent length(in) / values]
+ [vertical-align percentage(%) / events]
+ expected: TIMEOUT
+
+ [outline-width length(pt) / events]
+ expected: TIMEOUT
+
+ [outline-color color(rgba) / events]
+ expected: TIMEOUT
+
+ [outline-width length(in) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(ex) / events]
+ expected: TIMEOUT
+
+ [padding-top length(mm) / values]
expected: FAIL
- [text-indent length(em) / values]
+ [vertical-align length(pc) / events]
+ expected: TIMEOUT
+
+ [vertical-align length(pt) / events]
+ expected: TIMEOUT
+
+ [width length(ex) / values]
expected: FAIL
- [text-indent percentage(%) / values]
+ [top length(ex) / values]
expected: FAIL
+ [outline-offset length(pt) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(px) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(in) / events]
+ expected: TIMEOUT
+
+ [outline-width length(px) / events]
+ expected: TIMEOUT
+
+ [outline-offset length(pc) / events]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/css/css-transitions/transitionevent-interface.html.ini b/tests/wpt/metadata/css/css-transitions/transitionevent-interface.html.ini
new file mode 100644
index 00000000000..18ebdebfb7c
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transitions/transitionevent-interface.html.ini
@@ -0,0 +1,7 @@
+[transitionevent-interface.html]
+ [elapsedTime set to undefined]
+ expected: FAIL
+
+ [propertyName set to undefined]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
index decfd130b16..d56a003324d 100644
--- a/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
+++ b/tests/wpt/metadata/css/css-transitions/transitions-animatable-properties-01.html.ini
@@ -20,9 +20,6 @@
[right intermediate]
expected: FAIL
- [min-width intermediate]
- expected: FAIL
-
[background-position end]
expected: FAIL
@@ -35,42 +32,81 @@
[font-weight intermediate]
expected: FAIL
- [clip intermediate]
+ [min-height intermediate]
expected: FAIL
- [border-right-width intermediate]
+ [max-height intermediate]
expected: FAIL
- [border-left-width intermediate]
+ [outline-offset intermediate]
expected: FAIL
- [min-height intermediate]
+ [outline-width intermediate]
expected: FAIL
- [border-top-width intermediate]
+ [outline-width end]
expected: FAIL
- [max-width intermediate]
+ [max-height end]
expected: FAIL
- [max-height intermediate]
+ [height end]
expected: FAIL
- [outline-offset intermediate]
+ [line-height end]
expected: FAIL
- [border-spacing intermediate]
+ [min-height end]
expected: FAIL
- [left intermediate]
+ [bottom end]
expected: FAIL
- [outline-width intermediate]
+ [clip end]
expected: FAIL
- [bottom intermediate]
+ [font-weight end]
expected: FAIL
- [outline-width end]
+ [border-left-color end]
+ expected: FAIL
+
+ [border-top-width end]
+ expected: FAIL
+
+ [margin-right intermediate]
+ expected: FAIL
+
+ [border-left-width end]
+ expected: FAIL
+
+ [border-bottom-width end]
+ expected: FAIL
+
+ [letter-spacing end]
+ expected: FAIL
+
+ [margin-bottom end]
+ expected: FAIL
+
+ [border-right-width end]
+ expected: FAIL
+
+ [border-right-color end]
+ expected: FAIL
+
+ [border-top-color end]
+ expected: FAIL
+
+ [color end]
+ expected: FAIL
+
+ [border-spacing end]
+ expected: FAIL
+
+ [visibility end]
+ expected: FAIL
+
+ [left end]
expected: FAIL
diff --git a/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini
new file mode 100644
index 00000000000..464494a62d5
--- /dev/null
+++ b/tests/wpt/metadata/dom/events/shadow-relatedTarget.html.ini
@@ -0,0 +1,4 @@
+[shadow-relatedTarget.html]
+ [shadow-relatedTarget]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
index 32626f90fad..d0509d2ede5 100644
--- a/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
+++ b/tests/wpt/metadata/encoding/single-byte-decoder.html.ini
@@ -2,7 +2,7 @@
type: testharness
[single-byte-decoder.html?document]
- expected: CRASH
+ expected: TIMEOUT
[windows-1254: iso_8859-9 (document.characterSet and document.inputEncoding)]
expected: FAIL
diff --git a/tests/wpt/metadata/eventsource/format-field-id-2.htm.ini b/tests/wpt/metadata/eventsource/format-field-id-2.htm.ini
new file mode 100644
index 00000000000..f917c63e1b7
--- /dev/null
+++ b/tests/wpt/metadata/eventsource/format-field-id-2.htm.ini
@@ -0,0 +1,5 @@
+[format-field-id-2.htm]
+ expected: TIMEOUT
+ [EventSource: Last-Event-ID (2)]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/eventsource/format-field-id.htm.ini b/tests/wpt/metadata/eventsource/format-field-id.htm.ini
new file mode 100644
index 00000000000..38a0c7e2916
--- /dev/null
+++ b/tests/wpt/metadata/eventsource/format-field-id.htm.ini
@@ -0,0 +1,5 @@
+[format-field-id.htm]
+ expected: TIMEOUT
+ [EventSource: Last-Event-ID]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[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_3.html.ini
index 385376c7321..51f8272a6de 100644
--- 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_3.html.ini
@@ -1,4 +1,4 @@
-[traverse_the_history_4.html]
+[traverse_the_history_3.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-weird.html.ini b/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini
deleted file mode 100644
index 6be14fec6f5..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-location-interface/location-protocol-setter-non-broken-weird.html.ini
+++ /dev/null
@@ -1,17 +0,0 @@
-[location-protocol-setter-non-broken-weird.html]
- type: testharness
- [Set location.protocol to x]
- expected: FAIL
-
- [Set location.protocol to data]
- expected: FAIL
-
- [Set location.protocol to ftp]
- expected: FAIL
-
- [Set location.protocol to gopher]
- expected: FAIL
-
- [Set location.protocol to http+x]
- 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/tables/transformed-tbody-tr-collapsed-border.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html.ini
new file mode 100644
index 00000000000..f405dd9fce2
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html.ini
@@ -0,0 +1,2 @@
+[transformed-tbody-tr-collapsed-border.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html.ini b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html.ini
new file mode 100644
index 00000000000..79683d56886
--- /dev/null
+++ b/tests/wpt/metadata/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html.ini
@@ -0,0 +1,2 @@
+[legend-list-item-numbering.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini
index ed2ecc503bb..0628cc9138c 100644
--- a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-01.html.ini
@@ -3,3 +3,39 @@
[Should get an error event for a text/plain response.]
expected: FAIL
+ [Stylesheet loading using @import with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, same-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, same-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html.ini
new file mode 100644
index 00000000000..b90de8f05bc
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html.ini
@@ -0,0 +1,37 @@
+[link-style-error-limited-quirks.html]
+ [Stylesheet loading using @import with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, same-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, same-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html.ini b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html.ini
new file mode 100644
index 00000000000..bba476d4761
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html.ini
@@ -0,0 +1,31 @@
+[link-style-error-quirks.html]
+ [Stylesheet loading using @import with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with broken Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with no Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using @import with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, cross-origin, and no nosniff]
+ expected: FAIL
+
+ [Stylesheet loading using <link> with wrong Content-Type, same-origin, and nosniff]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html.ini
new file mode 100644
index 00000000000..e07008847d1
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html.ini
@@ -0,0 +1,4 @@
+[iframe-nosrc.html]
+ [load event of iframe should not be fired after processing the element]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 0f1a214d0ee..772148dc71f 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -13,21 +13,3 @@
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
expected: FAIL
- [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to wide]
- expected: FAIL
-
- [img (srcset 1 cand) valid image, resize to narrow]
- expected: FAIL
-
- [picture: source (max-width:500px) valid image, img broken image, resize to wide]
- expected: FAIL
-
- [picture: same URL in source (max-width:500px) and img, resize to narrow]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
new file mode 100644
index 00000000000..8cc42056d34
--- /dev/null
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
@@ -0,0 +1,10 @@
+[non-active-document.html]
+ [DOMParser]
+ expected: FAIL
+
+ [createHTMLDocument]
+ expected: FAIL
+
+ [<template>]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/semantics/forms/the-form-element/form-autocomplete.html.ini b/tests/wpt/metadata/html/semantics/forms/the-form-element/form-autocomplete.html.ini
index c486ffa9062..40874364077 100644
--- a/tests/wpt/metadata/html/semantics/forms/the-form-element/form-autocomplete.html.ini
+++ b/tests/wpt/metadata/html/semantics/forms/the-form-element/form-autocomplete.html.ini
@@ -183,3 +183,18 @@
[off is an allowed autocomplete field name]
expected: FAIL
+ [Unknown field]
+ expected: FAIL
+
+ [Test maximum number of tokens]
+ expected: FAIL
+
+ [Serialize combinations of section, mode, contact, and field]
+ expected: FAIL
+
+ [Test 'wearing the autofill anchor mantle' with off/on]
+ expected: FAIL
+
+ [Test whitespace-only attribute value]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
index c6d49957c4a..ce482a60da8 100644
--- a/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
+++ b/tests/wpt/metadata/html/webappapis/dynamic-markup-insertion/opening-the-input-stream/aborted-parser.window.js.ini
@@ -2,3 +2,6 @@
[document.open() after parser is aborted]
expected: FAIL
+ [async document.open() after parser is aborted]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini
deleted file mode 100644
index c7e9c7434f5..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[limited-quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
deleted file mode 100644
index 818a429ed39..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[no-quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
deleted file mode 100644
index 2ed601c6ff4..00000000000
--- a/tests/wpt/metadata/quirks/unitless-length/quirks.html.ini
+++ /dev/null
@@ -1,283 +0,0 @@
-[quirks.html]
- [top: -\\31 .5]
- expected: FAIL
-
- [bottom: -1A]
- expected: FAIL
-
- [bottom: -1a]
- expected: FAIL
-
- [top: @1]
- expected: FAIL
-
- [top: "1a"]
- expected: FAIL
-
- [top: @a]
- expected: FAIL
-
- [bottom: "1"]
- expected: FAIL
-
- [bottom: -/**/1]
- expected: FAIL
-
- [top: +/**/1]
- expected: FAIL
-
- [bottom: @1a]
- expected: FAIL
-
- [top: 1\\31 ]
- expected: FAIL
-
- [top: url('1')]
- expected: FAIL
-
- [bottom: -\\31 ]
- expected: FAIL
-
- [top: calc(1)]
- expected: FAIL
-
- [top: \\31 ]
- expected: FAIL
-
- [bottom: +1\\31 ]
- expected: FAIL
-
- [bottom: 1\\31 .5]
- expected: FAIL
-
- [bottom: #0001]
- expected: FAIL
-
- [top: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: 1a]
- expected: FAIL
-
- [bottom: A]
- expected: FAIL
-
- [bottom: #01]
- expected: FAIL
-
- [top: +\\31 .5]
- expected: FAIL
-
- [bottom: #1]
- expected: FAIL
-
- [top: -/**/1]
- expected: FAIL
-
- [bottom: +\\31 .5]
- expected: FAIL
-
- [bottom: \\31 ]
- expected: FAIL
-
- [bottom: calc(1)]
- expected: FAIL
-
- [top: #001]
- expected: FAIL
-
- [top: +\\31 ]
- expected: FAIL
-
- [bottom: +\\31 ]
- expected: FAIL
-
- [top: +1.5]
- expected: FAIL
-
- [top: +1\\31 ]
- expected: FAIL
-
- [bottom: @a]
- expected: FAIL
-
- [bottom: @1]
- expected: FAIL
-
- [top: #1]
- expected: FAIL
-
- [top: 1a]
- expected: FAIL
-
- [bottom: +1a]
- expected: FAIL
-
- [bottom: +1A]
- expected: FAIL
-
- [bottom: "a"]
- expected: FAIL
-
- [top: #00001]
- expected: FAIL
-
- [bottom: -1\\31 .5]
- expected: FAIL
-
- [top: "1"]
- expected: FAIL
-
- [bottom: 1.5]
- expected: FAIL
-
- [bottom: -\\31 .5]
- expected: FAIL
-
- [bottom: url('1')]
- expected: FAIL
-
- [bottom: -1.5]
- expected: FAIL
-
- [top: \\31 .5]
- expected: FAIL
-
- [bottom: "1a"]
- expected: FAIL
-
- [bottom: calc(2 * 2px)]
- expected: FAIL
-
- [bottom: +1\\31 .5]
- expected: FAIL
-
- [bottom: 1\\31 ]
- expected: FAIL
-
- [bottom: +/**/1]
- expected: FAIL
-
- [bottom: #00001]
- expected: FAIL
-
- [top: url(1)]
- expected: FAIL
-
- [bottom: #001]
- expected: FAIL
-
- [top: +1\\31 .5]
- expected: FAIL
-
- [top: -1a]
- expected: FAIL
-
- [top: -1A]
- expected: FAIL
-
- [bottom: url(1)]
- expected: FAIL
-
- [top: a]
- expected: FAIL
-
- [top: A]
- expected: FAIL
-
- [top: #000001]
- expected: FAIL
-
- [top: 1]
- expected: FAIL
-
- [top: 1\\31 .5]
- expected: FAIL
-
- [bottom: a]
- expected: FAIL
-
- [bottom: 1]
- expected: FAIL
-
- [bottom: +1]
- expected: FAIL
-
- [bottom: #000001]
- expected: FAIL
-
- [bottom: +a]
- expected: FAIL
-
- [bottom: +A]
- expected: FAIL
-
- [top: 1.5]
- expected: FAIL
-
- [top: +A]
- expected: FAIL
-
- [top: +a]
- expected: FAIL
-
- [top: +1]
- expected: FAIL
-
- [top: -1.5]
- expected: FAIL
-
- [top: -1\\31 .5]
- expected: FAIL
-
- [top: +1a]
- expected: FAIL
-
- [top: +1A]
- expected: FAIL
-
- [top: @1a]
- expected: FAIL
-
- [bottom: \\31 .5]
- expected: FAIL
-
- [top: "a"]
- expected: FAIL
-
- [top: #01]
- expected: FAIL
-
- [bottom: +1.5]
- expected: FAIL
-
- [bottom: -A]
- expected: FAIL
-
- [bottom: -a]
- expected: FAIL
-
- [bottom: -1\\31 ]
- expected: FAIL
-
- [top: #0001]
- expected: FAIL
-
- [bottom: -1]
- expected: FAIL
-
- [top: -\\31 ]
- expected: FAIL
-
- [top: -A]
- expected: FAIL
-
- [top: -a]
- expected: FAIL
-
- [top: -1]
- expected: FAIL
-
- [top: -1\\31 ]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/child-css/external-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/child-css/external-import-stylesheet.html.ini
new file mode 100644
index 00000000000..3df025f6781
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/child-css/external-import-stylesheet.html.ini
@@ -0,0 +1,4 @@
+[external-import-stylesheet.html]
+ [Child css from external stylesheet.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/child-css/internal-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/child-css/internal-import-stylesheet.html.ini
new file mode 100644
index 00000000000..67970486927
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/child-css/internal-import-stylesheet.html.ini
@@ -0,0 +1,4 @@
+[internal-import-stylesheet.html]
+ [Child css from internal stylesheet.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/child-css/processing-instruction.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/child-css/processing-instruction.html.ini
new file mode 100644
index 00000000000..bd67d76de68
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/child-css/processing-instruction.html.ini
@@ -0,0 +1,5 @@
+[processing-instruction.html]
+ expected: ERROR
+ [Child css via a ProcessingInstruction.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-import-stylesheet.html.ini
new file mode 100644
index 00000000000..7be8b09026e
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-import-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[external-import-stylesheet.html]
+ expected: ERROR
+ [Font from imported stylesheet (external).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-stylesheet.html.ini
new file mode 100644
index 00000000000..0f921ea1368
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/font-face/external-stylesheet.html.ini
@@ -0,0 +1,4 @@
+[external-stylesheet.html]
+ [Font from external stylesheet.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-import-stylesheet.html.ini
new file mode 100644
index 00000000000..6efde85d6e1
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-import-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[internal-import-stylesheet.html]
+ expected: ERROR
+ [Font from imported stylesheet (internal).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-stylesheet.html.ini
new file mode 100644
index 00000000000..3026778ee88
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/font-face/internal-stylesheet.html.ini
@@ -0,0 +1,4 @@
+[internal-stylesheet.html]
+ [Font from internal stylesheet.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/font-face/processing-instruction.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/font-face/processing-instruction.html.ini
new file mode 100644
index 00000000000..1cc22cb19c9
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/font-face/processing-instruction.html.ini
@@ -0,0 +1,5 @@
+[processing-instruction.html]
+ expected: ERROR
+ [Font from external stylesheet (from ProcessingInstruction).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/external-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/external-import-stylesheet.html.ini
new file mode 100644
index 00000000000..7d023990731
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/external-import-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[external-import-stylesheet.html]
+ expected: ERROR
+ [Image from imported stylesheet (external).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/external-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/external-stylesheet.html.ini
new file mode 100644
index 00000000000..b4de37cfc88
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/external-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[external-stylesheet.html]
+ expected: ERROR
+ [Image from external stylesheet.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/inline-style.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/inline-style.html.ini
new file mode 100644
index 00000000000..d9ca80637be
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/inline-style.html.ini
@@ -0,0 +1,5 @@
+[inline-style.html]
+ expected: ERROR
+ [Image from inline styles.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/internal-import-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/internal-import-stylesheet.html.ini
new file mode 100644
index 00000000000..49c440b6e36
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/internal-import-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[internal-import-stylesheet.html]
+ expected: ERROR
+ [Image from imported stylesheet (internal).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/internal-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/internal-stylesheet.html.ini
new file mode 100644
index 00000000000..38a9b9d0cee
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/internal-stylesheet.html.ini
@@ -0,0 +1,5 @@
+[internal-stylesheet.html]
+ expected: ERROR
+ [Image from internal stylesheet.]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/presentation-attribute.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/presentation-attribute.html.ini
new file mode 100644
index 00000000000..dd679361c4b
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/presentation-attribute.html.ini
@@ -0,0 +1,4 @@
+[presentation-attribute.html]
+ [Image from presentation attributes.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/image/processing-instruction.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/image/processing-instruction.html.ini
new file mode 100644
index 00000000000..aee0cff4d78
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/image/processing-instruction.html.ini
@@ -0,0 +1,5 @@
+[processing-instruction.html]
+ expected: ERROR
+ [Image from external stylesheet (from ProcessingInstruction).]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/svg/external-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/svg/external-stylesheet.html.ini
new file mode 100644
index 00000000000..bd05a0aeae6
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/svg/external-stylesheet.html.ini
@@ -0,0 +1,8 @@
+[external-stylesheet.html]
+ expected: ERROR
+ [Test styling SVG from external style fill]
+ expected: TIMEOUT
+
+ [Test styling SVG from external style stroke]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/svg/inline-style.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/svg/inline-style.html.ini
new file mode 100644
index 00000000000..5e40b913aee
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/svg/inline-style.html.ini
@@ -0,0 +1,8 @@
+[inline-style.html]
+ expected: ERROR
+ [Styling SVG from inline styles stroke]
+ expected: NOTRUN
+
+ [Styling SVG from inline styles fill]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/svg/internal-stylesheet.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/svg/internal-stylesheet.html.ini
new file mode 100644
index 00000000000..b712b6a26db
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/svg/internal-stylesheet.html.ini
@@ -0,0 +1,8 @@
+[internal-stylesheet.html]
+ expected: ERROR
+ [Styling SVG from internal styles stroke]
+ expected: NOTRUN
+
+ [Styling SVG from internal styles fill]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/svg/presentation-attribute.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/svg/presentation-attribute.html.ini
new file mode 100644
index 00000000000..b784877e27b
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/svg/presentation-attribute.html.ini
@@ -0,0 +1,8 @@
+[presentation-attribute.html]
+ expected: ERROR
+ [Styling SVG from presentation attributes fill]
+ expected: TIMEOUT
+
+ [Styling SVG from presentation attributes stroke]
+ expected: NOTRUN
+
diff --git a/tests/wpt/metadata/referrer-policy/css-integration/svg/processing-instruction.html.ini b/tests/wpt/metadata/referrer-policy/css-integration/svg/processing-instruction.html.ini
new file mode 100644
index 00000000000..d2a1cee7ab7
--- /dev/null
+++ b/tests/wpt/metadata/referrer-policy/css-integration/svg/processing-instruction.html.ini
@@ -0,0 +1,8 @@
+[processing-instruction.html]
+ expected: ERROR
+ [Styling SVG from ProcessingInstruction stroke]
+ expected: NOTRUN
+
+ [Styling SVG from ProcessingInstruction fill]
+ expected: TIMEOUT
+
diff --git a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
index 207710f757c..110786c5f37 100644
--- a/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
+++ b/tests/wpt/metadata/url/urlencoded-parser.any.js.ini
@@ -2,13 +2,16 @@
[request.formData() with input: &&&a=b&&&&c=d&]
expected: FAIL
- [request.formData() with input: _charset_=windows-1252&test=%C2x]
+ [request.formData() with input: a=b&c=d]
expected: FAIL
- [request.formData() with input: a&b&c]
+ [response.formData() with input: a&b&c]
expected: FAIL
- [request.formData() with input: a=b&c=d]
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
+ expected: FAIL
+
+ [response.formData() with input: a=b&c=d]
expected: FAIL
@@ -22,6 +25,12 @@
[response.formData() with input: a&b&c]
expected: FAIL
- [response.formData() with input: &&&a=b&&&&c=d&]
+ [response.formData() with input: a=b&c=d&]
+ expected: FAIL
+
+ [request.formData() with input: a=b&c=d]
+ expected: FAIL
+
+ [response.formData() with input: _charset_=windows-1252&test=%C2x]
expected: FAIL
diff --git a/tests/wpt/metadata/wasm/jsapi/constructor/compile.any.js.ini b/tests/wpt/metadata/wasm/jsapi/constructor/compile.any.js.ini
index 9578de40fc5..7908e9e9966 100644
--- a/tests/wpt/metadata/wasm/jsapi/constructor/compile.any.js.ini
+++ b/tests/wpt/metadata/wasm/jsapi/constructor/compile.any.js.ini
@@ -20,6 +20,9 @@
[Changing the buffer]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
[compile.any.html]
[Invalid arguments]
@@ -43,3 +46,6 @@
[Changing the buffer]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/wasm/jsapi/constructor/instantiate.any.js.ini b/tests/wpt/metadata/wasm/jsapi/constructor/instantiate.any.js.ini
index f4791115004..9905d0809de 100644
--- a/tests/wpt/metadata/wasm/jsapi/constructor/instantiate.any.js.ini
+++ b/tests/wpt/metadata/wasm/jsapi/constructor/instantiate.any.js.ini
@@ -68,6 +68,12 @@
[getter order for imports object: Module argument]
expected: FAIL
+ [stray argument: BufferSource argument]
+ expected: FAIL
+
+ [stray argument: Module argument]
+ expected: FAIL
+
[instantiate.any.worker.html]
[Invalid arguments]
@@ -139,3 +145,9 @@
[getter order for imports object: Module argument]
expected: FAIL
+ [stray argument: BufferSource argument]
+ expected: FAIL
+
+ [stray argument: Module argument]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/wasm/jsapi/global/constructor.any.js.ini b/tests/wpt/metadata/wasm/jsapi/global/constructor.any.js.ini
index 621971f49a4..ebe8673d643 100644
--- a/tests/wpt/metadata/wasm/jsapi/global/constructor.any.js.ini
+++ b/tests/wpt/metadata/wasm/jsapi/global/constructor.any.js.ini
@@ -92,6 +92,9 @@
[Explicit value "3" for type f32]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
[constructor.any.worker.html]
[Explicit value object with toString for type f32]
@@ -187,3 +190,6 @@
[Explicit value "3" for type f32]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/wasm/jsapi/global/value-get-set.any.js.ini b/tests/wpt/metadata/wasm/jsapi/global/value-get-set.any.js.ini
new file mode 100644
index 00000000000..096f6b3aec2
--- /dev/null
+++ b/tests/wpt/metadata/wasm/jsapi/global/value-get-set.any.js.ini
@@ -0,0 +1,207 @@
+[value-get-set.any.worker.html]
+ [Mutable f64 (true on prototype)]
+ expected: FAIL
+
+ [Mutable i32 (true on prototype)]
+ expected: FAIL
+
+ [Immutable f32 (missing)]
+ expected: FAIL
+
+ [Immutable i32 (empty string)]
+ expected: FAIL
+
+ [i64 with default]
+ expected: FAIL
+
+ [Mutable f64 (one)]
+ expected: FAIL
+
+ [Mutable f32 (string)]
+ expected: FAIL
+
+ [Mutable i32 (true)]
+ expected: FAIL
+
+ [Mutable i32 (string)]
+ expected: FAIL
+
+ [Immutable f32 (false)]
+ expected: FAIL
+
+ [Immutable f64 (empty string)]
+ expected: FAIL
+
+ [Immutable i32 (undefined)]
+ expected: FAIL
+
+ [Mutable f32 (one)]
+ expected: FAIL
+
+ [Calling setter without argument]
+ expected: FAIL
+
+ [Immutable i32 (zero)]
+ expected: FAIL
+
+ [Immutable f64 (undefined)]
+ expected: FAIL
+
+ [Mutable i32 (one)]
+ expected: FAIL
+
+ [Immutable f32 (zero)]
+ expected: FAIL
+
+ [Immutable i32 (null)]
+ expected: FAIL
+
+ [Immutable f64 (false)]
+ expected: FAIL
+
+ [Immutable f64 (missing)]
+ expected: FAIL
+
+ [Immutable f64 (null)]
+ expected: FAIL
+
+ [Mutable f32 (true on prototype)]
+ expected: FAIL
+
+ [Immutable i32 (false)]
+ expected: FAIL
+
+ [Immutable i32 (missing)]
+ expected: FAIL
+
+ [Mutable f32 (true)]
+ expected: FAIL
+
+ [Stray argument]
+ expected: FAIL
+
+ [Immutable f32 (null)]
+ expected: FAIL
+
+ [Branding]
+ expected: FAIL
+
+ [Immutable f64 (zero)]
+ expected: FAIL
+
+ [Mutable f64 (true)]
+ expected: FAIL
+
+ [Mutable f64 (string)]
+ expected: FAIL
+
+ [Immutable f32 (empty string)]
+ expected: FAIL
+
+ [Immutable f32 (undefined)]
+ expected: FAIL
+
+
+[value-get-set.any.html]
+ [Mutable f64 (true on prototype)]
+ expected: FAIL
+
+ [Mutable i32 (true on prototype)]
+ expected: FAIL
+
+ [Immutable f32 (missing)]
+ expected: FAIL
+
+ [Immutable i32 (empty string)]
+ expected: FAIL
+
+ [i64 with default]
+ expected: FAIL
+
+ [Mutable f64 (one)]
+ expected: FAIL
+
+ [Mutable f32 (string)]
+ expected: FAIL
+
+ [Mutable i32 (true)]
+ expected: FAIL
+
+ [Mutable i32 (string)]
+ expected: FAIL
+
+ [Immutable f32 (false)]
+ expected: FAIL
+
+ [Immutable f64 (empty string)]
+ expected: FAIL
+
+ [Immutable i32 (undefined)]
+ expected: FAIL
+
+ [Mutable f32 (one)]
+ expected: FAIL
+
+ [Calling setter without argument]
+ expected: FAIL
+
+ [Immutable i32 (zero)]
+ expected: FAIL
+
+ [Immutable f64 (undefined)]
+ expected: FAIL
+
+ [Mutable i32 (one)]
+ expected: FAIL
+
+ [Immutable f32 (zero)]
+ expected: FAIL
+
+ [Immutable i32 (null)]
+ expected: FAIL
+
+ [Immutable f64 (false)]
+ expected: FAIL
+
+ [Immutable f64 (missing)]
+ expected: FAIL
+
+ [Immutable f64 (null)]
+ expected: FAIL
+
+ [Mutable f32 (true on prototype)]
+ expected: FAIL
+
+ [Immutable i32 (false)]
+ expected: FAIL
+
+ [Immutable i32 (missing)]
+ expected: FAIL
+
+ [Mutable f32 (true)]
+ expected: FAIL
+
+ [Stray argument]
+ expected: FAIL
+
+ [Immutable f32 (null)]
+ expected: FAIL
+
+ [Branding]
+ expected: FAIL
+
+ [Immutable f64 (zero)]
+ expected: FAIL
+
+ [Mutable f64 (true)]
+ expected: FAIL
+
+ [Mutable f64 (string)]
+ expected: FAIL
+
+ [Immutable f32 (empty string)]
+ expected: FAIL
+
+ [Immutable f32 (undefined)]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/wasm/jsapi/global/valueOf.any.js.ini b/tests/wpt/metadata/wasm/jsapi/global/valueOf.any.js.ini
index db00839e79f..1a66c3a7c4a 100644
--- a/tests/wpt/metadata/wasm/jsapi/global/valueOf.any.js.ini
+++ b/tests/wpt/metadata/wasm/jsapi/global/valueOf.any.js.ini
@@ -2,8 +2,14 @@
[Branding]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
[valueOf.any.html]
[Branding]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/wasm/jsapi/table/grow.any.js.ini b/tests/wpt/metadata/wasm/jsapi/table/grow.any.js.ini
index bb6308b8b5b..479918bff2f 100644
--- a/tests/wpt/metadata/wasm/jsapi/table/grow.any.js.ini
+++ b/tests/wpt/metadata/wasm/jsapi/table/grow.any.js.ini
@@ -38,6 +38,9 @@
[Basic]
expected: FAIL
+ [Stray argument]
+ expected: FAIL
+
[grow.any.worker.html]
[Out-of-range argument: 68719476736]
@@ -79,3 +82,6 @@
[Basic]
expected: FAIL
+ [Stray argument]
+ 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/mozilla/meta/mozilla/unitless-length.html.ini b/tests/wpt/mozilla/meta/mozilla/unitless-length.html.ini
new file mode 100644
index 00000000000..ac7c34f241f
--- /dev/null
+++ b/tests/wpt/mozilla/meta/mozilla/unitless-length.html.ini
@@ -0,0 +1,2 @@
+[unitless-length.html]
+ expected: TIMEOUT
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/only-valid-whitespaces-are-allowed.html b/tests/wpt/web-platform-tests/content-security-policy/generic/only-valid-whitespaces-are-allowed.html
new file mode 100644
index 00000000000..d7567a93a37
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/only-valid-whitespaces-are-allowed.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <script src='/resources/testharness.js'></script>
+ <script src='/resources/testharnessreport.js'></script>
+</head>
+<body>
+ <script>
+ var tests = [
+ // Make sure that csp works properly in normal situations
+ { "csp": "", "expected": true, "name": "Should load image without any CSP" },
+ { "csp": "img-src 'none';", "expected": false, "name": "Should not load image with 'none' CSP" },
+ // Ensure ASCII whitespaces are properly parsed
+ // ASCII whitespace is U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, or U+0020 SPACE.
+
+ // between directive name and value
+ { "csp": "img-src\u0009'none';", "expected": false, "name": "U+0009 TAB should be properly parsed between directive name and value" },
+ { "csp": "img-src\u000C'none';", "expected": false, "name": "U+000C FF should be properly parsed between directive name and value" },
+ { "csp": "img-src\u000A'none';", "expected": false, "name": "U+000A LF should be properly parsed between directive name and value" },
+ { "csp": "img-src\u000D'none';", "expected": false, "name": "U+000D CR should be properly parsed between directive name and value" },
+ { "csp": "img-src\u0020'none';", "expected": false, "name": "U+0020 SPACE should be properly parsed between directive name and value" },
+
+ // inside directive value
+ { "csp": "img-src http://example.com\u0009http://example2.com;", "expected": false, "name": "U+0009 TAB should be properly parsed inside directive value" },
+ { "csp": "img-src http://example.com\u000Chttp://example2.com;", "expected": false, "name": "U+000C FF should be properly parsed inside directive value" },
+ { "csp": "img-src http://example.com\u000Ahttp://example2.com;", "expected": false, "name": "U+000A LF should be properly parsed inside directive value" },
+ { "csp": "img-src http://example.com\u000Dhttp://example2.com;", "expected": false, "name": "U+000D CR should be properly parsed inside directive value" },
+ { "csp": "img-src http://example.com\u0020http://example2.com;", "expected": false, "name": "U+0020 SPACE should be properly parsed inside directive value" },
+
+ // Ensure nbsp (U+00A0) is not considered a valid whitespace
+ // https://github.com/webcompat/web-bugs/issues/18902 has more details about why this particularly relevant
+ { "csp": "img-src\u00A0'none';", "expected": true, "name": "U+00A0 NBSP should not be parsed between directive name and value" },
+ { "csp": "img-src http://example.com\u00A0http://example2.com;", "expected": true, "name": "U+00A0 NBSP should not be parsed inside directive value" },
+ ];
+
+ tests.forEach(test => {
+ async_test(t => {
+ var url = "support/load_img_and_post_result_meta.sub.html?csp=" + encodeURIComponent(test.csp);
+ test_image_loads_as_expected(test, t, url);
+ }, test.name + " - meta tag");
+
+ // We can't test csp delivered in an HTTP header if we're testing CR/LF characters
+ if (test.csp.indexOf("\u000A") == -1 && test.csp.indexOf("\u000D") == -1) {
+ async_test(t => {
+ var url = "support/load_img_and_post_result_meta.sub.html?csp=" + encodeURIComponent(test.csp);
+ test_image_loads_as_expected(test, t, url);
+ }, test.name + " - HTTP header");
+ }
+ });
+
+ function test_image_loads_as_expected(test, t, url) {
+ var i = document.createElement('iframe');
+ i.src = url;
+ window.addEventListener('message', t.step_func(function(e) {
+ if (e.source != i.contentWindow) return;
+ if (test.expected) {
+ assert_equals(e.data, "img loaded");
+ } else {
+ assert_equals(e.data, "img not loaded");
+ }
+ t.done();
+ }));
+ document.body.appendChild(i);
+ }
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html
new file mode 100644
index 00000000000..c7a2e75dba3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html
@@ -0,0 +1,11 @@
+<html>
+<body>
+ <script>
+ var img = document.createElement("img");
+ img.src = "/content-security-policy/support/pass.png";
+ img.onload = function() { parent.postMessage('img loaded', '*'); }
+ img.onerror = function() { parent.postMessage('img not loaded', '*'); }
+ document.body.appendChild(img);
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers
new file mode 100644
index 00000000000..e9bf21bab41
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_header.html.sub.headers
@@ -0,0 +1 @@
+Content-Security-Policy: {{GET[csp]}}
diff --git a/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_meta.sub.html b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_meta.sub.html
new file mode 100644
index 00000000000..ac0cf39dd03
--- /dev/null
+++ b/tests/wpt/web-platform-tests/content-security-policy/generic/support/load_img_and_post_result_meta.sub.html
@@ -0,0 +1,14 @@
+<html>
+<head>
+ <meta http-equiv="Content-Security-Policy" content="{{GET[csp]}}">
+</head>
+<body>
+ <script>
+ var img = document.createElement("img");
+ img.src = "/content-security-policy/support/pass.png";
+ img.onload = function() { parent.postMessage('img loaded', '*'); }
+ img.onerror = function() { parent.postMessage('img not loaded', '*'); }
+ document.body.appendChild(img);
+ </script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/animationevent-interface.js b/tests/wpt/web-platform-tests/css/css-animations/animationevent-interface.js
index 56d30a4a377..e35b7fcb0f9 100644
--- a/tests/wpt/web-platform-tests/css/css-animations/animationevent-interface.js
+++ b/tests/wpt/web-platform-tests/css/css-animations/animationevent-interface.js
@@ -79,11 +79,139 @@
}, "animationName set to 'sample'");
test(function() {
+ var event = new AnimationEvent("test", {animationName: undefined});
+ assert_equals(event.animationName, "");
+ }, "animationName set to undefined");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: null});
+ assert_equals(event.animationName, "null");
+ }, "animationName set to null");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: false});
+ assert_equals(event.animationName, "false");
+ }, "animationName set to false");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: true});
+ assert_equals(event.animationName, "true");
+ }, "animationName set to true");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: 0.5});
+ assert_equals(event.animationName, "0.5");
+ }, "animationName set to a number");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: []});
+ assert_equals(event.animationName, "");
+ }, "animationName set to []");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: [1, 2, 3]});
+ assert_equals(event.animationName, "1,2,3");
+ }, "animationName set to [1, 2, 3]");
+
+ test(function() {
+ var event = new AnimationEvent("test", {animationName: {sample: 0.5}});
+ assert_equals(event.animationName, "[object Object]");
+ }, "animationName set to an object");
+
+ test(function() {
+ var event = new AnimationEvent("test",
+ {animationName: {valueOf: function () { return 'sample'; }}});
+ assert_equals(event.animationName, "[object Object]");
+ }, "animationName set to an object with a valueOf function");
+
+ test(function() {
var event = new AnimationEvent("test", {elapsedTime: 0.5});
assert_equals(event.elapsedTime, 0.5);
}, "elapsedTime set to 0.5");
test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: -0.5});
+ assert_equals(event.elapsedTime, -0.5);
+ }, "elapsedTime set to -0.5");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: undefined});
+ assert_equals(event.elapsedTime, 0);
+ }, "elapsedTime set to undefined");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: null});
+ assert_equals(event.elapsedTime, 0);
+ }, "elapsedTime set to null");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: false});
+ assert_equals(event.elapsedTime, 0);
+ }, "elapsedTime set to false");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: true});
+ assert_equals(event.elapsedTime, 1);
+ }, "elapsedTime set to true");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: ""});
+ assert_equals(event.elapsedTime, 0);
+ }, "elapsedTime set to ''");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: []});
+ assert_equals(event.elapsedTime, 0);
+ }, "elapsedTime set to []");
+
+ test(function() {
+ var event = new AnimationEvent("test", {elapsedTime: [0.5]});
+ assert_equals(event.elapsedTime, 0.5);
+ }, "elapsedTime set to [0.5]");
+
+ test(function() {
+ var event = new AnimationEvent(
+ "test", {elapsedTime: { valueOf: function() { return 0.5; }}});
+ assert_equals(event.elapsedTime, 0.5);
+ }, "elapsedTime set to an object with a valueOf function");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: NaN});
+ }, 'elapsedTime cannot be NaN so was expecting a TypeError');
+ }, "elapsedTime cannot be set to NaN");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: Infinity});
+ }, 'elapsedTime cannot be Infinity so was expecting a TypeError');
+ }, "elapsedTime cannot be set to Infinity");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: -Infinity});
+ }, 'elapsedTime cannot be -Infinity so was expecting a TypeError');
+ }, "elapsedTime cannot be set to -Infinity");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: "sample"});
+ }, 'elapsedTime cannot be a string so was expecting a TypeError');
+ }, "elapsedTime cannot be set to 'sample'");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: [0.5, 1.0]});
+ }, 'elapsedTime cannot be a multi-element array so was expecting a TypeError');
+ }, "elapsedTime cannot be set to [0.5, 1.0]");
+
+ test(function() {
+ assert_throws(new TypeError(), function() {
+ new AnimationEvent("test", {elapsedTime: { sample: 0.5}});
+ }, 'elapsedTime cannot be an object so was expecting a TypeError');
+ }, "elapsedTime cannot be set to an object");
+
+ test(function() {
var eventInit = {animationName: "sample", elapsedTime: 0.5};
var event = new AnimationEvent("test", eventInit);
assert_equals(event.animationName, "sample");
diff --git a/tests/wpt/web-platform-tests/css/css-animations/historical.html b/tests/wpt/web-platform-tests/css/css-animations/historical.html
new file mode 100644
index 00000000000..5b96a422f55
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/historical.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+
+<title>Historical CSS Animation features must be removed</title>
+<link rel="help" href="http://www.w3.org/TR/css3-animations">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+function isInterfaceNuked(name) {
+ test(function() {
+ assert_equals(window[name], undefined)
+ }, "Historical CSS features must be removed: " + name)
+}
+var nukedInterfaces = [
+ "WebKitAnimationEvent", // Replaced by unprefixed AnimationEvent
+];
+nukedInterfaces.forEach(isInterfaceNuked);
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-color-repaint.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-color-repaint.html
index 6052db526a3..4a5cee08009 100644
--- a/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-color-repaint.html
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-clip-color-repaint.html
@@ -31,5 +31,4 @@
document.documentElement.classList.remove("reftest-wait");
});
});
- inner.style.backgroundClip = "border-box";
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-contain/contain-size-fieldset-001.html b/tests/wpt/web-platform-tests/css/css-contain/contain-size-fieldset-001.html
new file mode 100644
index 00000000000..f92424716ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/contain-size-fieldset-001.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Containment Test: Size containment on fieldset</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-contain-1/#containment-size">
+<link rel="match" href="reference/contain-size-fieldset-001-ref.html">
+<meta name=assert content="Size containment does apply to fieldsets, thus their size is the same than if they don't have contents.">
+<style>
+fieldset {
+ contain: size;
+ display: inline-block;
+ color: transparent;
+ border: none;
+ padding: 0;
+}
+</style>
+
+<p>This test passes if it has the same output as the reference. You see the word "before", a small space, and then the word "after".</p>
+before<fieldset><legend>legend</legend></fieldset>after
diff --git a/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-fieldset-001-ref.html b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-fieldset-001-ref.html
new file mode 100644
index 00000000000..85f5c73c2ec
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-contain/reference/contain-size-fieldset-001-ref.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Containment Test: Reference file</title>
+<link rel="author" title="Manuel Rego Casasnovas" href="mailto:rego@igalia.com">
+<style>
+fieldset {
+ display: inline-block;
+ color: transparent;
+ border: none;
+ padding: 0;
+}
+</style>
+
+<p>This test passes if it has the same output as the reference. You see the word "before", a small space, and then the word "after".</p>
+before<fieldset></fieldset>after
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-001.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-001.html
new file mode 100644
index 00000000000..25ce0619dbf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-001.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'align-self' property's value of a grid item from 'baseline' will exclude such item from its baseline context, which implies recomputing all the baseline offsets and aligning the items left in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 100px / 50px 50px 50px;
+ background: grey;
+ align-items: baseline;
+}
+#item1 {
+ height: 20px;
+ background: blue;
+}
+#item2 {
+ height: 50px;
+ background: green;
+}
+#item3 {
+ height: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-y": 30 },
+ item2: {"data-offset-y": 0 },
+ item3: {"data-offset-y": 20 }
+ };
+
+ let after = {
+ item1: {"data-offset-y": 10 },
+ item2: {"data-offset-y": 50 },
+ item3: {"data-offset-y": 0 }
+ };
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.alignSelf = "end";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0"></div>
+ <div id="item2" data-expected-width="50" data-expected-height="50" data-offset-x="50"></div>
+ <div id="item3" data-expected-width="50" data-expected-height="30" data-offset-x="100"></div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-002.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-002.html
new file mode 100644
index 00000000000..c97be7ddb81
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-002.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'align-self' property's value of a grid item to 'baseline' will include such item into a baseline context, which implies recomputing all the baseline offsets and aligning the items in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 100px / 50px 50px 50px;
+ background: grey;
+ align-items: baseline;
+}
+#item1 {
+ height: 20px;
+ background: blue;
+}
+#item2 {
+ height: 50px;
+ background: green;
+ align-self: center;
+}
+#item3 {
+ height: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-y": 10 },
+ item2: {"data-offset-y": 25 },
+ item3: {"data-offset-y": 0 }
+ };
+
+ let after = {
+ item1: {"data-offset-y": 30 },
+ item2: {"data-offset-y": 0 },
+ item3: {"data-offset-y": 20 }
+ };
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.alignSelf = "baseline";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0"></div>
+ <div id="item2" data-expected-width="50" data-expected-height="50" data-offset-x="50"></div>
+ <div id="item3" data-expected-width="50" data-expected-height="30" data-offset-x="100"></div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-003.html
new file mode 100644
index 00000000000..bca78d76569
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-003.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing the Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align/#typedef-baseline-position">
+<meta name="assert" content="Changing the justify-self' property's value of a grid item from 'baseline' will exclude such item from its baseline context, which implies recomputing all the baseline offsets and aligning the items left in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 50px 50px 50px / 100px;
+ background: grey;
+ justify-items: baseline;
+}
+#container > div { writing-mode: vertical-rl; }
+#item1 {
+ width: 20px;
+ background: blue;
+}
+#item2 {
+ width: 50px;
+ background: green;
+}
+#item3 {
+ width: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-x": 30 },
+ item2: {"data-offset-x": 0 },
+ item3: {"data-offset-x": 20 }
+ };
+
+ let after = {
+ item1: {"data-offset-x": 10 },
+ item2: {"data-offset-x": 50 },
+ item3: {"data-offset-x": 0 }
+ };
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.justifySelf = "end";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0"></div>
+ <div id="item2" data-expected-width="50" data-expected-height="50" data-offset-y="50"></div>
+ <div id="item3" data-expected-width="30" data-expected-height="50" data-offset-y="100"></div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-004.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-004.html
new file mode 100644
index 00000000000..3064f42396f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-004.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing the Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'justify-self' property's value of a grid item to 'baseline' will include such item into a baseline context, which implies recomputing all the baseline offsets and aligning the items in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 50px 50px 50px / 100px;
+ background: grey;
+ justify-items: baseline;
+}
+#container > div { writing-mode: vertical-rl; }
+#item1 {
+ width: 20px;
+ background: blue;
+}
+#item2 {
+ width: 50px;
+ background: green;
+ justify-self: center;
+}
+#item3 {
+ width: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-x": 10 },
+ item2: {"data-offset-x": 25 },
+ item3: {"data-offset-x": 0 }
+ };
+
+ let after = {
+ item1: {"data-offset-x": 30 },
+ item2: {"data-offset-x": 0 },
+ item3: {"data-offset-x": 20 }
+ };
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.justifySelf = "baseline";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0"></div>
+ <div id="item2" data-expected-width="50" data-expected-height="50" data-offset-y="50"></div>
+ <div id="item3" data-expected-width="30" data-expected-height="50" data-offset-y="100"></div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-005.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-005.html
new file mode 100644
index 00000000000..550eed73f50
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-005.html
@@ -0,0 +1,63 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'align-self' property's value of a grid item from 'baseline' will exclude such item from its baseline context, which implies recomputing all the baseline offsets and aligning the items left in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 100px / 50px 50px 50px;
+ background: grey;
+ align-items: baseline;
+ font-family: Ahem;
+}
+#item1 {
+ font-size: 20px;
+ background: blue;
+}
+#item2 {
+ font-size: 40px;
+ background: green;
+}
+#item3 {
+ font-size: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-y": 16 },
+ item2: {"data-offset-y": 0 },
+ item3: {"data-offset-y": 8 }
+ }
+
+ let after = {
+ item1: {"data-offset-y": 8 },
+ item2: {"data-offset-y": 60 },
+ item3: {"data-offset-y": 0 }
+ }
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.alignSelf = "end";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0">É</div>
+ <div id="item2" data-expected-width="50" data-expected-height="40" data-offset-x="50">É</div>
+ <div id="item3" data-expected-width="50" data-expected-height="30" data-offset-x="100">É</div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-006.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-006.html
new file mode 100644
index 00000000000..1df78c051f7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-006.html
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#align-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'align-self' property's value of a grid item to 'baseline' will include such item into a baseline context, which implies recomputing all the baseline offsets and aligning the items in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 100px / 50px 50px 50px;
+ background: grey;
+ align-items: baseline;
+ font-family: Ahem;
+}
+#item1 {
+ font-size: 20px;
+ background: blue;
+}
+#item2 {
+ font-size: 40px;
+ background: green;
+ align-self: center;
+}
+#item3 {
+ font-size: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-y": 8 },
+ item2: {"data-offset-y": 30 },
+ item3: {"data-offset-y": 0 }
+ }
+
+ let after = {
+ item1: {"data-offset-y": 16 },
+ item2: {"data-offset-y": 0 },
+ item3: {"data-offset-y": 8 }
+ }
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.alignSelf = "baseline";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="50" data-expected-height="20" data-offset-x="0">É</div>
+ <div id="item2" data-expected-width="50" data-expected-height="40" data-offset-x="50">É</div>
+ <div id="item3" data-expected-width="50" data-expected-height="30" data-offset-x="100">É</div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-007.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-007.html
new file mode 100644
index 00000000000..4d0231bf393
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-007.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing the value of Self-Alignment properties</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'align-self' property's value of a grid item from 'baseline' will exclude such item from its baseline context, which implies recomputing all the baseline offsets and aligning the items left in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 50px 50px 50px / 100px;
+ background: grey;
+ justify-items: baseline;
+ font-family: Ahem;
+ text-orientation: sideways;
+}
+#container > div { writing-mode: vertical-lr; }
+#item1 {
+ font-size: 20px;
+ background: blue;
+}
+#item2 {
+ font-size: 40px;
+ background: green;
+}
+#item3 {
+ font-size: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-x": 4 },
+ item2: {"data-offset-x": 0 },
+ item3: {"data-offset-x": 2 }
+ }
+
+ let after = {
+ item1: {"data-offset-x": 2 },
+ item2: {"data-offset-x": 60 },
+ item3: {"data-offset-x": 0 }
+ }
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.justifySelf = "end";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0">É</div>
+ <div id="item2" data-expected-width="40" data-expected-height="50" data-offset-y="50">É</div>
+ <div id="item3" data-expected-width="30" data-expected-height="50" data-offset-y="100">É</div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-008.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-008.html
new file mode 100644
index 00000000000..026f035ba92
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-alignment-style-changes-008.html
@@ -0,0 +1,65 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Changing the Self-Alignment properties to interfere in Baseline Alignment</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#self-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#justify-self-property">
+<link rel="help" href="https://drafts.csswg.org/css-align/#typedef-baseline-position">
+<meta name="assert" content="Changing the 'justify-self' property's value of a grid item to 'baseline' will include such item into a baseline context, which implies recomputing all the baseline offsets and aligning the items in such context.">
+<style>
+#container {
+ position: relative;
+ display: inline-grid;
+ grid: 50px 50px 50px / 100px;
+ background: grey;
+ justify-items: baseline;
+ font-family: Ahem;
+}
+#container > div { writing-mode: vertical-lr; }
+#item1 {
+ font-size: 20px;
+ background: blue;
+}
+#item2 {
+ font-size: 40px;
+ background: green;
+ justify-self: center;
+}
+#item3 {
+ font-size: 30px;
+ background: red;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script src="support/style-change.js"></script>
+<script>
+function runTest() {
+ let before = {
+ item1: {"data-offset-x": 5 },
+ item2: {"data-offset-x": 30 },
+ item3: {"data-offset-x": 0 }
+ };
+
+ let after = {
+ item1: {"data-offset-x": 10 },
+ item2: {"data-offset-x": 0 },
+ item3: {"data-offset-x": 5 }
+ };
+
+ evaluateStyleChangeMultiple("before", before);
+ item2.style.justifySelf = "baseline";
+ evaluateStyleChangeMultiple("after", after);
+ done();
+}
+</script>
+<body onload="runTest()">
+ <div id="container">
+ <div id="item1" data-expected-width="20" data-expected-height="50" data-offset-y="0">É</div>
+ <div id="item2" data-expected-width="40" data-expected-height="50" data-offset-y="50">É</div>
+ <div id="item3" data-expected-width="30" data-expected-height="50" data-offset-y="100">É</div>
+ </div>
+ <div id="log"></div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html
new file mode 100644
index 00000000000..5ffacfdb2b4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/grid-self-baseline-not-applied-if-sizing-cyclic-dependency-003.html
@@ -0,0 +1,89 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Grid Layout Test: Self-Baseline alignment and sizing cyclic dependency</title>
+<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#alignment">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#column-align">
+<link rel="help" href="https://drafts.csswg.org/css-grid-1/#row-align">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-align-items">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#propdef-justify-items">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#baseline-alignment">
+<link rel="help" href="https://drafts.csswg.org/css-align-3/#valdef-justify-self-baseline">
+<link rel="stylesheet" href="../../support/grid.css">
+<link rel="stylesheet" href="../../support/alignment.css">
+<meta name="assert" content="Items not participating in baseline may later participate if there is an extra pass of the track sizing algorithm.">
+<!-- https://github.com/w3c/csswg-drafts/issues/3046 -->
+<style>
+.grid {
+ position: relative;
+ display: inline-grid;
+ background: grey;
+ text-orientation: sideways;
+ font-family: Ahem;
+}
+.row { grid: minmax(0px, 1fr) / 50px 50px 100px }
+.column { grid: 50px 50px 100px / minmax(0px, 1fr); }
+.item1 {
+ font-size: 30px;
+ background: blue;
+}
+.item2 {
+ font-size: 20px;
+ background: red;
+}
+.item3 {
+ font-size: 80px;
+ background: green;
+}
+.height50 { height: 50px; }
+.relativeHeight { height: 50%; }
+.relativeWidth { width: 50%; }
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.grid')">
+
+<pre>flex rows - column-axis baseline - the blue orthogonal item didn't participate in the first iteration</pre>
+<div class="grid row alignItemsBaseline">
+ <div class="item1 verticalLR" data-offset-x="0" data-offset-y="34" data-expected-width="50" data-expected-height="30">É</div>
+ <div class="item2" data-offset-x="50" data-offset-y="48" data-expected-width="50" data-expected-height="20">É</div>
+ <div class="item3" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="80">É</div>
+</div>
+
+<pre>flex row - column-axis baseline - the blue relative sized item didn't participate in the first iterarion</pre>
+<div class="grid row alignItemsBaseline ">
+ <div class="item1 relativeHeight" data-offset-x="0" data-offset-y="40" data-expected-width="50" data-expected-height="40"></div>
+ <div class="item2" data-offset-x="50" data-offset-y="64" data-expected-width="50" data-expected-height="20">É</div>
+ <div class="item3 verticalLR" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="80">É</div>
+</div>
+
+<pre>flex row - both the blue relative sized and red orthogonal didn't participate in the first iteration</pre>
+<div class="grid row alignItemsBaseline">
+ <div class="item1 relativeHeight" data-offset-x="0" data-offset-y="24" data-expected-width="50" data-expected-height="40"></div>
+ <div class="item2 verticalLR" data-offset-x="50" data-offset-y="44" data-expected-width="50" data-expected-height="20">É</div>
+ <div class="item3" data-offset-x="100" data-offset-y="0" data-expected-width="100" data-expected-height="80">É</div>
+</div>
+
+<pre>flex column - row-axis baseline - the blue orthogonal item didn't participate in the first iteration</pre>
+<div class="grid column justifyItemsBaseline">
+ <div class="item1" data-offset-x="16" data-offset-y="0" data-expected-width="30" data-expected-height="50">É</div>
+ <div class="item2 verticalLR" data-offset-x="12" data-offset-y="50" data-expected-width="20" data-expected-height="50">É</div>
+ <div class="item3 verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="80" data-expected-height="100">É</div>
+</div>
+
+<pre>flex column - column-axis baseline - the blue relative sized item didn't participate in the first iterarion</pre>
+<div class="grid column justifyItemsBaseline">
+ <div class="item1 relativeWidth height50" data-offset-x="16" data-offset-y="0" data-expected-width="40" data-expected-height="50"></div>
+ <div class="item2 verticalLR" data-offset-x="12" data-offset-y="50" data-expected-width="20" data-expected-height="50">É</div>
+ <div class="item3 verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="80" data-expected-height="100">É</div>
+</div>
+
+<pre>flex columns - both the blue relative sized and red orthogonal didn't participate in the first iteration</pre>
+<div class="grid column justifyItemsBaseline">
+ <div class="item1 relativeWidth height50" data-offset-x="16" data-offset-y="0" data-expected-width="40" data-expected-height="50"></div>
+ <div class="item2" data-offset-x="16" data-offset-y="50" data-expected-width="20" data-expected-height="50">É</div>
+ <div class="item3 verticalLR" data-offset-x="0" data-offset-y="100" data-expected-width="80" data-expected-height="100">É</div>
+</div>
+
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-grid/alignment/support/style-change.js b/tests/wpt/web-platform-tests/css/css-grid/alignment/support/style-change.js
index 5619394da2b..766d140d2b2 100644
--- a/tests/wpt/web-platform-tests/css/css-grid/alignment/support/style-change.js
+++ b/tests/wpt/web-platform-tests/css/css-grid/alignment/support/style-change.js
@@ -3,3 +3,12 @@ function evaluateStyleChange(element, phase, expectedProperty, expectedResult) {
element.setAttribute(expectedProperty, expectedResult);
checkLayout("." + phase, false);
}
+function evaluateStyleChangeMultiple(phase, expectedResult) {
+ for (var item in expectedResult) {
+ var element = document.getElementById(item);
+ element.className += " " + phase;
+ for (var key in expectedResult[item])
+ element.setAttribute(key, expectedResult[item][key]);
+ }
+ checkLayout("." + phase, false);
+}
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll-ref.html
new file mode 100644
index 00000000000..1a7cfb6e230
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<title>Multicol under vertical-rl scrolling container</title>
+<p>Passes if there are two green squares</p>
+<div id="scroller" style="width: 200px; height: 200px; overflow: scroll; border: 1px solid black">
+ <div style="width: 580px; height: 500px; position: relative">
+ <div style="position: absolute; right: 0">
+ <div style="width: 80px; height: 80px; background: green"></div>
+ <div style="height: 20px"></div>
+ <div style="width: 80px; height: 80px; background: green"></div>
+ </div>
+ </div>
+</div>
+<script>
+// Scroll all the way to the right.
+scroller.scrollLeft = 800;
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll.html
new file mode 100644
index 00000000000..f96a26ae77b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-under-vertical-rl-scroll.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<title>Multicol under vertical-rl scrolling container</title>
+<link rel="match" href="multicol-under-vertical-rl-scroll-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-multicol">
+<p>Passes if there are two green squares</p>
+<div style="width: 200px; height: 200px; overflow: scroll; writing-mode: vertical-rl; border: 1px solid black">
+ <div style="columns: 2; column-gap: 20px; width: 80px; height: 180px">
+ <div style="width: 160px; background: green"></div>
+ </div>
+ <div style="width: 500px; height: 500px"></div>
+</div>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/registered-properties-inheritance.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/registered-properties-inheritance.html
index 8f9eafee19e..614a72a797b 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/registered-properties-inheritance.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/registered-properties-inheritance.html
@@ -72,4 +72,18 @@ test(function(){
assert_equals(getComputedStyle(inner).getPropertyValue('--inherited-length-5'), '42px');
}, "Reference to syntax-incompatible variable results in inherited value");
+test(function(){
+ CSS.registerProperty({name: '--inherited-em', syntax: '<length>', initialValue: '0px', inherits: true});
+ outer.style = 'font-size: 11px; --inherited-em: 10em;';
+ inner.style = 'font-size: 22px; --unregistered:var(--inherited-em);';
+ assert_equals(getComputedStyle(inner).getPropertyValue('--unregistered'), '110px');
+}, "Font-relative units are absolutized before before inheritance");
+
+test(function(){
+ CSS.registerProperty({name: '--calc-length', syntax: '<length>', initialValue: '0px', inherits: true});
+ outer.style = '--calc-length: calc(10px + 10px);';
+ inner.style = '--unregistered:var(--calc-length);';
+ assert_equals(getComputedStyle(inner).getPropertyValue('--unregistered'), '20px');
+}, "Calc expressions are resolved before inheritance");
+
</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 d65348543c4..c26e1cda1f6 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
@@ -4,12 +4,12 @@
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
- function register_length(name) {
+ function register_length(name, inherits=true) {
CSS.registerProperty({
name: name,
syntax: '<length>',
initialValue: '0px',
- inherits: false
+ inherits: inherits
});
}
@@ -22,6 +22,9 @@
register_length('--font-size-rem-via-var');
register_length('--font-size-ex-via-var');
register_length('--font-size-ch-via-var');
+ register_length('--font-size-em-inherited', true);
+ register_length('--font-size-ex-inherited', true);
+ register_length('--font-size-ch-inherited', true);
</script>
<style>
:root {
@@ -43,12 +46,20 @@
--font-size-ch-via-var: var(--unregistered-ch);
}
+ #parent {
+ --font-size-em-inherited: 4em;
+ --font-size-ex-inherited: 4ex;
+ --font-size-ch-inherited: 4ch;
+ }
+
#target {
font-size: 11px;
}
</style>
-<div id=target></div>
+<div id=parent>
+ <div id=target></div>
+</div>
<div id=ref></div>
<script>
@@ -170,4 +181,25 @@
assert_property_equals('--font-size-rem-via-var', expected10rem, root);
}, 'Lengths with rem units are detected via var references');
+ test(function() {
+ let expected4em = compute_dimension('4em', 'unset');
+ target.style = 'font-size: var(--font-size-em-inherited);';
+ assert_property_equals('font-size', expected4em);
+ assert_property_equals('--font-size-em-inherited', expected4em);
+ }, 'Inherited lengths with em units may be used');
+
+ test(function() {
+ let expected4ex = compute_dimension('4ex', 'unset');
+ target.style = 'font-size: var(--font-size-ex-inherited);';
+ assert_property_equals('font-size', expected4ex);
+ assert_property_equals('--font-size-ex-inherited', expected4ex);
+ }, 'Inherited lengths with ex units may be used');
+
+ test(function() {
+ let expected4ch = compute_dimension('4ch', 'unset');
+ target.style = 'font-size: var(--font-size-ch-inherited);';
+ assert_property_equals('font-size', expected4ch);
+ assert_property_equals('--font-size-ch-inherited', expected4ch);
+ }, 'Inherited lengths with ch units may be used');
+
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html
index d8a83157125..5de6d20f11b 100644
--- a/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html
+++ b/tests/wpt/web-platform-tests/css/css-properties-values-api/var-reference-registered-properties.html
@@ -54,7 +54,7 @@ test(function() {
assert_equals(computedStyle.getPropertyValue('--registered-length-6'), '80px');
assert_equals(computedStyle.getPropertyValue('--registered-length-7'), '123px');
assert_equals(computedStyle.getPropertyValue('--length-1'), ' 20px');
- assert_equals(computedStyle.getPropertyValue('--length-2'), ' 10px');
+ assert_equals(computedStyle.getPropertyValue('--length-2'), ' 10px');
assert_equals(computedStyle.getPropertyValue('--length-3'), ' calc(123px + 123px)');
assert_equals(computedStyle.getPropertyValue('--registered-length-invalid'), '15px');
@@ -96,5 +96,43 @@ test(function(){
assert_equals(computedStyle.getPropertyValue('--registered-length-list-3'), '1px, 10px, 2px, 1px, 20px, 10px, 2px');
}, 'Registered lists may be concatenated');
+test(function(){
+ CSS.registerProperty({
+ name: '--length-em',
+ syntax: '<length>',
+ initialValue: '0px',
+ inherits: false
+ });
+ element.style = 'font-size: 11px; --length-em: 10em; --unregistered:var(--length-em);';
+ let computedStyle = getComputedStyle(element);
+ assert_equals(computedStyle.getPropertyValue('--unregistered'), '110px');
+ element.style = '';
+}, 'Font-relative units are absolutized when substituting');
+
+test(function(){
+ CSS.registerProperty({
+ name: '--length-calc',
+ syntax: '<length>',
+ initialValue: '0px',
+ inherits: false
+ });
+ element.style = 'font-size: 11px; --length-calc: calc(10em + 10px); --unregistered:var(--length-calc);';
+ let computedStyle = getComputedStyle(element);
+ assert_equals(computedStyle.getPropertyValue('--unregistered'), '120px');
+ element.style = '';
+}, 'Calc expressions are resolved when substituting');
+
+test(function(){
+ CSS.registerProperty({
+ name: '--length-calc-list',
+ syntax: '<length>#',
+ initialValue: '0px',
+ inherits: false
+ });
+ element.style = 'font-size: 11px; --length-calc-list: 10em, calc(10em + 10px); --unregistered:var(--length-calc-list);';
+ let computedStyle = getComputedStyle(element);
+ assert_equals(computedStyle.getPropertyValue('--unregistered'), '110px, 120px');
+ element.style = '';
+}, 'Lists with relative units are absolutized when substituting');
</script>
diff --git a/tests/wpt/web-platform-tests/css/css-tables/caption-writing-mode-001.html b/tests/wpt/web-platform-tests/css/css-tables/caption-writing-mode-001.html
new file mode 100644
index 00000000000..835a5116ae3
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-tables/caption-writing-mode-001.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<script src='/resources/testharness.js'></script>
+<script src='/resources/testharnessreport.js'></script>
+<link rel="author" title="David Grogan" href="dgrogan@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/css-writing-modes-3/#orthogonal-flows">
+<meta name="flags" content="" />
+<meta name="assert" content="caption margins are resolved against table's height when table has vertical flow" />
+<style>
+x-table {
+ display: table;
+ width: 300px;
+ height: 200px;
+ writing-mode: vertical-lr;
+ outline: 2px dashed blue;
+}
+x-caption {
+ display: table-caption;
+ height: 50px;
+ width: 120px;
+ writing-mode: horizontal-tb;
+ outline: 1px solid black;
+}
+</style>
+
+<x-table>
+ <x-caption id=captionMarginLeft style="margin-left:20%">caption</x-caption>
+</x-table>
+<x-table>
+ <x-caption id=captionMarginTop style="margin:auto 0">caption</x-caption>
+</x-table>
+<p>This is a script test because of how ridiculously differently the current
+engines render these cases.</p>
+
+
+<script>
+let caption_margin_left = getComputedStyle(id=captionMarginLeft).marginLeft;
+test(() => assert_equals(caption_margin_left, "40px"), "Caption percent margins are resolved against table's height for vertical-lr tables");
+let caption_margin_top = getComputedStyle(captionMarginTop).marginTop;
+test(() => assert_equals(caption_margin_top, "75px"), "Caption with auto top/bottom margins is centered vertically for vertical-lr tables");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1-ref.html b/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1-ref.html
new file mode 100644
index 00000000000..7623adb59e6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1-ref.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Text Test: minimum rendered width of tab character</title>
+ <link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+ <style>
+ span { background-color: yellow; display: inline-block; letter-spacing: -.1em; }
+ pre { position: absolute; top: 0; }
+ </style>
+</head>
+<body>
+<pre>
+</pre>
+<pre>
+</pre>
+<script>
+ let pre = document.getElementsByTagName("pre")[0];
+ let test = "";
+ for (i = 7.0; i <= 8.125; i += 0.125) {
+ test += `<span style="width:${i}ch">${i}ch</span>\n`;
+ }
+ pre.innerHTML = test;
+ pre = document.getElementsByTagName("pre")[1];
+ test = "";
+ for (i = 0; i < 5; i++) {
+ test += `\tfoo\n`;
+ }
+ for (i = 0; i < 5; i++) {
+ test += `\t\tfoo\n`;
+ }
+ pre.innerHTML = test;
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1.html b/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1.html
new file mode 100644
index 00000000000..6b014260e36
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/tab-size/tab-min-rendered-width-1.html
@@ -0,0 +1,27 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Text Test: minimum rendered width of tab character</title>
+ <link rel="author" title="Jonathan Kew" href="mailto:jkew@mozilla.com">
+ <link rel="reviewer" title="Xidorn Quan" href="https://www.upsuper.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-phase-2">
+ <link rel="match" href="tab-min-rendered-width-1-ref.html">
+ <meta name="assert" content="If [rendered width of tab would be] less than 0.5ch, then the subsequent tab stop is used instead.">
+ <style>
+ span { background-color: yellow; display: inline-block; letter-spacing: -.1em; }
+ pre { position: absolute; top: 0; }
+ </style>
+</head>
+<body>
+<pre>
+</pre>
+<script>
+ let pre = document.getElementsByTagName("pre")[0];
+ let test = "";
+ for (i = 7.0; i <= 8.125; i += 0.125) {
+ test += `<span style="width:${i}ch">${i}ch</span>&#9;foo\n`;
+ }
+ pre.innerHTML = test;
+</script>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transitionevent-interface.html b/tests/wpt/web-platform-tests/css/css-transitions/transitionevent-interface.html
new file mode 100644
index 00000000000..cd47469ec74
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transitions/transitionevent-interface.html
@@ -0,0 +1,229 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Transitions Test: TransitionEvent interface</title>
+<link rel="help" href="https://drafts.csswg.org/css-transitions-1/#interface-transitionevent">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="transitionevent-interface.js"></script>
+
+<script>
+test(function() {
+ var event = new TransitionEvent("");
+ assert_true(event instanceof window.TransitionEvent);
+}, "the event is an instance of TransitionEvent");
+
+test(function() {
+ var event = new TransitionEvent("");
+ assert_true(event instanceof window.Event);
+}, "the event inherts from Event");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent();
+ }, 'First argument is required, so was expecting a TypeError.');
+}, 'Missing type argument');
+
+test(function() {
+ var event = new TransitionEvent("test");
+ assert_equals(event.type, "test");
+}, "type argument is string");
+
+test(function() {
+ var event = new TransitionEvent(null);
+ assert_equals(event.type, "null");
+}, "type argument is null");
+
+test(function() {
+ var event = new TransitionEvent(undefined);
+ assert_equals(event.type, "undefined");
+}, "event type set to undefined");
+
+test(function() {
+ var event = new TransitionEvent("test");
+ assert_equals(event.propertyName, "");
+}, "propertyName has default value of empty string");
+
+test(function() {
+ var event = new TransitionEvent("test");
+ assert_equals(event.elapsedTime, 0.0);
+}, "elapsedTime has default value of 0.0");
+
+test(function() {
+ var event = new TransitionEvent("test");
+ assert_readonly(event, "propertyName", "readonly attribute value");
+}, "propertyName is readonly");
+
+test(function() {
+ var event = new TransitionEvent("test");
+ assert_readonly(event, "elapsedTime", "readonly attribute value");
+}, "elapsedTime is readonly");
+
+test(function() {
+ var event = new TransitionEvent("test", null);
+ assert_equals(event.propertyName, "");
+ assert_equals(event.elapsedTime, 0.0);
+}, "animationEventInit argument is null");
+
+test(function() {
+ var event = new TransitionEvent("test", undefined);
+ assert_equals(event.propertyName, "");
+ assert_equals(event.elapsedTime, 0.0);
+}, "animationEventInit argument is undefined");
+
+test(function() {
+ var event = new TransitionEvent("test", {});
+ assert_equals(event.propertyName, "");
+ assert_equals(event.elapsedTime, 0.0);
+}, "animationEventInit argument is empty dictionary");
+
+test(function() {
+ var event = new TransitionEvent("test", {pseudoElement: "::testPseudo"});
+ assert_equals(event.pseudoElement, "::testPseudo");
+}, "TransitionEvent.pseudoElement initialized from the dictionary");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: "sample"});
+ assert_equals(event.propertyName, "sample");
+}, "propertyName set to 'sample'");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: undefined});
+ assert_equals(event.propertyName, "");
+}, "propertyName set to undefined");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: null});
+ assert_equals(event.propertyName, "null");
+}, "propertyName set to null");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: false});
+ assert_equals(event.propertyName, "false");
+}, "propertyName set to false");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: true});
+ assert_equals(event.propertyName, "true");
+}, "propertyName set to true");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: 0.5});
+ assert_equals(event.propertyName, "0.5");
+}, "propertyName set to a number");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: []});
+ assert_equals(event.propertyName, "");
+}, "propertyName set to []");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: [1, 2, 3]});
+ assert_equals(event.propertyName, "1,2,3");
+}, "propertyName set to [1, 2, 3]");
+
+test(function() {
+ var event = new TransitionEvent("test", {propertyName: {sample: 0.5}});
+ assert_equals(event.propertyName, "[object Object]");
+}, "propertyName set to an object");
+
+test(function() {
+ var event = new TransitionEvent("test",
+ {propertyName: {valueOf: function () { return 'sample'; }}});
+ assert_equals(event.propertyName, "[object Object]");
+}, "propertyName set to an object with a valueOf function");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: 0.5});
+ assert_equals(event.elapsedTime, 0.5);
+}, "elapsedTime set to 0.5");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: -0.5});
+ assert_equals(event.elapsedTime, -0.5);
+}, "elapsedTime set to -0.5");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: undefined});
+ assert_equals(event.elapsedTime, 0);
+}, "elapsedTime set to undefined");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: null});
+ assert_equals(event.elapsedTime, 0);
+}, "elapsedTime set to null");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: false});
+ assert_equals(event.elapsedTime, 0);
+}, "elapsedTime set to false");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: true});
+ assert_equals(event.elapsedTime, 1);
+}, "elapsedTime set to true");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: ""});
+ assert_equals(event.elapsedTime, 0);
+}, "elapsedTime set to ''");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: []});
+ assert_equals(event.elapsedTime, 0);
+}, "elapsedTime set to []");
+
+test(function() {
+ var event = new TransitionEvent("test", {elapsedTime: [0.5]});
+ assert_equals(event.elapsedTime, 0.5);
+}, "elapsedTime set to [0.5]");
+
+test(function() {
+ var event = new TransitionEvent(
+ "test", {elapsedTime: { valueOf: function() { return 0.5; }}});
+ assert_equals(event.elapsedTime, 0.5);
+}, "elapsedTime set to an object with a valueOf function");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: NaN});
+ }, 'elapsedTime cannot be NaN so was expecting a TypeError');
+}, "elapsedTime cannot be set to NaN");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: Infinity});
+ }, 'elapsedTime cannot be Infinity so was expecting a TypeError');
+}, "elapsedTime cannot be set to Infinity");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: -Infinity});
+ }, 'elapsedTime cannot be -Infinity so was expecting a TypeError');
+}, "elapsedTime cannot be set to -Infinity");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: "sample"});
+ }, 'elapsedTime cannot be a string so was expecting a TypeError');
+}, "elapsedTime cannot be set to 'sample'");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: [0.5, 1.0]});
+ }, 'elapsedTime cannot be a multi-element array so was expecting a TypeError');
+}, "elapsedTime cannot be set to [0.5, 1.0]");
+
+test(function() {
+ assert_throws(new TypeError(), function() {
+ new TransitionEvent("test", {elapsedTime: { sample: 0.5}});
+ }, 'elapsedTime cannot be an object so was expecting a TypeError');
+}, "elapsedTime cannot be set to an object");
+
+test(function() {
+ var eventInit = {propertyName: "sample", elapsedTime: 0.5};
+ var event = new TransitionEvent("test", eventInit);
+ assert_equals(event.propertyName, "sample");
+ assert_equals(event.elapsedTime, 0.5);
+}, "TransitionEventInit properties set value");
+</script>
diff --git a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
index 952c8365fb7..9f93ea844d7 100644
--- a/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
+++ b/tests/wpt/web-platform-tests/docs/_writing-tests/testharness-api.md
@@ -793,14 +793,6 @@ asserts that one `assert_func(actual, expected_array_N, extra_arg1, ..., extra_a
allows multiple behaviours. Test authors should not use this method simply to hide
UA bugs.
-### `assert_exists(object, property_name, description)`
-**deprecated**
-asserts that object has an own property `property_name`
-
-### `assert_not_exists(object, property_name, description)`
-**deprecated**
-assert that object does not have own property `property_name`
-
## Metadata ##
It is possible to add optional metadata to tests; this can be done in
diff --git a/tests/wpt/web-platform-tests/dom/events/shadow-relatedTarget.html b/tests/wpt/web-platform-tests/dom/events/shadow-relatedTarget.html
new file mode 100644
index 00000000000..713555b7d8a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/dom/events/shadow-relatedTarget.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<!--
+ This test is adopted from Olli Pettay's test case at
+ http://mozilla.pettay.fi/shadow_focus.html
+-->
+<div id="host"></div>
+<input id="lightInput">
+<script>
+const root = host.attachShadow({ mode: "closed" });
+root.innerHTML = "<input id='shadowInput'>";
+
+async_test((test) => {
+ root.getElementById("shadowInput").focus();
+ window.addEventListener("focus", test.step_func_done((e) => {
+ assert_equals(e.relatedTarget, host);
+ }, "relatedTarget should be pointing to shadow host."), true);
+ lightInput.focus();
+}, "relatedTarget should not leak at capturing phase, at window object.");
+
+async_test((test) => {
+ root.getElementById("shadowInput").focus();
+ lightInput.addEventListener("focus", test.step_func_done((e) => {
+ assert_equals(e.relatedTarget, host);
+ }, "relatedTarget should be pointing to shadow host."), true);
+ lightInput.focus();
+}, "relatedTarget should not leak at target.");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/eventsource/eventsource-prototype.htm b/tests/wpt/web-platform-tests/eventsource/eventsource-prototype.htm
index 38f63eb5f00..24bf9954007 100644
--- a/tests/wpt/web-platform-tests/eventsource/eventsource-prototype.htm
+++ b/tests/wpt/web-platform-tests/eventsource/eventsource-prototype.htm
@@ -12,7 +12,7 @@
EventSource.prototype.ReturnTrue = function() { return true }
var source = new EventSource("resources/message.py")
assert_true(source.ReturnTrue())
- assert_exists(window, "EventSource")
+ assert_own_property(window, "EventSource")
source.close()
})
</scrIpt>
diff --git a/tests/wpt/web-platform-tests/fetch/corb/script-html-via-cross-origin-blob-url.sub.html b/tests/wpt/web-platform-tests/fetch/corb/script-html-via-cross-origin-blob-url.sub.html
index 8ce7987ff89..c8a90c79b3f 100644
--- a/tests/wpt/web-platform-tests/fetch/corb/script-html-via-cross-origin-blob-url.sub.html
+++ b/tests/wpt/web-platform-tests/fetch/corb/script-html-via-cross-origin-blob-url.sub.html
@@ -19,7 +19,7 @@ async_test(function(t) {
}
function step2_processSubframeMsg(msg) {
- assert_not_exists(msg, 'error');
+ assert_false(msg.hasOwnProperty('error'), 'unexpected property found: "error"');
assert_equals(msg.blob_type, 'text/html');
assert_equals(msg.blob_size, 147);
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-timing-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-timing-manual.html
index 7a536363a21..6ccc365c711 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-timing-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/document-exit-fullscreen-timing-manual.html
@@ -20,7 +20,7 @@ async_test(t => {
const events = [];
const callback = t.step_func(event => {
// fullscreenElement should have changed before either event is fired.
- assert_equals(document.fullscreenElement, null, `fullscreenElement in {event.type} event`);
+ assert_equals(document.fullscreenElement, null, `fullscreenElement in ${event.type} event`);
events.push(event.type);
if (event.type == 'fullscreenchange') {
step_timeout(t.unreached_func('timer callback'));
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 8ba2ab71b15..06495492656 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
@@ -7,18 +7,19 @@
<iframe allowfullscreen></iframe>
<iframe allowfullscreen></iframe>
<script>
-async_test(function(t)
-{
- var iframes = document.getElementsByTagName("iframe");
- 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.step_func_done(function() {
- assert_equals(document.fullscreenElement, iframes[1]);
- });
- iframes[1].contentDocument.onfullscreenerror = t.unreached_func("fullscreenchange error");
- });
-});
+// wait for load event to avoid https://bugzil.la/1493878
+window.onload = function() {
+ async_test(function(t) {
+ var iframes = document.getElementsByTagName("iframe");
+ 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.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-not-allowed-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-allowed-manual.html
index 1e18be5e677..fa5a923b2b2 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-allowed-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-ready-check-not-allowed-manual.html
@@ -6,14 +6,16 @@
<div id="log"></div>
<iframe></iframe>
<script>
-async_test(function(t)
-{
- var iframe = document.querySelector("iframe");
- document.onfullscreenchange = t.unreached_func("document fullscreenchange event");
- document.onfullscreenerror = t.unreached_func("document fullscreenerror event");
- iframe.contentDocument.onfullscreenchange = t.unreached_func("iframe fullscreenchange event");
- iframe.contentDocument.onfullscreenerror = t.step_func_done();
- assert_false(iframe.contentDocument.fullscreenEnabled, "fullscreen enabled flag");
- trusted_request(t, iframe.contentDocument.body, document.body);
-});
+// wait for load event to avoid https://bugzil.la/1493878
+window.onload = function() {
+ async_test(function(t) {
+ var iframe = document.querySelector("iframe");
+ document.onfullscreenchange = t.unreached_func("document fullscreenchange event");
+ document.onfullscreenerror = t.unreached_func("document fullscreenerror event");
+ iframe.contentDocument.onfullscreenchange = t.unreached_func("iframe fullscreenchange event");
+ iframe.contentDocument.onfullscreenerror = t.step_func_done();
+ assert_false(iframe.contentDocument.fullscreenEnabled, "fullscreen enabled flag");
+ trusted_request(t, iframe.contentDocument.body, document.body);
+ });
+};
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
index dc2a99c1e83..6d5bed19f3b 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-and-exit-iframe-manual.html
@@ -6,37 +6,40 @@
<div id="log"></div>
<iframe allowfullscreen></iframe>
<script>
-async_test(t => {
- const iframe = document.querySelector('iframe');
- const iframeDoc = iframe.contentDocument;
- const iframeBody = iframeDoc.body;
+// wait for load event to avoid https://bugzil.la/1493878
+window.onload = function() {
+ async_test(t => {
+ const iframe = document.querySelector('iframe');
+ const iframeDoc = iframe.contentDocument;
+ const iframeBody = iframeDoc.body;
- let count = 0;
- document.onfullscreenchange = iframeDoc.onfullscreenchange = t.step_func(event => {
- count++;
- assert_between_inclusive(count, 1, 4, 'number of fullscreenchange events');
- // Both when entering and exiting, the fullscreenchange event is fired first
- // on the outer document and then on the iframe's document. This is because
- // the events are fired in animation frame tasks, which run in "frame tree"
- // order.
- const expected = {
- target: count == 1 || count == 3 ? iframe : iframeBody,
- outerFullscreenElement: count <= 2 ? iframe : null,
- innerFullscreenElement: count <= 2 ? iframeBody : null,
- };
- assert_equals(event.target, expected.target, 'event target');
- assert_equals(document.fullscreenElement, expected.outerFullscreenElement, 'outer fullscreenElement');
- assert_equals(iframeDoc.fullscreenElement, expected.innerFullscreenElement, 'inner fullscreenElement');
- if (count == 2) {
- iframeDoc.exitFullscreen();
- } else if (count == 4) {
- // Done, but set timeout to fail on extra events.
- step_timeout(t.step_func_done());
- }
- });
- document.onfullscreenerror = t.unreached_func('fullscreenerror event');
- iframeDoc.onfullscreenerror = t.unreached_func('iframe fullscreenerror event');
+ let count = 0;
+ document.onfullscreenchange = iframeDoc.onfullscreenchange = t.step_func(event => {
+ count++;
+ assert_between_inclusive(count, 1, 4, 'number of fullscreenchange events');
+ // Both when entering and exiting, the fullscreenchange event is fired first
+ // on the outer document and then on the iframe's document. This is because
+ // the events are fired in animation frame tasks, which run in "frame tree"
+ // order.
+ const expected = {
+ target: count == 1 || count == 3 ? iframe : iframeBody,
+ outerFullscreenElement: count <= 2 ? iframe : null,
+ innerFullscreenElement: count <= 2 ? iframeBody : null,
+ };
+ assert_equals(event.target, expected.target, 'event target');
+ assert_equals(document.fullscreenElement, expected.outerFullscreenElement, 'outer fullscreenElement');
+ assert_equals(iframeDoc.fullscreenElement, expected.innerFullscreenElement, 'inner fullscreenElement');
+ if (count == 2) {
+ iframeDoc.exitFullscreen();
+ } else if (count == 4) {
+ // Done, but set timeout to fail on extra events.
+ step_timeout(t.step_func_done());
+ }
+ });
+ document.onfullscreenerror = t.unreached_func('fullscreenerror event');
+ iframeDoc.onfullscreenerror = t.unreached_func('iframe fullscreenerror event');
- trusted_request(t, iframeBody, iframeBody);
-});
+ trusted_request(t, iframeBody, iframeBody);
+ });
+};
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
index 359b688b427..1ebf7518c3c 100644
--- a/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/api/element-request-fullscreen-timing-manual.html
@@ -28,21 +28,25 @@ async_test(t => {
}, 'Timing of fullscreenchange and resize events');
async_test(t => {
- var promise = document.createElement('a').requestFullscreen();
- var promise_executed = false;
- if (promise) {
- promise.catch(()=>{promise_executed = true; });
- } else {
- // if promises aren't supported treat it as executed.
- promise_executed = true;
- }
+ // Gecko throttles requestAnimationFrame before the first paint, so
+ // wrap the test to work around that.
+ requestAnimationFrame(t.step_func(() => {
+ var promise = document.createElement('a').requestFullscreen();
+ var promise_executed = false;
+ if (promise) {
+ promise.catch(()=>{promise_executed = true; });
+ } else {
+ // if promises aren't supported treat it as executed.
+ promise_executed = true;
+ }
- // If fullscreenerror is an animation frame event, then animation frame
- // callbacks should be run after it is fired, before the timer callback.
- document.onfullscreenerror = t.step_func(() => {
- assert_true(promise_executed, "promise executed");
- step_timeout(t.unreached_func('timer callback'));
- requestAnimationFrame(t.step_func_done());
- });
+ // If fullscreenerror is an animation frame event, then animation frame
+ // callbacks should be run after it is fired, before the timer callback.
+ document.onfullscreenerror = t.step_func(() => {
+ assert_true(promise_executed, "promise executed");
+ step_timeout(t.unreached_func('timer callback'));
+ requestAnimationFrame(t.step_func_done());
+ });
+ }));
}, 'Timing of fullscreenerror event');
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
index 69082cacc2b..59b2c4330f2 100644
--- a/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/model/move-to-fullscreen-iframe-manual.html
@@ -5,33 +5,36 @@
<script src="../trusted-click.js"></script>
<iframe allowfullscreen></iframe>
<script>
-async_test(t => {
- const iframe = document.querySelector('iframe');
- const iframeDoc = iframe.contentDocument;
+// wait for load event to avoid https://bugzil.la/1493878
+window.onload = function() {
+ async_test(t => {
+ const iframe = document.querySelector('iframe');
+ const iframeDoc = iframe.contentDocument;
- // Enter fullscreen for the iframe's body element.
- trusted_request(t, iframeDoc.body, iframeDoc.body);
- document.onfullscreenchange = t.step_func(() => {
- assert_equals(document.fullscreenElement, iframe, "document's initial fullscreen element");
- assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's initial fullscreen element");
+ // Enter fullscreen for the iframe's body element.
+ trusted_request(t, iframeDoc.body, iframeDoc.body);
+ document.onfullscreenchange = t.step_func(() => {
+ assert_equals(document.fullscreenElement, iframe, "document's initial fullscreen element");
+ assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's initial fullscreen element");
- // Then, move the outer document's body into the iframe. This is an unusual
- // thing to do, but means that the iframe is removed from its document and
- // should trigger fullscreen exit.
- iframeDoc.documentElement.appendChild(document.body);
+ // Then, move the outer document's body into the iframe. This is an unusual
+ // thing to do, but means that the iframe is removed from its document and
+ // should trigger fullscreen exit.
+ iframeDoc.documentElement.appendChild(document.body);
- // If we exit in an orderly fashion, that's all one can ask for.
- document.onfullscreenchange = t.step_func_done(() => {
- assert_equals(document.fullscreenElement, null, "document's final fullscreen element");
+ // If we exit in an orderly fashion, that's all one can ask for.
+ document.onfullscreenchange = t.step_func_done(() => {
+ assert_equals(document.fullscreenElement, null, "document's final fullscreen element");
- // Because the iframe was removed, its browsing context was discarded and
- // its contentDocument has become null. Because that browsing context was
- // neither a descendant browsing context nor had an active document,
- // nothing at all was done with it in the exit fullscreen algorithm, so
- // its fullscreenElement is unchanged.
- assert_equals(iframe.contentDocument, null, "iframe's content document");
- assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's final fullscreen element");
+ // Because the iframe was removed, its browsing context was discarded and
+ // its contentDocument has become null. Because that browsing context was
+ // neither a descendant browsing context nor had an active document,
+ // nothing at all was done with it in the exit fullscreen algorithm, so
+ // its fullscreenElement is unchanged.
+ assert_equals(iframe.contentDocument, null, "iframe's content document");
+ assert_equals(iframeDoc.fullscreenElement, iframeDoc.body, "iframe's final fullscreen element");
+ });
});
});
-});
+};
</script>
diff --git a/tests/wpt/web-platform-tests/fullscreen/rendering/ua-style-iframe-manual.html b/tests/wpt/web-platform-tests/fullscreen/rendering/ua-style-iframe-manual.html
index bf93aa28c3f..f2a227437a5 100644
--- a/tests/wpt/web-platform-tests/fullscreen/rendering/ua-style-iframe-manual.html
+++ b/tests/wpt/web-platform-tests/fullscreen/rendering/ua-style-iframe-manual.html
@@ -14,21 +14,32 @@ iframe {
<div id="log"></div>
<div id="ancestor"><iframe></iframe></div>
<script>
+function assert_dir_properties(style, propBase, value, state) {
+ for (let dir of ["Top", "Right", "Bottom", "Left"]) {
+ let prop = propBase.replace('{}', dir);
+ assert_equals(style[prop], value, `${state} ${prop} style`);
+ }
+}
+
async_test(t => {
const ancestor = document.getElementById('ancestor');
const iframe = ancestor.firstChild;
const initialStyle = getComputedStyle(iframe);
- assert_equals(initialStyle.border, '1px solid rgb(0, 0, 255)', 'initial border style');
- assert_equals(initialStyle.padding, '1px', 'initial padding style');
+ assert_dir_properties(initialStyle, 'border{}Width', '1px', 'initial');
+ assert_dir_properties(initialStyle, 'border{}Style', 'solid', 'initial');
+ assert_dir_properties(initialStyle, 'border{}Color', 'rgb(0, 0, 255)', 'initial');
+ assert_dir_properties(initialStyle, 'padding{}', '1px', 'initial');
assert_equals(initialStyle.transform, 'matrix(0.5, 0, 0, 0.5, 0, 0)', 'initial transform style');
trusted_request(t, iframe);
document.addEventListener('fullscreenchange', t.step_func_done(() => {
const fullscreenStyle = getComputedStyle(iframe);
- assert_equals(fullscreenStyle.border, '0px none rgb(0, 0, 0)', 'fullscreen border style');
- assert_equals(fullscreenStyle.padding, '0px', 'fullscreen padding style');
+ assert_dir_properties(fullscreenStyle, 'border{}Width', '0px', 'fullscreen');
+ assert_dir_properties(fullscreenStyle, 'border{}Style', 'none', 'fullscreen');
+ assert_dir_properties(fullscreenStyle, 'border{}Color', 'rgb(0, 0, 0)', 'fullscreen');
+ assert_dir_properties(fullscreenStyle, 'padding{}', '0px', 'fullscreen');
assert_equals(fullscreenStyle.transform, 'none', 'fullscreen transform style');
}));
});
diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/001.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/001.html
index 0e5632bbcdf..72735935479 100644
--- a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/001.html
+++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/001.html
@@ -44,7 +44,7 @@ function reportload() {
test(function () {
assert_equals( history.length, histlength + 1, 'make sure that you loaded the test in a new tab/window' );
}, 'history.length should update when setting location.hash');
- test(function () { assert_true( !!history.pushState, 'critical test; ignore any failures after this' ); }, 'history.pushState must exist'); //assert_exists does not allow prototype inheritance
+ test(function () { assert_true( !!history.pushState, 'critical test; ignore any failures after this' ); }, 'history.pushState must exist'); //assert_own_property does not allow prototype inheritance
test(function () { assert_true( !!iframe.contentWindow.history.pushState, 'critical test; ignore any failures after this' ); }, 'history.pushState must exist within iframes');
test(function () {
assert_equals( iframe.contentWindow.history.state, null );
@@ -250,7 +250,7 @@ function reportload() {
assert_equals( ev.state.numdata, 1, 'state numeric data was not correct' );
assert_equals( ev.state.strdata, 'string data', 'state string data was not correct' );
assert_true( !!ev.state.datedata.getTime, 'state date data was not correct' );
- assert_exists( ev.state, 'regdata', 'state regex data was not correct' );
+ assert_own_property( ev.state, 'regdata', 'state regex data was not correct' );
assert_equals( ev.state.regdata.source, 'a', 'state regex pattern data was not correct' );
assert_true( ev.state.regdata.global, 'state regex flag data was not correct' );
assert_equals( ev.state.regdata.lastIndex, 0, 'state regex lastIndex data was not correct' );
diff --git a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/002.html b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/002.html
index eb0c15aab89..c5bae3407c8 100644
--- a/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/002.html
+++ b/tests/wpt/web-platform-tests/html/browsers/history/the-history-interface/002.html
@@ -43,7 +43,7 @@ function reportload() {
test(function () {
assert_equals( history.length, histlength + 1, 'make sure that you loaded the test in a new tab/window' );
}, 'history.length should update when setting location.hash');
- test(function () { assert_true( !!history.replaceState, 'critical test; ignore any failures after this' ); }, 'history.replaceState must exist'); //assert_exists does not allow prototype inheritance
+ test(function () { assert_true( !!history.replaceState, 'critical test; ignore any failures after this' ); }, 'history.replaceState must exist'); //assert_own_property does not allow prototype inheritance
test(function () { assert_true( !!iframe.contentWindow.history.replaceState, 'critical test; ignore any failures after this' ); }, 'history.replaceState must exist within iframes');
test(function () {
assert_equals( iframe.contentWindow.history.state, null );
@@ -225,7 +225,7 @@ function reportload() {
assert_equals( ev.state.numdata, 1, 'state numeric data was not correct' );
assert_equals( ev.state.strdata, 'string data', 'state string data was not correct' );
assert_true( !!ev.state.datedata.getTime, 'state date data was not correct' );
- assert_exists( ev.state, 'regdata', 'state regex data was not correct' );
+ assert_own_property( ev.state, 'regdata', 'state regex data was not correct' );
assert_equals( ev.state.regdata.source, 'a', 'state regex pattern data was not correct' );
assert_true( ev.state.regdata.global, 'state regex flag data was not correct' );
assert_equals( ev.state.regdata.lastIndex, 0, 'state regex lastIndex data was not correct' );
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html
new file mode 100644
index 00000000000..2f313f3395f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border-ref.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<style>
+table {
+ border-collapse: collapse;
+}
+td {
+ border: 5px solid black;
+ width: 100px;
+ height: 100px;
+}
+</style>
+Passes if there is a grid containing 2x2 squares.
+<table>
+ <tbody>
+ <tr><td></td><td></td></tr>
+ <tr><td></td><td></td></tr>
+ </tbody>
+</table>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html
new file mode 100644
index 00000000000..5f131e6658a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/tables/transformed-tbody-tr-collapsed-border.html
@@ -0,0 +1,23 @@
+<!DOCTYPE html>
+<title>Test for transformed tbody and tr with collapsed borders</title>
+<link rel="match" href="transformed-tbody-tr-collapsed-border-ref.html">
+<style>
+table {
+ border-collapse: collapse;
+}
+tbody, tr {
+ transform: translateY(0);
+}
+td {
+ border: 5px solid black;
+ width: 100px;
+ height: 100px;
+}
+</style>
+Passes if there is a grid containing 2x2 squares.
+<table>
+ <tbody>
+ <tr><td></td><td></td></tr>
+ <tr><td></td><td></td></tr>
+ </tbody>
+</table>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html
new file mode 100644
index 00000000000..8023c5255ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering-ref.html
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Reference for legend and display: list-item numbering</title>
+<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+<style>
+ol { margin: 0; padding: 0; border: none; }
+ol > * { margin: 0 40px; padding: 0; }
+</style>
+
+<ol>
+ <li value="2">B</li>
+ <li value="1">A</li>
+ <li value="3">C</li>
+</ol>
diff --git a/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html
new file mode 100644
index 00000000000..ba58d353a01
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/rendering/non-replaced-elements/the-fieldset-and-legend-elements/legend-list-item-numbering.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Legend and display: list-item numbering</title>
+<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+<link rel=match href="legend-list-item-numbering-ref.html">
+
+<style>
+fieldset { margin: 0; padding: 0; border: none; list-style-type: decimal; }
+fieldset > * { margin: 0 40px; padding: 0; display: list-item; }
+</style>
+
+<fieldset>
+ <div>A</div>
+ <legend>B</legend>
+ <div>C</div>
+</fieldset>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html
index 7a86a86381d..575324d761a 100644
--- a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-01.html
@@ -4,6 +4,7 @@
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-link-element">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
+<script src=/common/get-host-info.sub.js></script>
<div id="log"></div>
<div id="test">
<script>
@@ -31,18 +32,6 @@ tUnsupported.step(function() {
elt.rel = "stylesheet";
elt.href = "nonexistent:stylesheet.css";
document.getElementsByTagName("head")[0].appendChild(elt);
-})
-
-var tText = async_test("Should get an error event for a text/plain response.")
-tText.step(function() {
- var elt = document.createElement("link");
- elt.onerror = tText.step_func(function() {
- assert_true(true, "Got error event for 404 error.")
- tText.done()
- })
- elt.onload = tText.unreached_func("load event should not be fired");
- elt.rel = "stylesheet";
- elt.href = "../../../../../common/css-red.txt";
- document.getElementsByTagName("head")[0].appendChild(elt);
-})
+});
</script>
+<script src=resources/link-style-error.js></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html
new file mode 100644
index 00000000000..d3c520ba75f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-limited-quirks.html
@@ -0,0 +1,7 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//" "">
+<title>link: error events in limited quirks mode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src=/common/get-host-info.sub.js></script>
+<div id="log"></div>
+<script src=resources/link-style-error.js></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html
new file mode 100644
index 00000000000..ae2efa415ee
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/link-style-error-quirks.html
@@ -0,0 +1,7 @@
+<!DOCTYPE HTML PUBLIC "-//Sun Microsystems Corp.//DTD HotJava Strict HTML//" "">
+<title>link: error events in quirks mode</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src=/common/get-host-info.sub.js></script>
+<div id="log"></div>
+<script src=resources/link-style-error.js></script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/css.py b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/css.py
new file mode 100644
index 00000000000..eb981373a3e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/css.py
@@ -0,0 +1,7 @@
+def main(request, response):
+ response.add_required_headers = False
+ if "content_type" in request.GET:
+ response.writer.write_header("Content-Type", request.GET.first("content_type"))
+ if "nosniff" in request.GET:
+ response.writer.write_header("x-content-type-options", "nosniff")
+ response.writer.write_content("body { background:red }")
diff --git a/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-style-error.js b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-style-error.js
new file mode 100644
index 00000000000..d1fa5ac2d6f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/document-metadata/the-link-element/resources/link-style-error.js
@@ -0,0 +1,47 @@
+["<link>", "@import"].forEach(linkType => {
+ [
+ ["same-origin", "resources/css.py"],
+ ["cross-origin", get_host_info().HTTP_REMOTE_ORIGIN + "/html/semantics/document-metadata/the-link-element/resources/css.py"]
+ ].forEach(originType => {
+ ["no Content-Type", "wrong Content-Type", "broken Content-Type"].forEach(contentType => {
+ ["no nosniff", "nosniff"].forEach(nosniff => {
+ async_test(t => {
+ const l = document.createElement("link");
+ t.add_cleanup(() => l.remove());
+ if (nosniff === "nosniff" || contentType === "wrong Content-Type" && (document.compatMode === "CSS1Compat" || originType[0] === "cross-origin")) {
+ l.onerror = t.step_func_done();
+ l.onload = t.unreached_func("error event should have fired");
+ } else {
+ l.onload = t.step_func_done();
+ l.onerror = t.unreached_func("load event should have fired");
+ }
+ l.rel = "stylesheet";
+ let query = [];
+ if (contentType === "broken Content-Type") {
+ query.push("content_type=oops");
+ } else if (contentType === "wrong Content-Type") {
+ query.push("content_type=text/plain")
+ }
+ if (nosniff === "nosniff") {
+ query.push("nosniff");
+ }
+ let stringQuery = "";
+ query.forEach(val => {
+ if (stringQuery === "") {
+ stringQuery += "?" + val;
+ } else {
+ stringQuery += "&" + val;
+ }
+ });
+ const link = new URL(originType[1] + stringQuery, location).href;
+ if (linkType === "<link>") {
+ l.href = link;
+ } else {
+ l.href = "data:text/css,@import url(" + link + ");";
+ }
+ document.head.appendChild(l);
+ }, "Stylesheet loading using " + linkType + " with " + contentType + ", " + originType[0] + ", and " + nosniff);
+ });
+ });
+ });
+});
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html
index 67941264730..a9cd73435a3 100644
--- a/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/track/track-element/track-change-event.html
@@ -15,7 +15,7 @@ async_test(function(t) {
video.textTracks.onchange = t.step_func_done(function() {
assert_equals(event.target, video.textTracks);
assert_true(event instanceof Event, 'instanceof');
- assert_not_exists(event, 'track');
+ assert_false(event.hasOwnProperty('track'), 'unexpected property found: "track"');
});
});
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html
new file mode 100644
index 00000000000..57189a0b884
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-iframe-element/iframe-nosrc.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<meta charset="UTF-8">
+<title>Check processing of iframe without src and srcdoc attribute</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://html.spec.whatwg.org/multipage/iframe-embed-object.html#process-the-iframe-attributes">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<div id="log"></div>
+<iframe></iframe>
+<script>
+ let iframe = document.querySelector("iframe");
+
+ async_test(t => {
+ let originDoc = iframe.contentDocument;
+ window.addEventListener("load", t.step_func_done(() => {
+ assert_equals(iframe.contentDocument, originDoc, "contentDocument shouldn't be changed");
+ }));
+ }, "iframe.contentDocument should not be changed");
+
+ async_test(t => {
+ iframe.addEventListener("load", t.unreached_func());
+ window.addEventListener("load", () => t.done());
+ }, "load event of iframe should not be fired after processing the element");
+</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-autocomplete.html b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-autocomplete.html
index 5c1d05b301e..618aa0a6c47 100644
--- a/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-autocomplete.html
+++ b/tests/wpt/web-platform-tests/html/semantics/forms/the-form-element/form-autocomplete.html
@@ -42,10 +42,10 @@
}, desc);
}
- autocompletetest(document.forms.missing_attribute, ["on", "on", "on", "off", ""], "form autocomplete attribute missing");
- autocompletetest(document.forms.autocomplete_on, ["on", "on", "on", "off", ""], "form autocomplete attribute on");
- autocompletetest(document.forms.autocomplete_off, ["off", "off", "on", "off", ""], "form autocomplete attribute off");
- autocompletetest(document.forms.autocomplete_invalid, ["on", "on", "on", "off", ""], "form autocomplete attribute invalid");
+ autocompletetest(document.forms.missing_attribute, ["on", "", "on", "off", ""], "form autocomplete attribute missing");
+ autocompletetest(document.forms.autocomplete_on, ["on", "", "on", "off", ""], "form autocomplete attribute on");
+ autocompletetest(document.forms.autocomplete_off, ["off", "", "on", "off", ""], "form autocomplete attribute off");
+ autocompletetest(document.forms.autocomplete_invalid, ["on", "", "on", "off", ""], "form autocomplete attribute invalid");
var keywords = [ "on", "off", "name", "honorific-prefix", "given-name", "additional-name", "family-name", "honorific-suffix", "nickname", "username", "new-password", "current-password", "organization-title", "organization", "street-address", "address-line1", "address-line2", "address-line3", "address-level4", "address-level3", "address-level2", "address-level1", "country", "country-name", "postal-code", "cc-name", "cc-given-name", "cc-additional-name", "cc-family-name", "cc-number", "cc-exp", "cc-exp-month", "cc-exp-year", "cc-csc", "cc-type", "transaction-currency", "transaction-amount", "language", "bday", "bday-day", "bday-month", "bday-year", "sex", "url", "photo", "tel", "tel-country-code", "tel-national", "tel-area-code", "tel-local", "tel-local-prefix", "tel-local-suffix", "tel-extension", "email", "impp" ];
@@ -58,4 +58,59 @@
assert_equals(input.autocomplete, keyword);
}, keyword + " is an allowed autocomplete field name");
});
+
+
+test(() => {
+ const select = document.createElement("select");
+ select.setAttribute("autocomplete", " \n");
+ assert_equals(select.autocomplete, "");
+}, "Test whitespace-only attribute value");
+
+test(() => {
+ const select = document.createElement("select");
+
+ select.setAttribute("autocomplete", "foo off");
+ assert_equals(select.autocomplete, "");
+
+ // Normal category; max=3
+ select.setAttribute("autocomplete", "foo section-foo billing name");
+ assert_equals(select.autocomplete, "");
+
+ // Contact category; max=4
+ select.setAttribute("autocomplete", "foo section-bar billing work name");
+ assert_equals(select.autocomplete, "");
+}, "Test maximum number of tokens");
+
+test(() => {
+ const textarea = document.createElement("textarea");
+
+ textarea.setAttribute("autocomplete", "call-sign");
+ assert_equals(textarea.autocomplete, "");
+}, "Unknown field");
+
+test(() => {
+ const hidden = document.createElement("input");
+ hidden.type = "hidden";
+ hidden.setAttribute("autocomplete", "on");
+ assert_equals(hidden.autocomplete, "");
+ hidden.setAttribute("autocomplete", "off");
+ assert_equals(hidden.autocomplete, "");
+}, "Test 'wearing the autofill anchor mantle' with off/on");
+
+test(() => {
+ const textarea = document.createElement("textarea");
+
+ textarea.setAttribute("autocomplete", " HOME\ntel");
+ assert_equals(textarea.autocomplete, "home tel");
+
+ textarea.setAttribute("autocomplete", "shipping country");
+ assert_equals(textarea.autocomplete, "shipping country");
+
+ textarea.setAttribute("autocomplete", "billing work email");
+ assert_equals(textarea.autocomplete, "billing work email");
+
+ textarea.setAttribute("autocomplete", " section-FOO bday");
+ assert_equals(textarea.autocomplete, "section-foo bday");
+}, "Serialize combinations of section, mode, contact, and field");
+
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/credentials.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/credentials.sub.html
index 1293d7f6913..cf23e67ae40 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/credentials.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/credentials.sub.html
@@ -39,31 +39,31 @@ promise_test(t => {
}).then(() => {
const w = iframe.contentWindow;
- assert_equals(w.sameOriginNone, 'not found',
- 'Modules should be loaded without the credentials when the crossOrigin attribute is not specified and the target is same-origin');
+ assert_equals(w.sameOriginNone, 'found',
+ 'Modules should be loaded with the credentials when the crossOrigin attribute is not specified and the target is same-origin');
assert_equals(w.sameOriginAnonymous, 'found',
'Modules should be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is same-origin');
assert_equals(w.sameOriginUseCredentials, 'found',
'Modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is same-origin');
assert_equals(w.crossOriginNone, 'not found',
- 'Modules should be loaded without the credentials when the crossOrigin attribute is not specified and the target is cross-origin');
+ 'Modules should not be loaded with the credentials when the crossOrigin attribute is not specified and the target is cross-origin');
assert_equals(w.crossOriginAnonymous, 'not found',
- 'Modules should be loaded without the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is cross-origin');
+ 'Modules should not be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is cross-origin');
assert_equals(w.crossOriginUseCredentials, 'found',
'Modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is cross-origin');
- assert_equals(w.sameOriginNoneDecendent, 'not found',
- 'Decendent modules should be loaded without the credentials when the crossOrigin attribute is not specified and the target is same-origin');
- assert_equals(w.sameOriginAnonymousDecendent, 'found',
- 'Decendent modules should be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is same-origin');
- assert_equals(w.sameOriginUseCredentialsDecendent, 'found',
- 'Decendent modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is same-origin');
- assert_equals(w.crossOriginNoneDecendent, 'not found',
- 'Decendent modules should be loaded without the credentials when the crossOrigin attribute is not specified and the target is cross-origin');
- assert_equals(w.crossOriginAnonymousDecendent, 'not found',
- 'Decendent modules should be loaded without the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is cross-origin');
- assert_equals(w.crossOriginUseCredentialsDecendent, 'found',
- 'Decendent modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is cross-origin');
+ assert_equals(w.sameOriginNoneDescendant, 'found',
+ 'Descendant modules should be loaded with the credentials when the crossOrigin attribute is not specified and the target is same-origin');
+ assert_equals(w.sameOriginAnonymousDescendant, 'found',
+ 'Descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is same-origin');
+ assert_equals(w.sameOriginUseCredentialsDescendant, 'found',
+ 'Descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is same-origin');
+ assert_equals(w.crossOriginNoneDescendant, 'not found',
+ 'Descendant modules should not be loaded with the credentials when the crossOrigin attribute is not specified and the target is cross-origin');
+ assert_equals(w.crossOriginAnonymousDescendant, 'not found',
+ 'Descendant modules should not be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is cross-origin');
+ assert_equals(w.crossOriginUseCredentialsDescendant, 'found',
+ 'Descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is cross-origin');
});
}, 'Modules should be loaded with or without the credentials based on the same-origin-ness and the crossOrigin attribute');
</script>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html
new file mode 100644
index 00000000000..b939a3ef163
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/dynamic-import/dynamic-imports-credentials.sub.html
@@ -0,0 +1,58 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/common/get-host-info.sub.js"></script>
+
+<script type="text/javascript">
+host_info = get_host_info();
+
+document.cookie = 'same=1';
+
+const setCookiePromise = fetch(
+ 'http://{{domains[www2]}}:{{ports[http][0]}}/cookies/resources/set-cookie.py?name=cross&path=/html/semantics/scripting-1/the-script-element/module/',
+ {
+ mode: 'no-cors',
+ credentials: 'include',
+ });
+
+const windowLoadPromise = new Promise(resolve => {
+ window.addEventListener('load', () => {
+ resolve();
+ });
+});
+
+promise_test(t => {
+ const iframe = document.createElement('iframe');
+
+ return Promise.all([setCookiePromise, windowLoadPromise]).then(() => {
+ const messagePromise = new Promise(resolve => {
+ window.addEventListener('message', event => {
+ resolve();
+ });
+ });
+
+ iframe.src = '../resources/dynamic-import-credentials-iframe.sub.html';
+ document.body.appendChild(iframe);
+
+ return messagePromise;
+ }).then(() => {
+ const w = iframe.contentWindow;
+
+ assert_equals(w.sameOriginNoneDynamicDescendant, 'found',
+ 'Dynamic descendant modules should be loaded with the credentials when the crossOrigin attribute is not specified and the target is same-origin');
+ assert_equals(w.sameOriginAnonymousDynamicDescendant, 'found',
+ 'Dynamic descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is same-origin');
+ assert_equals(w.sameOriginUseCredentialsDynamicDescendant, 'found',
+ 'Dynamic descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is same-origin');
+ assert_equals(w.crossOriginNoneDynamicDescendant, 'not found',
+ 'Dynamic descendant modules should not be loaded with the credentials when the crossOrigin attribute is not specified and the target is cross-origin');
+ assert_equals(w.crossOriginAnonymousDynamicDescendant, 'not found',
+ 'Dynamic descendant modules should not be loaded with the credentials when the crossOrigin attribute is specified with "anonymous" as its value and the target is cross-origin');
+ assert_equals(w.crossOriginUseCredentialsDynamicDescendant, 'found',
+ 'Dynamic descendant modules should be loaded with the credentials when the crossOrigin attribute is specified with "use-credentials" as its value and the target is cross-origin');
+});
+}, 'Dynamic imports should be loaded with or without the credentials based on the same-origin-ness and the parent script\'s crossOrigin attribute');
+</script>
+<body>
+</body>
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html
index f086e702822..8a0506ccec6 100644
--- a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/credentials-iframe.sub.html
@@ -25,22 +25,22 @@
</script>
<script type="module">
-import "./check-cookie.py?id=sameOriginNoneDecendent&cookieName=same";
+import "./check-cookie.py?id=sameOriginNoneDescendant&cookieName=same";
</script>
<script type="module" crossOrigin="anonymous">
-import "./check-cookie.py?id=sameOriginAnonymousDecendent&cookieName=same";
+import "./check-cookie.py?id=sameOriginAnonymousDescendant&cookieName=same";
</script>
<script type="module" crossOrigin="use-credentials">
-import "./check-cookie.py?id=sameOriginUseCredentialsDecendent&cookieName=same";
+import "./check-cookie.py?id=sameOriginUseCredentialsDescendant&cookieName=same";
</script>
<script type="module">
-import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginNoneDecendent&cookieName=cross";
+import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginNoneDescendant&cookieName=cross";
</script>
<script type="module" crossOrigin="anonymous">
-import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginAnonymousDecendent&cookieName=cross";
+import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginAnonymousDescendant&cookieName=cross";
</script>
<script type="module" crossOrigin="use-credentials">
-import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginUseCredentialsDecendent&cookieName=cross";
+import "http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginUseCredentialsDescendant&cookieName=cross";
</script>
<script type="text/javascript">
diff --git a/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html
new file mode 100644
index 00000000000..836ece62c5f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/semantics/scripting-1/the-script-element/module/resources/dynamic-import-credentials-iframe.sub.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<script type="module">
+import("./check-cookie.py?id=sameOriginNoneDynamicDescendant&cookieName=same");
+</script>
+<script type="module" crossOrigin="anonymous">
+import("./check-cookie.py?id=sameOriginAnonymousDynamicDescendant&cookieName=same");
+</script>
+<script type="module" crossOrigin="use-credentials">
+import("./check-cookie.py?id=sameOriginUseCredentialsDynamicDescendant&cookieName=same");
+</script>
+<script type="module">
+import("http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginNoneDynamicDescendant&cookieName=cross");
+</script>
+<script type="module" crossOrigin="anonymous">
+import("http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginAnonymousDynamicDescendant&cookieName=cross");
+</script>
+<script type="module" crossOrigin="use-credentials">
+import("http://{{domains[www2]}}:{{ports[http][0]}}/html/semantics/scripting-1/the-script-element/module/resources/check-cookie.py?id=crossOriginUseCredentialsDynamicDescendant&cookieName=cross");
+</script>
+
+
+<script type="text/javascript">
+window.addEventListener('load', event => {
+ window.parent.postMessage({}, '*');
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html b/tests/wpt/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html
index e1f9995117f..bec3364adff 100644
--- a/tests/wpt/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html
+++ b/tests/wpt/web-platform-tests/html/syntax/parsing/template/creating-an-element-for-the-token/template-owner-document.html
@@ -2,6 +2,7 @@
<html>
<head>
<title>HTML Templates: ownerDocument property of the element in template</title>
+<meta name="timeout" content="long">
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<meta name="assert" content="ownerDocument property of the element appended to template must be set to the template contents owner of the ownerDocument of the template element">
diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist
index e39672d0c6e..46c2550e728 100644
--- a/tests/wpt/web-platform-tests/lint.whitelist
+++ b/tests/wpt/web-platform-tests/lint.whitelist
@@ -655,6 +655,8 @@ CSS-COLLIDING-REF-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/cont
CSS-COLLIDING-REF-NAME: css/css-contain/reference/contain-size-grid-001-ref.html
CSS-COLLIDING-REF-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-grid-001-ref.html
CSS-COLLIDING-SUPPORT-NAME: css/css-backgrounds/support/red.png
+CSS-COLLIDING-REF-NAME: css/css-contain/reference/contain-size-fieldset-001-ref.html
+CSS-COLLIDING-REF-NAME: css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-size-fieldset-001-ref.html
CSS-COLLIDING-SUPPORT-NAME: css/compositing/mix-blend-mode/support/red.png
CSS-COLLIDING-SUPPORT-NAME: css/compositing/background-blending/support/red.png
CSS-COLLIDING-SUPPORT-NAME: css/CSS2/normal-flow/support/replaced-min-max-3.png
diff --git a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html
index f3fca4184e4..982bc174668 100644
--- a/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html
+++ b/tests/wpt/web-platform-tests/media-capabilities/decodingInfo.html
@@ -291,7 +291,8 @@ promise_test(t => {
async_test(t => {
var validTypes = [ 'file', 'media-source' ];
- var invalidTypes = [ undefined, null, '', 'foobar', 'mse', 'MediaSource' ];
+ var invalidTypes = [ undefined, null, '', 'foobar', 'mse', 'MediaSource',
+ 'record', 'transmission' ];
var validPromises = [];
var invalidCaught = 0;
diff --git a/tests/wpt/web-platform-tests/media-capabilities/encodingInfo.html b/tests/wpt/web-platform-tests/media-capabilities/encodingInfo.html
new file mode 100644
index 00000000000..5c0e3189082
--- /dev/null
+++ b/tests/wpt/web-platform-tests/media-capabilities/encodingInfo.html
@@ -0,0 +1,328 @@
+<!DOCTYPE html>
+<title>MediaCapabilities.decodingInfo()</title>
+<script src=/resources/testharness.js></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+
+// Minimal VideoConfiguration that will be allowed per spec. All optional
+// properties are missing.
+var minimalVideoConfiguration = {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 24,
+};
+
+// Minimal AudioConfiguration that will be allowed per spec. All optional
+// properties are missing.
+var minimalAudioConfiguration = {
+ contentType: 'audio/webm; codecs="opus"',
+};
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo());
+}, "Test that encodingInfo rejects if it doesn't get a configuration");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({}));
+}, "Test that encodingInfo rejects if the MediaConfiguration isn't valid");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ video: minimalVideoConfiguration,
+ audio: minimalAudioConfiguration,
+ }));
+}, "Test that encodingInfo rejects if the MediaConfiguration does not have a type");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ }));
+}, "Test that encodingInfo rejects if the configuration doesn't have an audio or video field");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: -1,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration has a negative framerate");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 0,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration has a framerate set to 0");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: Infinity,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration has a framerate set to Infinity");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'fgeoa',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 24,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration contentType doesn't parse");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'audio/fgeoa',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 24,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration contentType isn't of type video");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"; foo="bar"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 24,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration contentType has more than one parameter");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; foo="bar"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: 24,
+ },
+ }));
+}, "Test that encodingInfo rejects if the video configuration contentType has one parameter that isn't codecs");
+
+promise_test(t => {
+ return navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24000/1001',
+ }
+ });
+}, "Test that encodingInfo() accepts framerate in the form of x/y");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24000/0',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate in the form of x/0");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '0/10001',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate in the form of 0/y");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '-24000/10001',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate in the form of -x/y");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24000/-10001',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate in the form of x/-y");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24000/',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate in the form of x/");
+
+promise_test(t => {
+ return navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24000/1e4',
+ }
+ });
+}, "Test that encodingInfo() accepts framerate with 'e'");
+
+promise_test(t => {
+ return navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '24/1.0001',
+ }
+ });
+}, "Test that encodingInfo() accepts framerate as fraction with decimals");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: {
+ contentType: 'video/webm; codecs="vp09.00.10.08"',
+ width: 800,
+ height: 600,
+ bitrate: 3000,
+ framerate: '1/3x',
+ }
+ }));
+}, "Test that encodingInfo() rejects framerate with trailing unallowed characters");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ audio: { contentType: 'fgeoa' },
+ }));
+}, "Test that encodingInfo rejects if the audio configuration contenType doesn't parse");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ audio: { contentType: 'video/fgeoa' },
+ }));
+}, "Test that encodingInfo rejects if the audio configuration contentType isn't of type audio");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ audio: { contentType: 'audio/webm; codecs="opus"; foo="bar"' },
+ }));
+}, "Test that encodingInfo rejects if the audio configuration contentType has more than one parameters");
+
+promise_test(t => {
+ return promise_rejects(t, new TypeError(), navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ audio: { contentType: 'audio/webm; foo="bar"' },
+ }));
+}, "Test that encodingInfo rejects if the audio configuration contentType has one parameter that isn't codecs");
+
+promise_test(t => {
+ return navigator.mediaCapabilities.encodingInfo({
+ type: 'record',
+ video: minimalVideoConfiguration,
+ audio: minimalAudioConfiguration,
+ }).then(ability => {
+ assert_idl_attribute(ability, 'supported');
+ assert_idl_attribute(ability, 'smooth');
+ assert_idl_attribute(ability, 'powerEfficient');
+ });
+}, "Test that encodingInfo returns a valid MediaCapabilitiesInfo objects");
+
+async_test(t => {
+ var validTypes = [ 'record', 'transmission' ];
+ var invalidTypes = [ undefined, null, '', 'foobar', 'mse', 'MediaSource',
+ 'file', 'media-source', ];
+
+ var validPromises = [];
+ var invalidCaught = 0;
+
+ validTypes.forEach(type => {
+ validPromises.push(navigator.mediaCapabilities.encodingInfo({
+ type: type,
+ video: minimalVideoConfiguration,
+ audio: minimalAudioConfiguration,
+ }));
+ });
+
+ // validTypes are tested via Promise.all(validPromises) because if one of the
+ // promises fail, Promise.all() will reject. This mechanism can't be used for
+ // invalid types which will be tested individually and increment invalidCaught
+ // when rejected until the amount of rejection matches the expectation.
+ Promise.all(validPromises).then(t.step_func(() => {
+ for (var i = 0; i < invalidTypes.length; ++i) {
+ navigator.mediaCapabilities.encodingInfo({
+ type: invalidTypes[i],
+ video: minimalVideoConfiguration,
+ audio: minimalAudioConfiguration,
+ }).then(t.unreached_func(), t.step_func(e => {
+ assert_equals(e.name, 'TypeError');
+ ++invalidCaught;
+ if (invalidCaught == invalidTypes.length)
+ t.done();
+ }));
+ }
+ }), t.unreached_func('Promise.all should not reject for valid types'));
+}, "Test that encodingInfo rejects if the MediaConfiguration does not have a valid type");
+
+</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 0b45ac6f594..21e3f5b9af8 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}).then(
+ navigator.mediaDevices.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/navigation-timing/dom_interactive_image_document.html b/tests/wpt/web-platform-tests/navigation-timing/dom_interactive_image_document.html
new file mode 100644
index 00000000000..36742f0eff6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/navigation-timing/dom_interactive_image_document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Test domInteractive on image document.</title>
+ <link rel="author" title="Google" href="http://www.google.com/" />
+ <link rel="help" href="https://html.spec.whatwg.org/multipage/browsing-the-web.html#read-media"/>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <script>
+ const t = async_test("Test domInteractive on image document");
+ function frameLoaded() {
+ const timing = document.querySelector("iframe").contentWindow.performance.timing;
+ assert_greater_than(timing.domInteractive, 0,
+ "Expect domInteractive to be positive value.");
+ t.done();
+ }
+ </script>
+ <body>
+ <h1>Description</h1>
+ <p>This tests that a image document has positive-value domInteractive.</p>
+ <iframe src="../images/smiley.png" onload="frameLoaded()"></iframe>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/navigation-timing/dom_interactive_media_document.html b/tests/wpt/web-platform-tests/navigation-timing/dom_interactive_media_document.html
new file mode 100644
index 00000000000..e4e45725d83
--- /dev/null
+++ b/tests/wpt/web-platform-tests/navigation-timing/dom_interactive_media_document.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ <title>Test domInteractive on media document.</title>
+ <link rel="author" title="Google" href="http://www.google.com/" />
+ <link rel="help" href="https://html.spec.whatwg.org/multipage/browsing-the-web.html#read-media"/>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ </head>
+ <script>
+ const t = async_test("Test domInteractive on media document");
+ function frameLoaded() {
+ const timing = document.querySelector("iframe").contentWindow.performance.timing;
+ assert_greater_than(timing.domInteractive, 0,
+ "Expect domInteractive to be positive value.");
+ t.done();
+ }
+ </script>
+ <body>
+ <h1>Description</h1>
+ <p>This tests that a media document has positive-value domInteractive.</p>
+ <iframe src="../media/A4.mp4" onload="frameLoaded()"></iframe>
+ </body>
+</html> \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/payment-method-id/payment-request-ctor-pmi-handling.https.html b/tests/wpt/web-platform-tests/payment-method-id/payment-request-ctor-pmi-handling.https.html
new file mode 100644
index 00000000000..5f888f0389f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/payment-method-id/payment-request-ctor-pmi-handling.https.html
@@ -0,0 +1,149 @@
+<!DOCTYPE html>
+<!-- Copyright © 2017 Mozilla and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
+<meta charset="utf-8">
+<title>Test for validity of payment method identifiers during construction</title>
+<link rel="help" href="https://w3c.github.io/browser-payment-api/#constructor">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+"use strict";
+const validAmount = Object.freeze({
+ currency: "USD",
+ value: "1.0",
+});
+const validTotal = Object.freeze({
+ label: "Default Total",
+ amount: validAmount,
+});
+const defaultDetails = Object.freeze({
+ total: validTotal,
+});
+
+test(() => {
+ const validMethods = [
+ "https://wpt",
+ "https://wpt.fyi/",
+ "https://wpt.fyi/payment",
+ "https://wpt.fyi/payment-request",
+ "https://wpt.fyi/payment-request?",
+ "https://wpt.fyi/payment-request?this=is",
+ "https://wpt.fyi/payment-request?this=is&totally",
+ "https://wpt.fyi:443/payment-request?this=is&totally",
+ "https://wpt.fyi:443/payment-request?this=is&totally#fine",
+ "https://:@wpt.fyi:443/payment-request?this=is&totally#👍",
+ " \thttps://wpt\n ",
+ "https://xn--c1yn36f",
+ "https://點看",
+ ];
+ for (const validMethod of validMethods) {
+ try {
+ const methods = [{ supportedMethods: validMethod }];
+ new PaymentRequest(methods, defaultDetails);
+ } catch (err) {
+ assert_unreached(
+ `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}`
+ );
+ }
+ }
+}, "Must support valid standard URL PMIs");
+
+test(() => {
+ const validMethods = [
+ "e",
+ "n6jzof05mk2g4lhxr-u-q-w1-c-i-pa-ty-bdvs9-ho-ae7-p-md8-s-wq3-h-qd-e-q-sa",
+ "a-b-q-n-s-pw0",
+ "m-u",
+ "s-l5",
+ "k9-f",
+ "m-l",
+ "u4-n-t",
+ "i488jh6-g18-fck-yb-v7-i",
+ "x-x-t-t-c34-o",
+ "basic-card",
+ // gets coerced to "basic-card", for compat with old version of spec
+ ["basic-card"],
+ ];
+ for (const validMethod of validMethods) {
+ try {
+ const methods = [{ supportedMethods: validMethod }];
+ new PaymentRequest(methods, defaultDetails);
+ } catch (err) {
+ assert_unreached(
+ `Unexpected exception with valid standardized PMI: ${validMethod}. ${err}`
+ );
+ }
+ }
+}, "Must not throw on syntactically valid standardized payment method identifiers, even if they are not supported");
+
+test(() => {
+ const invalidMethods = [
+ "basic-💳",
+ "¡basic-*-card!",
+ "Basic-Card",
+ "0",
+ "-",
+ "--",
+ "a--b",
+ "-a--b",
+ "a-b-",
+ "0-",
+ "0-a",
+ "a0--",
+ "A-",
+ "A-B",
+ "A-b",
+ "a-0",
+ "a-0b",
+ " a-b",
+ "\t\na-b",
+ "a-b ",
+ "a-b\n\t",
+ "basic-card?not-really",
+ "basic-card://not-ok",
+ "basic card",
+ "/basic card/",
+ "BaSicCarD",
+ "BASIC-CARD",
+ " basic-card ",
+ "this is not supported",
+ " ",
+ "foo,var",
+ ["visa","mastercard"], // stringifies to "visa,mastercard"
+ ];
+ for (const invalidMethod of invalidMethods) {
+ assert_throws(
+ new RangeError(),
+ () => {
+ const methods = [{ supportedMethods: invalidMethod }];
+ new PaymentRequest(methods, defaultDetails);
+ },
+ `expected RangeError processing invalid standardized PMI "${invalidMethod}"`
+ );
+ }
+}, "Must throw on syntactically invalid standardized payment method identifiers");
+
+test(() => {
+ const invalidMethods = [
+ "https://username@example.com/pay",
+ "https://:password@example.com/pay",
+ "https://username:password@example.com/pay",
+ "http://username:password@example.com/pay",
+ "http://foo.com:100000000/pay",
+ "not-https://wpt.fyi/payment-request",
+ "../realitive/url",
+ "/absolute/../path?",
+ "https://",
+ ];
+ for (const invalidMethod of invalidMethods) {
+ assert_throws(
+ new RangeError(),
+ () => {
+ const methods = [{ supportedMethods: invalidMethod }];
+ new PaymentRequest(methods, defaultDetails);
+ },
+ `expected RangeError processing invalid URL PMI "${invalidMethod}"`
+ );
+ }
+}, "Constructor MUST throw if given an invalid URL-based payment method identifier");
+
+</script>
diff --git a/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
index a0c3217603b..403d416c7d4 100644
--- a/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
+++ b/tests/wpt/web-platform-tests/picture-in-picture/request-picture-in-picture.html
@@ -9,8 +9,8 @@
<script>
promise_test(async t => {
const video = await loadVideo();
- return requestPictureInPictureWithTrustedClick(video);
-}, 'request Picture-in-Picture resolves on user click');
+ return promise_rejects(t, 'NotAllowedError', video.requestPictureInPicture());
+}, 'request Picture-in-Picture requires a user gesture');
promise_test(t => {
const video = document.createElement('video');
@@ -31,6 +31,6 @@ promise_test(async t => {
promise_test(async t => {
const video = await loadVideo();
- return promise_rejects(t, 'NotAllowedError', video.requestPictureInPicture());
-}, 'request Picture-in-Picture requires a user gesture');
+ return requestPictureInPictureWithTrustedClick(video);
+}, 'request Picture-in-Picture resolves on user click');
</script>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/README.md b/tests/wpt/web-platform-tests/referrer-policy/css-integration/README.md
index 2edb24fb41e..14da25c4d97 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/README.md
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/README.md
@@ -1,12 +1,14 @@
-These tests exercise differnt ways to load an image, generated via
-```/referrer-policy/generic/subresource/image.py?id=<UUID>``` and later
-verify the headers used to request that image.
+These tests exercise different ways to fetch a resource (image, font-face, svg
+references), generated via the sub-resource python script in
+```./generic/subresource/``` (for example, loading an image:
+```/referrer-policy/generic/subresource/image.py?id=<UUID>```) and later verify
+the headers used to fetch the resource.
Since there is no way to wait for a resource referenced from CSS to be loaded,
all tests use ```step_timeout()``` to delay the verification step until
-after the image (hopefully) was loaded.
+after the resource (hopefully) was loaded.
Since there is also no way to retrieve headers (or other information) from
-images loaded via CSS, we store the headers with the given ```UUID``` as key
-on the server, and retrieve them later via an XHR to
+resources loaded via CSS, we store the headers with the given ```UUID``` as key
+on the server, and retrieve them later via an XHR, for example:
```/referrer-policy/generic/subresource/image.py?id=<UUID>&report-headers```.
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/external-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/external-import-stylesheet.html
new file mode 100644
index 00000000000..a2d3e8ced04
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/external-import-stylesheet.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Child css from external stylesheet</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that child css are loaded with the referrer and referrer policy
+ from the external stylesheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Child css from external stylesheet.");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" + location.port;
+ let css_url = url_prefix +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" + id +
+ "&import-rule" + "&referrer-policy=no-referrer";
+ let check_url = url_prefix + "/referrer-policy/generic/subresource/stylesheet.py" +
+ "?id=" + id + "&report-headers";
+
+ let link = document.createElement("link");
+ link.href = css_url;
+ link.rel = "stylesheet";
+ link.onload = function() {
+ css_test.step_timeout(
+ queryXhr.bind(this, check_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_equals(message.referrer, undefined);
+ });
+ css_test.done();
+ }),
+ 1000);
+ };
+ document.head.appendChild(link);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/internal-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/internal-import-stylesheet.html
new file mode 100644
index 00000000000..aebf5031484
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/internal-import-stylesheet.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Child css from internal stylesheet</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="never">
+ </head>
+ <body>
+ <p>Check that child css are loaded with the referrer and referrer policy
+ from the internal stylesheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Child css from internal stylesheet.");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" + location.port;
+ let css_url = url_prefix + "/referrer-policy/generic/subresource/stylesheet.py?id=" + id + "&import-rule";
+ let check_url = url_prefix + "/referrer-policy/generic/subresource/stylesheet.py" +
+ "?id=" + id + "&report-headers";
+
+ let style = document.createElement("style");
+ style.type = 'text/css';
+ style.appendChild(document.createTextNode("@import url('" + css_url + "');"));
+ document.head.appendChild(style);
+ css_test.step_timeout(
+ queryXhr.bind(this, check_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, css_url);
+ });
+ css_test.done();
+ }),
+ 1000);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/processing-instruction.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/processing-instruction.html
new file mode 100644
index 00000000000..b6333e2c7b2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/child-css/processing-instruction.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - child css via a ProcessingInstruction</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that child css are loaded with the referrer and referrer policy the
+ external stylesheet(referenced from a ProcessingInstruction).</p>
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Child css via a ProcessingInstruction.");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" +
+ location.port +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" +
+ id;
+ let css_url = url_prefix + "&amp;import-rule";
+ let expected = url_prefix + "&import-rule";
+ let check_url = url_prefix + "&report-headers";
+
+ let processingInstruction =
+ document.createProcessingInstruction(
+ "xml-stylesheet", "href=\"" +css_url + "\" type=\"text/css\"");
+ css_test.step_timeout(
+ queryXhr.bind(this, check_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, expected);
+ });
+ css_test.done();
+ }),
+ 1000);
+ document.insertBefore(processingInstruction, document.firstChild);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/css-test-helper.js b/tests/wpt/web-platform-tests/referrer-policy/css-integration/css-test-helper.js
new file mode 100644
index 00000000000..f5886dbbcbe
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/css-test-helper.js
@@ -0,0 +1,66 @@
+var svg_ns = "http://www.w3.org/2000/svg";
+var url_prefix = location.protocol + "//" + location.hostname + ":" +
+ location.port + "/referrer-policy/generic/subresource/";
+
+var svg_test_properties = [
+ 'fill',
+ 'stroke',
+ 'filter',
+ 'clip-path',
+ 'marker-start',
+ 'marker-mid',
+ 'marker-end',
+ 'mask',
+ 'mask-image',
+];
+
+// Schedules async_test's for each of the test properties
+// Parameters:
+// testProperties: An array of test properties.
+// testDescription: A test description
+// testFunction: A function call which sets up the expect result and runs
+// the actual test
+function runSvgTests(testProperties, testDescription, testFunction) {
+ let runNextTest = function () {
+ let property = testProperties.shift();
+ if (property === undefined) {
+ return;
+ }
+
+ let current = {
+ test: async_test(testDescription + " " + property),
+ id: token(),
+ property: property,
+ };
+
+ testFunction(current);
+
+ let check_url = url_prefix + "svg.py" + "?id=" + current.id +
+ "&report-headers";
+ current.test.step_timeout(
+ queryXhr.bind(this, check_url,
+ function(message) {
+ current.test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, current.expected);
+ });
+ current.test.done();
+ }),
+ 800);
+
+ };
+
+ add_result_callback(runNextTest);
+ runNextTest();
+}
+
+function createSvg() {
+ let svg = document.createElementNS(svg_ns, 'svg');
+ svg.setAttribute('width', '400');
+ svg.setAttribute('height', '400');
+ let path = document.createElementNS(svg_ns, 'path');
+ path.setAttribute('d', 'M 50,5 95,100 5,100 z');
+ svg.appendChild(path);
+ return svg;
+}
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-import-stylesheet.html
new file mode 100644
index 00000000000..c344c56c5bf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-import-stylesheet.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Font from imported stylesheet (external)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="never">
+ </head>
+ <body>
+ <p>Check that resources from imported stylesheets (loaded from external
+ stylesheets) are loaded with the referrer and referrer policy from the
+ external stylesheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Font from imported stylesheet (external).");
+ let id = token();
+ let css_url = location.protocol + "//www1." + location.hostname + ":" +
+ location.port +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" + id +
+ "&import-rule" + "&type=font";
+ let url_prefix = location.protocol + "//" + location.hostname + ":" + location.port;
+ let css_referrer = url_prefix +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" + id + "&type=font";
+ let font_url = url_prefix + "/referrer-policy/generic/subresource/font.py" +
+ "?id=" + id + "&report-headers" + "&type=font";
+
+ let link = document.createElement("link");
+ link.href = css_url;
+ link.rel = "stylesheet";
+ link.onload = function() {
+ css_test.step_timeout(
+ queryXhr.bind(this, font_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, css_referrer);
+ });
+ css_test.done();
+ }),
+ 1000);
+ };
+ document.head.appendChild(link);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-stylesheet.html
new file mode 100644
index 00000000000..24e4bb99900
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/external-stylesheet.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Font from external stylesheet</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="never">
+ </head>
+ <body>
+ <p>Check that resources from external stylesheets are loaded with
+ the referrer and referrer policy from the external stylesheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Font from external stylesheet.");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" + location.port;
+ let css_url = url_prefix + "/referrer-policy/generic/subresource/stylesheet.py?id=" + id + "&type=font";
+ let font_url = url_prefix + "/referrer-policy/generic/subresource/font.py" +
+ "?id=" + id + "&report-headers";
+
+ let link = document.createElement("link");
+ link.href = css_url;
+ link.rel = "stylesheet";
+ link.onload = function() {
+ css_test.step_timeout(
+ queryXhr.bind(this, font_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, css_url);
+ });
+ css_test.done();
+ }),
+ 1000);
+ };
+ document.head.appendChild(link);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-import-stylesheet.html
new file mode 100644
index 00000000000..54e2383423c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-import-stylesheet.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Font from imported stylesheet (internal)</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from stylesheets (imported from internal
+ stylesheets) are loaded with the referrer and referrer policy from from the
+ imported style sheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Font from imported stylesheet (internal).");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" +
+ location.port + "/referrer-policy/generic/subresource/";
+ let css_url = url_prefix + "stylesheet.py?id=" + id + "&type=font";
+ let font_url = url_prefix + "font.py?report-headers&id=" + id;
+
+ let style = document.createElement("style");
+ style.textContent = "@import url('" + css_url + "');";
+ document.head.appendChild(style);
+ css_test.step_timeout(
+ queryXhr.bind(this, font_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, css_url);
+ });
+ css_test.done();
+ }),
+ 1000);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-stylesheet.html
new file mode 100644
index 00000000000..b3869bcebdc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/internal-stylesheet.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Font from internal stylesheet</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from internal stylesheets are loaded with
+ the referrer and referrer policy from the document.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Font from internal stylesheet.");
+ let id = token();
+ let css_url = location.protocol + "//www1." + location.hostname + ":" +
+ location.port +
+ "/referrer-policy/generic/subresource/font.py" + "?id=" +
+ id + "&type=font";
+ let font_url = css_url + "&report-headers";
+
+ let style = document.createElement("style");
+ style.textContent = "@font-face { font-family: 'wpt'; font-style: normal; font-weight: normal; src: url(" + css_url + "); format('truetype'); } body { font-family: 'wpt';}";
+ document.head.appendChild(style);
+ css_test.step_timeout(
+ queryXhr.bind(this, font_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, location.origin + "/");
+ });
+ css_test.done();
+ }),
+ 1000);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/processing-instruction.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/processing-instruction.html
new file mode 100644
index 00000000000..89ee918e24e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/font-face/processing-instruction.html
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - Font from external stylesheet inserted via a ProcessingInstruction</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <meta name="referrer" content="never">
+ </head>
+ <body>
+ <p>Check that resources from external stylesheets (referenced from a
+ ProcessingInstruction) are loaded with the referrer and referrer policy
+ from the external stylesheet.</p>
+
+ <div class="styled"></div>
+
+ <script>
+ let css_test = async_test("Font from external stylesheet (from ProcessingInstruction).");
+ let id = token();
+ let url_prefix = location.protocol + "//www1." + location.hostname + ":" + location.port;
+ let css_url = url_prefix +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" +
+ id + "&amp;type=font";
+ let expected = url_prefix +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" +
+ id + "&type=font";
+ let font_url = url_prefix + "/referrer-policy/generic/subresource/font.py" +
+ "?id=" + id + "&report-headers";
+
+ let processingInstruction =
+ document.createProcessingInstruction(
+ "xml-stylesheet", "href=\"" + css_url + "\" type=\"text/css\"");
+ css_test.step_timeout(
+ queryXhr.bind(this, font_url,
+ function(message) {
+ css_test.step(function() {
+ assert_own_property(message, "headers");
+ assert_own_property(message, "referrer");
+ assert_equals(message.referrer, expected);
+ });
+ css_test.done();
+ }),
+ 1000);
+ document.insertBefore(processingInstruction, document.firstChild);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/external-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-import-stylesheet.html
index 7b6ec6431bd..0023af31b17 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/external-import-stylesheet.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-import-stylesheet.html
@@ -19,10 +19,13 @@
<script>
var css_test = async_test("Image from imported stylesheet (external).");
var id = token();
- var cross_origin_url_prefix = location.protocol + "//www1." + location.hostname + ":" + location.port;
- var css_url = cross_origin_url_prefix + "/referrer-policy/generic/subresource/stylesheet.py?id=" + id + "&import-rule";
+ var css_url = location.protocol + "//www1." + location.hostname + ":" + location.port +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" + id +
+ "&import-rule" + "&type=image";
var url_prefix = location.protocol + "//" + location.hostname + ":" + location.port;
- var css_referrer = url_prefix + "/referrer-policy/generic/subresource/stylesheet.py?id=" + id;
+ var css_referrer = url_prefix +
+ "/referrer-policy/generic/subresource/stylesheet.py?id=" + id +
+ "&type=image";
var img_url = url_prefix + "/referrer-policy/generic/subresource/image.py" +
"?id=" + id + "&report-headers";
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/external-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-stylesheet.html
index d14769db4a1..d14769db4a1 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/external-stylesheet.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/external-stylesheet.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/inline-style.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/inline-style.html
index 42128ae0620..42128ae0620 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/inline-style.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/inline-style.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-import-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-import-stylesheet.html
index 90003547f4d..90003547f4d 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-import-stylesheet.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-import-stylesheet.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-stylesheet.html
index 943108d66e4..943108d66e4 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/internal-stylesheet.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/internal-stylesheet.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/presentation-attribute.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/presentation-attribute.html
index 78401d3ec16..78401d3ec16 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/presentation-attribute.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/presentation-attribute.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/processing-instruction.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/processing-instruction.html
index 1ca18547dd5..1ca18547dd5 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/css-integration/processing-instruction.html
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/image/processing-instruction.html
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/external-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/external-stylesheet.html
new file mode 100644
index 00000000000..148584a0b23
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/external-stylesheet.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - styling SVG from external stylesheet</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <!-- Helper functions for referrer-policy css tests. -->
+ <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+ <meta name="referrer" content="never">
+ </head>
+ <body>
+ <p>Check that resources from external stylesheets are loaded with
+ the referrer and referrer policy from the external stylesheet.</p>
+
+ <script>
+ function addLinkStyleSheet(test) {
+ let css_url = url_prefix + "stylesheet.py?id=" + test.id +
+ "&type=svg" + "&property=" + test.property;
+ test.expected = css_url;
+
+ let stylesheet =
+ document.createElementNS("http://www.w3.org/1999/xhtml", "link");
+ stylesheet.setAttribute("type", "text/css");
+ stylesheet.setAttribute("rel", "stylesheet");
+ stylesheet.setAttribute("href", css_url);
+ let svg = createSvg();
+ document.body.appendChild(svg);
+ svg.appendChild(stylesheet);
+ }
+
+ runSvgTests(svg_test_properties,
+ "Test styling SVG from external style",
+ addLinkStyleSheet);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/inline-style.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/inline-style.html
new file mode 100644
index 00000000000..1f46acb4a32
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/inline-style.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - styling SVG from inline style</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <!-- Helper functions for referrer-policy css tests. -->
+ <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from inline styles are loaded with
+ the referrer and referrer policy from the document.</p>
+ <script>
+ function setInlineStyle(test)
+ {
+ test.expected = location.origin + "/";
+ let svg = createSvg();
+ document.body.appendChild(svg);
+ let element = svg.getElementsByTagName('path')[0];
+ element.style = test.property + ": url(" + url_prefix + "svg.py?id=" +
+ test.id + "#invalidFragment);";
+ }
+
+ runSvgTests(svg_test_properties,
+ "Styling SVG from inline styles",
+ setInlineStyle);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/internal-stylesheet.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/internal-stylesheet.html
new file mode 100644
index 00000000000..08be4effa47
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/internal-stylesheet.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - styling SVG from internal style</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <!-- Helper functions for referrer-policy css tests. -->
+ <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from internal styles are loaded with
+ the referrer and referrer policy from the document.</p>
+ <script>
+ function setInternalStyle(test) {
+ test.expected = location.origin + "/";
+ let style = document.createElementNS(svg_ns, "style");
+ style.textContent = "path { " + test.property + ": url(" + url_prefix +
+ "svg.py?id=" + test.id + "#invalidFragment);";
+ let svg = createSvg();
+ svg.appendChild(style);
+ document.body.appendChild(svg);
+ }
+
+ runSvgTests(svg_test_properties,
+ "Styling SVG from internal styles",
+ setInternalStyle);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/presentation-attribute.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/presentation-attribute.html
new file mode 100644
index 00000000000..edeceb1a785
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/presentation-attribute.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - styling SVG from external stylesheet from
+ presentation attribute</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <!-- Helper functions for referrer-policy css tests. -->
+ <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from presentation attributes are loaded with
+ the referrer and referrer policy from the document.</p>
+ <script>
+ function setPresentationAttribute(test)
+ {
+ test.expected = location.origin + "/";
+ let svg = createSvg();
+ document.body.appendChild(svg);
+ let element = svg.getElementsByTagName("path")[0];
+ // The test property should have map 1:1 with presentation attribute.
+ let attr = test.property;
+ element.setAttribute(attr, "url(" + url_prefix + "svg.py?id=" +
+ test.id + "#invalidFragment)");
+ }
+
+ // mask-image is not the presentation attribute.
+ runSvgTests(svg_test_properties.filter(p => p != 'mask-image'),
+ "Styling SVG from presentation attributes",
+ setPresentationAttribute);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/processing-instruction.html b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/processing-instruction.html
new file mode 100644
index 00000000000..ba0e6673a38
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/css-integration/svg/processing-instruction.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>CSS integration - styling SVG from external stylesheet via
+ ProcessingInstruction</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/common/utils.js"></script>
+ <!-- Common global functions for referrer-policy tests. -->
+ <script src="/referrer-policy/generic/common.js"></script>
+ <!-- Helper functions for referrer-policy css tests. -->
+ <script src="/referrer-policy/css-integration/css-test-helper.js"></script>
+ <meta name="referrer" content="origin">
+ </head>
+ <body>
+ <p>Check that resources from external stylesheets (referenced from a
+ ProcessingInstruction) are loaded with the referrer and referrer policy
+ from the external stylesheet.</p>
+ <script>
+ function addProcessingInstruction(test) {
+ let svg_url = url_prefix + "svg.py?id=" + test.id + "&type=svg" +
+ "&property=" + test.property + "&embedded-svg";
+ let iframe = document.createElement("iframe");
+ test.expected = url_prefix + "stylesheet.py?id=" + test.id +
+ "&type=svg" + "&property=" + test.property;
+ iframe.src = svg_url;
+ document.body.appendChild(iframe);
+ }
+
+ runSvgTests(svg_test_properties,
+ "Styling SVG from ProcessingInstruction",
+ addProcessingInstruction);
+ </script>
+
+ <div id="log"></div>
+ </body>
+</html>
+
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/font.py b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/font.py
new file mode 100644
index 00000000000..50a5bd2f399
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/font.py
@@ -0,0 +1,72 @@
+import os, sys, json, base64
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
+import subresource
+
+def generate_payload(request, server_data):
+ data = ('{"headers": %(headers)s}') % server_data
+ if "id" in request.GET:
+ request.server.stash.put(request.GET["id"], data)
+ # Simple base64 encoded .tff font
+ return base64.decodestring("AAEAAAANAIAAAwBQRkZUTU6u6MkAAAXcAAAAHE9TLzJWYW"
+ "QKAAABWAAAAFZjbWFwAA8D7wAAAcAAAAFCY3Z0IAAhAnkA"
+ "AAMEAAAABGdhc3D//wADAAAF1AAAAAhnbHlmCC6aTwAAAx"
+ "QAAACMaGVhZO8ooBcAAADcAAAANmhoZWEIkAV9AAABFAAA"
+ "ACRobXR4EZQAhQAAAbAAAAAQbG9jYQBwAFQAAAMIAAAACm"
+ "1heHAASQA9AAABOAAAACBuYW1lehAVOgAAA6AAAAIHcG9z"
+ "dP+uADUAAAWoAAAAKgABAAAAAQAAMhPyuV8PPPUACwPoAA"
+ "AAAMU4Lm0AAAAAxTgubQAh/5wFeAK8AAAACAACAAAAAAAA"
+ "AAEAAAK8/5wAWgXcAAAAAAV4AAEAAAAAAAAAAAAAAAAAAA"
+ "AEAAEAAAAEAAwAAwAAAAAAAgAAAAEAAQAAAEAALgAAAAAA"
+ "AQXcAfQABQAAAooCvAAAAIwCigK8AAAB4AAxAQIAAAIABg"
+ "kAAAAAAAAAAAABAAAAAAAAAAAAAAAAUGZFZABAAEEAQQMg"
+ "/zgAWgK8AGQAAAABAAAAAAAABdwAIQAAAAAF3AAABdwAZA"
+ "AAAAMAAAADAAAAHAABAAAAAAA8AAMAAQAAABwABAAgAAAA"
+ "BAAEAAEAAABB//8AAABB////wgABAAAAAAAAAQYAAAEAAA"
+ "AAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+ "AAAAAAAAAAAAAAAAAAAhAnkAAAAqACoAKgBGAAAAAgAhAA"
+ "ABKgKaAAMABwAusQEALzyyBwQA7TKxBgXcPLIDAgDtMgCx"
+ "AwAvPLIFBADtMrIHBgH8PLIBAgDtMjMRIREnMxEjIQEJ6M"
+ "fHApr9ZiECWAAAAwBk/5wFeAK8AAMABwALAAABNSEVATUh"
+ "FQE1IRUB9AH0/UQDhPu0BRQB9MjI/tTIyP7UyMgAAAAAAA"
+ "4ArgABAAAAAAAAACYATgABAAAAAAABAAUAgQABAAAAAAAC"
+ "AAYAlQABAAAAAAADACEA4AABAAAAAAAEAAUBDgABAAAAAA"
+ "AFABABNgABAAAAAAAGAAUBUwADAAEECQAAAEwAAAADAAEE"
+ "CQABAAoAdQADAAEECQACAAwAhwADAAEECQADAEIAnAADAA"
+ "EECQAEAAoBAgADAAEECQAFACABFAADAAEECQAGAAoBRwBD"
+ "AG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADAAOA"
+ "AgAE0AbwB6AGkAbABsAGEAIABDAG8AcgBwAG8AcgBhAHQA"
+ "aQBvAG4AAENvcHlyaWdodCAoYykgMjAwOCBNb3ppbGxhIE"
+ "NvcnBvcmF0aW9uAABNAGEAcgBrAEEAAE1hcmtBAABNAGUA"
+ "ZABpAHUAbQAATWVkaXVtAABGAG8AbgB0AEYAbwByAGcAZQ"
+ "AgADIALgAwACAAOgAgAE0AYQByAGsAQQAgADoAIAA1AC0A"
+ "MQAxAC0AMgAwADAAOAAARm9udEZvcmdlIDIuMCA6IE1hcm"
+ "tBIDogNS0xMS0yMDA4AABNAGEAcgBrAEEAAE1hcmtBAABW"
+ "AGUAcgBzAGkAbwBuACAAMAAwADEALgAwADAAMAAgAABWZX"
+ "JzaW9uIDAwMS4wMDAgAABNAGEAcgBrAEEAAE1hcmtBAAAA"
+ "AgAAAAAAAP+DADIAAAABAAAAAAAAAAAAAAAAAAAAAAAEAA"
+ "AAAQACACQAAAAAAAH//wACAAAAAQAAAADEPovuAAAAAMU4"
+ "Lm0AAAAAxTgubQ==");
+
+def generate_report_headers_payload(request, server_data):
+ stashed_data = request.server.stash.take(request.GET["id"])
+ return stashed_data
+
+def main(request, response):
+ handler = lambda data: generate_payload(request, data)
+ content_type = 'application/x-font-truetype'
+
+ if "report-headers" in request.GET:
+ handler = lambda data: generate_report_headers_payload(request, data)
+ content_type = 'application/json'
+
+ subresource.respond(request,
+ response,
+ payload_generator = handler,
+ content_type = content_type,
+ access_control_allow_origin = "*")
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/stylesheet.py b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/stylesheet.py
index 328db29b957..54378216774 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/stylesheet.py
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/stylesheet.py
@@ -3,24 +3,66 @@ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
import subresource
def generate_payload(request, server_data):
- return subresource.get_template("stylesheet.css.template") % {"id": request.GET["id"]}
+ data = ('{"headers": %(headers)s}') % server_data
+ type = 'image'
+ if "type" in request.GET:
+ type = request.GET["type"]
+
+ if "id" in request.GET:
+ request.server.stash.put(request.GET["id"], data)
+
+ if type == 'image':
+ return subresource.get_template("image.css.template") % {"id": request.GET["id"]}
+
+ elif type == 'font':
+ return subresource.get_template("font.css.template") % {"id": request.GET["id"]}
+
+ elif type == 'svg':
+ return subresource.get_template("svg.css.template") % {
+ "id": request.GET["id"],
+ "property": request.GET["property"]}
def generate_import_rule(request, server_data):
- data = "@import url('%(url)s?id=%(id)s');" % {
+ type = 'image'
+ property = None;
+ if "type" in request.GET:
+ type = request.GET["type"]
+ if type == "svg" and "property" in request.GET:
+ property = request.GET["property"]
+ if property is None:
+ return "@import url('%(url)s?id=%(id)s&type=%(type)s');" % {
+ "id": request.GET["id"],
+ "url": subresource.create_redirect_url(request, cross_origin = True),
+ "type": type
+ }
+ return "@import url('%(url)s?id=%(id)s&type=%(type)s&property=%(property)s');" % {
"id": request.GET["id"],
- "url": subresource.create_redirect_url(request, cross_origin = True)
+ "url": subresource.create_redirect_url(request, cross_origin = True),
+ "type": type,
+ "property": property
}
- return data
+
+def generate_report_headers_payload(request, server_data):
+ stashed_data = request.server.stash.take(request.GET["id"])
+ return stashed_data
def main(request, response):
payload_generator = lambda data: generate_payload(request, data)
+ content_type = "text/css"
+ referrer_policy = "unsafe-url"
if "import-rule" in request.GET:
payload_generator = lambda data: generate_import_rule(request, data)
+ if "report-headers" in request.GET:
+ payload_generator = lambda data: generate_report_headers_payload(request, data)
+ content_type = 'application/json'
+
+ if "referrer-policy" in request.GET:
+ referrer_policy = request.GET["referrer-policy"]
+
subresource.respond(
request,
response,
payload_generator = payload_generator,
- content_type = "text/css",
- maybe_additional_headers = { "Referrer-Policy": "unsafe-url" })
-
+ content_type = content_type,
+ maybe_additional_headers = { "Referrer-Policy": referrer_policy })
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/svg.py b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/svg.py
new file mode 100644
index 00000000000..8618875c79f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/subresource/svg.py
@@ -0,0 +1,36 @@
+import os, sys, json
+sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
+import subresource
+
+def generate_payload(request, server_data):
+ data = ('{"headers": %(headers)s}') % server_data
+ if "id" in request.GET:
+ with request.server.stash.lock:
+ request.server.stash.take(request.GET["id"])
+ request.server.stash.put(request.GET["id"], data)
+ return "<svg xmlns='http://www.w3.org/2000/svg'></svg>";
+
+def generate_payload_embedded(request, server_data):
+ return subresource.get_template("svg.embedded.template") % {
+ "id": request.GET["id"],
+ "property": request.GET["property"]};
+
+def generate_report_headers_payload(request, server_data):
+ stashed_data = request.server.stash.take(request.GET["id"])
+ return stashed_data
+
+def main(request, response):
+ handler = lambda data: generate_payload(request, data)
+ content_type = 'image/svg+xml'
+
+ if "embedded-svg" in request.GET:
+ handler = lambda data: generate_payload_embedded(request, data)
+
+ if "report-headers" in request.GET:
+ handler = lambda data: generate_report_headers_payload(request, data)
+ content_type = 'application/json'
+
+ subresource.respond(request,
+ response,
+ payload_generator = handler,
+ content_type = content_type)
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/font.css.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/font.css.template
new file mode 100644
index 00000000000..9b19df3cf1f
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/template/font.css.template
@@ -0,0 +1,9 @@
+@font-face {
+ font-family: 'wpt';
+ font-style: normal;
+ font-weight: normal;
+ src: url(/referrer-policy/generic/subresource/font.py?id=%(id)s) format('truetype');
+}
+body {
+ font-family: 'wpt';
+}
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/stylesheet.css.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/image.css.template
index 0eebd0a4526..0eebd0a4526 100644
--- a/tests/wpt/web-platform-tests/referrer-policy/generic/template/stylesheet.css.template
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/template/image.css.template
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.css.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.css.template
new file mode 100644
index 00000000000..ffaefed4aa4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.css.template
@@ -0,0 +1,3 @@
+path {
+ %(property)s: url(/referrer-policy/generic/subresource/svg.py?id=%(id)s#invalidFragment);
+}
diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.embedded.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.embedded.template
new file mode 100644
index 00000000000..5986c4800a7
--- /dev/null
+++ b/tests/wpt/web-platform-tests/referrer-policy/generic/template/svg.embedded.template
@@ -0,0 +1,5 @@
+<?xml version='1.0' standalone='no'?>
+<?xml-stylesheet href='stylesheet.py?id=%(id)s&amp;type=svg&amp;property=%(property)s' type='text/css'?>
+<svg xmlns='http://www.w3.org/2000/svg'>
+ <path d='M 50,5 95,100 5,100 z' />
+</svg>
diff --git a/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py b/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py
index 060f9b0c9a7..fefc75b7b7f 100644
--- a/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py
+++ b/tests/wpt/web-platform-tests/resource-timing/resources/TAOResponse.py
@@ -17,22 +17,22 @@ def main(request, response):
# case-sensitive match for origin, pass
response.headers.set('Timing-Allow-Origin', origin)
elif tao == 'space':
- # space seperated list of origin and wildcard, fail
+ # space separated list of origin and wildcard, fail
response.headers.set('Timing-Allow-Origin', (origin + ' *'))
elif tao == 'multi':
- # more than one TAO values, seperated by comma, pass
+ # more than one TAO values, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'multi_wildcard':
- # multiple wildcards, seperated by comma, pass
+ # multiple wildcards, separated by comma, pass
response.headers.set('Timing-Allow-Origin', '*')
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'match_origin':
- # contains a match of origin, seperated by comma, pass
+ # contains a match of origin, separated by comma, pass
response.headers.set('Timing-Allow-Origin', origin)
response.headers.append('Timing-Allow-Origin', "fake")
elif tao == 'match_wildcard':
- # contains a wildcard, seperated by comma, pass
+ # contains a wildcard, separated by comma, pass
response.headers.set('Timing-Allow-Origin', "fake")
response.headers.append('Timing-Allow-Origin', '*')
elif tao == 'uppercase':
diff --git a/tests/wpt/web-platform-tests/resources/test/conftest.py b/tests/wpt/web-platform-tests/resources/test/conftest.py
index 5fca1d24c41..dde9e9dc0a7 100644
--- a/tests/wpt/web-platform-tests/resources/test/conftest.py
+++ b/tests/wpt/web-platform-tests/resources/test/conftest.py
@@ -2,11 +2,12 @@ import io
import json
import os
import ssl
-import urllib2
import html5lib
import pytest
from selenium import webdriver
+from six import text_type
+from six.moves import urllib
from wptserver import WPTServer
@@ -63,8 +64,8 @@ class HTMLItem(pytest.Item, pytest.Collector):
# Some tests are reliant on the WPT servers substitution functionality,
# so tests must be retrieved from the server rather than read from the
# file system directly.
- handle = urllib2.urlopen(self.url,
- context=parent.session.config.ssl_context)
+ handle = urllib.request.urlopen(self.url,
+ context=parent.session.config.ssl_context)
try:
markup = handle.read()
finally:
@@ -87,7 +88,7 @@ class HTMLItem(pytest.Item, pytest.Collector):
continue
if element.tag == 'script':
if element.attrib.get('id') == 'expected':
- self.expected = json.loads(unicode(element.text))
+ self.expected = json.loads(text_type(element.text))
src = element.attrib.get('src', '')
@@ -186,7 +187,7 @@ class HTMLItem(pytest.Item, pytest.Collector):
@staticmethod
def _assert_sequence(nums):
if nums and len(nums) > 0:
- assert nums == range(1, nums[-1] + 1)
+ assert nums == list(range(1, nums[-1] + 1))
@staticmethod
def _scrub_stack(test_obj):
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
index a9d92b12f81..c65d026edba 100644
--- a/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/api-tests-1.html
@@ -147,8 +147,8 @@
var A = function(){this.a = "a"}
A.prototype = {b:"b"}
var a = new A();
- assert_exists(a, "a");
- assert_not_exists(a, "b");
+ assert_own_property(a, "a");
+ assert_false(a.hasOwnProperty("b"), "unexpected property found: \"b\"");
assert_inherits(a, "b");
}
test(testAssertInherits, "test for assert[_not]_exists and insert_inherits")
diff --git a/tests/wpt/web-platform-tests/resources/test/tests/functional/log-insertion.html b/tests/wpt/web-platform-tests/resources/test/tests/functional/log-insertion.html
new file mode 100644
index 00000000000..3f28266d576
--- /dev/null
+++ b/tests/wpt/web-platform-tests/resources/test/tests/functional/log-insertion.html
@@ -0,0 +1,33 @@
+<!DOCTYPE HTML>
+<title>Log insertion</title>
+<meta name="variant" content="">
+<meta name="variant" content="?keep-promise">
+<script src="../../variants.js"></script>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+async_test(function(t) {
+ window.onload = t.step_func_done(function() {
+ var body = document.body;
+ assert_not_equals(body, null);
+
+ var log = document.getElementById("log");
+ assert_equals(log.parentNode, body);
+ });
+});
+</script>
+<script type="text/json" id="expected">
+{
+ "summarized_status": {
+ "status_string": "OK",
+ "message": null
+ },
+ "summarized_tests": [{
+ "status_string": "PASS",
+ "name": "Log insertion",
+ "message": null,
+ "properties": {}
+ }],
+ "type": "complete"
+}
+</script>
diff --git a/tests/wpt/web-platform-tests/resources/test/tox.ini b/tests/wpt/web-platform-tests/resources/test/tox.ini
index d3a30f870a1..7a9e4fa5228 100644
--- a/tests/wpt/web-platform-tests/resources/test/tox.ini
+++ b/tests/wpt/web-platform-tests/resources/test/tox.ini
@@ -1,6 +1,6 @@
[tox]
-# wptserve etc. are Python2-only.
-envlist = py27
+# Note that only py27 is run in CI.
+envlist = py27,py36
skipsdist=True
[testenv]
@@ -11,6 +11,7 @@ deps =
pytest>=2.9
pyvirtualdisplay
selenium
+ six
requests
commands = pytest {posargs} -vv tests
diff --git a/tests/wpt/web-platform-tests/resources/test/wptserver.py b/tests/wpt/web-platform-tests/resources/test/wptserver.py
index fa32c33b9d7..d47e325fbef 100644
--- a/tests/wpt/web-platform-tests/resources/test/wptserver.py
+++ b/tests/wpt/web-platform-tests/resources/test/wptserver.py
@@ -3,7 +3,7 @@ import os
import subprocess
import time
import sys
-import urllib2
+from six.moves import urllib
class WPTServer(object):
@@ -38,9 +38,9 @@ class WPTServer(object):
logging.warn('Command "%s" exited with %s', ' '.join(wptserve_cmd), exit_code)
break
try:
- urllib2.urlopen(self.base_url, timeout=1)
+ urllib.request.urlopen(self.base_url, timeout=1)
return
- except urllib2.URLError:
+ except urllib.error.URLError:
pass
raise Exception('Could not start wptserve on %s' % self.base_url)
diff --git a/tests/wpt/web-platform-tests/resources/testharness.js b/tests/wpt/web-platform-tests/resources/testharness.js
index 352e8b76266..0a92cf10a3d 100644
--- a/tests/wpt/web-platform-tests/resources/testharness.js
+++ b/tests/wpt/web-platform-tests/resources/testharness.js
@@ -1255,24 +1255,12 @@ policies and contribution forms [3].
expose(assert_class_string, "assert_class_string");
- function _assert_own_property(name) {
- return function(object, property_name, description)
- {
- assert(object.hasOwnProperty(property_name),
- name, description,
- "expected property ${p} missing", {p:property_name});
- };
+ function assert_own_property(object, property_name, description) {
+ assert(object.hasOwnProperty(property_name),
+ "assert_own_property", description,
+ "expected property ${p} missing", {p:property_name});
}
- expose(_assert_own_property("assert_exists"), "assert_exists");
- expose(_assert_own_property("assert_own_property"), "assert_own_property");
-
- function assert_not_exists(object, property_name, description)
- {
- assert(!object.hasOwnProperty(property_name),
- "assert_not_exists", description,
- "unexpected property ${p} found", {p:property_name});
- }
- expose(assert_not_exists, "assert_not_exists");
+ expose(assert_own_property, "assert_own_property");
function _assert_inherits(name) {
return function (object, property_name, description)
@@ -2559,27 +2547,24 @@ policies and contribution forms [3].
if (output_document.body) {
output_document.body.appendChild(node);
} else {
- var is_html = false;
- var is_svg = false;
- var output_window = output_document.defaultView;
- if (output_window && "SVGSVGElement" in output_window) {
- is_svg = output_document.documentElement instanceof output_window.SVGSVGElement;
- } else if (output_window) {
- is_html = (output_document.namespaceURI == "http://www.w3.org/1999/xhtml" &&
- output_document.localName == "html");
- }
+ var root = output_document.documentElement;
+ var is_html = (root &&
+ root.namespaceURI == "http://www.w3.org/1999/xhtml" &&
+ root.localName == "html");
+ var is_svg = (output_document.defaultView &&
+ "SVGSVGElement" in output_document.defaultView &&
+ root instanceof output_document.defaultView.SVGSVGElement);
if (is_svg) {
var foreignObject = output_document.createElementNS("http://www.w3.org/2000/svg", "foreignObject");
foreignObject.setAttribute("width", "100%");
foreignObject.setAttribute("height", "100%");
- output_document.documentElement.appendChild(foreignObject);
+ root.appendChild(foreignObject);
foreignObject.appendChild(node);
} else if (is_html) {
- var body = output_document.createElementNS("http://www.w3.org/1999/xhtml", "body");
- output_document.documentElement.appendChild(body);
- body.appendChild(node);
+ root.appendChild(output_document.createElementNS("http://www.w3.org/1999/xhtml", "body"))
+ .appendChild(node);
} else {
- output_document.documentElement.appendChild(node);
+ root.appendChild(node);
}
}
}
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html
index 0490f2b4058..b6281b9e6c3 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/navigation-redirect.https.html
@@ -92,10 +92,6 @@ function redirect_test(url,
expected_request_infos,
test_name) {
promise_test(async t => {
- const message_promise = new Promise(resolve => {
- // A message with ID 'last_url' will be sent from the iframe.
- message_resolvers['last_url'] = resolve;
- });
const frame = await with_iframe(url);
t.add_cleanup(() => { frame.remove(); });
@@ -105,7 +101,7 @@ function redirect_test(url,
});
});
await check_all_intercepted_urls(expected_intercepted_urls);
- const last_url = await message_promise;
+ const last_url = await send_to_iframe(frame, 'getLocation');
assert_equals(last_url, expected_last_url, 'Last URL should match.');
}, test_name);
}
@@ -129,7 +125,7 @@ function send_to_iframe(frame, message) {
message_resolvers[message_id] = resolve;
frame.contentWindow.postMessage(
{id: message_id, message},
- host_info['HTTPS_REMOTE_ORIGIN']);
+ '*');
});
}
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py
index 907cefa3b1a..16850723f96 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-out-scope.py
@@ -11,10 +11,12 @@ def main(request, response):
return status, [("content-type", "text/html")], '''
<!DOCTYPE html>
<script>
+onmessage = event => {
window.parent.postMessage(
{
- id: 'last_url',
+ id: event.data.id,
result: location.href
}, '*');
+};
</script>
'''
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope1.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope1.py
index 907cefa3b1a..16850723f96 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope1.py
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope1.py
@@ -11,10 +11,12 @@ def main(request, response):
return status, [("content-type", "text/html")], '''
<!DOCTYPE html>
<script>
+onmessage = event => {
window.parent.postMessage(
{
- id: 'last_url',
+ id: event.data.id,
result: location.href
}, '*');
+};
</script>
'''
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope2.py b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope2.py
index 907cefa3b1a..16850723f96 100644
--- a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope2.py
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/navigation-redirect-scope2.py
@@ -11,10 +11,12 @@ def main(request, response):
return status, [("content-type", "text/html")], '''
<!DOCTYPE html>
<script>
+onmessage = event => {
window.parent.postMessage(
{
- id: 'last_url',
+ id: event.data.id,
result: location.href
}, '*');
+};
</script>
'''
diff --git a/tests/wpt/web-platform-tests/svg/import/animate-elem-83-t-manual.svg b/tests/wpt/web-platform-tests/svg/import/animate-elem-83-t-manual.svg
index 2de478b5315..46b9bedc41b 100644
--- a/tests/wpt/web-platform-tests/svg/import/animate-elem-83-t-manual.svg
+++ b/tests/wpt/web-platform-tests/svg/import/animate-elem-83-t-manual.svg
@@ -43,7 +43,7 @@
<p>
The third test validates a simple values-animation on a path's d attribute
made of M, C and Z commands where the values attribute is specified and
- specifies three seperate values.
+ specifies three separate values.
The attribute is compatible with the path element's d attribute.
</p>
<p>
diff --git a/tests/wpt/web-platform-tests/tools/ci/check_stability.py b/tests/wpt/web-platform-tests/tools/ci/check_stability.py
index 2b32eb50c0f..a0633110860 100644
--- a/tests/wpt/web-platform-tests/tools/ci/check_stability.py
+++ b/tests/wpt/web-platform-tests/tools/ci/check_stability.py
@@ -272,6 +272,7 @@ def run(venv, wpt_args, **kwargs):
wpt_kwargs["verify_log_full"] = False
if wpt_kwargs["repeat"] == 1:
wpt_kwargs["repeat"] = 10
+ wpt_kwargs["headless"] = False
wpt_kwargs = setup_wptrunner(venv, **wpt_kwargs)
diff --git a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
index 45416501e03..5a720baa2e9 100755
--- a/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
+++ b/tests/wpt/web-platform-tests/tools/ci/taskcluster-run.py
@@ -73,7 +73,8 @@ def main(product, commit_range, wpt_args):
"-y",
"--no-pause",
"--no-restart-on-unexpected",
- "--install-fonts"
+ "--install-fonts",
+ "--no-headless"
]
wpt_args += browser_specific_args.get(product, [])
diff --git a/tests/wpt/web-platform-tests/tools/manifest/vcs.py b/tests/wpt/web-platform-tests/tools/manifest/vcs.py
index 42e9863712f..675eb01714f 100644
--- a/tests/wpt/web-platform-tests/tools/manifest/vcs.py
+++ b/tests/wpt/web-platform-tests/tools/manifest/vcs.py
@@ -1,5 +1,6 @@
import os
import subprocess
+import platform
from .sourcefile import SourceFile
@@ -16,9 +17,12 @@ class Git(object):
full_cmd = ["git", cmd] + list(args)
try:
return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT)
- except WindowsError:
- full_cmd[0] = "git.bat"
- return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT)
+ except Exception as e:
+ if platform.uname()[0] == "Windows" and isinstance(e, WindowsError):
+ full_cmd[0] = "git.bat"
+ return subprocess.check_output(full_cmd, cwd=repo_path, stderr=subprocess.STDOUT)
+ else:
+ raise
return git
@classmethod
diff --git a/tests/wpt/web-platform-tests/tools/wpt/browser.py b/tests/wpt/web-platform-tests/tools/wpt/browser.py
index 7b943c2e73c..052ec66a091 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/browser.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/browser.py
@@ -102,6 +102,11 @@ class Firefox(Browser):
"beta": "latest-beta",
"nightly": "latest"
}
+ application_name = {
+ "stable": "Firefox.app",
+ "beta": "Firefox.app",
+ "nightly": "Firefox Nightly.app"
+ }
if channel not in branch:
raise ValueError("Unrecognised release channel: %s" % channel)
@@ -131,10 +136,10 @@ class Firefox(Browser):
try:
mozinstall.install(filename, dest)
except mozinstall.mozinstall.InstallError:
- if platform == "mac" and os.path.exists(os.path.join(dest, "Firefox Nightly.app")):
+ if platform == "mac" and os.path.exists(os.path.join(dest, application_name[channel])):
# mozinstall will fail if nightly is already installed in the venv because
# mac installation uses shutil.copy_tree
- mozinstall.uninstall(os.path.join(dest, "Firefox Nightly.app"))
+ mozinstall.uninstall(os.path.join(dest, application_name[channel]))
mozinstall.install(filename, dest)
else:
raise
@@ -142,7 +147,7 @@ class Firefox(Browser):
os.remove(filename)
return self.find_binary_path(dest)
- def find_binary_path(self, path=None):
+ def find_binary_path(self,path=None, channel="nightly"):
"""Looks for the firefox binary in the virtual environment"""
platform = {
@@ -151,9 +156,15 @@ class Firefox(Browser):
"Darwin": "mac"
}.get(uname[0])
+ application_name = {
+ "stable": "Firefox.app",
+ "beta": "Firefox.app",
+ "nightly": "Firefox Nightly.app"
+ }.get(channel)
+
if path is None:
#os.getcwd() doesn't include the venv path
- path = os.path.join(os.getcwd(), "_venv", "browsers")
+ path = os.path.join(os.getcwd(), "_venv", "browsers", channel)
binary = None
@@ -163,7 +174,8 @@ class Firefox(Browser):
import mozinstall
binary = mozinstall.get_binary(path, "firefox")
elif platform == "mac":
- binary = find_executable("firefox", os.path.join(path, "Firefox Nightly.app", "Contents", "MacOS"))
+ binary = find_executable("firefox", os.path.join(path, application_name,
+ "Contents", "MacOS"))
return binary
@@ -171,14 +183,15 @@ class Firefox(Browser):
if venv_path is None:
venv_path = os.path.join(os.getcwd(), "_venv")
- path = os.path.join(venv_path, "browsers")
- if channel is not None:
- path = os.path.join(path, channel)
- binary = self.find_binary_path(path)
+ if channel is None:
+ channel = "nightly"
+
+ path = os.path.join(venv_path, "browsers", channel)
+ binary = self.find_binary_path(path, channel)
if not binary and uname[0] == "Darwin":
- macpaths = ["/Applications/FirefoxNightly.app/Contents/MacOS",
- os.path.expanduser("~/Applications/FirefoxNightly.app/Contents/MacOS"),
+ macpaths = ["/Applications/Firefox Nightly.app/Contents/MacOS",
+ os.path.expanduser("~/Applications/Firefox Nightly.app/Contents/MacOS"),
"/Applications/Firefox Developer Edition.app/Contents/MacOS",
os.path.expanduser("~/Applications/Firefox Developer Edition.app/Contents/MacOS"),
"/Applications/Firefox.app/Contents/MacOS",
diff --git a/tests/wpt/web-platform-tests/tools/wpt/run.py b/tests/wpt/web-platform-tests/tools/wpt/run.py
index 7e8827b1069..d08b0f93807 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/run.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/run.py
@@ -177,6 +177,9 @@ class Firefox(BrowserSetup):
def setup_kwargs(self, kwargs):
if kwargs["binary"] is None:
+ if kwargs["browser_channel"] is None:
+ logger.info("No browser channel specified. Running nightly instead.")
+
binary = self.browser.find_binary(self.venv.path,
kwargs["browser_channel"])
if binary is None:
@@ -221,6 +224,10 @@ Consider installing certutil via your OS package manager or directly.""")
channel=kwargs["browser_channel"])
kwargs["prefs_root"] = prefs_root
+ if kwargs["headless"] is None:
+ kwargs["headless"] = True
+ logger.info("Running in headless mode, pass --no-headless to disable")
+
# Allow WebRTC tests to call getUserMedia.
kwargs["extra_prefs"].append("media.navigator.streams.fake=true")
diff --git a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
index d0cb2b85c99..8387dc9613e 100644
--- a/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
+++ b/tests/wpt/web-platform-tests/tools/wpt/tests/test_wpt.py
@@ -169,23 +169,25 @@ def test_run_firefox(manifest_dir):
if is_port_8000_in_use():
pytest.skip("port 8000 already in use")
- os.environ["MOZ_HEADLESS"] = "1"
- try:
- if sys.platform == "darwin":
- fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "Firefox Nightly.app")
- else:
- fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "firefox")
- if os.path.exists(fx_path):
- shutil.rmtree(fx_path)
- with pytest.raises(SystemExit) as excinfo:
- wpt.main(argv=["run", "--no-pause", "--install-browser", "--yes",
- "--metadata", manifest_dir,
- "firefox", "/dom/nodes/Element-tagName.html"])
- assert os.path.exists(fx_path)
+ if sys.platform == "darwin":
+ fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "Firefox Nightly.app")
+ else:
+ fx_path = os.path.join(wpt.localpaths.repo_root, "_venv", "browsers", "nightly", "firefox")
+ if os.path.exists(fx_path):
shutil.rmtree(fx_path)
- assert excinfo.value.code == 0
- finally:
- del os.environ["MOZ_HEADLESS"]
+ with pytest.raises(SystemExit) as excinfo:
+ wpt.main(argv=["run", "--no-pause", "--install-browser", "--yes",
+ # The use of `--binary-args` is intentional: it
+ # demonstrates that internally-managed command-line
+ # arguments are properly merged with those specified by
+ # the user. See
+ # https://github.com/web-platform-tests/wpt/pull/13154
+ "--binary-arg=-headless",
+ "--metadata", manifest_dir,
+ "firefox", "/dom/nodes/Element-tagName.html"])
+ assert os.path.exists(fx_path)
+ shutil.rmtree(fx_path)
+ assert excinfo.value.code == 0
@pytest.mark.slow
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
index 22a07532657..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
index 22a07532657..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_chrome_android.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
index 22a07532657..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_edge.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
index f1e6a8585ca..bfe0d4bc347 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_firefox.txt
@@ -1,8 +1,8 @@
-marionette_driver==2.6.0
-mozprofile==1.1.0
+marionette_driver==2.7.0
+mozprofile==2.0.0
mozprocess == 0.26
mozcrash == 1.0
-mozrunner == 7.0.0
+mozrunner==7.0.2
mozleak == 0.1
mozinstall==1.16.0
mozdownload==1.24
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
index 22a07532657..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_ie.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
index 22a07532657..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_opera.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
index 5a1d26b8b9b..3f86182b7d0 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_safari.txt
@@ -1,2 +1,2 @@
mozprocess == 0.26
-selenium==3.13.0
+selenium==3.14.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
index 77a74222433..07c525a67fd 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
@@ -1,3 +1,3 @@
mozprocess == 0.26
-selenium==3.14.0
+selenium==3.14.1
requests==2.19.1
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
index 8b0ba4585a9..d41df8dec0e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome.py
@@ -47,6 +47,11 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
for (kwarg, capability) in [("binary", "binary"), ("binary_args", "args")]:
if kwargs[kwarg] is not None:
capabilities["goog:chromeOptions"][capability] = kwargs[kwarg]
+ if kwargs["headless"]:
+ if "args" not in capabilities["goog:chromeOptions"]:
+ capabilities["goog:chromeOptions"]["args"] = []
+ if "--headless" not in capabilities["goog:chromeOptions"]["args"]:
+ capabilities["goog:chromeOptions"]["args"].append("--headless")
if test_type == "testharness":
capabilities["goog:chromeOptions"]["useAutomationExtension"] = False
capabilities["goog:chromeOptions"]["excludeSwitches"] = ["enable-automation"]
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_webdriver.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_webdriver.py
index a63460f4544..2ee8ec41ed6 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_webdriver.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/chrome_webdriver.py
@@ -41,6 +41,12 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
if kwargs[kwarg] is not None:
capabilities["goog:chromeOptions"][capability] = kwargs[kwarg]
+ if kwargs["headless"]:
+ if "args" not in capabilities["goog:chromeOptions"]:
+ capabilities["goog:chromeOptions"]["args"] = []
+ if "--headless" not in capabilities["goog:chromeOptions"]["args"]:
+ capabilities["goog:chromeOptions"]["args"].append("--headless")
+
if test_type == "testharness":
capabilities["goog:chromeOptions"]["useAutomationExtension"] = False
capabilities["goog:chromeOptions"]["excludeSwitches"] = ["enable-automation"]
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
index 9f7ebfa2ca5..b370b5d7a5e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -83,7 +83,8 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
"asan": run_info_data.get("asan"),
"stylo_threads": kwargs["stylo_threads"],
"chaos_mode_flags": kwargs["chaos_mode_flags"],
- "config": config}
+ "config": config,
+ "headless": kwargs["headless"]}
def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
@@ -106,6 +107,11 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
options["binary"] = kwargs["binary"]
if kwargs["binary_args"]:
options["args"] = kwargs["binary_args"]
+ if kwargs["headless"]:
+ if "args" not in options:
+ options["args"] = []
+ if "--headless" not in options["args"]:
+ options["args"].append("--headless")
options["prefs"] = {
"network.dns.localDomains": ",".join(server_config.domains_set)
}
@@ -155,7 +161,7 @@ class FirefoxBrowser(Browser):
symbols_path=None, stackwalk_binary=None, certutil_binary=None,
ca_certificate_path=None, e10s=False, stackfix_dir=None,
binary_args=None, timeout_multiplier=None, leak_check=False, asan=False,
- stylo_threads=1, chaos_mode_flags=None, config=None):
+ stylo_threads=1, chaos_mode_flags=None, config=None, headless=None):
Browser.__init__(self, logger)
self.binary = binary
self.prefs_root = prefs_root
@@ -188,6 +194,7 @@ class FirefoxBrowser(Browser):
self.lsan_handler = None
self.stylo_threads = stylo_threads
self.chaos_mode_flags = chaos_mode_flags
+ self.headless = headless
def settings(self, test):
self.lsan_allowed = test.lsan_allowed
@@ -216,6 +223,8 @@ class FirefoxBrowser(Browser):
env["STYLO_THREADS"] = str(self.stylo_threads)
if self.chaos_mode_flags is not None:
env["MOZ_CHAOSMODE"] = str(self.chaos_mode_flags)
+ if self.headless:
+ env["MOZ_HEADLESS"] = "1"
preferences = self.load_prefs()
@@ -251,9 +260,11 @@ class FirefoxBrowser(Browser):
if self.ca_certificate_path is not None:
self.setup_ssl()
+ args = self.binary_args[:] if self.binary_args else []
+ args += [cmd_arg("marionette"), "about:blank"]
+
debug_args, cmd = browser_command(self.binary,
- self.binary_args if self.binary_args else [] +
- [cmd_arg("marionette"), "about:blank"],
+ args,
self.debug_info)
self.runner = FirefoxRunner(profile=self.profile,
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py
index e684bf68076..db388bbca0a 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/stability.py
@@ -115,8 +115,9 @@ def find_slow_status(test):
"""Check if a single test almost times out.
We are interested in tests that almost time out (i.e. likely to be flaky).
- Therefore, timeout statuses are ignored, including (EXTERNAL-)TIMEOUT &
- CRASH (tests that time out may be marked as CRASH if crashes are detected).
+ Therefore, timeout statuses are ignored, including (EXTERNAL-)TIMEOUT.
+ CRASH & ERROR are also ignored because the they override TIMEOUT; a test
+ that both crashes and times out is marked as CRASH, so it won't be flaky.
Returns:
A result status produced by a run that almost times out; None, if no
@@ -125,7 +126,7 @@ def find_slow_status(test):
if "timeout" not in test:
return None
threshold = test["timeout"] * FLAKY_THRESHOLD
- for status in ['PASS', 'FAIL', 'OK', 'ERROR']:
+ for status in ['PASS', 'FAIL', 'OK']:
if (status in test["longest_duration"] and
test["longest_duration"][status] > threshold):
return status
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
index 7e386b881d4..353e2ada1eb 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
@@ -210,7 +210,7 @@ class BrowserManager(object):
self.command_queue.put((command, args))
def init_timeout(self):
- # This is called from a seperate thread, so we send a message to the
+ # This is called from a separate thread, so we send a message to the
# main loop so we get back onto the manager thread
self.logger.debug("init_failed called from timer")
self.send_message("init_failed")
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
index 5a051b6c899..c3c89f2f192 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/tests/test_stability.py
@@ -21,6 +21,9 @@ def test_find_slow_status():
"longest_duration": {"CRASH": 10},
"timeout": 10}) is None
assert stability.find_slow_status({
+ "longest_duration": {"ERROR": 10},
+ "timeout": 10}) is None
+ assert stability.find_slow_status({
"longest_duration": {"PASS": 1},
"timeout": 10}) is None
assert stability.find_slow_status({
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
index d25e561ad19..467903f2773 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptcommandline.py
@@ -205,6 +205,10 @@ scheme host and port.""")
help="Allow the wptrunner to install fonts on your system")
config_group.add_argument("--font-dir", action="store", type=abs_path, dest="font_dir",
help="Path to local font installation directory", default=None)
+ config_group.add_argument("--headless", action="store_true",
+ help="Run browser in headless mode", default=None)
+ config_group.add_argument("--no-headless", action="store_false", dest="headless",
+ help="Don't run browser in headless mode")
build_type = parser.add_mutually_exclusive_group()
build_type.add_argument("--debug-build", dest="debug", action="store_true",
@@ -365,6 +369,7 @@ def set_from_config(kwargs):
check_paths(kwargs)
+
def get_test_paths(config):
# Set up test_paths
test_paths = OrderedDict()
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
index a6a29724ad7..6bd1db9927c 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/wptrunner.py
@@ -124,6 +124,8 @@ def get_pause_after_test(test_loader, **kwargs):
if kwargs["pause_after_test"] is None:
if kwargs["repeat_until_unexpected"]:
return False
+ if kwargs["headless"]:
+ return False
if kwargs["repeat"] == 1 and kwargs["rerun"] == 1 and total_tests == 1:
return True
return False
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
index e49c8287c59..741ab0bcb74 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/base.py
@@ -75,7 +75,7 @@ class TestUsingServer(unittest.TestCase):
req.add_data(body)
if auth is not None:
- req.add_header("Authorization", "Basic %s" % base64.b64encode('%s:%s' % auth))
+ req.add_header("Authorization", b"Basic %s" % base64.b64encode(("%s:%s" % auth).encode("utf-8")))
return urlopen(req)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
index 15c7cb7e803..759a096b799 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_handlers.py
@@ -88,19 +88,16 @@ class TestFileHandler(TestUsingServer):
self.request("/document.txt", headers={"Range":"bytes=%i-%i" % (len(expected), len(expected) + 10)})
self.assertEqual(cm.exception.code, 416)
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_config(self):
resp = self.request("/sub.sub.txt")
expected = b"localhost localhost %i" % self.server.port
assert resp.read().rstrip() == expected
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_headers(self):
resp = self.request("/sub_headers.sub.txt", headers={"X-Test": "PASS"})
expected = b"PASS"
assert resp.read().rstrip() == expected
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_params(self):
resp = self.request("/sub_params.sub.txt", query="test=PASS")
expected = b"PASS"
@@ -108,7 +105,6 @@ class TestFileHandler(TestUsingServer):
class TestFunctionHandler(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_string_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -119,7 +115,7 @@ class TestFunctionHandler(TestUsingServer):
resp = self.request(route[1])
self.assertEqual(200, resp.getcode())
self.assertEqual("9", resp.info()["Content-Length"])
- self.assertEqual("test data", resp.read())
+ self.assertEqual(b"test data", resp.read())
def test_tuple_1_rv(self):
@wptserve.handlers.handler
@@ -134,7 +130,6 @@ class TestFunctionHandler(TestUsingServer):
assert cm.value.code == 500
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_2_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -146,9 +141,8 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual(200, resp.getcode())
self.assertEqual("4", resp.info()["Content-Length"])
self.assertEqual("test-value", resp.info()["test-header"])
- self.assertEqual("test", resp.read())
+ self.assertEqual(b"test", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_3_rv(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -159,9 +153,8 @@ class TestFunctionHandler(TestUsingServer):
resp = self.request(route[1])
self.assertEqual(202, resp.getcode())
self.assertEqual("test-value", resp.info()["test-header"])
- self.assertEqual("test data", resp.read())
+ self.assertEqual(b"test data", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_tuple_3_rv_1(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -173,7 +166,7 @@ class TestFunctionHandler(TestUsingServer):
self.assertEqual(202, resp.getcode())
self.assertEqual("Some Status", resp.msg)
self.assertEqual("test-value", resp.info()["test-header"])
- self.assertEqual("test data", resp.read())
+ self.assertEqual(b"test data", resp.read())
def test_tuple_4_rv(self):
@wptserve.handlers.handler
@@ -263,7 +256,6 @@ class TestPythonHandler(TestUsingServer):
self.assertEqual("PASS", resp.info()["X-Test"])
self.assertEqual(b"PASS", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_import(self):
dir_name = os.path.join(doc_root, "subdir")
assert dir_name not in sys.path
@@ -273,7 +265,7 @@ class TestPythonHandler(TestUsingServer):
assert "test_module" not in sys.modules
self.assertEqual(200, resp.getcode())
self.assertEqual("text/plain", resp.info()["Content-Type"])
- self.assertEqual("PASS", resp.read())
+ self.assertEqual(b"PASS", resp.read())
def test_no_main(self):
with pytest.raises(HTTPError) as cm:
@@ -314,13 +306,12 @@ class TestDirectoryHandler(TestUsingServer):
class TestAsIsHandler(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_as_is(self):
resp = self.request("/test.asis")
self.assertEqual(202, resp.getcode())
self.assertEqual("Giraffe", resp.msg)
self.assertEqual("PASS", resp.info()["X-Test"])
- self.assertEqual("Content", resp.read())
+ self.assertEqual(b"Content", resp.read())
#Add a check that the response is actually sane
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
index 83b2c621641..7739af5e26e 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_pipes.py
@@ -57,40 +57,35 @@ class TestSlice(TestUsingServer):
self.assertEqual(resp.read(), expected[:10])
class TestSub(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_config(self):
resp = self.request("/sub.txt", query="pipe=sub")
- expected = "localhost localhost %i" % self.server.port
+ expected = b"localhost localhost %i" % self.server.port
self.assertEqual(resp.read().rstrip(), expected)
@pytest.mark.xfail(sys.platform == "win32",
reason="https://github.com/web-platform-tests/wpt/issues/12949")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_file_hash(self):
resp = self.request("/sub_file_hash.sub.txt")
- expected = """
+ expected = b"""
md5: JmI1W8fMHfSfCarYOSxJcw==
sha1: nqpWqEw4IW8NjD6R375gtrQvtTo=
sha224: RqQ6fMmta6n9TuA/vgTZK2EqmidqnrwBAmQLRQ==
sha256: G6Ljg1uPejQxqFmvFOcV/loqnjPTW5GSOePOfM/u0jw=
sha384: lkXHChh1BXHN5nT5BYhi1x67E1CyYbPKRKoF2LTm5GivuEFpVVYtvEBHtPr74N9E
-sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICz
-JwGFonfXwg=="""
+sha512: r8eLGRTc7ZznZkFjeVLyo6/FyQdra9qmlYCwKKxm3kfQAswRS9+3HsYk3thLUhcFmmWhK4dXaICzJwGFonfXwg=="""
self.assertEqual(resp.read().rstrip(), expected.strip())
def test_sub_file_hash_unrecognized(self):
with self.assertRaises(urllib.error.HTTPError):
self.request("/sub_file_hash_unrecognized.sub.txt")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_headers(self):
resp = self.request("/sub_headers.txt", query="pipe=sub", headers={"X-Test": "PASS"})
- expected = "PASS"
+ expected = b"PASS"
self.assertEqual(resp.read().rstrip(), expected)
@pytest.mark.xfail(sys.platform == "win32",
reason="https://github.com/web-platform-tests/wpt/issues/12949")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_location(self):
resp = self.request("/sub_location.sub.txt?query_string")
expected = """
@@ -101,30 +96,27 @@ pathname: /sub_location.sub.txt
port: {0}
query: ?query_string
scheme: http
-server: http://localhost:{0}""".format(self.server.port)
+server: http://localhost:{0}""".format(self.server.port).encode("ascii")
self.assertEqual(resp.read().rstrip(), expected.strip())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_params(self):
resp = self.request("/sub_params.txt", query="test=PASS&pipe=sub")
- expected = "PASS"
+ expected = b"PASS"
self.assertEqual(resp.read().rstrip(), expected)
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_url_base(self):
resp = self.request("/sub_url_base.sub.txt")
- self.assertEqual(resp.read().rstrip(), "Before / After")
+ self.assertEqual(resp.read().rstrip(), b"Before / After")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_uuid(self):
resp = self.request("/sub_uuid.sub.txt")
- self.assertRegexpMatches(resp.read().rstrip(), r"Before [a-f0-9-]+ After")
+ self.assertRegexpMatches(resp.read().rstrip(), b"Before [a-f0-9-]+ After")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_sub_var(self):
resp = self.request("/sub_var.sub.txt")
port = self.server.port
- expected = "localhost %s A %s B localhost C" % (port, port)
+ print(port, type(port))
+ expected = b"localhost %d A %d B localhost C" % (port, port)
self.assertEqual(resp.read().rstrip(), expected)
class TestTrickle(TestUsingServer):
@@ -144,12 +136,10 @@ class TestTrickle(TestUsingServer):
self.assertEqual(resp.info()["Expires"], "0")
class TestPipesWithVariousHandlers(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_file_handler(self):
resp = self.request("/test_string.py", query="pipe=slice(null,2)")
- self.assertEqual(resp.read(), "PA")
+ self.assertEqual(resp.read(), b"PA")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -157,9 +147,8 @@ class TestPipesWithVariousHandlers(TestUsingServer):
route = ("GET", "/test/test_pipes_1/", handler)
self.server.router.register(*route)
resp = self.request(route[1], query="pipe=slice(null,2)")
- self.assertEqual(resp.read(), "PA")
+ self.assertEqual(resp.read(), b"PA")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_python_func_handler_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -168,9 +157,8 @@ class TestPipesWithVariousHandlers(TestUsingServer):
self.server.router.register(*route)
resp = self.request(route[1], query="pipe=slice(null,2)")
# slice has not been applied to the response, because response.writer was used.
- self.assertEqual(resp.read(), "PASS")
+ self.assertEqual(resp.read(), b"PASS")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_header_pipe_with_python_func_using_response_writer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -180,9 +168,8 @@ class TestPipesWithVariousHandlers(TestUsingServer):
resp = self.request(route[1], query="pipe=header(X-TEST,FAIL)")
# header pipe was ignored, because response.writer was used.
self.assertFalse(resp.info().get("X-TEST"))
- self.assertEqual(resp.read(), "CONTENT")
+ self.assertEqual(resp.read(), b"CONTENT")
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_with_json_handler(self):
@wptserve.handlers.json_handler
def handler(request, response):
@@ -190,32 +177,29 @@ class TestPipesWithVariousHandlers(TestUsingServer):
route = ("GET", "/test/test_pipes_2/", handler)
self.server.router.register(*route)
resp = self.request(route[1], query="pipe=slice(null,2)")
- self.assertEqual(resp.read(), '"{')
+ self.assertEqual(resp.read(), b'"{')
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_slice_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=slice(null,2)")
self.assertEqual(202, resp.getcode())
self.assertEqual("Giraffe", resp.msg)
self.assertEqual("PASS", resp.info()["X-Test"])
# slice has not been applied to the response, because response.writer was used.
- self.assertEqual("Content", resp.read())
+ self.assertEqual(b"Content", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_headers_with_as_is_handler(self):
resp = self.request("/test.asis", query="pipe=header(X-TEST,FAIL)")
self.assertEqual(202, resp.getcode())
self.assertEqual("Giraffe", resp.msg)
# header pipe was ignored.
self.assertEqual("PASS", resp.info()["X-TEST"])
- self.assertEqual("Content", resp.read())
+ self.assertEqual(b"Content", resp.read())
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_trickle_with_as_is_handler(self):
t0 = time.time()
resp = self.request("/test.asis", query="pipe=trickle(1:d2:5:d1:r2)")
t1 = time.time()
- self.assertTrue('Content' in resp.read())
+ self.assertTrue(b'Content' in resp.read())
self.assertGreater(6, t1-t0)
if __name__ == '__main__':
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
index 97d75eb7128..983539260a5 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/tests/functional/test_request.py
@@ -1,5 +1,3 @@
-import sys
-
import pytest
wptserve = pytest.importorskip("wptserve")
@@ -8,7 +6,6 @@ from wptserve.request import InputFile
class TestInputFile(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -16,28 +13,27 @@ class TestInputFile(TestUsingServer):
f = request.raw_input
f.seek(5)
rv.append(f.read(2))
- rv.append(f.tell())
+ rv.append(b"%d" % f.tell())
f.seek(0)
rv.append(f.readline())
- rv.append(f.tell())
+ rv.append(b"%d" % f.tell())
rv.append(f.read(-1))
- rv.append(f.tell())
+ rv.append(b"%d" % f.tell())
f.seek(0)
rv.append(f.read())
f.seek(0)
rv.extend(f.readlines())
- return " ".join(str(item) for item in rv)
+ return b" ".join(rv)
route = ("POST", "/test/test_seek", handler)
self.server.router.register(*route)
- resp = self.request(route[1], method="POST", body="12345ab\ncdef")
+ resp = self.request(route[1], method="POST", body=b"12345ab\ncdef")
self.assertEqual(200, resp.getcode())
- self.assertEqual(["ab", "7", "12345ab\n", "8", "cdef", "12",
- "12345ab\ncdef", "12345ab\n", "cdef"],
- resp.read().split(" "))
+ self.assertEqual([b"ab", b"7", b"12345ab\n", b"8", b"cdef", b"12",
+ b"12345ab\ncdef", b"12345ab\n", b"cdef"],
+ resp.read().split(b" "))
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_seek_input_longer_than_buffer(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -45,11 +41,11 @@ class TestInputFile(TestUsingServer):
f = request.raw_input
f.seek(5)
rv.append(f.read(2))
- rv.append(f.tell())
+ rv.append(b"%d" % f.tell())
f.seek(0)
- rv.append(f.tell())
- rv.append(f.tell())
- return " ".join(str(item) for item in rv)
+ rv.append(b"%d" % f.tell())
+ rv.append(b"%d" % f.tell())
+ return b" ".join(rv)
route = ("POST", "/test/test_seek", handler)
self.server.router.register(*route)
@@ -57,10 +53,10 @@ class TestInputFile(TestUsingServer):
old_max_buf = InputFile.max_buffer_size
InputFile.max_buffer_size = 10
try:
- resp = self.request(route[1], method="POST", body="1"*20)
+ resp = self.request(route[1], method="POST", body=b"1"*20)
self.assertEqual(200, resp.getcode())
- self.assertEqual(["11", "7", "0", "0"],
- resp.read().split(" "))
+ self.assertEqual([b"11", b"7", b"0", b"0"],
+ resp.read().split(b" "))
finally:
InputFile.max_buffer_size = old_max_buf
@@ -119,7 +115,6 @@ class TestRequest(TestUsingServer):
class TestAuth(TestUsingServer):
- @pytest.mark.xfail(sys.version_info >= (3,), reason="wptserve only works on Py2")
def test_auth(self):
@wptserve.handlers.handler
def handler(request, response):
@@ -129,4 +124,4 @@ class TestAuth(TestUsingServer):
self.server.router.register(*route)
resp = self.request(route[1], auth=("test", "PASS"))
self.assertEqual(200, resp.getcode())
- self.assertEqual(["test", "PASS"], resp.read().split(" "))
+ self.assertEqual([b"test", b"PASS"], resp.read().split(b" "))
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
index ad96f591a3a..33a43e1f06b 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/pipes.py
@@ -1,5 +1,6 @@
from cgi import escape
from collections import deque
+import base64
import gzip as gzip_module
import hashlib
import os
@@ -273,8 +274,9 @@ def slice(request, response, start, end=None):
(spelled "null" in a query string) to indicate the end of
the file.
"""
- content = resolve_content(response)
- response.content = content[start:end]
+ content = resolve_content(response)[start:end]
+ response.content = content
+ response.headers.set("Content-Length", len(content))
return response
@@ -392,7 +394,7 @@ class SubFunctions(object):
@staticmethod
def file_hash(request, algorithm, path):
- algorithm = algorithm.decode("ascii")
+ assert isinstance(algorithm, text_type)
if algorithm not in SubFunctions.supported_algorithms:
raise ValueError("Unsupported encryption algorithm: '%s'" % algorithm)
@@ -400,7 +402,7 @@ class SubFunctions(object):
absolute_path = os.path.join(request.doc_root, path)
try:
- with open(absolute_path) as f:
+ with open(absolute_path, "rb") as f:
hash_obj.update(f.read())
except IOError:
# In this context, an unhandled IOError will be interpreted by the
@@ -410,7 +412,7 @@ class SubFunctions(object):
# the path to the file to be hashed is invalid.
raise Exception('Cannot open file for hash computation: "%s"' % absolute_path)
- return hash_obj.digest().encode('base64').strip()
+ return base64.b64encode(hash_obj.digest()).strip()
def template(request, content, escape_type="html"):
#TODO: There basically isn't any error handling here
@@ -425,7 +427,6 @@ def template(request, content, escape_type="html"):
tokens = deque(tokens)
token_type, field = tokens.popleft()
- field = field.decode("ascii")
if token_type == "var":
variable = field
@@ -470,14 +471,14 @@ def template(request, content, escape_type="html"):
raise Exception("Undefined template variable %s" % field)
while tokens:
- ttype, field = tokens.popleft()
+ ttype, tfield = tokens.popleft()
if ttype == "index":
- value = value[field]
+ value = value[tfield]
elif ttype == "arguments":
- value = value(request, *field)
+ value = value(request, *tfield)
else:
raise Exception(
- "unexpected token type %s (token '%r'), expected ident or arguments" % (ttype, field)
+ "unexpected token type %s (token '%r'), expected ident or arguments" % (ttype, tfield)
)
assert isinstance(value, (int, (binary_type, text_type))), tokens
@@ -485,12 +486,19 @@ def template(request, content, escape_type="html"):
if variable is not None:
variables[variable] = value
+ if field == "GET" and not isinstance(value, str):
+ value = value.decode("utf-8")
+
escape_func = {"html": lambda x:escape(x, quote=True),
"none": lambda x:x}[escape_type]
#Should possibly support escaping for other contexts e.g. script
#TODO: read the encoding of the response
- return escape_func(text_type(value)).encode("utf-8")
+ if isinstance(value, binary_type):
+ value = value.decode("utf-8")
+ elif isinstance(value, int):
+ value = text_type(value)
+ return escape_func(value).encode("utf-8")
template_regexp = re.compile(br"{{([^}]*)}}")
new_content = template_regexp.sub(config_replacement, content)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
index cb575ccdba4..233ff151c28 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/request.py
@@ -1,7 +1,7 @@
import base64
import cgi
from six.moves.http_cookies import BaseCookie
-from six import BytesIO
+from six import BytesIO, binary_type, text_type
import tempfile
from six.moves.urllib.parse import parse_qsl, urlsplit
@@ -318,8 +318,8 @@ class Request(object):
def cookies(self):
if self._cookies is None:
parser = BaseCookie()
- cookie_headers = self.headers.get("cookie", "")
- parser.load(cookie_headers)
+ cookie_headers = self.headers.get("cookie", u"")
+ parser.load(cookie_headers.encode("utf-8"))
cookies = Cookies()
for key, value in parser.iteritems():
cookies[key] = CookieValue(value)
@@ -355,6 +355,16 @@ class H2Request(Request):
super(H2Request, self).__init__(request_handler)
+def maybedecode(s):
+ if isinstance(s, text_type):
+ return s
+
+ if isinstance(s, binary_type):
+ return s.decode("ascii")
+
+ raise TypeError("Unexpected value in RequestHeaders: %r" % s)
+
+
class RequestHeaders(dict):
"""Dictionary-like API for accessing request headers."""
def __init__(self, items):
@@ -369,15 +379,17 @@ class RequestHeaders(dict):
for value in values:
# getallmatchingheaders returns raw header lines, so
# split to get name, value
- multiples.append(value.split(':', 1)[1].strip())
- dict.__setitem__(self, key, multiples)
+ multiples.append(maybedecode(value).split(':', 1)[1].strip())
+ headers = multiples
else:
- dict.__setitem__(self, key, [items[header]])
+ headers = [maybedecode(items[header])]
+ dict.__setitem__(self, maybedecode(key), headers)
def __getitem__(self, key):
"""Get all headers of a certain (case-insensitive) name. If there is
more than one, the values are returned comma separated"""
+ key = maybedecode(key)
values = dict.__getitem__(self, key.lower())
if len(values) == 1:
return values[0]
@@ -403,6 +415,7 @@ class RequestHeaders(dict):
def get_list(self, key, default=missing):
"""Get all the header values for a particular field name as
a list"""
+ key = maybedecode(key)
try:
return dict.__getitem__(self, key.lower())
except KeyError:
@@ -412,6 +425,7 @@ class RequestHeaders(dict):
raise
def __contains__(self, key):
+ key = maybedecode(key)
return dict.__contains__(self, key.lower())
def iteritems(self):
@@ -599,6 +613,7 @@ class Authentication(object):
if "authorization" in headers:
header = headers.get("authorization")
+ assert isinstance(header, text_type)
auth_type, data = header.split(" ", 1)
if auth_type in auth_schemes:
self.username, self.password = auth_schemes[auth_type](data)
@@ -606,5 +621,6 @@ class Authentication(object):
raise HTTPException(400, "Unsupported authentication scheme %s" % auth_type)
def decode_basic(self, data):
- decoded_data = base64.decodestring(data)
- return decoded_data.split(":", 1)
+ assert isinstance(data, text_type)
+ decoded_data = base64.decodestring(data.encode("utf-8"))
+ return decoded_data.decode("utf-8").split(":", 1)
diff --git a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
index 44299cc994e..483265bf084 100644
--- a/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
+++ b/tests/wpt/web-platform-tests/tools/wptserve/wptserve/response.py
@@ -183,8 +183,10 @@ class Response(object):
True, the entire content of the file will be returned as a string facilitating
non-streaming operations like template substitution.
"""
- if isinstance(self.content, (binary_type, text_type)):
+ if isinstance(self.content, binary_type):
yield self.content
+ elif isinstance(self.content, text_type):
+ yield self.content.encode("utf-8")
elif hasattr(self.content, "read"):
if read_file:
yield self.content.read()
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/compile.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/compile.any.js
index 0139a18fda3..bd23a8666e7 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/compile.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/compile.any.js
@@ -69,6 +69,10 @@ promise_test(() => {
}, "Result type");
promise_test(() => {
+ return WebAssembly.compile(emptyModuleBinary, {}).then(assert_Module);
+}, "Stray argument");
+
+promise_test(() => {
const buffer = new WasmModuleBuilder().toBuffer();
assert_equals(buffer[0], 0);
const promise = WebAssembly.compile(buffer);
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
index 70bd9f7022a..c8613cbd9b3 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/constructor/validate.any.js
@@ -94,3 +94,7 @@ for (const [module, expected] of modules) {
}
}
}
+
+test(() => {
+ assert_true(WebAssembly.validate(emptyModuleBinary, {}));
+}, "Stray argument");
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
index 7a45cc4191c..237f99c8b29 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/constructor.any.js
@@ -119,3 +119,9 @@ for (const type of ["i32", "f32", "f64"]) {
}, `Explicit value ${name} for type ${type}`);
}
}
+
+test(() => {
+ const argument = { "value": "i32" };
+ const global = new WebAssembly.Global(argument, 0, {});
+ assert_Global(global, 0);
+}, "Stray argument");
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-get-set.any.js
index b4e6770f10e..6de62d5f583 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/global/value-set.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/value-get-set.any.js
@@ -92,3 +92,20 @@ test(() => {
assert_throws(new TypeError(), () => setter.call(global));
}, "Calling setter without argument");
+
+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 getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ const setter = desc.set;
+ assert_equals(typeof setter, "function");
+
+ assert_equals(getter.call(global, {}), 0);
+ assert_equals(setter.call(global, 1, {}), undefined);
+ assert_equals(global.value, 1);
+}, "Stray 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
index 176c5a78469..d4a84b254f7 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/global/valueOf.any.js
@@ -20,3 +20,9 @@ test(() => {
assert_throws(new TypeError(), () => fn.call(thisValue), `this=${format_value(thisValue)}`);
}
}, "Branding");
+
+test(() => {
+ const argument = { "value": "i32" };
+ const global = new WebAssembly.Global(argument, 0);
+ assert_equals(global.valueOf({}), 0);
+}, "Stray argument");
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
index 31423918720..cad468660e0 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instance/exports.any.js
@@ -37,6 +37,20 @@ test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
const instance = new WebAssembly.Instance(module);
const exports = instance.exports;
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Instance.prototype, "exports");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(getter.call(instance, {}), exports);
+}, "Stray argument");
+
+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)");
diff --git a/tests/wpt/web-platform-tests/wasm/jsapi/instanceTestFactory.js b/tests/wpt/web-platform-tests/wasm/jsapi/instanceTestFactory.js
index 1663ffb3469..24f849e6f94 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/instanceTestFactory.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/instanceTestFactory.js
@@ -214,4 +214,16 @@ const instanceTestFactory = [
};
}
],
+
+ [
+ "stray argument",
+ function() {
+ return {
+ buffer: emptyModuleBinary,
+ args: [{}, {}],
+ exports: {},
+ verify: () => {}
+ };
+ }
+ ],
];
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
index b04460b6c5e..4788ffcf84f 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/buffer.any.js
@@ -29,6 +29,20 @@ test(() => {
test(() => {
const argument = { "initial": 0 };
const memory = new WebAssembly.Memory(argument);
+ const buffer = memory.buffer;
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Memory.prototype, "buffer");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(getter.call(memory, {}), buffer);
+}, "Stray argument");
+
+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");
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 5caf7cc8bb9..a584a23ecf0 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
@@ -139,3 +139,9 @@ test(() => {
const memory = new WebAssembly.Memory(argument);
assert_Memory(memory, { "size": 4 });
}, "Non-zero initial");
+
+test(() => {
+ const argument = { "initial": 0 };
+ const memory = new WebAssembly.Memory(argument, {});
+ assert_Memory(memory, { "size": 0 });
+}, "Stray argument");
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
index 95300399f19..1ccfb946756 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/memory/grow.any.js
@@ -168,3 +168,18 @@ for (const value of outOfRangeValues) {
assert_throws(new TypeError(), () => memory.grow(value));
}, `Out-of-range argument: ${format_value(value)}`);
}
+
+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");
+}, "Stray argument");
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 32f183fac87..a467c1a17bb 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
@@ -58,3 +58,8 @@ test(() => {
const module = new WebAssembly.Module(emptyModuleBinary);
assert_true(Object.isExtensible(module));
}, "Extensibility");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary, {});
+ assert_equals(Object.getPrototypeOf(module), WebAssembly.Module.prototype);
+}, "Stray argument");
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 58ac63b61c9..04c5abed524 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
@@ -160,3 +160,8 @@ test(() => {
bytes,
]);
}, "Custom sections with U+FFFD");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ assert_sections(WebAssembly.Module.customSections(module, "", {}), []);
+}, "Stray argument");
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 e63a885a4c3..9d95b652233 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
@@ -128,3 +128,9 @@ test(() => {
];
assert_exports(exports, expected);
}, "exports");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const exports = WebAssembly.Module.exports(module, {});
+ assert_exports(exports, []);
+}, "Stray argument");
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 640da591d21..b3bb8598b08 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
@@ -118,3 +118,9 @@ test(() => {
];
assert_imports(imports, expected);
}, "imports");
+
+test(() => {
+ const module = new WebAssembly.Module(emptyModuleBinary);
+ const imports = WebAssembly.Module.imports(module, {});
+ assert_imports(imports, []);
+}, "Stray argument");
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 e924bdb2ba4..99eee19fecd 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
@@ -97,6 +97,12 @@ test(() => {
}, "Basic (non-zero)");
test(() => {
+ const argument = { "element": "anyfunc", "initial": 0 };
+ const table = new WebAssembly.Table(argument, {});
+ assert_Table(table, { "length": 0 });
+}, "Stray argument");
+
+test(() => {
const proxy = new Proxy({}, {
has(o, x) {
assert_unreached(`Should not call [[HasProperty]] with ${x}`);
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
index 66c41340c20..f8a0194364f 100644
--- 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
@@ -220,3 +220,11 @@ test(() => {
assert_equals(called, 1);
}, "Order of argument conversion");
+test(() => {
+ const {fn} = functions;
+ const argument = { "element": "anyfunc", "initial": 1 };
+ const table = new WebAssembly.Table(argument);
+
+ assert_equals(table.get(0, {}), null);
+ assert_equals(table.set(0, fn, {}), undefined);
+}, "Stray argument");
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
index d3efb511e4b..4978e3ca23d 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/grow.any.js
@@ -84,3 +84,13 @@ for (const value of outOfRangeValues) {
assert_throws(new TypeError(), () => table.grow(value));
}, `Out-of-range argument: ${format_value(value)}`);
}
+
+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");
+}, "Stray argument");
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
index a6a9661dbad..b1bfa6cfd1f 100644
--- a/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js
+++ b/tests/wpt/web-platform-tests/wasm/jsapi/table/length.any.js
@@ -30,6 +30,20 @@ test(() => {
const argument = { "element": "anyfunc", "initial": 2 };
const table = new WebAssembly.Table(argument);
assert_equals(table.length, 2, "Initial length");
+
+ const desc = Object.getOwnPropertyDescriptor(WebAssembly.Table.prototype, "length");
+ assert_equals(typeof desc, "object");
+
+ const getter = desc.get;
+ assert_equals(typeof getter, "function");
+
+ assert_equals(getter.call(table, {}), 2);
+}, "Stray argument");
+
+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)");
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/special_keys.py b/tests/wpt/web-platform-tests/webdriver/tests/actions/special_keys.py
deleted file mode 100644
index 416cbdcf20f..00000000000
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/special_keys.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# META: timeout=long
-
-import pytest
-import time
-from tests.actions.support.keys import ALL_EVENTS, Keys
-from tests.actions.support.refine import filter_dict, get_keys, get_events
-from webdriver import error
-
-@pytest.mark.parametrize("name,expected", ALL_EVENTS.items())
-def test_webdriver_special_key_sends_keydown(session,
- key_reporter,
- key_chain,
- name,
- expected):
- if name.startswith("F"):
- # Prevent default behavior for F1, etc., but only after keydown
- # bubbles up to body. (Otherwise activated browser menus/functions
- # may interfere with subsequent tests.)
- session.execute_script("""
- document.body.addEventListener("keydown",
- function(e) { e.preventDefault() });
- """)
- if (session.capabilities["browserName"] == 'internet explorer'):
- key_reporter.click()
- session.execute_script("resetEvents();")
- key_chain.key_down(getattr(Keys, name)).perform()
-
- # only interested in keydown
- first_event = get_events(session)[0]
- # make a copy so we can throw out irrelevant keys and compare to events
- expected = dict(expected)
-
- del expected["value"]
-
- # check and remove keys that aren't in expected
- assert first_event["type"] == "keydown"
- assert first_event["repeat"] == False
- first_event = filter_dict(first_event, expected)
- if first_event["code"] == None:
- del first_event["code"]
- del expected["code"]
- assert first_event == expected
- # only printable characters should be recorded in input field
- entered_keys = get_keys(key_reporter)
- if len(expected["key"]) == 1:
- assert entered_keys == expected["key"]
- else:
- assert len(entered_keys) == 0
-
-
-@pytest.mark.parametrize("value", [
- (u"f"),
- (u"\u0BA8\u0BBF"),
- (u"\u1100\u1161\u11A8"),
-])
-def test_multiple_codepoint_keys_behave_correctly(session,
- key_reporter,
- key_chain,
- value):
- key_chain \
- .key_down(value) \
- .key_up(value) \
- .perform()
-
- assert get_keys(key_reporter) == value
-
-
-@pytest.mark.parametrize("value", [
- (u"fa"),
- (u"\u0BA8\u0BBFb"),
- (u"\u0BA8\u0BBF\u0BA8"),
- (u"\u1100\u1161\u11A8c")
-])
-def test_invalid_multiple_codepoint_keys_fail(session,
- key_reporter,
- key_chain,
- value):
- with pytest.raises(error.InvalidArgumentException):
- key_chain \
- .key_down(value) \
- .key_up(value) \
- .perform() \ No newline at end of file
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/__init__.py
index e69de29bb2d..e69de29bb2d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/conftest.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/conftest.py
index 55cecd11782..dffae0b98cd 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/conftest.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/conftest.py
@@ -37,4 +37,4 @@ def key_reporter(session, test_actions_page, request):
@pytest.fixture
def test_actions_page(session, url):
- session.url = url("/webdriver/tests/actions/support/test_actions_wdspec.html")
+ session.url = url("/webdriver/tests/perform_actions/support/test_actions_wdspec.html")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key.py
new file mode 100644
index 00000000000..2b3414c5ebf
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key.py
@@ -0,0 +1,25 @@
+import pytest
+
+from webdriver.error import NoSuchWindowException
+
+from tests.perform_actions.support.keys import Keys
+from tests.perform_actions.support.refine import get_keys
+
+
+def test_null_response_value(session, key_chain):
+ value = key_chain.key_up("a").perform()
+ assert value is None
+
+
+def test_no_browsing_context(session, closed_window, key_chain):
+ with pytest.raises(NoSuchWindowException):
+ key_chain.key_up("a").perform()
+
+
+def test_backspace_erases_keys(session, key_reporter, key_chain):
+ key_chain \
+ .send_keys("efcd") \
+ .send_keys([Keys.BACKSPACE, Keys.BACKSPACE]) \
+ .perform()
+
+ assert get_keys(key_reporter) == "ef"
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/key.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_events.py
index 50c4ed9132b..462688a55e5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/key.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_events.py
@@ -1,171 +1,153 @@
-import pytest
-
-from webdriver.error import NoSuchWindowException
-
-from tests.actions.support.keys import Keys
-from tests.actions.support.refine import filter_dict, get_keys, get_events
-
-
-def test_null_response_value(session, key_chain):
- value = key_chain.key_up("a").perform()
- assert value is None
-
- value = session.actions.release()
- assert value is None
+# META: timeout=long
+import pytest
-def test_no_browsing_context(session, closed_window, key_chain):
- with pytest.raises(NoSuchWindowException):
- key_chain.key_up("a").perform()
+from tests.perform_actions.support.keys import ALL_EVENTS, Keys
+from tests.perform_actions.support.refine import filter_dict, get_events, get_keys
-def test_lone_keyup_sends_no_events(session, key_reporter, key_chain):
+def test_keyup_only_sends_no_events(session, key_reporter, key_chain):
key_chain.key_up("a").perform()
+
assert len(get_keys(key_reporter)) == 0
assert len(get_events(session)) == 0
+
session.actions.release()
assert len(get_keys(key_reporter)) == 0
assert len(get_events(session)) == 0
-@pytest.mark.parametrize("value,code", [
- (u"a", "KeyA",),
- ("a", "KeyA",),
- (u"\"", "Quote"),
- (u",", "Comma"),
- (u"\u00E0", ""),
- (u"\u0416", ""),
- (u"@", "Digit2"),
- (u"\u2603", ""),
- (u"\uF6C2", ""), # PUA
+@pytest.mark.parametrize("key, event", [
+ (Keys.ALT, "ALT"),
+ (Keys.CONTROL, "CONTROL"),
+ (Keys.META, "META"),
+ (Keys.SHIFT, "SHIFT"),
+ (Keys.R_ALT, "R_ALT"),
+ (Keys.R_CONTROL, "R_CONTROL"),
+ (Keys.R_META, "R_META"),
+ (Keys.R_SHIFT, "R_SHIFT"),
])
-def test_single_printable_key_sends_correct_events(session,
- key_reporter,
- key_chain,
- value,
- code):
+def test_modifier_key_sends_correct_events(session, key_reporter, key_chain, key, event):
+ code = ALL_EVENTS[event]["code"]
+ value = ALL_EVENTS[event]["key"]
+
key_chain \
- .key_down(value) \
- .key_up(value) \
+ .key_down(key) \
+ .key_up(key) \
.perform()
+ all_events = get_events(session)
+
expected = [
{"code": code, "key": value, "type": "keydown"},
- {"code": code, "key": value, "type": "keypress"},
{"code": code, "key": value, "type": "keyup"},
]
- all_events = get_events(session)
+
events = [filter_dict(e, expected[0]) for e in all_events]
- if len(events) > 0 and events[0]["code"] == None:
+ if len(events) > 0 and events[0]["code"] is None:
# Remove 'code' entry if browser doesn't support it
expected = [filter_dict(e, {"key": "", "type": ""}) for e in expected]
events = [filter_dict(e, expected[0]) for e in events]
assert events == expected
- assert get_keys(key_reporter) == value
-
-@pytest.mark.parametrize("value", [
- (u"\U0001F604"),
- (u"\U0001F60D"),
-])
-def test_single_emoji_records_correct_key(session, key_reporter, key_chain, value):
- # Not using key_chain.send_keys() because we always want to treat value as
- # one character here. `len(value)` varies by platform for non-BMP characters,
- # so we don't want to iterate over value.
- key_chain \
- .key_down(value) \
- .key_up(value) \
- .perform()
- # events sent by major browsers are inconsistent so only check key value
- assert get_keys(key_reporter) == value
+ assert len(get_keys(key_reporter)) == 0
-@pytest.mark.parametrize("value,code,key", [
- (u"\uE050", "ShiftRight", "Shift"),
- (u"\uE053", "OSRight", "Meta"),
- (Keys.CONTROL, "ControlLeft", "Control"),
+@pytest.mark.parametrize("key,event", [
+ (Keys.ESCAPE, "ESCAPE"),
+ (Keys.RIGHT, "RIGHT"),
])
-def test_single_modifier_key_sends_correct_events(session,
- key_reporter,
- key_chain,
- value,
- code,
- key):
+def test_non_printable_key_sends_events(session, key_reporter, key_chain, key, event):
+ code = ALL_EVENTS[event]["code"]
+ value = ALL_EVENTS[event]["key"]
+
key_chain \
- .key_down(value) \
- .key_up(value) \
+ .key_down(key) \
+ .key_up(key) \
.perform()
all_events = get_events(session)
+
expected = [
- {"code": code, "key": key, "type": "keydown"},
- {"code": code, "key": key, "type": "keyup"},
+ {"code": code, "key": value, "type": "keydown"},
+ {"code": code, "key": value, "type": "keypress"},
+ {"code": code, "key": value, "type": "keyup"},
]
+
events = [filter_dict(e, expected[0]) for e in all_events]
- if len(events) > 0 and events[0]["code"] == None:
+ if len(events) > 0 and events[0]["code"] is None:
# Remove 'code' entry if browser doesn't support it
expected = [filter_dict(e, {"key": "", "type": ""}) for e in expected]
events = [filter_dict(e, expected[0]) for e in events]
- assert events == expected
+ if len(events) == 2:
+ # most browsers don't send a keypress for non-printable keys
+ assert events == [expected[0], expected[2]]
+ else:
+ assert events == expected
+
assert len(get_keys(key_reporter)) == 0
-@pytest.mark.parametrize("value,code,key", [
- (Keys.ESCAPE, "Escape", "Escape"),
- (Keys.RIGHT, "ArrowRight", "ArrowRight"),
+@pytest.mark.parametrize("value,code", [
+ (u"a", "KeyA",),
+ ("a", "KeyA",),
+ (u"\"", "Quote"),
+ (u",", "Comma"),
+ (u"\u00E0", ""),
+ (u"\u0416", ""),
+ (u"@", "Digit2"),
+ (u"\u2603", ""),
+ (u"\uF6C2", ""), # PUA
])
-def test_single_nonprintable_key_sends_events(session,
- key_reporter,
- key_chain,
- value,
- code,
- key):
+def test_printable_key_sends_correct_events(session, key_reporter, key_chain, value, code):
key_chain \
.key_down(value) \
.key_up(value) \
.perform()
+ all_events = get_events(session)
+
expected = [
- {"code": code, "key": key, "type": "keydown"},
- {"code": code, "key": key, "type": "keypress"},
- {"code": code, "key": key, "type": "keyup"},
+ {"code": code, "key": value, "type": "keydown"},
+ {"code": code, "key": value, "type": "keypress"},
+ {"code": code, "key": value, "type": "keyup"},
]
- all_events = get_events(session)
+
events = [filter_dict(e, expected[0]) for e in all_events]
- if len(events) > 0 and events[0]["code"] == None:
+ if len(events) > 0 and events[0]["code"] is None:
# Remove 'code' entry if browser doesn't support it
expected = [filter_dict(e, {"key": "", "type": ""}) for e in expected]
events = [filter_dict(e, expected[0]) for e in events]
- if len(events) == 2:
- # most browsers don't send a keypress for non-printable keys
- assert events == [expected[0], expected[2]]
- else:
- assert events == expected
- assert len(get_keys(key_reporter)) == 0
+ assert events == expected
+
+ assert get_keys(key_reporter) == value
-def test_sequence_of_keydown_printable_keys_sends_events(session,
- key_reporter,
- key_chain):
+def test_sequence_of_keydown_printable_keys_sends_events(session, key_reporter, key_chain):
key_chain \
.key_down("a") \
.key_down("b") \
.perform()
+ all_events = get_events(session)
+
expected = [
{"code": "KeyA", "key": "a", "type": "keydown"},
{"code": "KeyA", "key": "a", "type": "keypress"},
{"code": "KeyB", "key": "b", "type": "keydown"},
{"code": "KeyB", "key": "b", "type": "keypress"},
]
- all_events = get_events(session)
+
events = [filter_dict(e, expected[0]) for e in all_events]
- if len(events) > 0 and events[0]["code"] == None:
+ if len(events) > 0 and events[0]["code"] is None:
# Remove 'code' entry if browser doesn't support it
expected = [filter_dict(e, {"key": "", "type": ""}) for e in expected]
events = [filter_dict(e, expected[0]) for e in events]
assert events == expected
+
assert get_keys(key_reporter) == "ab"
-def test_sequence_of_keydown_character_keys(session, key_reporter, key_chain):
+def test_sequence_of_keydown_printable_characters_sends_events(session, key_reporter, key_chain):
key_chain.send_keys("ef").perform()
+ all_events = get_events(session)
+
expected = [
{"code": "KeyE", "key": "e", "type": "keydown"},
{"code": "KeyE", "key": "e", "type": "keypress"},
@@ -174,20 +156,50 @@ def test_sequence_of_keydown_character_keys(session, key_reporter, key_chain):
{"code": "KeyF", "key": "f", "type": "keypress"},
{"code": "KeyF", "key": "f", "type": "keyup"},
]
- all_events = get_events(session)
+
events = [filter_dict(e, expected[0]) for e in all_events]
- if len(events) > 0 and events[0]["code"] == None:
+ if len(events) > 0 and events[0]["code"] is None:
# Remove 'code' entry if browser doesn't support it
expected = [filter_dict(e, {"key": "", "type": ""}) for e in expected]
events = [filter_dict(e, expected[0]) for e in events]
assert events == expected
- assert get_keys(key_reporter) == "ef"
-
-def test_backspace_erases_keys(session, key_reporter, key_chain):
- key_chain \
- .send_keys("efcd") \
- .send_keys([Keys.BACKSPACE, Keys.BACKSPACE]) \
- .perform()
assert get_keys(key_reporter) == "ef"
+
+@pytest.mark.parametrize("name,expected", ALL_EVENTS.items())
+def test_special_key_sends_keydown(session, key_reporter, key_chain, name, expected):
+ if name.startswith("F"):
+ # Prevent default behavior for F1, etc., but only after keydown
+ # bubbles up to body. (Otherwise activated browser menus/functions
+ # may interfere with subsequent tests.)
+ session.execute_script("""
+ document.body.addEventListener("keydown",
+ function(e) { e.preventDefault() });
+ """)
+ if (session.capabilities["browserName"] == 'internet explorer'):
+ key_reporter.click()
+ session.execute_script("resetEvents();")
+ key_chain.key_down(getattr(Keys, name)).perform()
+
+ # only interested in keydown
+ first_event = get_events(session)[0]
+ # make a copy so we can throw out irrelevant keys and compare to events
+ expected = dict(expected)
+
+ del expected["value"]
+
+ # check and remove keys that aren't in expected
+ assert first_event["type"] == "keydown"
+ assert first_event["repeat"] is False
+ first_event = filter_dict(first_event, expected)
+ if first_event["code"] is None:
+ del first_event["code"]
+ del expected["code"]
+ assert first_event == expected
+ # only printable characters should be recorded in input field
+ entered_keys = get_keys(key_reporter)
+ if len(expected["key"]) == 1:
+ assert entered_keys == expected["key"]
+ else:
+ assert len(entered_keys) == 0
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_modifiers.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_modifiers.py
new file mode 100644
index 00000000000..55dc9280c62
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_modifiers.py
@@ -0,0 +1,24 @@
+import pytest
+
+from tests.perform_actions.support.keys import Keys
+
+
+@pytest.mark.parametrize("modifier", [Keys.SHIFT, Keys.R_SHIFT])
+def test_shift_modifier_generates_capital_letters(session, key_reporter, key_chain, modifier):
+ key_chain \
+ .send_keys("b") \
+ .key_down(modifier) \
+ .key_down("c") \
+ .key_up(modifier) \
+ .key_up("c") \
+ .key_down("d") \
+ .key_up("d") \
+ .key_down(modifier) \
+ .key_down("e") \
+ .key_up("e") \
+ .key_down("f") \
+ .key_up(modifier) \
+ .key_up("f") \
+ .perform()
+
+ assert key_reporter.property("value") == "bCdEF"
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/key_shortcuts.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_shortcuts.py
index ec062f75224..31b533ac850 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/key_shortcuts.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_shortcuts.py
@@ -1,5 +1,5 @@
-from tests.actions.support.keys import Keys, MODIFIER_KEY
-from tests.actions.support.refine import get_keys
+from tests.perform_actions.support.keys import Keys, MODIFIER_KEY
+from tests.perform_actions.support.refine import get_keys
def test_mod_a_and_backspace_deletes_all_text(session, key_reporter, key_chain):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_special_keys.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_special_keys.py
new file mode 100644
index 00000000000..003bba42941
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/key_special_keys.py
@@ -0,0 +1,38 @@
+import pytest
+
+from webdriver import error
+
+from tests.perform_actions.support.refine import get_keys
+
+
+@pytest.mark.parametrize("value", [
+ (u"\U0001F604"),
+ (u"\U0001F60D"),
+ (u"\u0BA8\u0BBF"),
+ (u"\u1100\u1161\u11A8"),
+])
+def test_codepoint_keys_behave_correctly(session, key_reporter, key_chain, value):
+ # Not using key_chain.send_keys() because we always want to treat value as
+ # one character here. `len(value)` varies by platform for non-BMP characters,
+ # so we don't want to iterate over value.
+ key_chain \
+ .key_down(value) \
+ .key_up(value) \
+ .perform()
+
+ # events sent by major browsers are inconsistent so only check key value
+ assert get_keys(key_reporter) == value
+
+
+@pytest.mark.parametrize("value", [
+ (u"fa"),
+ (u"\u0BA8\u0BBFb"),
+ (u"\u0BA8\u0BBF\u0BA8"),
+ (u"\u1100\u1161\u11A8c")
+])
+def test_invalid_multiple_codepoint_keys_fail(session, key_reporter, key_chain, value):
+ with pytest.raises(error.InvalidArgumentException):
+ key_chain \
+ .key_down(value) \
+ .key_up(value) \
+ .perform()
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/none.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/none.py
index 07944a68ffe..07944a68ffe 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/none.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/none.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer.py
index ca8bffceb71..9a68f322d70 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer.py
@@ -2,8 +2,8 @@ import pytest
from webdriver.error import NoSuchWindowException
-from tests.actions.support.mouse import get_inview_center, get_viewport_rect
-from tests.actions.support.refine import get_events, filter_dict
+from tests.perform_actions.support.mouse import get_inview_center, get_viewport_rect
+from tests.perform_actions.support.refine import filter_dict, get_events
from tests.support.asserts import assert_move_to_coordinates
from tests.support.inline import inline
from tests.support.wait import wait
@@ -18,9 +18,6 @@ def test_null_response_value(session, mouse_chain):
value = mouse_chain.click().perform()
assert value is None
- value = session.actions.release()
- assert value is None
-
def test_no_browsing_context(session, closed_window, mouse_chain):
with pytest.raises(NoSuchWindowException):
@@ -91,7 +88,7 @@ def test_click_element_center(session, test_actions_page, mouse_chain):
assert e["target"] == "outer"
-def test_click_navigation(session, url, release_actions):
+def test_click_navigation(session, url):
destination = url("/webdriver/tests/actions/support/test_actions_wdspec.html")
start = link_doc(destination)
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py
index 2ec819b772f..c64c51252a5 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/control_click.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_contextmenu.py
@@ -1,7 +1,7 @@
import pytest
-from tests.actions.support.refine import filter_dict, get_events
-from tests.actions.support.keys import Keys
+from tests.perform_actions.support.keys import Keys
+from tests.perform_actions.support.refine import filter_dict, get_events
@pytest.mark.parametrize("modifier, prop", [
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_dblclick.py
index fc53a51ab76..8c89cef5f38 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_dblclick.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_dblclick.py
@@ -1,6 +1,6 @@
import pytest
-from tests.actions.support.refine import get_events, filter_dict
+from tests.perform_actions.support.refine import filter_dict, get_events
from tests.support.asserts import assert_move_to_coordinates
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/modifier_click.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_modifier_click.py
index fbfd837710b..ba81f6d090b 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/modifier_click.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_modifier_click.py
@@ -1,7 +1,7 @@
import pytest
-from tests.actions.support.refine import filter_dict, get_events
-from tests.actions.support.keys import Keys
+from tests.perform_actions.support.keys import Keys
+from tests.perform_actions.support.refine import filter_dict, get_events
@pytest.mark.parametrize("modifier, prop", [
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/pointer_origin.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_origin.py
index cad59f0a13b..3ebf14c348c 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/pointer_origin.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_origin.py
@@ -2,7 +2,7 @@ import pytest
from webdriver import MoveTargetOutOfBoundsException
-from tests.actions.support.mouse import get_inview_center, get_viewport_rect
+from tests.perform_actions.support.mouse import get_inview_center, get_viewport_rect
from tests.support.inline import inline
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_pause_dblclick.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_pause_dblclick.py
index ad179673176..85679f3614a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/mouse_pause_dblclick.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/pointer_pause_dblclick.py
@@ -1,5 +1,5 @@
-from tests.actions.support.mouse import get_inview_center, get_viewport_rect
-from tests.actions.support.refine import get_events, filter_dict
+from tests.perform_actions.support.mouse import get_inview_center, get_viewport_rect
+from tests.perform_actions.support.refine import filter_dict, get_events
_DBLCLICK_INTERVAL = 640
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/sequence.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/sequence.py
new file mode 100644
index 00000000000..3536abeb12b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/sequence.py
@@ -0,0 +1,9 @@
+# META: timeout=long
+
+from tests.perform_actions.support.refine import get_events, get_keys
+
+
+def test_perform_no_actions_send_no_events(session, key_reporter, key_chain):
+ key_chain.perform()
+ assert len(get_keys(key_reporter)) == 0
+ assert len(get_events(session)) == 0
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/__init__.py
index e69de29bb2d..e69de29bb2d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/__init__.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/keys.py
index 5995f78c710..5995f78c710 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/keys.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/keys.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/mouse.py
index b3672eb213a..b3672eb213a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/mouse.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/mouse.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/refine.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/refine.py
index 3a6d63e04ce..3a6d63e04ce 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/refine.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/refine.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/test_actions_wdspec.html b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/test_actions_wdspec.html
index 6f844cd255a..6f844cd255a 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/support/test_actions_wdspec.html
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/support/test_actions_wdspec.html
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/validity.py b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/validity.py
index ce8a0d60f7d..ce8a0d60f7d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/validity.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/perform_actions/validity.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/conftest.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/conftest.py
new file mode 100644
index 00000000000..df86db63067
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/conftest.py
@@ -0,0 +1,40 @@
+import pytest
+
+
+@pytest.fixture
+def key_chain(session):
+ return session.actions.sequence("key", "keyboard_id")
+
+
+@pytest.fixture
+def mouse_chain(session):
+ return session.actions.sequence(
+ "pointer",
+ "pointer_id",
+ {"pointerType": "mouse"})
+
+
+@pytest.fixture
+def none_chain(session):
+ return session.actions.sequence("none", "none_id")
+
+
+@pytest.fixture(autouse=True)
+def release_actions(session, request):
+ # release all actions after each test
+ # equivalent to a teardown_function, but with access to session fixture
+ request.addfinalizer(session.actions.release)
+
+
+@pytest.fixture
+def key_reporter(session, test_actions_page, request):
+ """Represents focused input element from `test_keys_page` fixture."""
+ input_el = session.find.css("#keys", all=False)
+ input_el.click()
+ session.execute_script("resetEvents();")
+ return input_el
+
+
+@pytest.fixture
+def test_actions_page(session, url):
+ session.url = url("/webdriver/tests/release_actions/support/test_actions_wdspec.html")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/release.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/release.py
new file mode 100644
index 00000000000..84719043d1c
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/release.py
@@ -0,0 +1,18 @@
+from tests.support.asserts import assert_error, assert_success
+
+
+def release_actions(session):
+ return session.transport.send(
+ "DELETE",
+ "/session/{session_id}/actions".format(**vars(session)),
+ )
+
+
+def test_null_response_value(session):
+ response = release_actions(session)
+ assert_success(response, None)
+
+
+def test_no_browsing_context(session, closed_window):
+ response = release_actions(session)
+ assert_error(response, "no such window")
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/actions/sequence.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/sequence.py
index b62d00c3e9b..2d816f8094b 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/actions/sequence.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/sequence.py
@@ -1,12 +1,6 @@
# META: timeout=long
-from tests.actions.support.refine import get_keys, filter_dict, get_events
-
-
-def test_perform_no_actions_send_no_events(session, key_reporter, key_chain):
- key_chain.perform()
- assert len(get_keys(key_reporter)) == 0
- assert len(get_events(session)) == 0
+from tests.release_actions.support.refine import filter_dict, get_events, get_keys
def test_release_no_actions_sends_no_events(session, key_reporter):
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/__init__.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/__init__.py
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/refine.py b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/refine.py
new file mode 100644
index 00000000000..3a6d63e04ce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/refine.py
@@ -0,0 +1,33 @@
+def get_events(session):
+ """Return list of key events recorded in the test_keys_page fixture."""
+ events = session.execute_script("return allEvents.events;") or []
+ # `key` values in `allEvents` may be escaped (see `escapeSurrogateHalf` in
+ # test_keys_wdspec.html), so this converts them back into unicode literals.
+ for e in events:
+ # example: turn "U+d83d" (6 chars) into u"\ud83d" (1 char)
+ if "key" in e and e["key"].startswith(u"U+"):
+ key = e["key"]
+ hex_suffix = key[key.index("+") + 1:]
+ e["key"] = unichr(int(hex_suffix, 16))
+ return events
+
+
+def get_keys(input_el):
+ """Get printable characters entered into `input_el`.
+
+ :param input_el: HTML input element.
+ """
+ rv = input_el.property("value")
+ if rv is None:
+ return ""
+ else:
+ return rv
+
+
+def filter_dict(source, d):
+ """Filter `source` dict to only contain same keys as `d` dict.
+
+ :param source: dictionary to filter.
+ :param d: dictionary whose keys determine the filtering.
+ """
+ return {k: source[k] for k in d.keys()}
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/test_actions_wdspec.html b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/test_actions_wdspec.html
new file mode 100644
index 00000000000..6f844cd255a
--- /dev/null
+++ b/tests/wpt/web-platform-tests/webdriver/tests/release_actions/support/test_actions_wdspec.html
@@ -0,0 +1,197 @@
+<!doctype html>
+<meta charset=utf-8>
+<html>
+<head>
+ <title>Test Actions</title>
+ <style>
+ div { padding:0px; margin: 0px; }
+ #trackPointer { position: fixed; }
+ #resultContainer { width: 600px; height: 60px; }
+ .area { width: 100px; height: 50px; background-color: #ccc; }
+ .block { width: 5px; height: 5px; border: solid 1px red; }
+ #dragArea { position: relative; }
+ #dragTarget { position: absolute; top:22px; left:47px;}
+ </style>
+ <script>
+ "use strict";
+ var els = {};
+ var allEvents = { events: [] };
+ function displayMessage(message) {
+ document.getElementById("events").innerHTML = "<p>" + message + "</p>";
+ }
+
+ function appendMessage(message) {
+ document.getElementById("events").innerHTML += "<p>" + message + "</p>";
+ }
+
+ /**
+ * Escape |key| if it's in a surrogate-half character range.
+ *
+ * Example: given "\ud83d" return "U+d83d".
+ *
+ * Otherwise JSON.stringify will convert it to U+FFFD (REPLACEMENT CHARACTER)
+ * when returning a value from executeScript, for example.
+ */
+ function escapeSurrogateHalf(key) {
+ if (typeof key !== "undefined" && key.length === 1) {
+ var charCode = key.charCodeAt(0);
+ var highSurrogate = charCode >= 0xD800 && charCode <= 0xDBFF;
+ var surrogate = highSurrogate || (charCode >= 0xDC00 && charCode <= 0xDFFF);
+ if (surrogate) {
+ key = "U+" + charCode.toString(16);
+ }
+ }
+ return key;
+ }
+
+ function recordKeyboardEvent(event) {
+ var key = escapeSurrogateHalf(event.key);
+ allEvents.events.push({
+ "code": event.code,
+ "key": key,
+ "which": event.which,
+ "location": event.location,
+ "ctrl": event.ctrlKey,
+ "meta": event.metaKey,
+ "shift": event.shiftKey,
+ "repeat": event.repeat,
+ "type": event.type
+ });
+ appendMessage(event.type + " " +
+ "code: " + event.code + ", " +
+ "key: " + key + ", " +
+ "which: " + event.which + ", " +
+ "keyCode: " + event.keyCode);
+ }
+
+ function recordPointerEvent(event) {
+ if (event.type === "contextmenu") {
+ event.preventDefault();
+ }
+ allEvents.events.push({
+ "type": event.type,
+ "button": event.button,
+ "buttons": event.buttons,
+ "pageX": event.pageX,
+ "pageY": event.pageY,
+ "ctrlKey": event.ctrlKey,
+ "metaKey": event.metaKey,
+ "altKey": event.altKey,
+ "shiftKey": event.shiftKey,
+ "target": event.target.id
+ });
+ appendMessage(event.type + " " +
+ "button: " + event.button + ", " +
+ "pageX: " + event.pageX + ", " +
+ "pageY: " + event.pageY + ", " +
+ "button: " + event.button + ", " +
+ "buttons: " + event.buttons + ", " +
+ "ctrlKey: " + event.ctrlKey + ", " +
+ "altKey: " + event.altKey + ", " +
+ "metaKey: " + event.metaKey + ", " +
+ "shiftKey: " + event.shiftKey + ", " +
+ "target id: " + event.target.id);
+ }
+
+ function recordFirstPointerMove(event) {
+ recordPointerEvent(event);
+ window.removeEventListener("mousemove", recordFirstPointerMove);
+ }
+
+ function grabOnce(event) {
+ grab(event);
+ els.dragTarget.removeEventListener("mousedown", grabOnce);
+ }
+
+ function dropOnce(moveHandler) {
+ return function (event) {
+ moveHandler(event);
+ els.dragArea.removeEventListener("mouseup", dropOnce);
+ }
+ }
+
+ function resetEvents() {
+ allEvents.events.length = 0;
+ displayMessage("");
+ }
+
+ function drop(moveHandler) {
+ return function (event) {
+ els.dragArea.removeEventListener("mousemove", moveHandler);
+ els.dragTarget.style.backgroundColor = "yellow";
+ els.dragTarget.addEventListener("mousedown", grab);
+ recordPointerEvent(event);
+ };
+ }
+
+ function move(el, offsetX, offsetY, timeout) {
+ return function(event) {
+ setTimeout(function() {
+ el.style.top = event.clientY + offsetY + "px";
+ el.style.left = event.clientX + offsetX + "px";
+ }, timeout);
+ };
+ }
+
+ function grab(event) {
+ event.target.style.backgroundColor = "red";
+ let boxRect = event.target.getBoundingClientRect();
+ let areaRect = event.target.parentElement.getBoundingClientRect();
+ let moveHandler = move(
+ event.target,
+ // coordinates of dragTarget must be relative to dragArea such that
+ // dragTarget remains under the pointer
+ -(areaRect.left + (event.clientX - boxRect.left)),
+ -(areaRect.top + (event.clientY - boxRect.top)),
+ 20);
+ els.dragArea.addEventListener("mousemove", moveHandler);
+ els.dragArea.addEventListener("mouseup", dropOnce(drop(moveHandler)));
+ }
+
+ document.addEventListener("DOMContentLoaded", function() {
+ var keyReporter = document.getElementById("keys");
+ keyReporter.addEventListener("keyup", recordKeyboardEvent);
+ keyReporter.addEventListener("keypress", recordKeyboardEvent);
+ keyReporter.addEventListener("keydown", recordKeyboardEvent);
+
+ var outer = document.getElementById("outer");
+ outer.addEventListener("click", recordPointerEvent);
+ outer.addEventListener("dblclick", recordPointerEvent);
+ outer.addEventListener("mousedown", recordPointerEvent);
+ outer.addEventListener("mouseup", recordPointerEvent);
+ outer.addEventListener("contextmenu", recordPointerEvent);
+
+ window.addEventListener("mousemove", recordFirstPointerMove);
+ //visual cue for mousemove
+ var pointer = document.getElementById("trackPointer");
+ window.addEventListener("mousemove", move(pointer, 15, 15, 30));
+ // drag and drop
+ els.dragArea = document.getElementById("dragArea");
+ els.dragTarget = document.getElementById("dragTarget");
+ els.dragTarget.addEventListener("mousedown", grabOnce);
+ });
+ </script>
+</head>
+<body>
+ <div id="trackPointer" class="block"></div>
+ <div>
+ <h2>KeyReporter</h2>
+ <input type="text" id="keys" size="80">
+ </div>
+ <div>
+ <h2>ClickReporter</h2>
+ <div id="outer" class="area">
+ </div>
+ </div>
+ <div>
+ <h2>DragReporter</h2>
+ <div id="dragArea" class="area">
+ <div id="dragTarget" class="block"></div>
+ </div>
+ </div>
+ <div id="resultContainer">
+ <h2>Events</h2>
+ <div id="events"></div>
+ </div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/webrtc/getstats.html b/tests/wpt/web-platform-tests/webrtc/getstats.html
index 9775f2090f2..937f54b74ec 100644
--- a/tests/wpt/web-platform-tests/webrtc/getstats.html
+++ b/tests/wpt/web-platform-tests/webrtc/getstats.html
@@ -71,7 +71,7 @@ This test uses data only, and thus does not require fake media devices.
assert_not_equals(report, null, 'No report');
let sessionStat = getStatsRecordByType(report, 'peer-connection');
assert_not_equals(sessionStat, null, 'Did not find peer-connection stats');
- assert_exists(sessionStat, 'dataChannelsOpened', 'no dataChannelsOpened stat');
+ assert_own_property(sessionStat, 'dataChannelsOpened', 'no dataChannelsOpened stat');
// Once every 4000 or so tests, the datachannel won't be opened when the getStats
// function is done, so allow both 0 and 1 datachannels.
assert_true(sessionStat.dataChannelsOpened == 1 || sessionStat.dataChannelsOpened == 0,
diff --git a/tests/wpt/web-platform-tests/webrtc/tools/.eslintrc.js b/tests/wpt/web-platform-tests/webrtc/tools/.eslintrc.js
index 9368cf4593e..1778f8505e0 100644
--- a/tests/wpt/web-platform-tests/webrtc/tools/.eslintrc.js
+++ b/tests/wpt/web-platform-tests/webrtc/tools/.eslintrc.js
@@ -26,7 +26,7 @@ module.exports = {
assert_unreached: true,
assert_throws: true,
assert_idl_attribute: true,
- assert_exists: true,
+ assert_own_property: true,
assert_greater_than: true,
assert_less_than: true,
assert_greater_than_equal: true,
diff --git a/tests/wpt/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js b/tests/wpt/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js
index 2f3fdf25c33..06da02a71f5 100644
--- a/tests/wpt/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js
+++ b/tests/wpt/web-platform-tests/xhr/resources/responseXML-unavailable-in-worker.js
@@ -2,8 +2,8 @@ self.importScripts('/resources/testharness.js');
test(function() {
let xhr = new XMLHttpRequest();
- assert_not_exists(xhr, "responseXML", "responseXML should not be available on instances.");
- assert_not_exists(XMLHttpRequest.prototype, "responseXML", "responseXML should not be on the prototype.");
+ assert_false(xhr.hasOwnProperty("responseXML"), "responseXML should not be available on instances.");
+ assert_false(XMLHttpRequest.prototype.hasOwnProperty("responseXML"), "responseXML should not be on the prototype.");
}, "XMLHttpRequest's responseXML property should not be exposed in workers.");
done();
diff --git a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
index c67d2455356..b2ef943c060 100644
--- a/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
+++ b/tests/wpt/webgl/meta/conformance/textures/misc/texture-upload-size.html.ini
@@ -11,3 +11,6 @@
[WebGL test #60: could not create image (SVG)]
expected: FAIL
+ [WebGL test #44: could not create image (SVG)]
+ expected: FAIL
+