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..3b874fc1748 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] diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json index 6b834b29d16..09fb70cf5d7 100644 --- a/tests/wpt/metadata/MANIFEST.json +++ b/tests/wpt/metadata/MANIFEST.json @@ -46283,6 +46283,18 @@ {} ] ], + "css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html": [ + [ + "css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html", + [ + [ + "/css/CSS2/reference/ref-filled-green-100px-square.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/floats-clear/adjoining-float-new-fc.html": [ [ "css/CSS2/floats-clear/adjoining-float-new-fc.html", @@ -83723,18 +83735,6 @@ {} ] ], - "css/CSS2/selectors/first-letter-punctuation-184.xht": [ - [ - "css/CSS2/selectors/first-letter-punctuation-184.xht", - [ - [ - "/css/CSS2/selectors/first-letter-punctuation-184-ref.xht", - "==" - ] - ], - {} - ] - ], "css/CSS2/selectors/first-letter-punctuation-185.xht": [ [ "css/CSS2/selectors/first-letter-punctuation-185.xht", @@ -97363,6 +97363,30 @@ {} ] ], + "css/CSS2/ui/outline-applies-to-016.xht": [ + [ + "css/CSS2/ui/outline-applies-to-016.xht", + [ + [ + "/css/CSS2/ui/outline-applies-to-016-ref.xht", + "==" + ] + ], + {} + ] + ], + "css/CSS2/ui/outline-applies-to-017.xht": [ + [ + "css/CSS2/ui/outline-applies-to-017.xht", + [ + [ + "/css/CSS2/ui/outline-applies-to-016-ref.xht", + "==" + ] + ], + {} + ] + ], "css/CSS2/ui/outline-color-001.xht": [ [ "css/CSS2/ui/outline-color-001.xht", @@ -114183,6 +114207,18 @@ {} ] ], + "css/css-display/display-contents-shadow-dom-1.html": [ + [ + "css/css-display/display-contents-shadow-dom-1.html", + [ + [ + "/css/css-display/display-contents-shadow-dom-1-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-display/display-contents-shadow-host-whitespace.html": [ [ "css/css-display/display-contents-shadow-host-whitespace.html", @@ -122221,6 +122257,18 @@ {} ] ], + "css/css-fonts/quoted-generic-ignored.html": [ + [ + "css/css-fonts/quoted-generic-ignored.html", + [ + [ + "/css/css-fonts/quoted-generic-ignored-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-fonts/variations/font-descriptor-range-reversed.html": [ [ "css/css-fonts/variations/font-descriptor-range-reversed.html", @@ -130921,6 +130969,18 @@ {} ] ], + "css/css-multicol/multicol-span-all-children-height-001.html": [ + [ + "css/css-multicol/multicol-span-all-children-height-001.html", + [ + [ + "/css/css-multicol/multicol-span-all-children-height-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-multicol/multicol-span-all-dynamic-add-001.html": [ [ "css/css-multicol/multicol-span-all-dynamic-add-001.html", @@ -133813,6 +133873,42 @@ {} ] ], + "css/css-pseudo/marker-content-009.html": [ + [ + "css/css-pseudo/marker-content-009.html", + [ + [ + "/css/css-pseudo/marker-content-009-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-pseudo/marker-content-010.html": [ + [ + "css/css-pseudo/marker-content-010.html", + [ + [ + "/css/css-pseudo/marker-content-010-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-pseudo/marker-content-011.html": [ + [ + "css/css-pseudo/marker-content-011.html", + [ + [ + "/css/css-pseudo/marker-content-011-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-pseudo/marker-display-dynamic-001.html": [ [ "css/css-pseudo/marker-display-dynamic-001.html", @@ -142265,6 +142361,42 @@ {} ] ], + "css/css-text/line-breaking/line-breaking-015.html": [ + [ + "css/css-text/line-breaking/line-breaking-015.html", + [ + [ + "/css/css-text/line-breaking/reference/line-breaking-015-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-breaking/line-breaking-016.html": [ + [ + "css/css-text/line-breaking/line-breaking-016.html", + [ + [ + "/css/css-text/line-breaking/reference/line-breaking-016-ref.html", + "==" + ] + ], + {} + ] + ], + "css/css-text/line-breaking/line-breaking-017.html": [ + [ + "css/css-text/line-breaking/line-breaking-017.html", + [ + [ + "/css/css-text/line-breaking/reference/line-breaking-017-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/line-breaking/line-breaking-atomic-001.html": [ [ "css/css-text/line-breaking/line-breaking-atomic-001.html", @@ -144317,6 +144449,18 @@ {} ] ], + "css/css-text/text-transform/text-transform-multiple-001.html": [ + [ + "css/css-text/text-transform/text-transform-multiple-001.html", + [ + [ + "/css/css-text/text-transform/reference/text-transform-multiple-001-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-text/text-transform/text-transform-none-001.xht": [ [ "css/css-text/text-transform/text-transform-none-001.xht", @@ -161551,6 +161695,18 @@ {} ] ], + "css/css-variables/wide-keyword-fallback.html": [ + [ + "css/css-variables/wide-keyword-fallback.html", + [ + [ + "/css/css-variables/wide-keyword-fallback-ref.html", + "==" + ] + ], + {} + ] + ], "css/css-will-change/will-change-abspos-cb-001.html": [ [ "css/css-will-change/will-change-abspos-cb-001.html", @@ -173307,6 +173463,18 @@ {} ] ], + "css/cssom/HTMLLinkElement-disabled-alternate.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-alternate.tentative.html", + [ + [ + "/css/cssom/HTMLLinkElement-disabled-alternate-ref.html", + "==" + ] + ], + {} + ] + ], "css/cssom/insertRule-from-script.html": [ [ "css/cssom/insertRule-from-script.html", @@ -176643,6 +176811,18 @@ {} ] ], + "css/selectors/sharing-in-svg-use.html": [ + [ + "css/selectors/sharing-in-svg-use.html", + [ + [ + "/css/selectors/sharing-in-svg-use-ref.html", + "==" + ] + ], + {} + ] + ], "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html": [ [ "css/vendor-imports/mozilla/mozilla-central-reftests/align3/flex-abspos-staticpos-align-content-001.html", @@ -209011,6 +209191,21 @@ {} ] ], + "common/security-features/scope/document.py": [ + [ + {} + ] + ], + "common/security-features/scope/template/document.html.template": [ + [ + {} + ] + ], + "common/security-features/scope/util.py": [ + [ + {} + ] + ], "common/security-features/subresource/__init__.py": [ [ {} @@ -209121,6 +209316,36 @@ {} ] ], + "common/security-features/tools/generate.py": [ + [ + {} + ] + ], + "common/security-features/tools/template/disclaimer.template": [ + [ + {} + ] + ], + "common/security-features/tools/template/spec_json.js.template": [ + [ + {} + ] + ], + "common/security-features/tools/template/test.debug.html.template": [ + [ + {} + ] + ], + "common/security-features/tools/template/test.release.html.template": [ + [ + {} + ] + ], + "common/security-features/tools/util.py": [ + [ + {} + ] + ], "common/sleep.py": [ [ {} @@ -248671,11 +248896,6 @@ {} ] ], - "css/CSS2/selectors/first-letter-punctuation-184-ref.xht": [ - [ - {} - ] - ], "css/CSS2/selectors/first-letter-punctuation-185-ref.xht": [ [ {} @@ -252671,6 +252891,11 @@ {} ] ], + "css/CSS2/ui/outline-applies-to-016-ref.xht": [ + [ + {} + ] + ], "css/CSS2/ui/outline-color-049-ref.xht": [ [ {} @@ -259306,6 +259531,11 @@ {} ] ], + "css/css-display/display-contents-shadow-dom-1-ref.html": [ + [ + {} + ] + ], "css/css-display/display-contents-sharing-001-ref.html": [ [ {} @@ -261486,6 +261716,11 @@ {} ] ], + "css/css-fonts/quoted-generic-ignored-ref.html": [ + [ + {} + ] + ], "css/css-fonts/support/100x100-lime.png": [ [ {} @@ -271116,6 +271351,11 @@ {} ] ], + "css/css-multicol/multicol-span-all-children-height-001-ref.html": [ + [ + {} + ] + ], "css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [ [ {} @@ -272216,6 +272456,21 @@ {} ] ], + "css/css-pseudo/marker-content-009-ref.html": [ + [ + {} + ] + ], + "css/css-pseudo/marker-content-010-ref.html": [ + [ + {} + ] + ], + "css/css-pseudo/marker-content-011-ref.html": [ + [ + {} + ] + ], "css/css-pseudo/marker-font-properties-ref.html": [ [ {} @@ -275841,6 +276096,21 @@ {} ] ], + "css/css-text/line-breaking/reference/line-breaking-015-ref.html": [ + [ + {} + ] + ], + "css/css-text/line-breaking/reference/line-breaking-016-ref.html": [ + [ + {} + ] + ], + "css/css-text/line-breaking/reference/line-breaking-017-ref.html": [ + [ + {} + ] + ], "css/css-text/line-breaking/reference/line-breaking-atomic-003-ref.html": [ [ {} @@ -276686,6 +276956,11 @@ {} ] ], + "css/css-text/text-transform/reference/text-transform-multiple-001-ref.html": [ + [ + {} + ] + ], "css/css-text/text-transform/reference/text-transform-none-001-ref.xht": [ [ {} @@ -280791,6 +281066,11 @@ {} ] ], + "css/css-variables/wide-keyword-fallback-ref.html": [ + [ + {} + ] + ], "css/css-will-change/META.yml": [ [ {} @@ -283801,6 +284081,11 @@ {} ] ], + "css/cssom/HTMLLinkElement-disabled-alternate-ref.html": [ + [ + {} + ] + ], "css/cssom/META.yml": [ [ {} @@ -284996,6 +285281,11 @@ {} ] ], + "css/selectors/sharing-in-svg-use-ref.html": [ + [ + {} + ] + ], "css/support/1x1-green.png": [ [ {} @@ -296396,6 +296686,26 @@ {} ] ], + "html/cross-origin-opener/new_window_same_site.html.headers": [ + [ + {} + ] + ], + "html/cross-origin-opener/resources/postback.sub.html": [ + [ + {} + ] + ], + "html/cross-origin-opener/resources/window.sub.html": [ + [ + {} + ] + ], + "html/cross-origin-opener/resources/window.sub.html.headers": [ + [ + {} + ] + ], "html/dom/documents/dom-tree-accessors/cross-domain.js": [ [ {} @@ -306786,6 +307096,11 @@ {} ] ], + "intersection-observer/resources/scaled-target-subframe.html": [ + [ + {} + ] + ], "intersection-observer/resources/timestamp-subframe.html": [ [ {} @@ -307996,36 +308311,6 @@ {} ] ], - "mixed-content/generic/template/disclaimer.template": [ - [ - {} - ] - ], - "mixed-content/generic/template/spec_json.js.template": [ - [ - {} - ] - ], - "mixed-content/generic/template/test.debug.html.template": [ - [ - {} - ] - ], - "mixed-content/generic/template/test.js.template": [ - [ - {} - ] - ], - "mixed-content/generic/template/test.release.html.template": [ - [ - {} - ] - ], - "mixed-content/generic/template/test_description.template": [ - [ - {} - ] - ], "mixed-content/generic/tools/__init__.py": [ [ {} @@ -308036,11 +308321,6 @@ {} ] ], - "mixed-content/generic/tools/common_paths.py": [ - [ - {} - ] - ], "mixed-content/generic/tools/generate.py": [ [ {} @@ -310011,36 +310291,6 @@ {} ] ], - "referrer-policy/generic/template/disclaimer.template": [ - [ - {} - ] - ], - "referrer-policy/generic/template/spec_json.js.template": [ - [ - {} - ] - ], - "referrer-policy/generic/template/test.debug.html.template": [ - [ - {} - ] - ], - "referrer-policy/generic/template/test.js.template": [ - [ - {} - ] - ], - "referrer-policy/generic/template/test.release.html.template": [ - [ - {} - ] - ], - "referrer-policy/generic/template/test_description.template": [ - [ - {} - ] - ], "referrer-policy/generic/tools/__init__.py": [ [ {} @@ -310051,11 +310301,6 @@ {} ] ], - "referrer-policy/generic/tools/common_paths.py": [ - [ - {} - ] - ], "referrer-policy/generic/tools/generate.py": [ [ {} @@ -319786,6 +320031,11 @@ {} ] ], + "tools/mypy.ini": [ + [ + {} + ] + ], "tools/py27-flake8.ini": [ [ {} @@ -320286,6 +320536,11 @@ {} ] ], + "tools/requirements_mypy.txt": [ + [ + {} + ] + ], "tools/runner/css/bootstrap-theme.min.css": [ [ {} @@ -353713,6 +353968,12 @@ {} ] ], + "css/css-animations/animationevent-marker-pseudoelement.html": [ + [ + "css/css-animations/animationevent-marker-pseudoelement.html", + {} + ] + ], "css/css-animations/animationevent-pseudoelement.html": [ [ "css/css-animations/animationevent-pseudoelement.html", @@ -357689,6 +357950,12 @@ {} ] ], + "css/css-lists/li-counter-increment-computed-style.html": [ + [ + "css/css-lists/li-counter-increment-computed-style.html", + {} + ] + ], "css/css-lists/list-and-block-textarea-001.html": [ [ "css/css-lists/list-and-block-textarea-001.html", @@ -359345,12 +359612,24 @@ {} ] ], + "css/css-scroll-snap/scroll-padding.html": [ + [ + "css/css-scroll-snap/scroll-padding.html", + {} + ] + ], "css/css-scroll-snap/scroll-snap-stop-always.html": [ [ "css/css-scroll-snap/scroll-snap-stop-always.html", {} ] ], + "css/css-scroll-snap/scroll-snap-type-on-root-element.html": [ + [ + "css/css-scroll-snap/scroll-snap-type-on-root-element.html", + {} + ] + ], "css/css-scroll-snap/scroll-snap-type-proximity.html": [ [ "css/css-scroll-snap/scroll-snap-type-proximity.html", @@ -359369,12 +359648,24 @@ {} ] ], + "css/css-scroll-snap/snap-to-transformed-target.html": [ + [ + "css/css-scroll-snap/snap-to-transformed-target.html", + {} + ] + ], "css/css-scroll-snap/snap-to-visible-areas.html": [ [ "css/css-scroll-snap/snap-to-visible-areas.html", {} ] ], + "css/css-scroll-snap/unreachable-snap-positions.html": [ + [ + "css/css-scroll-snap/unreachable-snap-positions.html", + {} + ] + ], "css/css-scrollbars/auto-scrollbar-inline-children.html": [ [ "css/css-scrollbars/auto-scrollbar-inline-children.html", @@ -359483,6 +359774,12 @@ {} ] ], + "css/css-shadow-parts/multiple-parts.html": [ + [ + "css/css-shadow-parts/multiple-parts.html", + {} + ] + ], "css/css-shadow-parts/part-name-idl.html": [ [ "css/css-shadow-parts/part-name-idl.html", @@ -362471,21 +362768,27 @@ {} ] ], - "css/css-transitions/before-DOMContentLoaded-001.html": [ - [ - "css/css-transitions/before-DOMContentLoaded-001.html", - {} - ] - ], "css/css-transitions/before-load-001.html": [ [ "css/css-transitions/before-load-001.html", {} ] ], - "css/css-transitions/changing-while-transition.html": [ + "css/css-transitions/changing-while-transition-001.html": [ [ - "css/css-transitions/changing-while-transition.html", + "css/css-transitions/changing-while-transition-001.html", + {} + ] + ], + "css/css-transitions/changing-while-transition-002.html": [ + [ + "css/css-transitions/changing-while-transition-002.html", + {} + ] + ], + "css/css-transitions/changing-while-transition-003.html": [ + [ + "css/css-transitions/changing-while-transition-003.html", {} ] ], @@ -362495,9 +362798,9 @@ {} ] ], - "css/css-transitions/detached-container-001.html": [ + "css/css-transitions/disconnected-element-001.html": [ [ - "css/css-transitions/detached-container-001.html", + "css/css-transitions/disconnected-element-001.html", {} ] ], @@ -362549,12 +362852,6 @@ {} ] ], - "css/css-transitions/hidden-container-001.html": [ - [ - "css/css-transitions/hidden-container-001.html", - {} - ] - ], "css/css-transitions/historical.html": [ [ "css/css-transitions/historical.html", @@ -362573,6 +362870,18 @@ {} ] ], + "css/css-transitions/non-rendered-element-001.html": [ + [ + "css/css-transitions/non-rendered-element-001.html", + {} + ] + ], + "css/css-transitions/non-rendered-element-002.html": [ + [ + "css/css-transitions/non-rendered-element-002.html", + {} + ] + ], "css/css-transitions/parsing/transition-delay-computed.html": [ [ "css/css-transitions/parsing/transition-delay-computed.html", @@ -362709,6 +363018,12 @@ {} ] ], + "css/css-transitions/starting-of-transitions-001.html": [ + [ + "css/css-transitions/starting-of-transitions-001.html", + {} + ] + ], "css/css-transitions/transition-001.html": [ [ "css/css-transitions/transition-001.html", @@ -366235,6 +366550,12 @@ {} ] ], + "css/cssom-view/matchMedia-display-none-iframe.html": [ + [ + "css/cssom-view/matchMedia-display-none-iframe.html", + {} + ] + ], "css/cssom-view/matchMedia.xht": [ [ "css/cssom-view/matchMedia.xht", @@ -366297,6 +366618,18 @@ {} ] ], + "css/cssom-view/outer-svg.html": [ + [ + "css/cssom-view/outer-svg.html", + {} + ] + ], + "css/cssom-view/resize-event-on-initial-layout.html": [ + [ + "css/cssom-view/resize-event-on-initial-layout.html", + {} + ] + ], "css/cssom-view/screenLeftTop.html": [ [ "css/cssom-view/screenLeftTop.html", @@ -366561,6 +366894,48 @@ {} ] ], + "css/cssom/HTMLLinkElement-disabled-001.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-001.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-002.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-002.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-003.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-003.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-004.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-004.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-005.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-005.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-006.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-006.tentative.html", + {} + ] + ], + "css/cssom/HTMLLinkElement-disabled-007.tentative.html": [ + [ + "css/cssom/HTMLLinkElement-disabled-007.tentative.html", + {} + ] + ], "css/cssom/MediaList.html": [ [ "css/cssom/MediaList.html", @@ -371488,6 +371863,12 @@ {} ] ], + "element-timing/observe-shadow-image.html": [ + [ + "element-timing/observe-shadow-image.html", + {} + ] + ], "element-timing/observe-svg-image.html": [ [ "element-timing/observe-svg-image.html", @@ -387777,6 +388158,12 @@ {} ] ], + "html/cross-origin-opener/new_window_same_site.html": [ + [ + "html/cross-origin-opener/new_window_same_site.html", + {} + ] + ], "html/dom/documents/dom-tree-accessors/Document.body.html": [ [ "html/dom/documents/dom-tree-accessors/Document.body.html", @@ -388905,6 +389292,12 @@ } ] ], + "html/interaction/focus/focus-file-input.html": [ + [ + "html/interaction/focus/focus-file-input.html", + {} + ] + ], "html/interaction/focus/focus-management/focus-event-targets-simple.html": [ [ "html/interaction/focus/focus-management/focus-event-targets-simple.html", @@ -391769,6 +392162,12 @@ {} ] ], + "html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html": [ + [ + "html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html", + {} + ] + ], "html/semantics/embedded-content/the-canvas-element/security.pattern.image.fillStyle.cross.html": [ [ "html/semantics/embedded-content/the-canvas-element/security.pattern.image.fillStyle.cross.html", @@ -400646,6 +401045,12 @@ {} ] ], + "intersection-observer/v2/scaled-target.html": [ + [ + "intersection-observer/v2/scaled-target.html", + {} + ] + ], "intersection-observer/v2/simple-effects.html": [ [ "intersection-observer/v2/simple-effects.html", @@ -427687,9 +428092,25 @@ } ] ], - "resource-timing/nested-context-navigations.html": [ + "resource-timing/nested-context-navigations-embed.html": [ [ - "resource-timing/nested-context-navigations.html", + "resource-timing/nested-context-navigations-embed.html", + { + "timeout": "long" + } + ] + ], + "resource-timing/nested-context-navigations-iframe.html": [ + [ + "resource-timing/nested-context-navigations-iframe.html", + { + "timeout": "long" + } + ] + ], + "resource-timing/nested-context-navigations-object.html": [ + [ + "resource-timing/nested-context-navigations-object.html", { "timeout": "long" } @@ -444551,6 +444972,12 @@ {} ] ], + "webmessaging/message-channels/worker-post-after-close.html": [ + [ + "webmessaging/message-channels/worker-post-after-close.html", + {} + ] + ], "webmessaging/message-channels/worker.html": [ [ "webmessaging/message-channels/worker.html", @@ -445048,15 +445475,15 @@ {} ] ], - "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html": [ + "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html": [ [ - "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html", + "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html", {} ] ], - "webrtc-identity/RTCPeerConnection-peerIdentity.html": [ + "webrtc-identity/RTCPeerConnection-peerIdentity.https.html": [ [ - "webrtc-identity/RTCPeerConnection-peerIdentity.html", + "webrtc-identity/RTCPeerConnection-peerIdentity.https.html", {} ] ], @@ -445174,7 +445601,9 @@ "webrtc/RTCDataChannel-send.html": [ [ "webrtc/RTCDataChannel-send.html", - {} + { + "timeout": "long" + } ] ], "webrtc/RTCDataChannelEvent-constructor.html": [ @@ -445594,7 +446023,9 @@ "webrtc/RTCRtpTransceiver.https.html": [ [ "webrtc/RTCRtpTransceiver.https.html", - {} + { + "timeout": "long" + } ] ], "webrtc/RTCSctpTransport-constructor.html": [ @@ -474331,6 +474762,12 @@ {} ] ], + "webdriver/tests/execute_async_script/properties.py": [ + [ + "webdriver/tests/execute_async_script/properties.py", + {} + ] + ], "webdriver/tests/execute_async_script/user_prompts.py": [ [ "webdriver/tests/execute_async_script/user_prompts.py", @@ -474369,6 +474806,12 @@ {} ] ], + "webdriver/tests/execute_script/properties.py": [ + [ + "webdriver/tests/execute_script/properties.py", + {} + ] + ], "webdriver/tests/execute_script/user_prompts.py": [ [ "webdriver/tests/execute_script/user_prompts.py", @@ -475091,7 +475534,7 @@ "support" ], ".gitignore": [ - "cc4bd700eeaed676aad4548ad8af7287e70d18bf", + "0f080ca986bcf8f3394385c0f5c257073ca94551", "support" ], ".gitmodules": [ @@ -475103,7 +475546,7 @@ "support" ], ".pyup.yml": [ - "2249e1a89dc7687fa04a38e1704ee22c325bd15b", + "f31f24406307e014bdbe568f3aba8a23b0cb2a86", "support" ], ".taskcluster.yml": [ @@ -475123,7 +475566,7 @@ "support" ], ".well-known/idp-proxy/mock-idp.js": [ - "242b4ef56f60a3472899939426246e764e842a65", + "e73ca22bb2ae79a6ceec2ebbf407ed22b1d0b435", "support" ], ".well-known/origin-policy/policy-csp-1": [ @@ -477607,7 +478050,7 @@ "testharness" ], "2dcontext/imagebitmap/createImageBitmap-origin.sub.html": [ - "ae8c70f9c0799c8834f0167a47e7040a5927514c", + "9f19f6ae66b58f93c23ba8aeb095838d9a6cc5c9", "testharness" ], "2dcontext/imagebitmap/createImageBitmap-sizeOverflow.html": [ @@ -479475,7 +479918,7 @@ "support" ], "CONTRIBUTING.md": [ - "427ec682793f7eb074577ebb07dd4e24e1bb02f2", + "baa208e30f4eca8ca10c0e9cb6f89f2d0a726f2b", "support" ], "FileAPI/BlobURL/support/file_test2.txt": [ @@ -481279,7 +481722,7 @@ "support" ], "LICENSE.md": [ - "6b346a528cd7bdce0315dcd3cf83ebaa826473e1", + "ad4858c8745cfa1b330a52d27c621a09aa3112e0", "support" ], "README.md": [ @@ -486575,7 +487018,7 @@ "support" ], "common/canvas-tests.js": [ - "732f2a435b8194e06c7b5d89d5d6aa58b0aca2e2", + "2d0397b42d2e74225099155d59d62adff9d74b2d", "support" ], "common/canvas-tests.js.headers": [ @@ -486667,11 +487110,23 @@ "support" ], "common/security-features/README.md": [ - "45cd74ede74d6c2fdaac80690a4e8a6b99f4976c", + "a2ae9aa8e16bcd30328a37721d7ec7adf5ebbfbf", "support" ], "common/security-features/resources/common.js": [ - "936b39e50ed57fdf9293333658fe8966c130712b", + "782e428c66f80b94b289a9cce5d6fec0498ef564", + "support" + ], + "common/security-features/scope/document.py": [ + "3fc61a1e7baa3bc60968d578930f25f621b536f3", + "support" + ], + "common/security-features/scope/template/document.html.template": [ + "feccb69e9de4cd001fd7446ffd3fa4875a906fe2", + "support" + ], + "common/security-features/scope/util.py": [ + "42f8326b36aab10751cf2052354925a7ad0ca867", "support" ], "common/security-features/subresource/__init__.py": [ @@ -486762,6 +487217,30 @@ "82a4cb0b657956cb20efcfb0142ad4040875eabe", "support" ], + "common/security-features/tools/generate.py": [ + "50c3a2c250c9d992377809cb731441fd6588263d", + "support" + ], + "common/security-features/tools/template/disclaimer.template": [ + "66c43ed6f21324d44b1596c09a02fecf53f41323", + "support" + ], + "common/security-features/tools/template/spec_json.js.template": [ + "e4cbd03425968819d773460335404584d9d375fc", + "support" + ], + "common/security-features/tools/template/test.debug.html.template": [ + "7d4a9f126641548109f72d85505c349bc26384fd", + "support" + ], + "common/security-features/tools/template/test.release.html.template": [ + "091f59be90d026191a860680e3670b992914ab89", + "support" + ], + "common/security-features/tools/util.py": [ + "77b89769ca27f606ae6adb080fbdc5ee9df8966d", + "support" + ], "common/sleep.py": [ "2e803b1b262423e219be592fab548ada982bc439", "support" @@ -527298,6 +527777,10 @@ "13041a27496b19d58c2559bb6c99c4d71f9b08bd", "reftest" ], + "css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html": [ + "426b47537bf1069121c82dbbb8d4d034ff437244", + "reftest" + ], "css/CSS2/floats-clear/adjoining-float-new-fc.html": [ "587bbf51b7da9a1d620f35e0b2ece720ddd4ee1e", "reftest" @@ -549678,14 +550161,6 @@ "5527731417525faec185b50acac37fa7e3cd7b67", "reftest" ], - "css/CSS2/selectors/first-letter-punctuation-184-ref.xht": [ - "a3a002927a5e7cde53f7d4150011b7e9590fa8b0", - "support" - ], - "css/CSS2/selectors/first-letter-punctuation-184.xht": [ - "ba4755c1ba8f73676d2ee68702dc989b3976e033", - "reftest" - ], "css/CSS2/selectors/first-letter-punctuation-185-ref.xht": [ "eec0f360f42d73d1057c1ff9f1e5cbb0d5dd5b20", "support" @@ -562482,6 +562957,18 @@ "c5afc015b31a069b438117e8509ba5cbec7a0813", "visual" ], + "css/CSS2/ui/outline-applies-to-016-ref.xht": [ + "2ec1fb0447c9c08ef41b147c4b7109022a5e4678", + "support" + ], + "css/CSS2/ui/outline-applies-to-016.xht": [ + "89ba125e5112fc13e3b9705a03868dc3b562510d", + "reftest" + ], + "css/CSS2/ui/outline-applies-to-017.xht": [ + "d209d658650bb5fdf5834a069719c02afb5f8160", + "reftest" + ], "css/CSS2/ui/outline-color-001.xht": [ "8fb1b8bdebbaad37f5bc2f8639d8659ac65b3651", "reftest" @@ -569959,7 +570446,7 @@ "testharness" ], "css/css-animations/Document-getAnimations.tentative.html": [ - "c11b0a908760f4a365fb6f82e92b98341e94fb4c", + "175acf8424688c29e2b433226c6c4af11d176eb3", "testharness" ], "css/css-animations/Element-getAnimations-dynamic-changes.tentative.html": [ @@ -570290,6 +570777,10 @@ "e35b7fcb0f98656cdeff41d8d7f4a7620fa52eea", "support" ], + "css/css-animations/animationevent-marker-pseudoelement.html": [ + "90c7b86ab9d7060b5cda29158001a119944e69c0", + "testharness" + ], "css/css-animations/animationevent-pseudoelement.html": [ "8de41cc613b00728ebc4642ab2fc83c73df82bc0", "testharness" @@ -570311,7 +570802,7 @@ "testharness" ], "css/css-animations/event-order.tentative.html": [ - "93d452ace07163b10af18245d6799d9823448e1e", + "f4f9e29a3c859daaa9727fe3009f837a7ddeb1be", "testharness" ], "css/css-animations/historical.html": [ @@ -577190,6 +577681,14 @@ "82321b9c07edaf471f64829f0f0efa232aeb99c0", "support" ], + "css/css-display/display-contents-shadow-dom-1-ref.html": [ + "df3aaf3374000bc08032374bc1f6d171b94d3778", + "support" + ], + "css/css-display/display-contents-shadow-dom-1.html": [ + "1f391163da043cb664558beb686a2b195c067899", + "reftest" + ], "css/css-display/display-contents-shadow-host-whitespace.html": [ "84b04dba1013af9091f3d943ca106ab655676842", "reftest" @@ -582930,6 +583429,14 @@ "5cb21495ac523ee796e7b246831fd2d5bdcae798", "reftest" ], + "css/css-fonts/quoted-generic-ignored-ref.html": [ + "70e2d50cd83f61017f0f22da14065c7afa76e1d1", + "support" + ], + "css/css-fonts/quoted-generic-ignored.html": [ + "4207ad5cf43e6b6db198fb14b0d00f6c3c2d4e97", + "reftest" + ], "css/css-fonts/support/100x100-lime.png": [ "1b947700808585e8c224cee096247eb5d30a1ded", "support" @@ -591603,7 +592110,7 @@ "reftest" ], "css/css-grid/grid-layout-properties.html": [ - "fcc2ce3b88d7a7aa45afcba9cdef9fdcd293ba63", + "b1b0bd87d494e0045c9a56501011428ac1af3ab8", "testharness" ], "css/css-grid/grid-model/display-grid.html": [ @@ -591951,7 +592458,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-flow-computed.html": [ - "7484f62ddb6ea6b878245c3567f62fc908428f8c", + "a91593efc1bbc4cc6bb49b161b9b143d04daa3d0", "testharness" ], "css/css-grid/parsing/grid-auto-flow-invalid.html": [ @@ -591959,7 +592466,7 @@ "testharness" ], "css/css-grid/parsing/grid-auto-flow-valid.html": [ - "4270a3df933f372792139cae7c39344ff69482dc", + "7db8b189a28e5bbd06fd11fbb856f0a727269933", "testharness" ], "css/css-grid/parsing/grid-auto-rows-computed.html": [ @@ -593106,6 +593613,10 @@ "590319d63fd09466f4d5fffe6943b4ff0430fcee", "testharness" ], + "css/css-lists/li-counter-increment-computed-style.html": [ + "0fae6e3f6036c46b8f658304787da5879913296f", + "testharness" + ], "css/css-lists/li-with-height-001-ref.html": [ "486009d5604ab7a2cb66df735efff3c11c00b685", "support" @@ -593151,11 +593662,11 @@ "testharness" ], "css/css-lists/list-item-definition-ref.html": [ - "72a4c90f4ada6a889fa71a27aea20146ea07bc9b", + "2d49bc4cb972803c45f701667d68d13028c4abc2", "support" ], "css/css-lists/list-item-definition.html": [ - "edae4b96bd98876170145cf9bc9c834d188b5640", + "14e351f9ecd34356087fc5ec7361d8e4d9b542e0", "reftest" ], "css/css-lists/list-marker-with-lineheight-and-overflow-hidden-001-ref.html": [ @@ -595286,6 +595797,14 @@ "83debd12d20b9f78d5beaf338ae7f068ed6bf693", "support" ], + "css/css-multicol/multicol-span-all-children-height-001-ref.html": [ + "e95210fed257c34d8c265259c7694497c1ff712d", + "support" + ], + "css/css-multicol/multicol-span-all-children-height-001.html": [ + "55bdef427880b59bfd532eee6fce006d22c1cbb8", + "reftest" + ], "css/css-multicol/multicol-span-all-dynamic-add-001-ref.html": [ "9f76ea15a0daa7753e76ad9b9a99948988c702d3", "support" @@ -597754,6 +598273,30 @@ "d45c76696eca826456988d7884adcaa52bfad9cd", "reftest" ], + "css/css-pseudo/marker-content-009-ref.html": [ + "a3db09f078148cdfe8105bc0d12186e15cf33d48", + "support" + ], + "css/css-pseudo/marker-content-009.html": [ + "b3627cca7554076f85d59869eec7bc80e39b82be", + "reftest" + ], + "css/css-pseudo/marker-content-010-ref.html": [ + "5bee9bb17943d7efd06a82656bd6881204cbf24a", + "support" + ], + "css/css-pseudo/marker-content-010.html": [ + "ccd377d523d55a1eac4f0f05ab7d378357488838", + "reftest" + ], + "css/css-pseudo/marker-content-011-ref.html": [ + "62a64a1e5e16ac7d90ada265317235cfb6dbe64f", + "support" + ], + "css/css-pseudo/marker-content-011.html": [ + "0cc20b0cdcd242021bc37b9e2d3500ed21c5b35f", + "reftest" + ], "css/css-pseudo/marker-display-dynamic-001.html": [ "c06da7ca803455559a7a12b915d9083b32106cd1", "reftest" @@ -600435,7 +600978,7 @@ "support" ], "css/css-scroll-snap/inheritance.html": [ - "b380cb400f2c291832fdfeeab72e9b5561b3c847", + "2569cf3d8bfbf46f1d9217642afbf637ff4600ca", "testharness" ], "css/css-scroll-snap/nested-scrollIntoView-snaps.html": [ @@ -600507,19 +601050,27 @@ "testharness" ], "css/css-scroll-snap/parsing/scroll-snap-type-valid.html": [ - "fde2211f9253467544376643d2e842c61adfe8be", + "59a0cb9ab203b5ec44e46286594c7f77700c66f8", + "testharness" + ], + "css/css-scroll-snap/scroll-padding.html": [ + "0c637ed6db24ad9283c9ac28c7f377e28688674d", "testharness" ], "css/css-scroll-snap/scroll-snap-stop-always.html": [ "7d2a228688fc2011662b659803cc615dac14f350", "testharness" ], + "css/css-scroll-snap/scroll-snap-type-on-root-element.html": [ + "c2c413d04bde1a419c346fbc1d47c19825de9365", + "testharness" + ], "css/css-scroll-snap/scroll-snap-type-proximity.html": [ "cfe990c4fcab85898899039f71fa353484558789", "testharness" ], "css/css-scroll-snap/scrollTo-scrollBy-snaps.html": [ - "fba38cb703ba2d70a0fb83e69ae816942a1fbea5", + "48bfb51c2d9e838d6ed78fbda636b3657607abc0", "testharness" ], "css/css-scroll-snap/snap-at-user-scroll-end-manual.html": [ @@ -600530,8 +601081,16 @@ "9f9da8f648bfc0f873b339639bd18aba1e25b4c3", "testharness" ], + "css/css-scroll-snap/snap-to-transformed-target.html": [ + "2a4402579cf06ffb2f5611dfd6207fabcb8bdafe", + "testharness" + ], "css/css-scroll-snap/snap-to-visible-areas.html": [ - "822743445263368eb2c26c0004b25fe4b1aeaa5f", + "3e822db02e675a3a8799f69f86d2bc93507c7547", + "testharness" + ], + "css/css-scroll-snap/unreachable-snap-positions.html": [ + "ca4f6033cece748bb1b4b39c755569174a75ecb5", "testharness" ], "css/css-scrollbars/META.yml": [ @@ -600654,6 +601213,10 @@ "5b1fd800790c4e14ec8fbc34bd24eb6c2eb31ab0", "testharness" ], + "css/css-shadow-parts/multiple-parts.html": [ + "de02a26e164d283e4f05a0d8eba0f6b98c778700", + "testharness" + ], "css/css-shadow-parts/part-name-idl.html": [ "fc3282a6e944950548eeda66a78d453ec1a552f3", "testharness" @@ -606238,6 +606801,18 @@ "ea9956362beecb2da890dbef24362a6e9a8be905", "reftest" ], + "css/css-text/line-breaking/line-breaking-015.html": [ + "aaa1c2ba87b122114ad6b56c40808910d082ae82", + "reftest" + ], + "css/css-text/line-breaking/line-breaking-016.html": [ + "c600504b4c244d590f896e26fd6e7e6d7a396800", + "reftest" + ], + "css/css-text/line-breaking/line-breaking-017.html": [ + "36af931b1dc95ecd0d91b5d9637257370e246a72", + "reftest" + ], "css/css-text/line-breaking/line-breaking-atomic-001.html": [ "03666417ca40e9f6efeb6c2e6be6a78ff0f477fa", "reftest" @@ -606314,6 +606889,18 @@ "816015adeab54895037530b8e4d410f81082931f", "support" ], + "css/css-text/line-breaking/reference/line-breaking-015-ref.html": [ + "2837ce0cd7c394737f8e45e7e557fc381dcc0cf3", + "support" + ], + "css/css-text/line-breaking/reference/line-breaking-016-ref.html": [ + "e4d30e01158294fe784cd29211afb95fa7f8f68c", + "support" + ], + "css/css-text/line-breaking/reference/line-breaking-017-ref.html": [ + "6f94b129d294bfc2527c5d2aa800fb6ebadb526e", + "support" + ], "css/css-text/line-breaking/reference/line-breaking-atomic-003-ref.html": [ "93a6d491c2336467ee8dc48ea37c10203ab05863", "support" @@ -606635,7 +607222,7 @@ "testharness" ], "css/css-text/parsing/text-transform-valid.html": [ - "a40166c37ef69074b00de8662fe250dbd7877693", + "fead45c8b8e45da70d4c14d12e4eba38348aed41", "testharness" ], "css/css-text/parsing/white-space-invalid.html": [ @@ -607790,6 +608377,10 @@ "3d6eb4af8ac5aeb7fd54e1b2e2aec325886ddca0", "support" ], + "css/css-text/text-transform/reference/text-transform-multiple-001-ref.html": [ + "694ae87877dd7bebde76a1134ed7d1d1947988ca", + "support" + ], "css/css-text/text-transform/reference/text-transform-none-001-ref.xht": [ "8f822c62df79ac90de8602a6dd8266211c2cece8", "support" @@ -608154,6 +608745,10 @@ "42deb58b1bb08474f754adf8f8b492d04e9b6613", "reftest" ], + "css/css-text/text-transform/text-transform-multiple-001.html": [ + "946aa9c93dbf6de0548a35ad5594ee23ac707756", + "reftest" + ], "css/css-text/text-transform/text-transform-none-001.xht": [ "40d7373e87e85fddfc6b349a13ea66572b27a5cb", "reftest" @@ -608403,7 +608998,7 @@ "reftest" ], "css/css-text/white-space/break-spaces-008.html": [ - "4e6e9efa7e67733e6dbccfc732b90c8a26b769cc", + "9fdcdb6d2d856dc16212c4159f469652f0579aaf", "reftest" ], "css/css-text/white-space/break-spaces-009.html": [ @@ -614939,7 +615534,7 @@ "testharness" ], "css/css-transitions/Document-getAnimations.tentative.html": [ - "bffc05f205fbc80ee9d27ee4ca8d3fefe00ffd63", + "98b91e04ee9dde4602da0519f4923712cd6a3fac", "testharness" ], "css/css-transitions/Element-getAnimations.tentative.html": [ @@ -614959,27 +615554,31 @@ "support" ], "css/css-transitions/README.md": [ - "e44decfea26e9116e04f25db34eca7eb6bcee8ac", + "f11374e47b1876d06231854907c3082b5d4774ab", "support" ], - "css/css-transitions/before-DOMContentLoaded-001.html": [ - "8298e81a23cdbc378e0bff016e468d2826aa417d", - "testharness" - ], "css/css-transitions/before-load-001.html": [ - "47045e8843487ce70aacca8fd02b847c46553b90", + "009260eea430721971053f6d98330f9a9ed56d6d", "testharness" ], - "css/css-transitions/changing-while-transition.html": [ - "a7981471a5cbae472f46511eca21439b46d73159", + "css/css-transitions/changing-while-transition-001.html": [ + "026b16877c517dce2d12c1b348b7cbc8da94108b", + "testharness" + ], + "css/css-transitions/changing-while-transition-002.html": [ + "363be8a987202c648bab14d01b0042f1dee710ac", + "testharness" + ], + "css/css-transitions/changing-while-transition-003.html": [ + "8c8f4bb50dd3280b9b254688e035b4e86fa69f8f", "testharness" ], "css/css-transitions/currentcolor-animation-001.html": [ - "1ffa1a358cade02d20006bd30bcab9110580ee21", + "bcc7991a828ada651764f740d6e2f05f24f8d332", "testharness" ], - "css/css-transitions/detached-container-001.html": [ - "545324b0bd74d7ca398581666babf3ec04798b88", + "css/css-transitions/disconnected-element-001.html": [ + "b883ce8d18d2bc14264b5c38b43a633840d0a070", "testharness" ], "css/css-transitions/event-dispatch.tentative.html": [ @@ -615014,10 +615613,6 @@ "610df6e85d0d74caae7205ee6832b812c766ff1e", "testharness" ], - "css/css-transitions/hidden-container-001.html": [ - "567ae61e328726cd36a2e0f9f7aef934935ff845", - "testharness" - ], "css/css-transitions/historical.html": [ "8d0360a8ecf7a37b81acb10917b63abc7c9543cc", "testharness" @@ -615030,6 +615625,14 @@ "986436950e419a1670c75a45ab5eb39b7db6edca", "testharness" ], + "css/css-transitions/non-rendered-element-001.html": [ + "10419b94677bbfeedf84c5c348d2285338f6ea11", + "testharness" + ], + "css/css-transitions/non-rendered-element-002.html": [ + "f26a04895781b389d7bad5aee80122b1e1d878a9", + "testharness" + ], "css/css-transitions/parsing/transition-delay-computed.html": [ "e1aa9894077bf7958f2cfc459520f8999adc0df0", "testharness" @@ -615118,6 +615721,10 @@ "d9d91ec9da9e90feaf164632b22cb285f10a76ca", "support" ], + "css/css-transitions/starting-of-transitions-001.html": [ + "f80d8134366f861a7220acc348c69c4715de821e", + "testharness" + ], "css/css-transitions/support/1x1-green.png": [ "b98ca0ba0a03c580ac339e4a3653539cfa8edc71", "support" @@ -615179,7 +615786,7 @@ "support" ], "css/css-transitions/support/helper.js": [ - "aa3efe8012268115734bd91bff8f82ceb8d26eea", + "d5fa61b15eff12f48d0a76df51595b104579f757", "support" ], "css/css-transitions/support/import-green.css": [ @@ -620350,6 +620957,14 @@ "3c280547fb353a959bc6df95ad690445835ded98", "reftest" ], + "css/css-variables/wide-keyword-fallback-ref.html": [ + "1b4e3b3b6d9ccd9e97bbd8ec2eb82f6f1a5959e3", + "support" + ], + "css/css-variables/wide-keyword-fallback.html": [ + "bb27a61e610eb0ea58f4e644919ef595db5e0a9d", + "reftest" + ], "css/css-will-change/META.yml": [ "8d265f24986c7af2b08a26741bbfa56f321bfbb3", "support" @@ -627310,6 +627925,10 @@ "aa91023c1ac456902f34ccf6a4df0fed1e852bf2", "reftest" ], + "css/cssom-view/matchMedia-display-none-iframe.html": [ + "08fcb3c5386228b167cc76e9cd02a34903c86912", + "testharness" + ], "css/cssom-view/matchMedia.xht": [ "202a3b738dd0d7c83ed9b4cdff8c7212ae09f61e", "testharness" @@ -627354,6 +627973,14 @@ "8f4433795424a00a896278173747aa9e192e181d", "testharness" ], + "css/cssom-view/outer-svg.html": [ + "3b062c7548f1485269b4b74570975beab4d0760f", + "testharness" + ], + "css/cssom-view/resize-event-on-initial-layout.html": [ + "dc2f04bcced73dffc16d0c439ea029469da2017d", + "testharness" + ], "css/cssom-view/resources/elementsFromPoint.js": [ "ba986ef3f568d4971eb4e84c4faaeae6e276b975", "support" @@ -627734,6 +628361,42 @@ "86016ef5a3db6636bf97edc58992f30f909c13a2", "testharness" ], + "css/cssom/HTMLLinkElement-disabled-001.tentative.html": [ + "877356f924de995aca09579739c6120af2caab1e", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-002.tentative.html": [ + "9c46f60a6214538168b48cd06b16fda0ce52ec63", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-003.tentative.html": [ + "fc86e6ba1f052231c4de47cbcece07c85a6f68b9", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-004.tentative.html": [ + "7e6c34ee40d97319e4b2ac39262bba9935fd7d3b", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-005.tentative.html": [ + "0233f8c746ed83c1b912df3c0e8ba489d9bd4325", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-006.tentative.html": [ + "5828e1ce14217384fd9445297ddffbfcfc4e4c7e", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-007.tentative.html": [ + "451fc3d591f2c8e12964282eb1314d4962429923", + "testharness" + ], + "css/cssom/HTMLLinkElement-disabled-alternate-ref.html": [ + "5d87bfdaf5b0533f2ea7088a870ca45474d065f4", + "support" + ], + "css/cssom/HTMLLinkElement-disabled-alternate.tentative.html": [ + "5b020a172b175ac21d76052cfd44139d376f6605", + "reftest" + ], "css/cssom/META.yml": [ "3250801f64b5d6b4d430083bdc06c09aa0844370", "support" @@ -631518,6 +632181,14 @@ "d46f13413346098dbd65b1e9ceff5fb8368e863e", "reftest" ], + "css/selectors/sharing-in-svg-use-ref.html": [ + "703cc99bb863b7a1bb79dd6a7a218308892c66ca", + "support" + ], + "css/selectors/sharing-in-svg-use.html": [ + "08a038ca8b4ccb367220a467053b1155da51f2fb", + "reftest" + ], "css/selectors/user-invalid.html": [ "f0c3d93cbea2430a98e1c524910ded94567a70d7", "testharness" @@ -643835,7 +644506,7 @@ "support" ], "editing/data/removeformat.js": [ - "cfc355d88541152ac53ff1317a6a0f6a7052b6c3", + "db5c05508336a3d57f0486390d4eb80b4d25c0fd", "support" ], "editing/data/strikethrough.js": [ @@ -644142,6 +644813,10 @@ "05c54ac050fe8caf5581dcbd1de5e30bb8681fd1", "testharness" ], + "element-timing/observe-shadow-image.html": [ + "1fa6dd41a95e9b610412a5ee22cbdb0c3cad5c3e", + "testharness" + ], "element-timing/observe-svg-image.html": [ "45e800d25da14d7052b42dab939ca49167bfedc3", "testharness" @@ -647403,7 +648078,7 @@ "support" ], "feature-policy/reporting/xr-report-only.https.html": [ - "6844226f2bd2189e44c2e74396ba449ce1a49c10", + "bdef39cde8c65cc1e491b76b449c19ab7cd0ed87", "testharness" ], "feature-policy/reporting/xr-report-only.https.html.headers": [ @@ -647411,7 +648086,7 @@ "support" ], "feature-policy/reporting/xr-reporting.https.html": [ - "1982ea544c53bad508c422befe589e9e15dabcb6", + "3ce61cd13ac5103879a327b62fb70e35e9de0f06", "testharness" ], "feature-policy/reporting/xr-reporting.https.html.headers": [ @@ -648851,7 +649526,7 @@ "testharness" ], "fetch/sec-metadata/img.tentative.https.sub.html": [ - "b9fc1af2f3bfcc09b7e9989fd755f3c82d6f24d9", + "d4d51a5574143ad0ab05fd97b895bcdcacb3b0eb", "testharness" ], "fetch/sec-metadata/navigation.https.sub.html": [ @@ -648991,7 +649666,7 @@ "support" ], "fetch/stale-while-revalidate/fetch-sw.https.tentative.html": [ - "2286739ecf27966d1efedad7c4d4031475693988", + "f6ece2cfe3e1f8f85b89d9f6402641104f6085d4", "testharness" ], "fetch/stale-while-revalidate/fetch.tentative.html": [ @@ -653074,6 +653749,26 @@ "7407248ffe9fe3da977275c2192e31e3db9fc8a9", "testharness" ], + "html/cross-origin-opener/new_window_same_site.html": [ + "b75f7ff7a646addffca73e7fc47539e88293d2ed", + "testharness" + ], + "html/cross-origin-opener/new_window_same_site.html.headers": [ + "34bd099a302f893f92586241ea38aac812bf28d0", + "support" + ], + "html/cross-origin-opener/resources/postback.sub.html": [ + "ee08bab4d55ed45523ae862f65a41b29046fba69", + "support" + ], + "html/cross-origin-opener/resources/window.sub.html": [ + "7c72f87c3ddd8996991a87721076a95a85c272d9", + "support" + ], + "html/cross-origin-opener/resources/window.sub.html.headers": [ + "34bd099a302f893f92586241ea38aac812bf28d0", + "support" + ], "html/dom/documents/dom-tree-accessors/Document.body.html": [ "f42125029568476b4076603a1b982a4989b65d35", "testharness" @@ -658526,6 +659221,10 @@ "2e765ca152327bc0b20db0e3b8e79f5da08b9fa9", "testharness" ], + "html/interaction/focus/focus-file-input.html": [ + "d3007112ffb9419e7774d869c53e353ebe2cec8f", + "testharness" + ], "html/interaction/focus/focus-management/focus-event-targets-simple.html": [ "ab7bcfe6d0e636552746def160715bc47e63fb85", "testharness" @@ -661922,6 +662621,10 @@ "a65ffb58aade9d962dd0986c62d0e7688dc92317", "testharness" ], + "html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html": [ + "debe014170dbd452ce994a6286ca11ab0e72adb1", + "testharness" + ], "html/semantics/embedded-content/the-canvas-element/security.pattern.image.fillStyle.cross.html": [ "cdba44b666c66b5a647c5780a2bfaccf7aa76887", "testharness" @@ -663667,7 +664370,7 @@ "testharness" ], "html/semantics/forms/textfieldselection/selection-start-end-extra.html": [ - "e76f5f6ea70c2ba769fe6a75e9aa1c95d98e2760", + "c8ba83bb988006daec57eb2f0ccf9e9dcf421f5d", "testharness" ], "html/semantics/forms/textfieldselection/selection-start-end.html": [ @@ -667947,7 +668650,7 @@ "testharness" ], "html/syntax/parsing/unclosed-svg-script.html": [ - "80f662a3f787daa62c2ae0284f95e7d65b78e8f4", + "e4048615072a828299f9222f94b9a01dcb2df4e8", "testharness" ], "html/syntax/serializing-html-fragments/initial-linefeed-pre.html": [ @@ -671010,6 +671713,10 @@ "9d0769ae44a1bb4a6195c006999b0959f706330c", "support" ], + "intersection-observer/resources/scaled-target-subframe.html": [ + "8f6f930e00915417fcba592df5520999c427ed91", + "support" + ], "intersection-observer/resources/timestamp-subframe.html": [ "143e4f6e23a7688949420a07ccd20e3c211a6f6b", "support" @@ -671067,11 +671774,11 @@ "testharness" ], "intersection-observer/v2/cross-origin-effects.sub.html": [ - "edb8f023c09ff51ef6693dd6b994c364895241ca", + "04b88b404ec035ed107d6a2ed9f499a0d5d105d3", "testharness" ], "intersection-observer/v2/cross-origin-occlusion.sub.html": [ - "6f9fa57fb718ceb90870fd0812930eda79db7d1b", + "b8bbcae3ea8bbe9ab9db5a23d29ad1113dee7877", "testharness" ], "intersection-observer/v2/delay-test.html": [ @@ -671082,6 +671789,10 @@ "3e53ee5f5814e8ef69d8454011ceafabfe8d1f17", "testharness" ], + "intersection-observer/v2/scaled-target.html": [ + "f48f0792d0fab626101f8a612a8c1108401134c7", + "testharness" + ], "intersection-observer/v2/simple-effects.html": [ "2b7a83a9c9507a79e91cb2ef890604d9b2ca5e3e", "testharness" @@ -671363,7 +672074,7 @@ "reftest" ], "lint.whitelist": [ - "27f70db20fe607ddcb03829fc40e6efd00f0c1c7", + "0ec256a7525fd32851aa7d251e3ae38fcb2b2436", "support" ], "loading/preloader-css-import-no-quote.tentative.html": [ @@ -673555,37 +674266,13 @@ "testharness" ], "mixed-content/generic/mixed-content-test-case.js": [ - "6837258c62294e6e2826bac733cbb2451f9edc12", + "221210814c52af5afa3bb65e174d6e527dff31a7", "support" ], "mixed-content/generic/sanity-checker.js": [ "55a103adf0f29c615d40bc47943be1aec25c8f1e", "support" ], - "mixed-content/generic/template/disclaimer.template": [ - "66c43ed6f21324d44b1596c09a02fecf53f41323", - "support" - ], - "mixed-content/generic/template/spec_json.js.template": [ - "e4cbd03425968819d773460335404584d9d375fc", - "support" - ], - "mixed-content/generic/template/test.debug.html.template": [ - "77f62ef1da36a4c2f93aa674bd374490de41fb72", - "support" - ], - "mixed-content/generic/template/test.js.template": [ - "b8c0769fcfd8ed0683960400b2428dfea7cda849", - "support" - ], - "mixed-content/generic/template/test.release.html.template": [ - "188e32fde4bc2821776649f47540f7ac86cfdb57", - "support" - ], - "mixed-content/generic/template/test_description.template": [ - "33dbcaa05dd21fd8ab7718dfa99771fc0f68fcfb", - "support" - ], "mixed-content/generic/tools/__init__.py": [ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" @@ -673594,12 +674281,8 @@ "15f294b5c8c878cb6ecb854aa9e5385b64b6d1a1", "support" ], - "mixed-content/generic/tools/common_paths.py": [ - "5475cb6969d2de693f79db773252b2e62853a82d", - "support" - ], "mixed-content/generic/tools/generate.py": [ - "1e0a404a709add4a31404f874ca4fc035c9c5702", + "fe4305c4eea53b1e0317e92303078f0b6875c772", "support" ], "mixed-content/generic/tools/regenerate": [ @@ -685075,11 +685758,11 @@ "testharness" ], "referrer-policy/generic/link-rel-prefetch.html": [ - "c8e367079bd36f04bc9cf8fbbb87c0647b2303e8", + "914ddfc4b225d26c675c61ecf623fdebb10e4524", "testharness" ], "referrer-policy/generic/multiple-headers-and-values.html": [ - "ac7f37006ec748c754040119970f6aba326cd757", + "b7a9c9fe0e4e69f12f804e3366f9cd817bc0d3da", "testharness" ], "referrer-policy/generic/multiple-headers-and-values.html.headers": [ @@ -685087,7 +685770,7 @@ "support" ], "referrer-policy/generic/multiple-headers-combined.html": [ - "0e99cd4ea8e822325180b4e94e03a38ddcfe66f5", + "c13403aa22acc32527c4348c48a377f388ad453c", "testharness" ], "referrer-policy/generic/multiple-headers-combined.html.headers": [ @@ -685095,7 +685778,7 @@ "support" ], "referrer-policy/generic/multiple-headers-one-invalid.html": [ - "3c2bf21a62b2fd37b5ede60b2dbe01ca01104ce8", + "c36c456e23a26dcaae0bea2e89ad11a81e82aa54", "testharness" ], "referrer-policy/generic/multiple-headers-one-invalid.html.headers": [ @@ -685103,7 +685786,7 @@ "support" ], "referrer-policy/generic/multiple-headers-one-unknown-token.html": [ - "2c13376b14cea31b6d014d20835b02dae4a88484", + "6a8c8eecbff039f4ede7837e0e0386192bbc8621", "testharness" ], "referrer-policy/generic/multiple-headers-one-unknown-token.html.headers": [ @@ -685111,7 +685794,7 @@ "support" ], "referrer-policy/generic/multiple-headers.html": [ - "e727acd588ee7d7817be8bcf0ffaf6b77ea7fbbf", + "5b9c4eb20a4624a5078e539aa8e5bbd0e9534145", "testharness" ], "referrer-policy/generic/multiple-headers.html.headers": [ @@ -685119,7 +685802,7 @@ "support" ], "referrer-policy/generic/referrer-policy-test-case.js": [ - "8bdbd3961b9d3a851951f111f803c3f82b9f81ce", + "c8a3beaf89eb50ad0ef1ab3efc3593b8d9a3b9b1", "support" ], "referrer-policy/generic/sandboxed-iframe-with-opaque-origin.html": [ @@ -685147,7 +685830,7 @@ "testharness" ], "referrer-policy/generic/subresource-test/image-decoding.html": [ - "a9eec617d44d18c293af1b0c1bf180f5c9470f5e", + "a3c8626641c6e469487c87174b6656ebd50fd6f5", "testharness" ], "referrer-policy/generic/subresource-test/link-navigate.html": [ @@ -685166,30 +685849,6 @@ "dd48dec8e6ba24932fbb930006143124e3c7790f", "testharness" ], - "referrer-policy/generic/template/disclaimer.template": [ - "66c43ed6f21324d44b1596c09a02fecf53f41323", - "support" - ], - "referrer-policy/generic/template/spec_json.js.template": [ - "e4cbd03425968819d773460335404584d9d375fc", - "support" - ], - "referrer-policy/generic/template/test.debug.html.template": [ - "ce7761b949df343162767f64612ec713805fbf10", - "support" - ], - "referrer-policy/generic/template/test.js.template": [ - "900099436a8120417836a02ee82eb5a3bd698629", - "support" - ], - "referrer-policy/generic/template/test.release.html.template": [ - "e55a50bdc418a1cc817a4df0b2d3f6af6ea1fd13", - "support" - ], - "referrer-policy/generic/template/test_description.template": [ - "fbc80bb25af678657dc5f417bb9a930496ca4875", - "support" - ], "referrer-policy/generic/tools/__init__.py": [ "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391", "support" @@ -685198,12 +685857,8 @@ "715e1d6ae4b53461a99b3789a5200e4cb6456f4c", "support" ], - "referrer-policy/generic/tools/common_paths.py": [ - "1066fb5bb238ed5dfd57bc5ba0e98af624bfd9b4", - "support" - ], "referrer-policy/generic/tools/generate.py": [ - "592948696aec6ef45699aceec4ea7ea856b28b43", + "a59770ffa26cbb933c7185b75d58bd00b75103c7", "support" ], "referrer-policy/generic/tools/regenerate": [ @@ -685215,7 +685870,7 @@ "support" ], "referrer-policy/generic/unsupported-csp-referrer-directive.html": [ - "6c03a48e1c1a27667d14cd47c6117636eebd3a8b", + "190aa5212f3dbcb1633b9d73bebebaf5e1bd361c", "testharness" ], "referrer-policy/no-referrer-when-downgrade/attr-referrer/cross-origin/http-http/a-tag/no-redirect/insecure-protocol.http.html": [ @@ -694022,8 +694677,16 @@ "a7542f191c10ea7b42110b5fc80e7abf43174bb5", "testharness" ], - "resource-timing/nested-context-navigations.html": [ - "483cc5b82d5debf942dd0013a340f9d5f550834c", + "resource-timing/nested-context-navigations-embed.html": [ + "bbba46c50edf21f50b49099c779dd5a8792faa0f", + "testharness" + ], + "resource-timing/nested-context-navigations-iframe.html": [ + "86a83285288a79d014905aa909014f9e7116fa29", + "testharness" + ], + "resource-timing/nested-context-navigations-object.html": [ + "20cceea38d6ff278b4e4e1f6f8760bbf38721226", "testharness" ], "resource-timing/no-entries-for-cross-origin-css-fetched.sub.html": [ @@ -705431,11 +706094,11 @@ "support" ], "tools/lint/lint.py": [ - "19d0c112186a09ab2ca5fb449faf4ea90bb66e04", + "dd06e0a02fc694129d38288b5de55e22af43022b", "support" ], "tools/lint/rules.py": [ - "78f9d072a8a71c7af0494dc3625bd7aa937a5554", + "76d5d3e99264de999e999086436c8b524c62a297", "support" ], "tools/lint/tests/__init__.py": [ @@ -705591,7 +706254,7 @@ "support" ], "tools/manifest/XMLParser.py": [ - "523f544b7c4e834b85d970a352aab28d3c846145", + "212bd7f32f48e05531607a436fa151f6f29d43de", "support" ], "tools/manifest/__init__.py": [ @@ -705611,7 +706274,7 @@ "support" ], "tools/manifest/item.py": [ - "b6d33e8452cde01b525a3336c8a11d0012c7037c", + "1556bfafdafb47d9a44629b33a3e376e85c4af6c", "support" ], "tools/manifest/log.py": [ @@ -705619,11 +706282,11 @@ "support" ], "tools/manifest/manifest.py": [ - "dc38d3819883ce049af8447b8e1f87d308b48e23", + "dd2e3627f478bbabdad532185b17cf6769381086", "support" ], "tools/manifest/sourcefile.py": [ - "56b938d64ba939e4bf0bc98b6dfe1228aa54cae6", + "cd5261183ee8b1b67796ef7a7a8696faabc4b68d", "support" ], "tools/manifest/tests/__init__.py": [ @@ -705651,7 +706314,7 @@ "support" ], "tools/manifest/update.py": [ - "f1a70930bb3377d86164767b71d985bad42c0104", + "013ec2147bc7218b736a9f3989d929078ec73bfc", "support" ], "tools/manifest/utils.py": [ @@ -705659,7 +706322,11 @@ "support" ], "tools/manifest/vcs.py": [ - "b63df4d0a8ae750a3a1edc7ee6c9eaa5fcc3718b", + "d900012212eb32b2a4df01c781cabf0b48968bad", + "support" + ], + "tools/mypy.ini": [ + "710df96244a978275e3395262a7f4d0f46cce530", "support" ], "tools/py27-flake8.ini": [ @@ -706062,6 +706729,10 @@ "cc9098d218acfef3c23ea14b4fa176997c281365", "support" ], + "tools/requirements_mypy.txt": [ + "0654986be4f9ba06b1d8089ab18af5d72afc5370", + "support" + ], "tools/runner/css/bootstrap-theme.min.css": [ "61358b13d045694a6963c5334eab2831e53978ac", "support" @@ -706103,7 +706774,7 @@ "support" ], "tools/runner/runner.js": [ - "ef0b6a449d686168469dfcb851b30912124387a7", + "daaf9d45da5bfba632354e9edbd2846d052d0035", "support" ], "tools/runner/update_manifest.py": [ @@ -710067,7 +710738,7 @@ "support" ], "tools/tox.ini": [ - "bb9873d5bc67cb15de4bd29cab6c1729ea5b94ce", + "d0b186428eda92cc5c65f0ca98703811cdf1f445", "support" ], "tools/webdriver/.gitignore": [ @@ -710139,7 +710810,7 @@ "support" ], "tools/wpt/testfiles.py": [ - "7f0f221a1f6be5eb3959184a86e7fe7958554dc6", + "09dd45bcbd8dd4c865310a64f612c5e1262133f9", "support" ], "tools/wpt/tests/latest_mozilla_central.txt": [ @@ -710427,7 +711098,7 @@ "support" ], "tools/wptrunner/wptrunner/browsers/fennec.py": [ - "45c83d9b816cc2b4bca26da896868408de7f273c", + "9414ff230d47cf5075b08089c11a395b7eb1f0be", "support" ], "tools/wptrunner/wptrunner/browsers/firefox.py": [ @@ -710483,7 +711154,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/base.py": [ - "f35c03a30e8f222b3cf33a4bda66e73e33853cdd", + "cfbc42f61a0ea50b413a6ec14424bb1fa67bf87d", "support" ], "tools/wptrunner/wptrunner/executors/executorchrome.py": [ @@ -710499,7 +711170,7 @@ "support" ], "tools/wptrunner/wptrunner/executors/executormarionette.py": [ - "0b0068f8c5bc9716e1988bc3cb7ea103459699ac", + "8ceb99261e28d7142b16ab736ba453d849065f89", "support" ], "tools/wptrunner/wptrunner/executors/executoropera.py": [ @@ -713847,7 +714518,7 @@ "testharness" ], "web-animations/animation-model/animation-types/property-list.js": [ - "8d9b296ff74fdd907f94da417bfce1d9021eca48", + "3ac142e6278544917bc96073beb9d024f278fe9b", "support" ], "web-animations/animation-model/animation-types/property-types.js": [ @@ -713895,7 +714566,7 @@ "testharness" ], "web-animations/interfaces/Animatable/animate.html": [ - "b7c590e67a03d6ae81cbfeb1a80db0e0613f710d", + "fcf753baef30bbde608d2debfb43b3212b02fa21", "testharness" ], "web-animations/interfaces/Animatable/getAnimations.html": [ @@ -714063,7 +714734,7 @@ "support" ], "web-animations/testcommon.js": [ - "889cab8bd31e7d356b413fd1e58ea032f00a2fc6", + "82b7053232146e3475f1db4c21d9b28e587d2f31", "support" ], "web-animations/timing-model/animation-effects/active-time.html": [ @@ -715547,7 +716218,7 @@ "support" ], "webdriver/tests/add_cookie/add.py": [ - "24ac645029e0dc57327b62ad3d24fbab1640ad2c", + "c1a886aafa71757d5efccb3953d2c30a96a14a34", "wdspec" ], "webdriver/tests/add_cookie/user_prompts.py": [ @@ -715746,6 +716417,10 @@ "8b6d7d9157b28570e7984491e02e42f6a64ce15c", "wdspec" ], + "webdriver/tests/execute_async_script/properties.py": [ + "207daae12833beff5da158136225663e16cbc155", + "wdspec" + ], "webdriver/tests/execute_async_script/user_prompts.py": [ "5c873935519716a3f4933b710828118218f7220c", "wdspec" @@ -715774,6 +716449,10 @@ "8bb637853ccd789f128a8293a678f58cfe030912", "wdspec" ], + "webdriver/tests/execute_script/properties.py": [ + "92f4722fbf6caa01c8dc1977dfdfa6b6db0af468", + "wdspec" + ], "webdriver/tests/execute_script/user_prompts.py": [ "ec6895b74f8e110120f2e3067e2c35b94d2a532d", "wdspec" @@ -715919,7 +716598,7 @@ "support" ], "webdriver/tests/get_element_property/get.py": [ - "fde0f2a0cd6dd89b59287510f7049ceabac8d371", + "50185485b814c03628c96203a8e6f8735a83be5e", "wdspec" ], "webdriver/tests/get_element_property/user_prompts.py": [ @@ -715967,7 +716646,7 @@ "support" ], "webdriver/tests/get_named_cookie/get.py": [ - "50a465191687fe1c79a910cdd6fed376fb001184", + "9ea29c8994eb471882ae0ce68aa48b854ba35b99", "wdspec" ], "webdriver/tests/get_named_cookie/user_prompts.py": [ @@ -716654,6 +717333,10 @@ "2c79be8a298aa73ae20bb7898d8dd34d0d56b000", "testharness" ], + "webmessaging/message-channels/worker-post-after-close.html": [ + "a2f6d92e9cc9ca67a4f42384a0a00e1497f98db8", + "testharness" + ], "webmessaging/message-channels/worker.html": [ "0502021fff138a29b5bd815c589d0f556922db9b", "testharness" @@ -717010,12 +717693,12 @@ "8498e6b35c9ff820c86773dd874930c5b012229e", "testharness" ], - "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html": [ - "2bd860d901ded78c9635da65413ac63e7dbf4460", + "webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html": [ + "901789109f017a74ba11675d13cd33d12e73e2d1", "testharness" ], - "webrtc-identity/RTCPeerConnection-peerIdentity.html": [ - "64ad212a5ba4e0c6bf5589f4cda3a4c7a508cdc2", + "webrtc-identity/RTCPeerConnection-peerIdentity.https.html": [ + "518d57777aa79cd2c74ac1820f3538c4afb2732b", "testharness" ], "webrtc-identity/identity-helper.sub.js": [ @@ -717123,7 +717806,7 @@ "testharness" ], "webrtc/RTCDataChannel-send.html": [ - "4b8d0c2f2048d68283a55de7b19eb2e95b166fc8", + "76d3524d6ebc85306ceffcbe4a59a5e8928fd192", "testharness" ], "webrtc/RTCDataChannelEvent-constructor.html": [ @@ -717255,7 +717938,7 @@ "testharness" ], "webrtc/RTCPeerConnection-removeTrack.https.html": [ - "ffb3fececc48ddff3869ea728b00b94c76380334", + "f2add7f0d34bada5c156cafeac399e104b2a414a", "testharness" ], "webrtc/RTCPeerConnection-setDescription-transceiver.html": [ @@ -717263,7 +717946,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-answer.html": [ - "e8b3ef5071e480941cc5b4c6f3117ebfa519ac9e", + "c97021b0fabb455ecd8575276a355e9b9d79bc9b", "testharness" ], "webrtc/RTCPeerConnection-setLocalDescription-offer.html": [ @@ -717303,7 +717986,7 @@ "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-rollback.html": [ - "f2dbf0b96f3c670a219a2f07a85e77f0d231a5b8", + "255419258a35d88ae5970e9ec4edeb70f203da0f", "testharness" ], "webrtc/RTCPeerConnection-setRemoteDescription-tracks.https.html": [ @@ -717411,7 +718094,7 @@ "testharness" ], "webrtc/RTCRtpTransceiver.https.html": [ - "b5f3c55ee5810f30ee8439e0b33df84b379d975c", + "0b560d2f26e34db31d19ad51a87d3690a61e5947", "testharness" ], "webrtc/RTCSctpTransport-constructor.html": [ @@ -717491,7 +718174,7 @@ "testharness" ], "webrtc/no-media-call.html": [ - "10933fae4c396198ade091894ea8538d1a174eaf", + "dbe6a0dd4c210b2fe930e574fe5d638968805dca", "testharness" ], "webrtc/promises-call.html": [ @@ -721967,15 +722650,15 @@ "testharness" ], "webxr/xrDevice_supportsSession_immersive.https.html": [ - "c0b47013f9d11ad292fdef2e51968c3a28c35f55", + "53dd41e3d27d1be2d2d31c6fd88d26676f10db0a", "testharness" ], "webxr/xrDevice_supportsSession_immersive_unsupported.https.html": [ - "2b17b96b1bc11693c87b931a5debc0e4f1c2336c", + "0fb44a895d1f790b4b0c4c9b2f236cb7a4169824", "testharness" ], "webxr/xrDevice_supportsSession_non_immersive.https.html": [ - "69a35c2510983550993f630ea6f0a165c2e89369", + "d5191400c449808b9b21f3687742c4dfa487dffc", "testharness" ], "webxr/xrFrame_getPose.https.html": [ diff --git a/tests/wpt/metadata/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html.ini b/tests/wpt/metadata/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html.ini new file mode 100644 index 00000000000..7559aeea510 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html.ini @@ -0,0 +1,2 @@ +[adjoining-float-nested-forced-clearance.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-016.xht.ini b/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-016.xht.ini new file mode 100644 index 00000000000..20c2f319665 --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-016.xht.ini @@ -0,0 +1,2 @@ +[outline-applies-to-016.xht] + expected: FAIL diff --git a/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-017.xht.ini b/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-017.xht.ini new file mode 100644 index 00000000000..f030c3b313d --- /dev/null +++ b/tests/wpt/metadata/css/CSS2/ui/outline-applies-to-017.xht.ini @@ -0,0 +1,2 @@ +[outline-applies-to-017.xht] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-animations/animationevent-marker-pseudoelement.html.ini b/tests/wpt/metadata/css/css-animations/animationevent-marker-pseudoelement.html.ini new file mode 100644 index 00000000000..5af8ec0f754 --- /dev/null +++ b/tests/wpt/metadata/css/css-animations/animationevent-marker-pseudoelement.html.ini @@ -0,0 +1,5 @@ +[animationevent-marker-pseudoelement.html] + expected: TIMEOUT + [AnimationEvent should have the correct pseudoElement memeber] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/css/css-animations/event-order.tentative.html.ini b/tests/wpt/metadata/css/css-animations/event-order.tentative.html.ini index 875b61eeeb3..5286c0e29f8 100644 --- a/tests/wpt/metadata/css/css-animations/event-order.tentative.html.ini +++ b/tests/wpt/metadata/css/css-animations/event-order.tentative.html.ini @@ -11,3 +11,18 @@ [Test start and end events are sorted correctly when fired simultaneously] expected: FAIL + [Same events are ordered by elements] + expected: FAIL + + [Start and iteration events are ordered by time] + expected: FAIL + + [Start and end events are sorted correctly when fired simultaneously] + expected: FAIL + + [Same events on pseudo-elements follow the prescribed order] + expected: FAIL + + [Iteration and end events are ordered by time] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini index 40722f0ba41..0a363fa8c93 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/at-font-face-font-matching.html.ini @@ -332,3 +332,6 @@ [Matching font-style: 'oblique -10deg' should prefer 'oblique -50deg -40deg' over 'italic'] expected: FAIL + [Matching font-style: 'oblique 21deg' should prefer 'oblique 20deg' over 'oblique 10deg'] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini index fb258c3c0c1..56101a229ad 100644 --- a/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini +++ b/tests/wpt/metadata/css/css-fonts/variations/font-weight-matching.html.ini @@ -35,3 +35,9 @@ [Test @font-face matching for weight 400] expected: FAIL + [Test @font-face matching for weight 500] + expected: FAIL + + [Test @font-face matching for weight 470] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-016.html.ini b/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-016.html.ini new file mode 100644 index 00000000000..57ad0db6ade --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-016.html.ini @@ -0,0 +1,2 @@ +[line-breaking-016.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-017.html.ini b/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-017.html.ini new file mode 100644 index 00000000000..84ea268e264 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/line-breaking/line-breaking-017.html.ini @@ -0,0 +1,2 @@ +[line-breaking-017.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-text/text-transform/text-transform-multiple-001.html.ini b/tests/wpt/metadata/css/css-text/text-transform/text-transform-multiple-001.html.ini new file mode 100644 index 00000000000..f109b41c0f0 --- /dev/null +++ b/tests/wpt/metadata/css/css-text/text-transform/text-transform-multiple-001.html.ini @@ -0,0 +1,2 @@ +[text-transform-multiple-001.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/css-transitions/before-load-001.html.ini b/tests/wpt/metadata/css/css-transitions/before-load-001.html.ini index 02d1d23876d..8b9fb0b259a 100644 --- a/tests/wpt/metadata/css/css-transitions/before-load-001.html.ini +++ b/tests/wpt/metadata/css/css-transitions/before-load-001.html.ini @@ -1,4 +1,8 @@ [before-load-001.html] + expected: TIMEOUT [transition height from 10px to 100px / events] expected: FAIL + [CSS Transitions Test: Transitioning before load event] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/css/css-transitions/changing-while-transition-001.html.ini b/tests/wpt/metadata/css/css-transitions/changing-while-transition-001.html.ini new file mode 100644 index 00000000000..f1b79f7d2b1 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/changing-while-transition-001.html.ini @@ -0,0 +1,4 @@ +[changing-while-transition-001.html] + [Changes to transition-duration should not affect in-flight transitions] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/changing-while-transition-002.html.ini b/tests/wpt/metadata/css/css-transitions/changing-while-transition-002.html.ini new file mode 100644 index 00000000000..cd2e0f6d561 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/changing-while-transition-002.html.ini @@ -0,0 +1,4 @@ +[changing-while-transition-002.html] + [Changes to transition-timing-function should not affect in-flight transitions] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/changing-while-transition-003.html.ini b/tests/wpt/metadata/css/css-transitions/changing-while-transition-003.html.ini new file mode 100644 index 00000000000..da90e5214be --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/changing-while-transition-003.html.ini @@ -0,0 +1,4 @@ +[changing-while-transition-003.html] + [Changes to transition-delay should not affect in-flight transitions] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/disconnected-element-001.html.ini b/tests/wpt/metadata/css/css-transitions/disconnected-element-001.html.ini new file mode 100644 index 00000000000..2eee391a749 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/disconnected-element-001.html.ini @@ -0,0 +1,11 @@ +[disconnected-element-001.html] + expected: TIMEOUT + [Transitions are canceled when an element is re-parented to the same node] + expected: NOTRUN + + [Transitions are canceled when an element is removed from the document] + expected: TIMEOUT + + [Transitions are canceled when an element is re-parented] + expected: NOTRUN + diff --git a/tests/wpt/metadata/css/css-transitions/non-rendered-element-001.html.ini b/tests/wpt/metadata/css/css-transitions/non-rendered-element-001.html.ini new file mode 100644 index 00000000000..887eaa90578 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/non-rendered-element-001.html.ini @@ -0,0 +1,8 @@ +[non-rendered-element-001.html] + expected: TIMEOUT + [Transitions are canceled when an element is no longer rendered] + expected: TIMEOUT + + [Transitions do not run for an element newly rendered] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-transitions/non-rendered-element-002.html.ini b/tests/wpt/metadata/css/css-transitions/non-rendered-element-002.html.ini new file mode 100644 index 00000000000..684f225e665 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/non-rendered-element-002.html.ini @@ -0,0 +1,8 @@ +[non-rendered-element-002.html] + expected: TIMEOUT + [Transitions on ::before/::after pseudo-elements are canceled when the content property is cleared] + expected: TIMEOUT + + [Transitions on ::marker pseudo-elements are canceled when the parent display type is no longer list-item] + expected: NOTRUN + diff --git a/tests/wpt/metadata/css/css-transitions/starting-of-transitions-001.html.ini b/tests/wpt/metadata/css/css-transitions/starting-of-transitions-001.html.ini new file mode 100644 index 00000000000..2b4426806e0 --- /dev/null +++ b/tests/wpt/metadata/css/css-transitions/starting-of-transitions-001.html.ini @@ -0,0 +1,4 @@ +[starting-of-transitions-001.html] + [changes to transition-property should cancel in-flight transitions] + expected: FAIL + diff --git a/tests/wpt/metadata/css/css-variables/wide-keyword-fallback.html.ini b/tests/wpt/metadata/css/css-variables/wide-keyword-fallback.html.ini new file mode 100644 index 00000000000..3bdd09230d8 --- /dev/null +++ b/tests/wpt/metadata/css/css-variables/wide-keyword-fallback.html.ini @@ -0,0 +1,2 @@ +[wide-keyword-fallback.html] + expected: FAIL diff --git a/tests/wpt/metadata/css/cssom-view/outer-svg.html.ini b/tests/wpt/metadata/css/cssom-view/outer-svg.html.ini new file mode 100644 index 00000000000..2ff644b8ca7 --- /dev/null +++ b/tests/wpt/metadata/css/cssom-view/outer-svg.html.ini @@ -0,0 +1,7 @@ +[outer-svg.html] + [scrollWidth, scrollHeight, scrollTop and scrollLeft work on outer svg element] + expected: FAIL + + [clientWidth, clientHeight, clientTop and clientLeft work on outer svg element] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-001.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-001.tentative.html.ini new file mode 100644 index 00000000000..df24204e0d3 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-001.tentative.html.ini @@ -0,0 +1,7 @@ +[HTMLLinkElement-disabled-001.tentative.html] + [ prevents the stylesheet from being in document.styleSheets (from parser)] + expected: FAIL + + [HTMLLinkElement.disabled reflects the attribute, and behaves consistently] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-002.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-002.tentative.html.ini new file mode 100644 index 00000000000..ac0d6d3a943 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-002.tentative.html.ini @@ -0,0 +1,4 @@ +[HTMLLinkElement-disabled-002.tentative.html] + [HTMLLinkElement.disabled reflects the attribute, and behaves consistently, when the sheet is an alternate] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-003.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-003.tentative.html.ini new file mode 100644 index 00000000000..137b92e99e8 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-003.tentative.html.ini @@ -0,0 +1,4 @@ +[HTMLLinkElement-disabled-003.tentative.html] + [HTMLLinkElement.disabled's explicitly enabled state persists when disconnected and connected again] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-004.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-004.tentative.html.ini new file mode 100644 index 00000000000..7f41d0adaa0 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-004.tentative.html.ini @@ -0,0 +1,4 @@ +[HTMLLinkElement-disabled-004.tentative.html] + [HTMLLinkElement.disabled's explicitly enabled state doesn't persist on clones] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-005.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-005.tentative.html.ini new file mode 100644 index 00000000000..d4be99bfa4f --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-005.tentative.html.ini @@ -0,0 +1,5 @@ +[HTMLLinkElement-disabled-005.tentative.html] + expected: TIMEOUT + [HTMLLinkElement.disabled's explicitly enabled state persists regardless of rel] + expected: TIMEOUT + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-007.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-007.tentative.html.ini new file mode 100644 index 00000000000..77f89988df1 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-007.tentative.html.ini @@ -0,0 +1,4 @@ +[HTMLLinkElement-disabled-007.tentative.html] + [HTMLLinkElement.disabled setter sets the explicitly enabled state if toggled back and forth.] + expected: FAIL + diff --git a/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html.ini b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html.ini new file mode 100644 index 00000000000..bc28e5443c7 --- /dev/null +++ b/tests/wpt/metadata/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html.ini @@ -0,0 +1,2 @@ +[HTMLLinkElement-disabled-alternate.tentative.html] + expected: FAIL diff --git a/tests/wpt/metadata/fetch/content-type/response.window.js.ini b/tests/wpt/metadata/fetch/content-type/response.window.js.ini index 18f786d4963..3423b4af7bf 100644 --- a/tests/wpt/metadata/fetch/content-type/response.window.js.ini +++ b/tests/wpt/metadata/fetch/content-type/response.window.js.ini @@ -163,7 +163,7 @@ expected: NOTRUN [ + invoker: invokeFromIframe, + }, + "iframe": { // + invoker: invokeFromIframe, + }, + }; + + return sourceContextMap[sourceContextList[0].sourceContextType].invoker( + subresource, sourceContextList); +} + +/** + invokeFrom*() functions are helper functions with the same parameters + and return values as invokeRequest(), that are tied to specific types + of top-most environment settings objects. + For example, invokeFromIframe() is the helper function for the cases where + sourceContextList[0] is an iframe. +*/ + +function invokeFromIframe(subresource, sourceContextList) { + const currentSourceContext = sourceContextList.shift(); + const frameUrl = + "/common/security-features/scope/document.py?policyDeliveries=" + + encodeURIComponent(JSON.stringify( + currentSourceContext.policyDeliveries || [])); + + let promise; + if (currentSourceContext.sourceContextType === 'srcdoc') { + promise = fetch(frameUrl) + .then(r => r.text()) + .then(srcdoc => { + return createElement("iframe", {srcdoc: srcdoc}, document.body, true); + }); + } else if (currentSourceContext.sourceContextType === 'iframe') { + promise = Promise.resolve( + createElement("iframe", {src: frameUrl}, document.body, true)); + } + + return promise + .then(iframe => { + return iframe.eventPromise + .then(() => { + const promise = bindEvents2( + window, "message", iframe, "error", window, "error"); + iframe.contentWindow.postMessage( + {subresource: subresource, + sourceContextList: sourceContextList}, + "*"); + return promise; + }) + .then(event => { + if (event.data.error) + return Promise.reject(event.data.error); + return event.data; + }); + }); +} + // SanityChecker does nothing in release mode. See sanity-checker.js for debug // mode. function SanityChecker() {} diff --git a/tests/wpt/web-platform-tests/common/security-features/scope/document.py b/tests/wpt/web-platform-tests/common/security-features/scope/document.py new file mode 100644 index 00000000000..3fc61a1e7ba --- /dev/null +++ b/tests/wpt/web-platform-tests/common/security-features/scope/document.py @@ -0,0 +1,35 @@ +import os, sys, json + +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +import util + + +def main(request, response): + policyDeliveries = json.loads(request.GET.first("policyDeliveries", "[]")) + maybe_additional_headers = {} + meta = '' + error = '' + for delivery in policyDeliveries: + if delivery['deliveryType'] == 'meta': + if delivery['key'] == 'referrerPolicy': + meta += '' % delivery['value'] + else: + error = 'invalid delivery key' + elif delivery['deliveryType'] == 'http-rp': + if delivery['key'] == 'referrerPolicy': + maybe_additional_headers['Referrer-Policy'] = delivery['value'] + else: + error = 'invalid delivery key' + else: + error = 'invalid deliveryType' + + handler = lambda: util.get_template("document.html.template") % ({ + "meta": meta, + "error": error + }) + util.respond( + request, + response, + payload_generator=handler, + content_type="text/html", + maybe_additional_headers=maybe_additional_headers) diff --git a/tests/wpt/web-platform-tests/common/security-features/scope/template/document.html.template b/tests/wpt/web-platform-tests/common/security-features/scope/template/document.html.template new file mode 100644 index 00000000000..feccb69e9de --- /dev/null +++ b/tests/wpt/web-platform-tests/common/security-features/scope/template/document.html.template @@ -0,0 +1,30 @@ + + + + %(meta)s + + + + diff --git a/tests/wpt/web-platform-tests/common/security-features/scope/util.py b/tests/wpt/web-platform-tests/common/security-features/scope/util.py new file mode 100644 index 00000000000..42f8326b36a --- /dev/null +++ b/tests/wpt/web-platform-tests/common/security-features/scope/util.py @@ -0,0 +1,42 @@ +import os + + +def get_template(template_basename): + script_directory = os.path.dirname(os.path.abspath(__file__)) + template_directory = os.path.abspath( + os.path.join(script_directory, "template")) + template_filename = os.path.join(template_directory, template_basename) + + with open(template_filename, "r") as f: + return f.read() + + +def __noop(request, response): + return "" + + +def respond(request, + response, + status_code=200, + content_type="text/html", + payload_generator=__noop, + cache_control="no-cache; must-revalidate", + access_control_allow_origin="*", + maybe_additional_headers=None): + response.add_required_headers = False + response.writer.write_status(status_code) + + if access_control_allow_origin != None: + response.writer.write_header("access-control-allow-origin", + access_control_allow_origin) + response.writer.write_header("content-type", content_type) + response.writer.write_header("cache-control", cache_control) + + additional_headers = maybe_additional_headers or {} + for header, value in additional_headers.items(): + response.writer.write_header(header, value) + + response.writer.end_headers() + + payload = payload_generator() + response.writer.write(payload) diff --git a/tests/wpt/web-platform-tests/common/security-features/tools/generate.py b/tests/wpt/web-platform-tests/common/security-features/tools/generate.py new file mode 100644 index 00000000000..50c3a2c250c --- /dev/null +++ b/tests/wpt/web-platform-tests/common/security-features/tools/generate.py @@ -0,0 +1,189 @@ +from __future__ import print_function + +import copy +import os, sys, json +import spec_validator +import argparse +import util + + +def expand_pattern(expansion_pattern, test_expansion_schema): + expansion = {} + for artifact_key in expansion_pattern: + artifact_value = expansion_pattern[artifact_key] + if artifact_value == '*': + expansion[artifact_key] = test_expansion_schema[artifact_key] + elif isinstance(artifact_value, list): + expansion[artifact_key] = artifact_value + elif isinstance(artifact_value, dict): + # Flattened expansion. + expansion[artifact_key] = [] + values_dict = expand_pattern(artifact_value, + test_expansion_schema[artifact_key]) + for sub_key in values_dict.keys(): + expansion[artifact_key] += values_dict[sub_key] + else: + expansion[artifact_key] = [artifact_value] + + return expansion + + +def permute_expansion(expansion, artifact_order, selection = {}, artifact_index = 0): + assert isinstance(artifact_order, list), "artifact_order should be a list" + + if artifact_index >= len(artifact_order): + yield selection + return + + artifact_key = artifact_order[artifact_index] + + for artifact_value in expansion[artifact_key]: + selection[artifact_key] = artifact_value + for next_selection in permute_expansion(expansion, + artifact_order, + selection, + artifact_index + 1): + yield next_selection + + +def generate_selection(config, selection, spec, test_html_template_basename): + # TODO: Refactor out this referrer-policy-specific part. + if 'referrer_policy' in spec: + # Oddball: it can be None, so in JS it's null. + selection['referrer_policy'] = spec['referrer_policy'] + + test_parameters = json.dumps(selection, indent=2, separators=(',', ':')) + # Adjust the template for the test invoking JS. Indent it to look nice. + indent = "\n" + " " * 8 + test_parameters = test_parameters.replace("\n", indent) + + selection['test_js'] = ''' + %s( + %s, + document.querySelector("meta[name=assert]").content, + new SanityChecker() + ).start(); + ''' % (config.test_case_name, test_parameters) + + selection['spec_name'] = spec['name'] + selection['test_page_title'] = config.test_page_title_template % spec['title'] + selection['spec_description'] = spec['description'] + selection['spec_specification_url'] = spec['specification_url'] + selection['helper_js'] = config.helper_js + selection['sanity_checker_js'] = config.sanity_checker_js + selection['spec_json_js'] = config.spec_json_js + + test_filename = os.path.join(config.spec_directory, config.test_file_path_pattern % selection) + test_headers_filename = test_filename + ".headers" + test_directory = os.path.dirname(test_filename) + + test_html_template = util.get_template(test_html_template_basename) + disclaimer_template = util.get_template('disclaimer.template') + + html_template_filename = os.path.join(util.template_directory, + test_html_template_basename) + generated_disclaimer = disclaimer_template \ + % {'generating_script_filename': os.path.relpath(__file__, + util.test_root_directory), + 'html_template_filename': os.path.relpath(html_template_filename, + util.test_root_directory)} + + # Adjust the template for the test invoking JS. Indent it to look nice. + selection['generated_disclaimer'] = generated_disclaimer.rstrip() + selection['test_description'] = config.test_description_template % selection + selection['test_description'] = \ + selection['test_description'].rstrip().replace("\n", "\n" + " " * 33) + + # Directory for the test files. + try: + os.makedirs(test_directory) + except: + pass + + delivery = config.handleDelivery(selection, spec) + + if len(delivery['headers']) > 0: + with open(test_headers_filename, "w") as f: + for header in delivery['headers']: + f.write(header) + f.write('\n') + + selection['meta_delivery_method'] = delivery['meta'] + # Obey the lint and pretty format. + if len(selection['meta_delivery_method']) > 0: + selection['meta_delivery_method'] = "\n " + \ + selection['meta_delivery_method'] + + # Write out the generated HTML file. + util.write_file(test_filename, test_html_template % selection) + + +def generate_test_source_files(config, spec_json, target): + test_expansion_schema = spec_json['test_expansion_schema'] + specification = spec_json['specification'] + + spec_json_js_template = util.get_template('spec_json.js.template') + generated_spec_json_filename = os.path.join(config.spec_directory, "spec_json.js") + util.write_file(generated_spec_json_filename, + spec_json_js_template % {'spec_json': json.dumps(spec_json)}) + + # Choose a debug/release template depending on the target. + html_template = "test.%s.html.template" % target + + artifact_order = test_expansion_schema.keys() + ['name'] + artifact_order.remove('expansion') + + # Create list of excluded tests. + exclusion_dict = {} + for excluded_pattern in spec_json['excluded_tests']: + excluded_expansion = \ + expand_pattern(excluded_pattern, test_expansion_schema) + for excluded_selection in permute_expansion(excluded_expansion, + artifact_order): + excluded_selection_path = config.selection_pattern % excluded_selection + exclusion_dict[excluded_selection_path] = True + + for spec in specification: + # Used to make entries with expansion="override" override preceding + # entries with the same |selection_path|. + output_dict = {} + + for expansion_pattern in spec['test_expansion']: + expansion = expand_pattern(expansion_pattern, test_expansion_schema) + for selection in permute_expansion(expansion, artifact_order): + selection_path = config.selection_pattern % selection + if not selection_path in exclusion_dict: + if selection_path in output_dict: + if expansion_pattern['expansion'] != 'override': + print("Error: %s's expansion is default but overrides %s" % (selection['name'], output_dict[selection_path]['name'])) + sys.exit(1) + output_dict[selection_path] = copy.deepcopy(selection) + else: + print('Excluding selection:', selection_path) + + for selection_path in output_dict: + selection = output_dict[selection_path] + generate_selection(config, + selection, + spec, + html_template) + + +def main(config): + parser = argparse.ArgumentParser(description='Test suite generator utility') + parser.add_argument('-t', '--target', type = str, + choices = ("release", "debug"), default = "release", + help = 'Sets the appropriate template for generating tests') + parser.add_argument('-s', '--spec', type = str, default = None, + help = 'Specify a file used for describing and generating the tests') + # TODO(kristijanburnik): Add option for the spec_json file. + args = parser.parse_args() + + if args.spec: + config.spec_directory = args.spec + + spec_filename = os.path.join(config.spec_directory, "spec.src.json") + spec_json = util.load_spec_json(spec_filename) + spec_validator.assert_valid_spec_json(spec_json) + + generate_test_source_files(config, spec_json, args.target) diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/disclaimer.template b/tests/wpt/web-platform-tests/common/security-features/tools/template/disclaimer.template similarity index 100% rename from tests/wpt/web-platform-tests/mixed-content/generic/template/disclaimer.template rename to tests/wpt/web-platform-tests/common/security-features/tools/template/disclaimer.template diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/spec_json.js.template b/tests/wpt/web-platform-tests/common/security-features/tools/template/spec_json.js.template similarity index 100% rename from tests/wpt/web-platform-tests/mixed-content/generic/template/spec_json.js.template rename to tests/wpt/web-platform-tests/common/security-features/tools/template/spec_json.js.template diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test.release.html.template b/tests/wpt/web-platform-tests/common/security-features/tools/template/test.debug.html.template similarity index 50% rename from tests/wpt/web-platform-tests/referrer-policy/generic/template/test.release.html.template rename to tests/wpt/web-platform-tests/common/security-features/tools/template/test.debug.html.template index e55a50bdc41..7d4a9f12664 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test.release.html.template +++ b/tests/wpt/web-platform-tests/common/security-features/tools/template/test.debug.html.template @@ -2,15 +2,20 @@ %(generated_disclaimer)s - Referrer-Policy: %(spec_title)s - %(meta_delivery_method)s + %(test_page_title)s + + - + %(meta_delivery_method)s - + + + + + diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.release.html.template b/tests/wpt/web-platform-tests/common/security-features/tools/template/test.release.html.template similarity index 73% rename from tests/wpt/web-platform-tests/mixed-content/generic/template/test.release.html.template rename to tests/wpt/web-platform-tests/common/security-features/tools/template/test.release.html.template index 188e32fde4b..091f59be90d 100644 --- a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.release.html.template +++ b/tests/wpt/web-platform-tests/common/security-features/tools/template/test.release.html.template @@ -2,16 +2,16 @@ %(generated_disclaimer)s - Mixed-Content: %(spec_title)s + %(test_page_title)s - %(meta_opt_in)s + %(meta_delivery_method)s - + diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/tools/common_paths.py b/tests/wpt/web-platform-tests/common/security-features/tools/util.py similarity index 60% rename from tests/wpt/web-platform-tests/referrer-policy/generic/tools/common_paths.py rename to tests/wpt/web-platform-tests/common/security-features/tools/util.py index 1066fb5bb23..77b89769ca2 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/tools/common_paths.py +++ b/tests/wpt/web-platform-tests/common/security-features/tools/util.py @@ -3,27 +3,11 @@ from __future__ import print_function import os, sys, json, re script_directory = os.path.dirname(os.path.abspath(__file__)) -generic_directory = os.path.abspath(os.path.join(script_directory, '..')) - template_directory = os.path.abspath(os.path.join(script_directory, - '..', 'template')) -spec_directory = os.path.abspath(os.path.join(script_directory, '..', '..')) test_root_directory = os.path.abspath(os.path.join(script_directory, '..', '..', '..')) -spec_filename = os.path.join(spec_directory, "spec.src.json") -generated_spec_json_filename = os.path.join(spec_directory, "spec_json.js") - -selection_pattern = '%(delivery_method)s/' + \ - '%(origin)s/' + \ - '%(source_protocol)s-%(target_protocol)s/' + \ - '%(subresource)s/' + \ - '%(redirection)s/' - -test_file_path_pattern = '%(spec_name)s/' + selection_pattern + \ - '%(name)s.%(source_protocol)s.html' - def get_template(basename): with open(os.path.join(template_directory, basename), "r") as f: @@ -42,10 +26,7 @@ def read_nth_line(fp, line_number): return line -def load_spec_json(path_to_spec = None): - if path_to_spec is None: - path_to_spec = spec_filename - +def load_spec_json(path_to_spec): re_error_location = re.compile('line ([0-9]+) column ([0-9]+)') with open(path_to_spec, "r") as f: try: diff --git a/tests/wpt/web-platform-tests/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html new file mode 100644 index 00000000000..426b47537bf --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/floats-clear/adjoining-float-nested-forced-clearance.html @@ -0,0 +1,15 @@ + + + +

Test passes if there is a filled green square and no red.

+
+
+
+
+
+
+
+
+
+
+ diff --git a/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184-ref.xht deleted file mode 100644 index a3a002927a5..00000000000 --- a/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184-ref.xht +++ /dev/null @@ -1,18 +0,0 @@ - - - - CSS Reference: Green 'canadian syllabics chi sign' punctuation character - - - -

Test passes if the "T" and surrounding punctuation below are green.

-
᙭T᙭est
- - diff --git a/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184.xht b/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184.xht deleted file mode 100644 index ba4755c1ba8..00000000000 --- a/tests/wpt/web-platform-tests/css/CSS2/selectors/first-letter-punctuation-184.xht +++ /dev/null @@ -1,23 +0,0 @@ - - - - CSS Test: First-letter with the 'canadian syllabics chi sign' punctuation character - - - - - - - - -

Test passes if the "T" and surrounding punctuation below are green.

-
᙭T᙭est
- - diff --git a/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016-ref.xht b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016-ref.xht new file mode 100644 index 00000000000..2ec1fb0447c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016-ref.xht @@ -0,0 +1,24 @@ + + + + CSS Test Reference + + + +

Test passes if there is a blue box below.

+
+ +
+ + diff --git a/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016.xht b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016.xht new file mode 100644 index 00000000000..89ba125e511 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-016.xht @@ -0,0 +1,30 @@ + + + + CSS Test: Outline applied to replaced element with display table-column-group + + + + + + + + +

Test passes if there is a blue box below.

+
+ +
+ + diff --git a/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-017.xht b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-017.xht new file mode 100644 index 00000000000..d209d658650 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/CSS2/ui/outline-applies-to-017.xht @@ -0,0 +1,30 @@ + + + + CSS Test: Outline applied to replaced element with display table-column + + + + + + + + +

Test passes if there is a blue box below.

+
+ +
+ + diff --git a/tests/wpt/web-platform-tests/css/css-animations/Document-getAnimations.tentative.html b/tests/wpt/web-platform-tests/css/css-animations/Document-getAnimations.tentative.html index c11b0a90876..175acf84246 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/Document-getAnimations.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-animations/Document-getAnimations.tentative.html @@ -18,12 +18,6 @@ @keyframes animRight { to { right: 100px } } -::before { - content: '' -} -::after { - content: '' -}
diff --git a/tests/wpt/web-platform-tests/css/css-animations/animationevent-marker-pseudoelement.html b/tests/wpt/web-platform-tests/css/css-animations/animationevent-marker-pseudoelement.html new file mode 100644 index 00000000000..90c7b86ab9d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-animations/animationevent-marker-pseudoelement.html @@ -0,0 +1,35 @@ + + +CSS Animations Test: AnimationEvent pseudoElement + + + + + +
+ + diff --git a/tests/wpt/web-platform-tests/css/css-animations/event-order.tentative.html b/tests/wpt/web-platform-tests/css/css-animations/event-order.tentative.html index 93d452ace07..f4f9e29a3c8 100644 --- a/tests/wpt/web-platform-tests/css/css-animations/event-order.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-animations/event-order.tentative.html @@ -6,10 +6,14 @@
diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1-ref.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1-ref.html new file mode 100644 index 00000000000..df3aaf33740 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1-ref.html @@ -0,0 +1,48 @@ + + + + + Reference: CSS display:contents; in Shadow DOM + + + + +
X 1 c
+
a 2 c
+
a 3 Y
+
X 4 Y
+
a 5 Y
+
X 6 c
+
a 7 c
+
a 8 Y
+
X 9 Y
+
a A Y
+
a 1 2 B
+
A a 1 2 c B
+
A a 1 a 2 ca 3 c B
+
A a 1 c a 2 c B
+
X a 1 c a 2 c B
+
1a 2 c
+
a 1 c2
+
Abc
+
Abc
+
b cd
+
a b
+
OneTwo
+
OneTwo
+
OneTwo
+
OneTwo
+ OneTwoThree +
+ V + + diff --git a/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1.html b/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1.html new file mode 100644 index 00000000000..1f391163da0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-display/display-contents-shadow-dom-1.html @@ -0,0 +1,221 @@ + + + + + + CSS Test: CSS display:contents; in Shadow DOM + + + + + + +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+ +
+
TwoOne
+
TwoOne
+
TwoOne
+
TwoOne
+
TwoOne
Three +
S
+
T
+
U
+
V
+ + + + diff --git a/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored-ref.html b/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored-ref.html new file mode 100644 index 00000000000..70e2d50cd83 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored-ref.html @@ -0,0 +1,20 @@ + + + + +CSS Reference: quoted font-family names must not be treated as generics + + + +

The following lines should be rendered with the generic font-families as named:

+
serif
+
sans-serif
+
monospace
+
serif
+
sans-serif
+
monospace
diff --git a/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored.html b/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored.html new file mode 100644 index 00000000000..4207ad5cf43 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-fonts/quoted-generic-ignored.html @@ -0,0 +1,29 @@ + + + + +CSS Test: quoted font-family names must not be treated as generics + + + + + + + +

The following lines should be rendered with the generic font-families as named:

+
serif
+
sans-serif
+
monospace
+
serif
+
sans-serif
+
monospace
diff --git a/tests/wpt/web-platform-tests/css/css-grid/grid-layout-properties.html b/tests/wpt/web-platform-tests/css/css-grid/grid-layout-properties.html index fcc2ce3b88d..b1b0bd87d49 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/grid-layout-properties.html +++ b/tests/wpt/web-platform-tests/css/css-grid/grid-layout-properties.html @@ -142,8 +142,8 @@ initial: 'row', 'row': ['row', 'row'], 'column': ['column', 'column'], - 'dense': ['dense', 'row dense'], - 'row dense': ['row dense', 'row dense'], + 'dense': ['dense', 'dense'], + 'row dense': ['dense', 'dense'], 'column dense': ['column dense', 'column dense'], 'reset': ['row', 'row'], }, diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-computed.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-computed.html index 7484f62ddb6..a91593efc1b 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-computed.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-computed.html @@ -13,13 +13,13 @@ diff --git a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-valid.html b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-valid.html index 4270a3df933..7db8b189a28 100644 --- a/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-valid.html +++ b/tests/wpt/web-platform-tests/css/css-grid/parsing/grid-auto-flow-valid.html @@ -14,11 +14,11 @@ diff --git a/tests/wpt/web-platform-tests/css/css-lists/li-counter-increment-computed-style.html b/tests/wpt/web-platform-tests/css/css-lists/li-counter-increment-computed-style.html new file mode 100644 index 00000000000..0fae6e3f603 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-lists/li-counter-increment-computed-style.html @@ -0,0 +1,20 @@ + +Magic list-item counter-increment shouldn't be visible from computed style + + + + + + +
  • No explicit counter. +
  • Inherited +
  • Value attribute. +
  • Explicit list-item counter. +
  • Explicit and redundant list-item counter. +
  • Other counter. + diff --git a/tests/wpt/web-platform-tests/css/css-lists/list-item-definition-ref.html b/tests/wpt/web-platform-tests/css/css-lists/list-item-definition-ref.html index 72a4c90f4ad..2d49bc4cb97 100644 --- a/tests/wpt/web-platform-tests/css/css-lists/list-item-definition-ref.html +++ b/tests/wpt/web-platform-tests/css/css-lists/list-item-definition-ref.html @@ -8,4 +8,7 @@ Foo
  • Foo
  • Bar +
    Before
    WithBefore
    +
    WithAfter
    After
    +
  • Baz diff --git a/tests/wpt/web-platform-tests/css/css-lists/list-item-definition.html b/tests/wpt/web-platform-tests/css/css-lists/list-item-definition.html index edae4b96bd9..14e351f9ecd 100644 --- a/tests/wpt/web-platform-tests/css/css-lists/list-item-definition.html +++ b/tests/wpt/web-platform-tests/css/css-lists/list-item-definition.html @@ -1,15 +1,27 @@ -The definition of what a list-item is only depends on the display value, and doesn't account for pseudo-elements +The definition of what a list-item is only depends on the display value + - +
      Foo
      Foo
    1. Bar +
    2. WithBefore +
    3. WithAfter +
    4. Baz
    diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001-ref.html new file mode 100644 index 00000000000..e95210fed25 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001-ref.html @@ -0,0 +1,28 @@ + + + + CSS Multi-column Layout Test Reference: Test a multi-column container with percentage height children + + + + + +
    +
    block1
    +
    spanner
    +
    block2
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001.html new file mode 100644 index 00000000000..55bdef42788 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-children-height-001.html @@ -0,0 +1,33 @@ + + + + CSS Multi-column Layout Test: Test a multi-column container with percentage height children + + + + + + + + +
    +
    block1
    +
    spanner
    +
    block2
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009-ref.html new file mode 100644 index 00000000000..a3db09f0781 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009-ref.html @@ -0,0 +1,36 @@ + + + +CSS Reference: ::marker pseudo elements styled with 'content' property + + + +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
      +
    4. +
    +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
    4. +
    +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
    4. +
    5. ABC
      D
    6. +
    +
      +
    1. ABC
      D
    2. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009.html new file mode 100644 index 00000000000..b3627cca755 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-009.html @@ -0,0 +1,38 @@ + + + +CSS Test: ::marker pseudo elements styled with 'content' property + + + + + +
      +
    1. C
      D
    2. +
    3. C
      D
      +
    4. +
    +
      +
    1. C
      D
    2. +
    3. C
      D
    4. +
    +
      +
    1. C
      D
    2. +
    3. C
      D
    4. +
    5. C
      D
    6. +
    +
      +
    1. C
      D
    2. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010-ref.html new file mode 100644 index 00000000000..5bee9bb1794 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010-ref.html @@ -0,0 +1,26 @@ + + + +CSS Reference: ::marker pseudo elements styled with 'content' property + + + +
      +
    1. 1.C
      D
    2. +
    3. 2.C
      D
      +
    4. +
    +
      +
    1. 1.C
      D
    2. +
    3. 2.C
      D
    4. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010.html new file mode 100644 index 00000000000..ccd377d523d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-010.html @@ -0,0 +1,26 @@ + + + +CSS Test: ::marker pseudo elements styled with 'content' property + + + + + +
      +
    1. C
      D
    2. +
    3. C
      D
      +
    4. +
    +
      +
    1. C
      D
    2. +
    3. C
      D
    4. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011-ref.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011-ref.html new file mode 100644 index 00000000000..62a64a1e5e1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011-ref.html @@ -0,0 +1,36 @@ + + + +CSS Reference: ::marker pseudo elements styled with 'content' property + + + +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
      +
    4. +
    +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
    4. +
    +
      +
    1. ABC
      D
    2. +
    3. ABC
      D
    4. +
    5. ABC
      D
    6. +
    +
      +
    1. ABC
      D
    2. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011.html b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011.html new file mode 100644 index 00000000000..0cc20b0cdcd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-pseudo/marker-content-011.html @@ -0,0 +1,38 @@ + + + +CSS Test: ::marker pseudo elements styled with 'content' property + + + + + +
      +
    1. C
      D
    2. +
    3. C
      D
      +
    4. +
    +
      +
    1. C
      D
    2. +
    3. C
      D
    4. +
    +
      +
    1. C
      D
    2. +
    3. C
      D
    4. +
    5. C
      D
    6. +
    +
      +
    1. C
      D
    2. +
    + diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/inheritance.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/inheritance.html index b380cb400f2..2569cf3d8bf 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/inheritance.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/inheritance.html @@ -33,7 +33,7 @@ assert_not_inherited('scroll-padding-right', 'auto', '10px'); assert_not_inherited('scroll-padding-top', 'auto', '10px'); assert_not_inherited('scroll-snap-align', 'none', 'start end'); assert_not_inherited('scroll-snap-stop', 'normal', 'always'); -assert_not_inherited('scroll-snap-type', 'none', 'inline proximity'); +assert_not_inherited('scroll-snap-type', 'none', 'inline'); diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/parsing/scroll-snap-type-valid.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/parsing/scroll-snap-type-valid.html index fde2211f925..59a0cb9ab20 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/parsing/scroll-snap-type-valid.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/parsing/scroll-snap-type-valid.html @@ -20,7 +20,7 @@ test_valid_value("scroll-snap-type", "inline"); test_valid_value("scroll-snap-type", "both"); test_valid_value("scroll-snap-type", "y mandatory"); -test_valid_value("scroll-snap-type", "inline proximity"); +test_valid_value("scroll-snap-type", "inline proximity", "inline"); // The shortest serialization is preferable diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-padding.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-padding.html new file mode 100644 index 00000000000..0c637ed6db2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-padding.html @@ -0,0 +1,49 @@ + + + + + + +
    +
    +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-snap-type-on-root-element.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-snap-type-on-root-element.html new file mode 100644 index 00000000000..c2c413d04bd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scroll-snap-type-on-root-element.html @@ -0,0 +1,42 @@ + + + + + + +
    + diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html index fba38cb703b..48bfb51c2d9 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/scrollTo-scrollBy-snaps.html @@ -3,7 +3,7 @@ +
    +
    +
    +
    + diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html index 82274344526..3e822db02e6 100644 --- a/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/snap-to-visible-areas.html @@ -40,12 +40,20 @@ div { top: 800px; } +#right-bottom { + left: 1800px; + top: 1800px; + scroll-margin-top: 1000px; + scroll-margin-left: 1000px; +} +
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-scroll-snap/unreachable-snap-positions.html b/tests/wpt/web-platform-tests/css/css-scroll-snap/unreachable-snap-positions.html new file mode 100644 index 00000000000..ca4f6033cec --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-scroll-snap/unreachable-snap-positions.html @@ -0,0 +1,53 @@ + + + + + + +
    +
    +
    +
    +
    + + diff --git a/tests/wpt/web-platform-tests/css/css-shadow-parts/multiple-parts.html b/tests/wpt/web-platform-tests/css/css-shadow-parts/multiple-parts.html new file mode 100644 index 00000000000..de02a26e164 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-shadow-parts/multiple-parts.html @@ -0,0 +1,44 @@ + + + + CSS Shadow Parts - Multiple parts + + + + + + + + + + + + The following text should match its stated colour: + + + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-015.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-015.html new file mode 100644 index 00000000000..aaa1c2ba87b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-015.html @@ -0,0 +1,16 @@ + + + +CSS Text — line breaking at element boundaries + + + + + + +The word "unbroken" below should not be broken: +
    unbroken
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-016.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-016.html new file mode 100644 index 00000000000..c600504b4c2 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-016.html @@ -0,0 +1,17 @@ + + + +CSS Text — line breaking at element boundaries + + + + + + +The word "unbroken" below should not be broken: +
    unbroabsoluteken
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-017.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-017.html new file mode 100644 index 00000000000..36af931b1dc --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/line-breaking-017.html @@ -0,0 +1,17 @@ + + + +CSS Text — line breaking at element boundaries + + + + + + +The word "unbroken" below should not be broken: +
    unbrofloatken
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-015-ref.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-015-ref.html new file mode 100644 index 00000000000..2837ce0cd7c --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-015-ref.html @@ -0,0 +1,13 @@ + + + +CSS Text — reference file for line-breaking test + + + +The word "unbroken" below should not be broken: +
    unbroken
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-016-ref.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-016-ref.html new file mode 100644 index 00000000000..e4d30e01158 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-016-ref.html @@ -0,0 +1,14 @@ + + + +CSS Text — reference file for line-breaking test + + + +The word "unbroken" below should not be broken: +
    unbrokenabsolute
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-017-ref.html b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-017-ref.html new file mode 100644 index 00000000000..6f94b129d29 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/line-breaking/reference/line-breaking-017-ref.html @@ -0,0 +1,13 @@ + + + +CSS Text — reference file for line-breaking test + + + +The word "unbroken" below should not be broken: +
    unbroken
    float
    + + diff --git a/tests/wpt/web-platform-tests/css/css-text/parsing/text-transform-valid.html b/tests/wpt/web-platform-tests/css/css-text/parsing/text-transform-valid.html index a40166c37ef..fead45c8b8e 100644 --- a/tests/wpt/web-platform-tests/css/css-text/parsing/text-transform-valid.html +++ b/tests/wpt/web-platform-tests/css/css-text/parsing/text-transform-valid.html @@ -22,16 +22,20 @@ test_valid_value("text-transform", "full-size-kana"); test_valid_value("text-transform", "capitalize full-width"); test_valid_value("text-transform", "uppercase full-size-kana"); test_valid_value("text-transform", "full-width full-size-kana"); -test_valid_value("text-transform", "full-width lowercase"); -test_valid_value("text-transform", "full-size-kana capitalize"); -test_valid_value("text-transform", "full-size-kana full-width"); + +// serialization canonicalizes the order of values: https://drafts.csswg.org/cssom/#serialize-a-css-value +test_valid_value("text-transform", "full-width lowercase", "lowercase full-width"); +test_valid_value("text-transform", "full-size-kana capitalize", "capitalize full-size-kana"); +test_valid_value("text-transform", "full-size-kana full-width", "full-width full-size-kana"); test_valid_value("text-transform", "capitalize full-width full-size-kana"); -test_valid_value("text-transform", "full-width full-size-kana uppercase"); -test_valid_value("text-transform", "full-size-kana lowercase full-width"); -test_valid_value("text-transform", "lowercase full-size-kana full-width"); -test_valid_value("text-transform", "full-width uppercase full-size-kana"); -test_valid_value("text-transform", "full-size-kana full-width capitalize"); + +// serialization canonicalizes the order of values +test_valid_value("text-transform", "full-width full-size-kana uppercase", "uppercase full-width full-size-kana"); +test_valid_value("text-transform", "full-size-kana lowercase full-width", "lowercase full-width full-size-kana"); +test_valid_value("text-transform", "lowercase full-size-kana full-width", "lowercase full-width full-size-kana"); +test_valid_value("text-transform", "full-width uppercase full-size-kana", "uppercase full-width full-size-kana"); +test_valid_value("text-transform", "full-size-kana full-width capitalize", "capitalize full-width full-size-kana"); diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-multiple-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-multiple-001-ref.html new file mode 100644 index 00000000000..694ae87877d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/reference/text-transform-multiple-001-ref.html @@ -0,0 +1,22 @@ + + + +text-transform with multiple values + +

    Each pair of lines should look identical:

    +
    +
    HELLO TRANSFORMED WORLD
    +
    HELLO TRANSFORMED WORLD
    +
    +
    hello transformed world
    +
    hello transformed world
    +
    +
    HELLO Transformed World
    +
    HELLO Transformed World
    +
    +
    KATAKANA: アイウエオカクケシスツトヌ
    +
    KATAKANA: アイウエオカクケシスツトヌ
    +
    +
    hiragana: あいうえおかけつやゆよわ
    +
    hiragana: あいうえおかけつやゆよわ
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-multiple-001.html b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-multiple-001.html new file mode 100644 index 00000000000..946aa9c93db --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-text/text-transform/text-transform-multiple-001.html @@ -0,0 +1,26 @@ + + + +text-transform with multiple values + + + + + +

    Each pair of lines should look identical:

    +
    +
    HELLO Transformed world
    +
    HELLO TRANSFORMED WORLD
    +
    +
    HELLO Transformed world
    +
    hello transformed world
    +
    +
    HELLO Transformed world
    +
    HELLO Transformed World
    +
    +
    Katakana: ァィゥェォヵㇰヶㇱㇲッㇳㇴ
    +
    KATAKANA: アイウエオカクケシスツトヌ
    +
    +
    Hiragana: ぁぃぅぇぉゕゖっゃゅょゎ
    +
    hiragana: あいうえおかけつやゆよわ
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html index 4e6e9efa7e6..9fdcdb6d2d8 100644 --- a/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html +++ b/tests/wpt/web-platform-tests/css/css-text/white-space/break-spaces-008.html @@ -8,7 +8,7 @@ - +

    Test passes if there is a filled green square and no red.

    -
    XXXX
    XXXX
    XXXX
    XXXX
    +
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX XX
    diff --git a/tests/wpt/web-platform-tests/css/css-transitions/Document-getAnimations.tentative.html b/tests/wpt/web-platform-tests/css/css-transitions/Document-getAnimations.tentative.html index bffc05f205f..98b91e04ee9 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/Document-getAnimations.tentative.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/Document-getAnimations.tentative.html @@ -36,47 +36,88 @@ test(t => { }, 'getAnimations for CSS Transitions'); test(t => { - addStyle(t, { '.init::after': 'content: ""; width: 0px; ' + - 'transition: all 100s;', - '.init::before': 'content: ""; width: 0px; ' + - 'transition: all 10s;', - '.change::after': 'width: 100px;', - '.change::before': 'width: 100px;' }); - // create two divs with these arrangement: + // Create two divs with the following arrangement: + // // parent + // (::marker,) // ::before, // ::after // | // child - const parent = addDiv(t); + + addStyle(t, { + '.init::after': 'content: ""; width: 0px; transition: all 100s;', + '.init::before': 'content: ""; width: 0px; transition: all 100s;', + '.change::after': 'width: 100px;', + '.change::before': 'width: 100px;', + }); + + const supportsMarkerPseudos = CSS.supports('selector(::marker)'); + if (supportsMarkerPseudos) { + addStyle(t, { + '.init::marker': 'content: ""; color: red; transition: all 100s;', + '.change::marker': 'color: green;', + }); + } + + const parent = addDiv(t, { 'style': 'display: list-item' }); const child = addDiv(t); parent.appendChild(child); parent.style.left = '0px'; - parent.style.transition = 'left 10s'; + parent.style.transition = 'left 100s'; parent.classList.add('init'); child.style.left = '0px'; - child.style.transition = 'left 10s'; + child.style.transition = 'left 100s'; getComputedStyle(parent).left; parent.style.left = '100px'; parent.classList.add('change'); child.style.left = '100px'; - const anims = document.getAnimations(); - assert_equals(anims.length, 4, - 'CSS transition on both pseudo-elements and elements ' + - 'are returned'); - assert_equals(anims[0].effect.target, parent, - 'The animation targeting the parent element comes first'); - assert_equals(anims[1].effect.target.type, '::before', - 'The animation targeting the ::before element comes second'); - assert_equals(anims[2].effect.target.type, '::after', - 'The animation targeting the ::after element comes third'); - assert_equals(anims[3].effect.target, child, - 'The animation targeting the child element comes last'); -}, 'CSS Transitions targetting (pseudo-)elements should have correct order ' + - 'after sorting'); + const expectedTransitions = [ + [parent, undefined], + [parent, '::marker'], + [parent, '::before'], + [parent, '::after'], + [child, undefined], + ]; + if (!supportsMarkerPseudos) { + expectedTransitions.splice(1, 1); + } + + const transitions = document.getAnimations(); + assert_equals( + transitions.length, + expectedTransitions.length, + 'CSS transition on both pseudo-elements and elements are returned' + ); + + for (const [index, expected] of expectedTransitions.entries()) { + const [element, pseudo] = expected; + const actual = transitions[index]; + + if (pseudo) { + assert_equals( + actual.effect.target.element, + element, + `Transition #${index + 1} has expected target` + ); + assert_equals( + actual.effect.target.type, + pseudo, + `Transition #${index + 1} has expected pseudo type` + ); + } else { + assert_equals( + actual.effect.target, + element, + `Transition #${index + 1} has expected target` + ); + } + } +}, 'CSS Transitions targetting (pseudo-)elements should have correct order ' + + 'after sorting'); promise_test(async t => { const div = addDiv(t, { style: 'left: 0px; transition: all 50ms' }); diff --git a/tests/wpt/web-platform-tests/css/css-transitions/README.md b/tests/wpt/web-platform-tests/css/css-transitions/README.md index e44decfea26..f11374e47b1 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/README.md +++ b/tests/wpt/web-platform-tests/css/css-transitions/README.md @@ -56,7 +56,6 @@ the following suites test behavior that is not covered in CSS3 Transitions (as o * `properties-value-003.html` - verify transitionable properties thus far not specified at all * `properties-value-implicit-001.html` - verify behavior for `em` based `` properties when `font-size` is changed * `events-006.html` - expect `TransitionEnd` event to be triggered and `event.pseudoElement` to be set properly -* `before-DOMContentLoaded-001.html` - expect transitions to be performed before DOM is ready * `before-load-001.html` - expect transitions to be performed before document is fully loaded * `hidden-container-001.html` - expect transitions to NOT be performed if they happen within hidden elements * `detached-container-001.html` - expect transitions to NOT be performed if they happen outside of the document diff --git a/tests/wpt/web-platform-tests/css/css-transitions/before-DOMContentLoaded-001.html b/tests/wpt/web-platform-tests/css/css-transitions/before-DOMContentLoaded-001.html deleted file mode 100644 index 8298e81a23c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/before-DOMContentLoaded-001.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - CSS Transitions Test: Transitioning before DOMContentLoaded event - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    Text sample
    -
    -
    -
    - - - - - - - diff --git a/tests/wpt/web-platform-tests/css/css-transitions/before-load-001.html b/tests/wpt/web-platform-tests/css/css-transitions/before-load-001.html index 47045e88434..009260eea43 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/before-load-001.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/before-load-001.html @@ -1,150 +1,46 @@ - - - CSS Transitions Test: Transitioning before load event - - - - + + +CSS Transitions Test: Transitioning before load event + + + + - - + + + - - - - - + + - - - - -
    - -
    -
    -
    Text sample
    -
    -
    -
    + - var isLoad = false; - window.addEventListener('load', function() { - isLoad = true; - }, false); - - window.addEventListener('DOMContentLoaded', function() { - var tests = [ - { - name: "transition height from 10px to 100px", - property: 'height', - flags: {}, - from: {'height': '10px'}, - to: {'height': '100px'} - } - ]; - - // general transition-duration - var duration = '0.5s'; - - runParallelAsyncHarness({ - // array of test data - tests: tests, - // the number of tests to run in parallel - testsPerSlice: 1, - // milliseconds to wait before calling teardown and ending test - duration: parseFloat(duration) * 1000, - // prepare individual test - setup: function(data, options) { - var styles = { - '.fixture': {}, - - '.container': data.parentStyle, - '.container.to': {}, - '.container.how': {}, - - '.transition': data.from, - '.transition.to' : data.to, - '.transition.how' : {transition: 'all ' + duration + ' linear 0s'} - }; - - generalParallelTest.setup(data, options); - generalParallelTest.addStyles(data, options, styles); - }, - // cleanup after individual test - teardown: generalParallelTest.teardown, - // invoked prior to running a slice of tests - sliceStart: function(options, tests) { - // inject styles into document - setStyle(options.styles); - }, - // invoked after running a slice of tests - sliceDone: generalParallelTest.sliceDone, - // test cases, make them as granular as possible - cases: { - // test property values while transitioning - // values.start kicks off a transition - 'values': { - // run actual test, assertions can be used here! - start: function(test, data, options) { - // identify initial and target values - generalParallelTest.getStyle(data); - // make sure values differ, if they don't, the property could most likely not be parsed - assert_not_equals(data.transition.from, data.transition.to, "initial and target values may not match"); - // kick off the transition - generalParallelTest.startTransition(data); - - // make sure we didn't get the target value immediately. - // If we did, there wouldn't be a transition! - var current = data.transition.computedStyle(data.property); - assert_not_equals(current, data.transition.to, "must not be target value after start"); - }, - done: function(test, data, options) { - // make sure the property's value were neither initial nor target while transitioning - test.step(generalParallelTest.assertIntermediateValuesFunc(data, 'transition')); - } - }, - // test TransitionEnd events - 'events': { - done: function(test, data, options) { - // make sure there were no events on parent - test.step(generalParallelTest.assertExpectedEventsFunc(data, 'container', "")); - // make sure we got the event for the tested property only - test.step(generalParallelTest.assertExpectedEventsFunc(data, 'transition', addVendorPrefix(data.property) + ":" + duration)); - - test.step(function() { - assert_false(isLoad, "load may not have happened yet") - }); - } - } - }, - // called once all tests are done - done: generalParallelTest.done - }); - }, false); - - dummy image - + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-001.html b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-001.html new file mode 100644 index 00000000000..026b16877c5 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-001.html @@ -0,0 +1,56 @@ + + + + +CSS Transitions Test: behavior when transition-duration changes while transitioning + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-002.html b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-002.html new file mode 100644 index 00000000000..363be8a9872 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-002.html @@ -0,0 +1,56 @@ + + + + +CSS Transitions Test: behavior when transition-timing-function changes while transitioning + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-003.html b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-003.html new file mode 100644 index 00000000000..8c8f4bb50dd --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition-003.html @@ -0,0 +1,56 @@ + + + + +CSS Transitions Test: behavior when transition-delay changes while transitioning + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition.html b/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition.html deleted file mode 100644 index a7981471a5c..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/changing-while-transition.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - CSS Transitions Test: behavior when transition parameters change while transitioning - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    Text sample
    -
    -
    -
    - - - - - - diff --git a/tests/wpt/web-platform-tests/css/css-transitions/currentcolor-animation-001.html b/tests/wpt/web-platform-tests/css/css-transitions/currentcolor-animation-001.html index 1ffa1a358ca..bcc7991a828 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/currentcolor-animation-001.html +++ b/tests/wpt/web-platform-tests/css/css-transitions/currentcolor-animation-001.html @@ -1,39 +1,52 @@ - + - CSS Variables Allowed Syntax - - - - - - - + +CSS Transitions of currentcolor + + + + + + -
    +
    diff --git a/tests/wpt/web-platform-tests/css/css-transitions/detached-container-001.html b/tests/wpt/web-platform-tests/css/css-transitions/detached-container-001.html deleted file mode 100644 index 545324b0bd7..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/detached-container-001.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - CSS Transitions Test: Not Transitioning within detached element - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    Text sample
    -
    -
    -
    - - - - - - diff --git a/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html b/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html new file mode 100644 index 00000000000..b883ce8d18d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/disconnected-element-001.html @@ -0,0 +1,203 @@ + + + + +CSS Transitions Test: Transitions do not run for a disconnected element + + + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/hidden-container-001.html b/tests/wpt/web-platform-tests/css/css-transitions/hidden-container-001.html deleted file mode 100644 index 567ae61e328..00000000000 --- a/tests/wpt/web-platform-tests/css/css-transitions/hidden-container-001.html +++ /dev/null @@ -1,125 +0,0 @@ - - - - - CSS Transitions Test: Not Transitioning within hidden element - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    Text sample
    -
    -
    -
    - - - - - - diff --git a/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-001.html b/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-001.html new file mode 100644 index 00000000000..10419b94677 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-001.html @@ -0,0 +1,127 @@ + + + + +CSS Transitions Test: Transitions do not run for an element that is not being rendered + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-002.html b/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-002.html new file mode 100644 index 00000000000..f26a0489578 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/non-rendered-element-002.html @@ -0,0 +1,90 @@ + + + + +CSS Transitions Test: Transitions do not run for a pseudo-element that is not being rendered + + + + + + + + +
    + + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/starting-of-transitions-001.html b/tests/wpt/web-platform-tests/css/css-transitions/starting-of-transitions-001.html new file mode 100644 index 00000000000..f80d8134366 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-transitions/starting-of-transitions-001.html @@ -0,0 +1,45 @@ + + + + +CSS Transitions Test: behavior when transition-property changes while transitioning + + + + + + + + + +
    + + + + diff --git a/tests/wpt/web-platform-tests/css/css-transitions/support/helper.js b/tests/wpt/web-platform-tests/css/css-transitions/support/helper.js index aa3efe80122..d5fa61b15ef 100644 --- a/tests/wpt/web-platform-tests/css/css-transitions/support/helper.js +++ b/tests/wpt/web-platform-tests/css/css-transitions/support/helper.js @@ -231,6 +231,7 @@ root.addStyle = (t, rules) => { extraStyle.remove(); }); } + return extraStyle; }; /** diff --git a/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback-ref.html b/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback-ref.html new file mode 100644 index 00000000000..1b4e3b3b6d9 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback-ref.html @@ -0,0 +1,14 @@ + +CSS Test Reference + + + +
    diff --git a/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback.html b/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback.html new file mode 100644 index 00000000000..bb27a61e610 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/css-variables/wide-keyword-fallback.html @@ -0,0 +1,21 @@ + +CSS Test: Wide keyword can be used as a fallback variable value + + + + + + +
    diff --git a/tests/wpt/web-platform-tests/css/cssom-view/matchMedia-display-none-iframe.html b/tests/wpt/web-platform-tests/css/cssom-view/matchMedia-display-none-iframe.html new file mode 100644 index 00000000000..08fcb3c5386 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/matchMedia-display-none-iframe.html @@ -0,0 +1,19 @@ + +CSS Test: matchMedia works on display: none iframes + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom-view/outer-svg.html b/tests/wpt/web-platform-tests/css/cssom-view/outer-svg.html new file mode 100644 index 00000000000..3b062c7548f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/outer-svg.html @@ -0,0 +1,35 @@ + +CSS Tests: client* and scroll* APIs work as expected with outer SVG elements + + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/css/cssom-view/resize-event-on-initial-layout.html b/tests/wpt/web-platform-tests/css/cssom-view/resize-event-on-initial-layout.html new file mode 100644 index 00000000000..dc2f04bcced --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom-view/resize-event-on-initial-layout.html @@ -0,0 +1,18 @@ + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-001.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-001.tentative.html new file mode 100644 index 00000000000..877356f924d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-001.tentative.html @@ -0,0 +1,45 @@ + +<link disabled>, HTMLLinkElement.disabled and CSSStyleSheet.disabled interactions + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-002.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-002.tentative.html new file mode 100644 index 00000000000..9c46f60a621 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-002.tentative.html @@ -0,0 +1,38 @@ + +<link disabled>, HTMLLinkElement.disabled and CSSStyleSheet.disabled interactions (alternate) + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-003.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-003.tentative.html new file mode 100644 index 00000000000..fc86e6ba1f0 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-003.tentative.html @@ -0,0 +1,32 @@ + +<link disabled>'s "explicitly enabled" state persists after getting disconnected from the tree + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-004.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-004.tentative.html new file mode 100644 index 00000000000..7e6c34ee40d --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-004.tentative.html @@ -0,0 +1,40 @@ + +<link disabled>'s "explicitly enabled" state doesn't persist for clones + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-005.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-005.tentative.html new file mode 100644 index 00000000000..0233f8c746e --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-005.tentative.html @@ -0,0 +1,27 @@ + +<link disabled>'s "explicitly enabled" persists across rel changes + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-006.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-006.tentative.html new file mode 100644 index 00000000000..5828e1ce142 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-006.tentative.html @@ -0,0 +1,26 @@ + +<link disabled>'s "explicitly enabled" state isn't magically set from the setter + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-007.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-007.tentative.html new file mode 100644 index 00000000000..451fc3d591f --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-007.tentative.html @@ -0,0 +1,27 @@ + +<link disabled>'s "explicitly enabled" state works when set explicitly back and forth + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate-ref.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate-ref.html new file mode 100644 index 00000000000..5d87bfdaf5b --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate-ref.html @@ -0,0 +1,7 @@ + +CSS Test Reference + + + diff --git a/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html new file mode 100644 index 00000000000..5b020a172b1 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/cssom/HTMLLinkElement-disabled-alternate.tentative.html @@ -0,0 +1,15 @@ + + +CSS Test: alternate stylesheets can be disabled by HTMLLinkElement.disabled if they have the disabled attribute already + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use-ref.html b/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use-ref.html new file mode 100644 index 00000000000..703cc99bb86 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use-ref.html @@ -0,0 +1,13 @@ + +CSS Test reference + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use.html b/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use.html new file mode 100644 index 00000000000..08a038ca8b4 --- /dev/null +++ b/tests/wpt/web-platform-tests/css/selectors/sharing-in-svg-use.html @@ -0,0 +1,25 @@ + +CSS Test: nth-of-type should work in an svg use subtree + + + + + + + + + + + + + + + + diff --git a/tests/wpt/web-platform-tests/editing/data/removeformat.js b/tests/wpt/web-platform-tests/editing/data/removeformat.js index cfc355d8854..db5c0550833 100644 --- a/tests/wpt/web-platform-tests/editing/data/removeformat.js +++ b/tests/wpt/web-platform-tests/editing/data/removeformat.js @@ -75,6 +75,26 @@ var browserTests = [ "[foobarbaz]", [true,true], {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], +["[foobarbaz]", + [["stylewithcss","true"],["removeformat",""]], + "[foobarbaz]", + [true,true], + {"stylewithcss":[false,false,"",false,true,""],"removeformat":[false,false,"",false,false,""]}], +["[foobarbaz]", + [["stylewithcss","false"],["removeformat",""]], + "[foobarbaz]", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], +["[foobarbaz]", + [["stylewithcss","true"],["removeformat",""]], + "[foobarbaz]", + [true,true], + {"stylewithcss":[false,false,"",false,true,""],"removeformat":[false,false,"",false,false,""]}], +["[foobarbaz]", + [["stylewithcss","false"],["removeformat",""]], + "[foobarbaz]", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], ["foob[a]rbaz", [["stylewithcss","true"],["removeformat",""]], "foob[a]rbaz", @@ -85,6 +105,26 @@ var browserTests = [ "foob[a]rbaz", [true,true], {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], +["foob[a]rbaz", + [["stylewithcss","true"],["removeformat",""]], + "foob[a]rbaz", + [true,true], + {"stylewithcss":[false,false,"",false,true,""],"removeformat":[false,false,"",false,false,""]}], +["foob[a]rbaz", + [["stylewithcss","false"],["removeformat",""]], + "foob[a]rbaz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], +["foob[a]rbaz", + [["stylewithcss","true"],["removeformat",""]], + "foob[a]rbaz", + [true,true], + {"stylewithcss":[false,false,"",false,true,""],"removeformat":[false,false,"",false,false,""]}], +["foob[a]rbaz", + [["stylewithcss","false"],["removeformat",""]], + "foob[a]rbaz", + [true,true], + {"stylewithcss":[false,true,"",false,false,""],"removeformat":[false,false,"",false,false,""]}], ["[foobarbaz]", [["stylewithcss","true"],["removeformat",""]], "[foobarbaz]", diff --git a/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html b/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html new file mode 100644 index 00000000000..1fa6dd41a95 --- /dev/null +++ b/tests/wpt/web-platform-tests/element-timing/observe-shadow-image.html @@ -0,0 +1,41 @@ + + +Element Timing: observe image in shadow tree + + + + +
    + diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html index 6844226f2bd..bdef39cde8c 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-report-only.https.html @@ -23,9 +23,9 @@ promise_test(async t => { {types: ['feature-policy-violation']}).observe(); }); try { - await navigator.xr.supportsSessionMode('inline'); + await navigator.xr.supportsSession('inline'); } catch (err) { - // If no XR devices are available, supportsSessionMode() will reject with a + // If no XR devices are available, supportsSession() will reject with a // NotSupportedError, but the report should be generated anyway. assert_equals(err.name, 'NotSupportedError'); } diff --git a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html index 1982ea544c5..3ce61cd13ac 100644 --- a/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html +++ b/tests/wpt/web-platform-tests/feature-policy/reporting/xr-reporting.https.html @@ -22,7 +22,7 @@ promise_test(async (t) => { new ReportingObserver((reports, observer) => resolve([reports, observer]), {types: ['feature-policy-violation']}).observe(); }); - await promise_rejects(t, 'SecurityError', navigator.xr.supportsSessionMode('inline'), + await promise_rejects(t, 'SecurityError', navigator.xr.supportsSession('inline'), "XR device access should not be allowed in this document."); const [reports, observer] = await report; check_report_format(reports, observer); diff --git a/tests/wpt/web-platform-tests/fetch/sec-metadata/img.tentative.https.sub.html b/tests/wpt/web-platform-tests/fetch/sec-metadata/img.tentative.https.sub.html index b9fc1af2f3b..d4d51a55741 100644 --- a/tests/wpt/web-platform-tests/fetch/sec-metadata/img.tentative.https.sub.html +++ b/tests/wpt/web-platform-tests/fetch/sec-metadata/img.tentative.https.sub.html @@ -8,12 +8,10 @@ // These tests reuse the `referrer-policy` infrastructure to load images that // encode their request headers in their pixels. Fun stuff! promise_test(() => - loadImageInWindow( - "https://{{host}}:{{ports[https][0]}}/common/security-features/subresource/image.py", - [], - window) - .then(img => { - headers = decodeImageData(extractImageData(img)).headers; + requestViaImage( + "https://{{host}}:{{ports[https][0]}}/common/security-features/subresource/image.py") + .then(result => { + headers = result.headers; got = { "dest": headers["sec-fetch-dest"], "mode": headers["sec-fetch-mode"], @@ -32,12 +30,10 @@ "Same-origin image"); promise_test(() => - loadImageInWindow( - "https://{{hosts[][www]}}:{{ports[https][0]}}/common/security-features/subresource/image.py", - [], - window) - .then(img => { - headers = decodeImageData(extractImageData(img)).headers; + requestViaImage( + "https://{{hosts[][www]}}:{{ports[https][0]}}/common/security-features/subresource/image.py") + .then(result => { + headers = result.headers; got = { "dest": headers["sec-fetch-dest"], "mode": headers["sec-fetch-mode"], @@ -56,12 +52,10 @@ "Same-site image"); promise_test(() => - loadImageInWindow( - "https://{{hosts[alt][www]}}:{{ports[https][0]}}/common/security-features/subresource/image.py", - [], - window) - .then(img => { - headers = decodeImageData(extractImageData(img)).headers; + requestViaImage( + "https://{{hosts[alt][www]}}:{{ports[https][0]}}/common/security-features/subresource/image.py") + .then(result => { + headers = result.headers; got = { "dest": headers["sec-fetch-dest"], "mode": headers["sec-fetch-mode"], diff --git a/tests/wpt/web-platform-tests/fetch/stale-while-revalidate/fetch-sw.https.tentative.html b/tests/wpt/web-platform-tests/fetch/stale-while-revalidate/fetch-sw.https.tentative.html index 2286739ecf2..f6ece2cfe3e 100644 --- a/tests/wpt/web-platform-tests/fetch/stale-while-revalidate/fetch-sw.https.tentative.html +++ b/tests/wpt/web-platform-tests/fetch/stale-while-revalidate/fetch-sw.https.tentative.html @@ -16,18 +16,24 @@ https://github.com/whatwg/fetch/pull/853 + + + + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener/new_window_same_site.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener/new_window_same_site.html.headers new file mode 100644 index 00000000000..34bd099a302 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener/new_window_same_site.html.headers @@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: same-site diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/postback.sub.html b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/postback.sub.html new file mode 100644 index 00000000000..ee08bab4d55 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/postback.sub.html @@ -0,0 +1,13 @@ + + + + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html new file mode 100644 index 00000000000..7c72f87c3dd --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html @@ -0,0 +1,18 @@ + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html.headers b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html.headers new file mode 100644 index 00000000000..34bd099a302 --- /dev/null +++ b/tests/wpt/web-platform-tests/html/cross-origin-opener/resources/window.sub.html.headers @@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: same-site diff --git a/tests/wpt/web-platform-tests/html/interaction/focus/focus-file-input.html b/tests/wpt/web-platform-tests/html/interaction/focus/focus-file-input.html new file mode 100644 index 00000000000..d3007112ffb --- /dev/null +++ b/tests/wpt/web-platform-tests/html/interaction/focus/focus-file-input.html @@ -0,0 +1,18 @@ + + +HTML Test: file input can be programatically focused before layout + + + + + + + + diff --git a/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html new file mode 100644 index 00000000000..debe014170d --- /dev/null +++ b/tests/wpt/web-platform-tests/html/semantics/embedded-content/the-canvas-element/security.pattern.fillStyle.sub.html @@ -0,0 +1,31 @@ + + +Canvas test: security.pattern.canvas.fillStyle.cross + + + + + + + +

    Setting fillStyle to a pattern of an unclean canvas makes the canvas origin-unclean

    + + diff --git a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra.html b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra.html index e76f5f6ea70..c8ba83bb988 100644 --- a/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra.html +++ b/tests/wpt/web-platform-tests/html/semantics/forms/textfieldselection/selection-start-end-extra.html @@ -16,9 +16,9 @@ assert_equals(el.selectionEnd, 0); el.defaultValue = "123"; assert_equals(el.value.length, 3); - assert_equals(el.selectionStart, 3); - assert_equals(el.selectionEnd, 3); - }, "Setting defaultValue in a textarea should move the cursor to the end"); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); + }, "Setting defaultValue in a textarea should NOT move the cursor to the end"); test(function() { var el = document.createElement("textarea"); @@ -34,34 +34,34 @@ test(function() { var el = document.createElement("textarea"); el.appendChild(document.createTextNode("abcdef")); - assert_equals(el.selectionStart, 6); - assert_equals(el.selectionEnd, 6); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); el.textContent = "abcdef123456"; - assert_equals(el.selectionStart, 12); - assert_equals(el.selectionEnd, 12); - }, "Setting textContent in a textarea should move selection{Start,End} to the end"); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); + }, "Setting textContent in a textarea should NOT move selection{Start,End} to the end"); test(function() { var el = document.createElement("textarea"); el.appendChild(document.createTextNode("abcdef")); - assert_equals(el.selectionStart, 6); - assert_equals(el.selectionEnd, 6); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); el.appendChild(document.createTextNode("123456")); - assert_equals(el.selectionStart, 12); - assert_equals(el.selectionEnd, 12); - }, "Adding children to a textarea should move selection{Start,End} to the end"); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); + }, "Adding children to a textarea should NOT move selection{Start,End} to the end"); test(function() { var el = document.createElement("textarea"); el.appendChild(document.createTextNode("abcdef")); el.appendChild(document.createTextNode("123")); - assert_equals(el.selectionStart, 9); - assert_equals(el.selectionEnd, 9); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); el.removeChild(el.firstChild); - assert_equals(el.selectionStart, 3); - assert_equals(el.selectionEnd, 3); - }, "Removing children from a textarea should update selection{Start,End}"); + assert_equals(el.selectionStart, 0); + assert_equals(el.selectionEnd, 0); + }, "Removing children from a textarea should NOT update selection{Start,End}"); test(function() { var el = document.createElement("textarea"); @@ -104,8 +104,8 @@ var el = document.createElement("textarea"); el.defaultValue = "123"; assert_equals(el.value.length, 3); - assert_equals(el.selectionStart, 3); - assert_equals(el.selectionEnd, 3); + el.selectionStart = 3; + el.selectionEnd = 3; el.value = "12"; assert_equals(el.value.length, 2); assert_equals(el.selectionStart, 2); diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/unclosed-svg-script.html b/tests/wpt/web-platform-tests/html/syntax/parsing/unclosed-svg-script.html index 80f662a3f78..e4048615072 100644 --- a/tests/wpt/web-platform-tests/html/syntax/parsing/unclosed-svg-script.html +++ b/tests/wpt/web-platform-tests/html/syntax/parsing/unclosed-svg-script.html @@ -7,6 +7,7 @@ var scriptWithEndTagRan = false; var scriptWithoutEndTagRan = false; var scriptWithBogusEndTagInsideRan = false; + var scriptWithBreakout = false; @@ -17,6 +18,10 @@ + + + + diff --git a/tests/wpt/web-platform-tests/intersection-observer/resources/scaled-target-subframe.html b/tests/wpt/web-platform-tests/intersection-observer/resources/scaled-target-subframe.html new file mode 100644 index 00000000000..8f6f930e009 --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/resources/scaled-target-subframe.html @@ -0,0 +1,43 @@ + + + +
    target
    + + diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-effects.sub.html b/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-effects.sub.html index edb8f023c09..04b88b404ec 100644 --- a/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-effects.sub.html +++ b/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-effects.sub.html @@ -51,7 +51,7 @@ async_test(function(t) { window.addEventListener("message", event => { if (steps.length) { - t.step_func(steps.shift(), event); + t.step(steps.shift(), t, event); waitForFrame(t, () => { iframe.contentWindow.postMessage("", "*") }); diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub.html b/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub.html index 6f9fa57fb71..b8bbcae3ea8 100644 --- a/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub.html +++ b/tests/wpt/web-platform-tests/intersection-observer/v2/cross-origin-occlusion.sub.html @@ -55,7 +55,7 @@ async_test(function(t) { window.addEventListener("message", event => { if (steps.length) { - t.step_func(steps.shift(), event); + t.step(steps.shift(), t, event); waitForFrame(t, () => { iframe.contentWindow.postMessage("", "*"); }); diff --git a/tests/wpt/web-platform-tests/intersection-observer/v2/scaled-target.html b/tests/wpt/web-platform-tests/intersection-observer/v2/scaled-target.html new file mode 100644 index 00000000000..f48f0792d0f --- /dev/null +++ b/tests/wpt/web-platform-tests/intersection-observer/v2/scaled-target.html @@ -0,0 +1,62 @@ + + + + + + + + +
    + + diff --git a/tests/wpt/web-platform-tests/lint.whitelist b/tests/wpt/web-platform-tests/lint.whitelist index 27f70db20fe..0ec256a7525 100644 --- a/tests/wpt/web-platform-tests/lint.whitelist +++ b/tests/wpt/web-platform-tests/lint.whitelist @@ -142,6 +142,7 @@ SET TIMEOUT: cookies/resources/testharness-helpers.js SET TIMEOUT: common/reftest-wait.js SET TIMEOUT: conformance-checkers/* SET TIMEOUT: content-security-policy/* +SET TIMEOUT: css/css-display/display-contents-shadow-dom-1.html SET TIMEOUT: css/selectors/selector-placeholder-shown-type-change-001.html SET TIMEOUT: css/selectors/selector-placeholder-shown-type-change-002.html SET TIMEOUT: css/selectors/selector-placeholder-shown-type-change-003.html @@ -175,7 +176,7 @@ SET TIMEOUT: html/webappapis/scripting/events/event-handler-processing-algorithm SET TIMEOUT: html/webappapis/scripting/processing-model-2/* SET TIMEOUT: IndexedDB/* SET TIMEOUT: infrastructure/* -SET TIMEOUT: intersection-observer/resources/v2-subframe.html +SET TIMEOUT: intersection-observer/resources/* SET TIMEOUT: intersection-observer/target-in-different-window.html SET TIMEOUT: media-source/mediasource-util.js SET TIMEOUT: media-source/URL-createObjectURL-revoke.html diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/mixed-content-test-case.js b/tests/wpt/web-platform-tests/mixed-content/generic/mixed-content-test-case.js index 6837258c622..221210814c5 100644 --- a/tests/wpt/web-platform-tests/mixed-content/generic/mixed-content-test-case.js +++ b/tests/wpt/web-platform-tests/mixed-content/generic/mixed-content-test-case.js @@ -22,6 +22,17 @@ function getSubresourceOrigin(originType) { const wsPort = getNormalizedPort(parseInt("{{ports[ws][0]}}", 10)); const wssPort = getNormalizedPort(parseInt("{{ports[wss][0]}}", 10)); + /** + @typedef OriginType + @type {string} + + Represents the origin of the subresource request URL. + The keys of `originMap` below are the valid values. + + Note that there can be redirects from the specified origin + (see RedirectionType), and thus the origin of the subresource + response URL might be different from what is specified by OriginType. + */ const originMap = { "same-https": httpsProtocol + "://" + sameOriginHost + httpsPort, "same-http": httpProtocol + "://" + sameOriginHost + httpPort, @@ -63,7 +74,6 @@ function MixedContentTestCase(scenario, description, sanityChecker) { const urls = getRequestURLs(scenario.subresource, originTypeConversion[scenario.origin], scenario.redirection); - const invoker = subresourceMap[scenario.subresource].invoker; const checkResult = _ => { // Send request to check if the key has been torn down. return xhrRequest(urls.assertUrl) @@ -76,11 +86,18 @@ function MixedContentTestCase(scenario, description, sanityChecker) { }; function runTest() { + /** @type {Subresource} */ + const subresource = { + subresourceType: scenario.subresource, + url: urls.testUrl, + policyDeliveries: [] + }; + promise_test(() => { return xhrRequest(urls.announceUrl) // Send out the real resource request. // This should tear down the key if it's not blocked. - .then(_ => invoker(urls.testUrl)) + .then(_ => invokeRequest(subresource, [])) // We check the key state, regardless of whether the main request // succeeded or failed. .then(checkResult, checkResult); diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.debug.html.template b/tests/wpt/web-platform-tests/mixed-content/generic/template/test.debug.html.template deleted file mode 100644 index 77f62ef1da3..00000000000 --- a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.debug.html.template +++ /dev/null @@ -1,31 +0,0 @@ - -%(generated_disclaimer)s - - - Mixed-Content: %(spec_title)s - - - %(meta_opt_in)s - - - - - - - - - - - - -

    %(spec_title)s

    -

    %(spec_description)s

    -
    %(test_description)s
    - -

    See specification - details for this test.

    - -
    - - - diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.js.template b/tests/wpt/web-platform-tests/mixed-content/generic/template/test.js.template deleted file mode 100644 index b8c0769fcfd..00000000000 --- a/tests/wpt/web-platform-tests/mixed-content/generic/template/test.js.template +++ /dev/null @@ -1,13 +0,0 @@ -MixedContentTestCase( - { - "opt_in_method": "%(opt_in_method)s", - "origin": "%(origin)s", - "source_scheme": "%(source_scheme)s", - "context_nesting": "%(context_nesting)s", - "redirection": "%(redirection)s", - "subresource": "%(subresource)s", - "expectation": "%(expectation)s" - }, - document.querySelector("meta[name=assert]").content, - new SanityChecker() -).start(); diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/template/test_description.template b/tests/wpt/web-platform-tests/mixed-content/generic/template/test_description.template deleted file mode 100644 index 33dbcaa05dd..00000000000 --- a/tests/wpt/web-platform-tests/mixed-content/generic/template/test_description.template +++ /dev/null @@ -1,7 +0,0 @@ -opt_in_method: %(opt_in_method)s -origin: %(origin)s -source_scheme: %(source_scheme)s -context_nesting: %(context_nesting)s -redirection: %(redirection)s -subresource: %(subresource)s -expectation: %(expectation)s diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/tools/common_paths.py b/tests/wpt/web-platform-tests/mixed-content/generic/tools/common_paths.py deleted file mode 100644 index 5475cb6969d..00000000000 --- a/tests/wpt/web-platform-tests/mixed-content/generic/tools/common_paths.py +++ /dev/null @@ -1,61 +0,0 @@ -from __future__ import print_function - -import os, sys, json, re - -script_directory = os.path.dirname(os.path.abspath(__file__)) -generic_directory = os.path.abspath(os.path.join(script_directory, '..')) - -template_directory = os.path.abspath(os.path.join(script_directory, - '..', - 'template')) -spec_directory = os.path.abspath(os.path.join(script_directory, '..', '..')) -test_root_directory = os.path.abspath(os.path.join(script_directory, - '..', '..', '..')) - -spec_filename = os.path.join(spec_directory, "spec.src.json") -generated_spec_json_filename = os.path.join(spec_directory, "spec_json.js") - -selection_pattern = '%(subresource)s/' + \ - '%(opt_in_method)s/' + \ - '%(origin)s/' + \ - '%(context_nesting)s/' + \ - '%(redirection)s/' - -test_file_path_pattern = selection_pattern + \ - '%(spec_name)s/' + \ - '%(name)s.%(source_scheme)s.html' - - -def get_template(basename): - with open(os.path.join(template_directory, basename), "r") as f: - return f.read() - - -def write_file(filename, contents): - with open(filename, "w") as f: - f.write(contents) - - -def read_nth_line(fp, line_number): - fp.seek(0) - for i, line in enumerate(fp): - if (i + 1) == line_number: - return line - - -def load_spec_json(path_to_spec = None): - if path_to_spec is None: - path_to_spec = spec_filename - - re_error_location = re.compile('line ([0-9]+) column ([0-9]+)') - with open(path_to_spec, "r") as f: - try: - return json.load(f) - except ValueError as ex: - print(ex.message) - match = re_error_location.search(ex.message) - if match: - line_number, column = int(match.group(1)), int(match.group(2)) - print(read_nth_line(f, line_number).rstrip()) - print(" " * (column - 1) + "^") - sys.exit(1) diff --git a/tests/wpt/web-platform-tests/mixed-content/generic/tools/generate.py b/tests/wpt/web-platform-tests/mixed-content/generic/tools/generate.py index 1e0a404a709..fe4305c4eea 100755 --- a/tests/wpt/web-platform-tests/mixed-content/generic/tools/generate.py +++ b/tests/wpt/web-platform-tests/mixed-content/generic/tools/generate.py @@ -1,174 +1,65 @@ #!/usr/bin/env python -from __future__ import print_function +import os +import sys -import copy -import os, sys, json -from common_paths import * -import spec_validator -import argparse +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', '..', 'common', 'security-features', 'tools')) +import generate -def expand_pattern(expansion_pattern, test_expansion_schema): - expansion = {} - for artifact_key in expansion_pattern: - artifact_value = expansion_pattern[artifact_key] - if artifact_value == '*': - expansion[artifact_key] = test_expansion_schema[artifact_key] - elif isinstance(artifact_value, list): - expansion[artifact_key] = artifact_value - elif isinstance(artifact_value, dict): - # Flattened expansion. - expansion[artifact_key] = [] - values_dict = expand_pattern(artifact_value, - test_expansion_schema[artifact_key]) - for sub_key in values_dict.keys(): - expansion[artifact_key] += values_dict[sub_key] - else: - expansion[artifact_key] = [artifact_value] +class MixedContentConfig(object): + def __init__(self): + self.selection_pattern = '%(subresource)s/' + \ + '%(opt_in_method)s/' + \ + '%(origin)s/' + \ + '%(context_nesting)s/' + \ + '%(redirection)s/' - return expansion + self.test_file_path_pattern = self.selection_pattern + \ + '%(spec_name)s/' + \ + '%(name)s.%(source_scheme)s.html' + self.test_description_template = '''opt_in_method: %(opt_in_method)s +origin: %(origin)s +source_scheme: %(source_scheme)s +context_nesting: %(context_nesting)s +redirection: %(redirection)s +subresource: %(subresource)s +expectation: %(expectation)s +''' -def permute_expansion(expansion, artifact_order, selection = {}, artifact_index = 0): - assert isinstance(artifact_order, list), "artifact_order should be a list" + self.test_page_title_template = 'Mixed-Content: %s' - if artifact_index >= len(artifact_order): - yield selection - return + self.helper_js = '/mixed-content/generic/mixed-content-test-case.js?pipe=sub' - artifact_key = artifact_order[artifact_index] + # For debug target only. + self.sanity_checker_js = '/mixed-content/generic/sanity-checker.js' + self.spec_json_js = '/mixed-content/spec_json.js' - for artifact_value in expansion[artifact_key]: - selection[artifact_key] = artifact_value - for next_selection in permute_expansion(expansion, - artifact_order, - selection, - artifact_index + 1): - yield next_selection + self.test_case_name = 'MixedContentTestCase' + script_directory = os.path.dirname(os.path.abspath(__file__)) + self.spec_directory = os.path.abspath(os.path.join(script_directory, '..', '..')) -def generate_selection(selection, spec, test_html_template_basename): - selection['spec_name'] = spec['name'] - selection['spec_title'] = spec['title'] - selection['spec_description'] = spec['description'] - selection['spec_specification_url'] = spec['specification_url'] + def handleDelivery(self, selection, spec): + opt_in_method = selection['opt_in_method'] - test_filename = test_file_path_pattern % selection - test_headers_filename = test_filename + ".headers" - test_directory = os.path.dirname(test_filename) - full_path = os.path.join(spec_directory, test_directory) - - test_html_template = get_template(test_html_template_basename) - test_js_template = get_template("test.js.template") - disclaimer_template = get_template('disclaimer.template') - test_description_template = get_template("test_description.template") - - html_template_filename = os.path.join(template_directory, - test_html_template_basename) - generated_disclaimer = disclaimer_template \ - % {'generating_script_filename': os.path.relpath(__file__, - test_root_directory), - 'html_template_filename': os.path.relpath(html_template_filename, - test_root_directory)} - - # Adjust the template for the test invoking JS. Indent it to look nice. - selection['generated_disclaimer'] = generated_disclaimer.rstrip() - test_description_template = \ - test_description_template.rstrip().replace("\n", "\n" + " " * 33) - selection['test_description'] = test_description_template % selection - - # Adjust the template for the test invoking JS. Indent it to look nice. - indent = "\n" + " " * 6; - test_js_template = indent + test_js_template.replace("\n", indent); - selection['test_js'] = test_js_template % selection - - # Directory for the test files. - try: - os.makedirs(full_path) - except: - pass + meta = '' + headers = [] # TODO(kristijanburnik): Implement the opt-in-method here. - opt_in_method = selection['opt_in_method'] - selection['meta_opt_in'] = '' if opt_in_method == 'meta-csp': - selection['meta_opt_in'] = '\n ' + meta = '' elif opt_in_method == 'http-csp': - opt_in_headers = "Content-Security-Policy: block-all-mixed-content\n" - write_file(test_headers_filename, opt_in_headers) + headers.append("Content-Security-Policy: block-all-mixed-content") elif opt_in_method == 'no-opt-in': pass else: raise ValueError("Invalid opt_in_method %s" % opt_in_method) - # Write out the generated HTML file. - write_file(test_filename, test_html_template % selection) - - -def generate_test_source_files(spec_json, target): - test_expansion_schema = spec_json['test_expansion_schema'] - specification = spec_json['specification'] - - spec_json_js_template = get_template('spec_json.js.template') - write_file(generated_spec_json_filename, - spec_json_js_template % {'spec_json': json.dumps(spec_json)}) - - # Choose a debug/release template depending on the target. - html_template = "test.%s.html.template" % target - - artifact_order = test_expansion_schema.keys() + ['name'] - artifact_order.remove('expansion') - - # Create list of excluded tests. - exclusion_dict = {} - for excluded_pattern in spec_json['excluded_tests']: - excluded_expansion = \ - expand_pattern(excluded_pattern, test_expansion_schema) - for excluded_selection in permute_expansion(excluded_expansion, - artifact_order): - excluded_selection_path = selection_pattern % excluded_selection - exclusion_dict[excluded_selection_path] = True - - for spec in specification: - # Used to make entries with expansion="override" override preceding - # entries with the same |selection_path|. - output_dict = {} - - for expansion_pattern in spec['test_expansion']: - expansion = expand_pattern(expansion_pattern, test_expansion_schema) - for selection in permute_expansion(expansion, artifact_order): - selection_path = selection_pattern % selection - if not selection_path in exclusion_dict: - if selection_path in output_dict: - if expansion_pattern['expansion'] != 'override': - print("Error: %s's expansion is default but overrides %s" % (selection['name'], output_dict[selection_path]['name'])) - sys.exit(1) - output_dict[selection_path] = copy.deepcopy(selection) - else: - print('Excluding selection:', selection_path) - - for selection_path in output_dict: - selection = output_dict[selection_path] - generate_selection(selection, - spec, - html_template) - - -def main(target, spec_filename): - spec_json = load_spec_json(spec_filename) - spec_validator.assert_valid_spec_json(spec_json) - generate_test_source_files(spec_json, target) + return {"meta": meta, "headers": headers} if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Test suite generator utility') - parser.add_argument('-t', '--target', type = str, - choices = ("release", "debug"), default = "release", - help = 'Sets the appropriate template for generating tests') - parser.add_argument('-s', '--spec', type = str, default = None, - help = 'Specify a file used for describing and generating the tests') - # TODO(kristijanburnik): Add option for the spec_json file. - args = parser.parse_args() - main(args.target, args.spec) + generate.main(MixedContentConfig()) diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/link-rel-prefetch.html b/tests/wpt/web-platform-tests/referrer-policy/generic/link-rel-prefetch.html index c8e367079bd..914ddfc4b22 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/link-rel-prefetch.html +++ b/tests/wpt/web-platform-tests/referrer-policy/generic/link-rel-prefetch.html @@ -16,9 +16,8 @@ - - - - - - - - - - - -

    %(spec_title)s

    -

    %(spec_description)s

    - -

    - -

    - -

    See specification - details for this test.

    - -

    Scenario outline

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Delivery method%(delivery_method)s
    Redirection%(redirection)s
    Origin transition%(origin)s
    Protocol transitionfrom %(source_protocol)s to %(target_protocol)s
    Subresource type%(subresource)s

    Expected resultReferrer URL should be %(referrer_url)s
    - - - -
    - - diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test.js.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/test.js.template deleted file mode 100644 index 900099436a8..00000000000 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test.js.template +++ /dev/null @@ -1,14 +0,0 @@ -ReferrerPolicyTestCase( - { - "referrer_policy": %(referrer_policy_json)s, - "delivery_method": "%(delivery_method)s", - "redirection": "%(redirection)s", - "origin": "%(origin)s", - "source_protocol": "%(source_protocol)s", - "target_protocol": "%(target_protocol)s", - "subresource": "%(subresource)s", - "referrer_url": "%(referrer_url)s" - }, - document.querySelector("meta[name=assert]").content, - new SanityChecker() -).start(); diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test_description.template b/tests/wpt/web-platform-tests/referrer-policy/generic/template/test_description.template deleted file mode 100644 index fbc80bb25af..00000000000 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/template/test_description.template +++ /dev/null @@ -1,5 +0,0 @@ -The referrer URL is %(referrer_url)s when a -document served over %(source_protocol)s requires an %(target_protocol)s -sub-resource via %(subresource)s using the %(delivery_method)s -delivery method with %(redirection)s and when -the target request is %(origin)s. diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/tools/generate.py b/tests/wpt/web-platform-tests/referrer-policy/generic/tools/generate.py index 592948696ae..a59770ffa26 100755 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/tools/generate.py +++ b/tests/wpt/web-platform-tests/referrer-policy/generic/tools/generate.py @@ -1,191 +1,68 @@ #!/usr/bin/env python -from __future__ import print_function +import os +import sys -import copy -import os, sys, json -from common_paths import * -import spec_validator -import argparse +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', '..', 'common', 'security-features', 'tools')) +import generate +class ReferrerPolicyConfig(object): + def __init__(self): + self.selection_pattern = '%(delivery_method)s/' + \ + '%(origin)s/' + \ + '%(source_protocol)s-%(target_protocol)s/' + \ + '%(subresource)s/' + \ + '%(redirection)s/' -def expand_pattern(expansion_pattern, test_expansion_schema): - expansion = {} - for artifact_key in expansion_pattern: - artifact_value = expansion_pattern[artifact_key] - if artifact_value == '*': - expansion[artifact_key] = test_expansion_schema[artifact_key] - elif isinstance(artifact_value, list): - expansion[artifact_key] = artifact_value - elif isinstance(artifact_value, dict): - # Flattened expansion. - expansion[artifact_key] = [] - values_dict = expand_pattern(artifact_value, - test_expansion_schema[artifact_key]) - for sub_key in values_dict.keys(): - expansion[artifact_key] += values_dict[sub_key] - else: - expansion[artifact_key] = [artifact_value] + self.test_file_path_pattern = '%(spec_name)s/' + self.selection_pattern + \ + '%(name)s.%(source_protocol)s.html' - return expansion + self.test_description_template = '''The referrer URL is %(referrer_url)s when a +document served over %(source_protocol)s requires an %(target_protocol)s +sub-resource via %(subresource)s using the %(delivery_method)s +delivery method with %(redirection)s and when +the target request is %(origin)s.''' + self.test_page_title_template = 'Referrer-Policy: %s' -def permute_expansion(expansion, artifact_order, selection = {}, artifact_index = 0): - assert isinstance(artifact_order, list), "artifact_order should be a list" + self.helper_js = '/referrer-policy/generic/referrer-policy-test-case.js?pipe=sub' - if artifact_index >= len(artifact_order): - yield selection - return + # For debug target only. + self.sanity_checker_js = '/referrer-policy/generic/sanity-checker.js' + self.spec_json_js = '/referrer-policy/spec_json.js' - artifact_key = artifact_order[artifact_index] + self.test_case_name = 'ReferrerPolicyTestCase' - for artifact_value in expansion[artifact_key]: - selection[artifact_key] = artifact_value - for next_selection in permute_expansion(expansion, - artifact_order, - selection, - artifact_index + 1): - yield next_selection + script_directory = os.path.dirname(os.path.abspath(__file__)) + self.spec_directory = os.path.abspath(os.path.join(script_directory, '..', '..')) + def handleDelivery(self, selection, spec): + delivery_method = selection['delivery_method'] + delivery_value = spec['referrer_policy'] -def generate_selection(selection, spec, test_html_template_basename): - selection['spec_name'] = spec['name'] - selection['spec_title'] = spec['title'] - selection['spec_description'] = spec['description'] - selection['spec_specification_url'] = spec['specification_url'] - # Oddball: it can be None, so in JS it's null. - selection['referrer_policy_json'] = json.dumps(spec['referrer_policy']) - - test_filename = test_file_path_pattern % selection - test_directory = os.path.dirname(test_filename) - full_path = os.path.join(spec_directory, test_directory) - - test_html_template = get_template(test_html_template_basename) - test_js_template = get_template("test.js.template") - disclaimer_template = get_template('disclaimer.template') - test_description_template = get_template("test_description.template") - - html_template_filename = os.path.join(template_directory, - test_html_template_basename) - generated_disclaimer = disclaimer_template \ - % {'generating_script_filename': os.path.relpath(__file__, - test_root_directory), - 'html_template_filename': os.path.relpath(html_template_filename, - test_root_directory)} - - # Adjust the template for the test invoking JS. Indent it to look nice. - selection['generated_disclaimer'] = generated_disclaimer.rstrip() - test_description_template = \ - test_description_template.rstrip().replace("\n", "\n" + " " * 33) - selection['test_description'] = test_description_template % selection - - # Adjust the template for the test invoking JS. Indent it to look nice. - indent = "\n" + " " * 6; - test_js_template = indent + test_js_template.replace("\n", indent); - selection['test_js'] = test_js_template % selection - - # Directory for the test files. - try: - os.makedirs(full_path) - except: - pass - - selection['meta_delivery_method'] = '' - - if spec['referrer_policy'] != None: - if selection['delivery_method'] == 'meta-referrer': - selection['meta_delivery_method'] = \ - '' % spec - elif selection['delivery_method'] == 'http-rp': - selection['meta_delivery_method'] = \ + meta = '' + headers = [] + if delivery_value != None: + if delivery_method == 'meta-referrer': + meta = \ + '' % delivery_value + elif delivery_method == 'http-rp': + meta = \ "" - test_headers_filename = test_filename + ".headers" - with open(test_headers_filename, "w") as f: - f.write('Referrer-Policy: ' + \ - '%(referrer_policy)s\n' % spec) - # TODO(kristijanburnik): Limit to WPT origins. - f.write('Access-Control-Allow-Origin: *\n') - elif selection['delivery_method'] == 'attr-referrer': + headers.append('Referrer-Policy: ' + '%s' % delivery_value) + # TODO(kristijanburnik): Limit to WPT origins. + headers.append('Access-Control-Allow-Origin: *') + elif delivery_method == 'attr-referrer': # attr-referrer is supported by the JS test wrapper. pass - elif selection['delivery_method'] == 'rel-noreferrer': + elif delivery_method == 'rel-noreferrer': # rel=noreferrer is supported by the JS test wrapper. pass else: raise ValueError('Not implemented delivery_method: ' \ - + selection['delivery_method']) - - # Obey the lint and pretty format. - if len(selection['meta_delivery_method']) > 0: - selection['meta_delivery_method'] = "\n " + \ - selection['meta_delivery_method'] - - # Write out the generated HTML file. - write_file(test_filename, test_html_template % selection) - - -def generate_test_source_files(spec_json, target): - test_expansion_schema = spec_json['test_expansion_schema'] - specification = spec_json['specification'] - - spec_json_js_template = get_template('spec_json.js.template') - write_file(generated_spec_json_filename, - spec_json_js_template % {'spec_json': json.dumps(spec_json)}) - - # Choose a debug/release template depending on the target. - html_template = "test.%s.html.template" % target - - artifact_order = test_expansion_schema.keys() + ['name'] - artifact_order.remove('expansion') - - # Create list of excluded tests. - exclusion_dict = {} - for excluded_pattern in spec_json['excluded_tests']: - excluded_expansion = \ - expand_pattern(excluded_pattern, test_expansion_schema) - for excluded_selection in permute_expansion(excluded_expansion, - artifact_order): - excluded_selection_path = selection_pattern % excluded_selection - exclusion_dict[excluded_selection_path] = True - - for spec in specification: - # Used to make entries with expansion="override" override preceding - # entries with the same |selection_path|. - output_dict = {} - - for expansion_pattern in spec['test_expansion']: - expansion = expand_pattern(expansion_pattern, test_expansion_schema) - for selection in permute_expansion(expansion, artifact_order): - selection_path = selection_pattern % selection - if not selection_path in exclusion_dict: - if selection_path in output_dict: - if expansion_pattern['expansion'] != 'override': - print("Error: %s's expansion is default but overrides %s" % (selection['name'], output_dict[selection_path]['name'])) - sys.exit(1) - output_dict[selection_path] = copy.deepcopy(selection) - else: - print('Excluding selection:', selection_path) - - for selection_path in output_dict: - selection = output_dict[selection_path] - generate_selection(selection, - spec, - html_template) - - -def main(target, spec_filename): - spec_json = load_spec_json(spec_filename) - spec_validator.assert_valid_spec_json(spec_json) - generate_test_source_files(spec_json, target) + + delivery_method) + return {"meta": meta, "headers": headers} if __name__ == '__main__': - parser = argparse.ArgumentParser(description='Test suite generator utility') - parser.add_argument('-t', '--target', type = str, - choices = ("release", "debug"), default = "release", - help = 'Sets the appropriate template for generating tests') - parser.add_argument('-s', '--spec', type = str, default = None, - help = 'Specify a file used for describing and generating the tests') - # TODO(kristijanburnik): Add option for the spec_json file. - args = parser.parse_args() - main(args.target, args.spec) + generate.main(ReferrerPolicyConfig()) diff --git a/tests/wpt/web-platform-tests/referrer-policy/generic/unsupported-csp-referrer-directive.html b/tests/wpt/web-platform-tests/referrer-policy/generic/unsupported-csp-referrer-directive.html index 6c03a48e1c1..190aa5212f3 100644 --- a/tests/wpt/web-platform-tests/referrer-policy/generic/unsupported-csp-referrer-directive.html +++ b/tests/wpt/web-platform-tests/referrer-policy/generic/unsupported-csp-referrer-directive.html @@ -20,7 +20,7 @@ var urlPath = '/common/security-features/subresource/image.py?cache_destroyer=' + (new Date()).getTime(); var url = location.protocol + "//www1." + location.hostname + ":" + location.port + urlPath; - return requestViaImageForReferrerPolicy(url, null, 'always') + return requestViaImage(url, null, 'always') .then(function(message) { assert_equals(message.referrer, document.location.href); }); diff --git a/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-embed.html b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-embed.html new file mode 100644 index 00000000000..bbba46c50ed --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-embed.html @@ -0,0 +1,19 @@ + + + + + +Resource Timing embed navigate - back button navigation + + + + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-iframe.html b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-iframe.html new file mode 100644 index 00000000000..86a83285288 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-iframe.html @@ -0,0 +1,19 @@ + + + + + +Resource Timing embed navigate - back button navigation + + + + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-object.html b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-object.html new file mode 100644 index 00000000000..20cceea38d6 --- /dev/null +++ b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations-object.html @@ -0,0 +1,19 @@ + + + + + +Resource Timing embed navigate - back button navigation + + + + + + diff --git a/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations.html b/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations.html deleted file mode 100644 index 483cc5b82d5..00000000000 --- a/tests/wpt/web-platform-tests/resource-timing/nested-context-navigations.html +++ /dev/null @@ -1,31 +0,0 @@ - - - - - -Resource Timing embed navigate - back button navigation - - - - - - diff --git a/tests/wpt/web-platform-tests/tools/lint/lint.py b/tests/wpt/web-platform-tests/tools/lint/lint.py index 19d0c112186..dd06e0a02fc 100644 --- a/tests/wpt/web-platform-tests/tools/lint/lint.py +++ b/tests/wpt/web-platform-tests/tools/lint/lint.py @@ -4,6 +4,7 @@ import abc import argparse import ast import json +import logging import os import re import subprocess @@ -19,12 +20,15 @@ from ..gitignore.gitignore import PathFilter from ..wpt import testfiles from ..manifest.vcs import walk -from manifest.sourcefile import SourceFile, js_meta_re, python_meta_re, space_chars, get_any_variants, get_default_any_variants -from six import binary_type, iteritems, itervalues +from ..manifest.sourcefile import SourceFile, js_meta_re, python_meta_re, space_chars, get_any_variants, get_default_any_variants +from six import binary_type, iteritems, itervalues, with_metaclass from six.moves import range from six.moves.urllib.parse import urlsplit, urljoin -import logging +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import Type logger = None @@ -330,7 +334,7 @@ def filter_whitelist_errors(data, errors): return [item for i, item in enumerate(errors) if not whitelisted[i]] -regexps = [item() for item in +regexps = [item() for item in # type: ignore [rules.TrailingWhitespaceRegexp, rules.TabsRegexp, rules.CRRegexp, @@ -503,9 +507,11 @@ def check_parsed(repo_root, path, f): return errors -class ASTCheck(object): - __metaclass__ = abc.ABCMeta - rule = None +class ASTCheck(with_metaclass(abc.ABCMeta)): + @abc.abstractproperty + def rule(self): + # type: () -> Type[rules.Rule] + pass @abc.abstractmethod def check(self, root): diff --git a/tests/wpt/web-platform-tests/tools/lint/rules.py b/tests/wpt/web-platform-tests/tools/lint/rules.py index 78f9d072a8a..76d5d3e9926 100644 --- a/tests/wpt/web-platform-tests/tools/lint/rules.py +++ b/tests/wpt/web-platform-tests/tools/lint/rules.py @@ -1,11 +1,29 @@ from __future__ import unicode_literals + +import abc import os import re -class Rule(object): - name = None - description = None - to_fix = None +import six + +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import List, Optional, Pattern, Text, Match + + +class Rule(six.with_metaclass(abc.ABCMeta)): + @abc.abstractproperty + def name(self): + # type: () -> Text + pass + + @abc.abstractproperty + def description(self): + # type: () -> Text + pass + + to_fix = None # type: Optional[Text] @classmethod def error(cls, path, context=(), line_no=None): @@ -232,19 +250,30 @@ class BrokenMetadata(Rule): description = "Metadata comment is not formatted correctly" -class Regexp(Rule): - pattern = None - file_extensions = None - _re = None +class Regexp(six.with_metaclass(abc.ABCMeta)): + @abc.abstractproperty + def pattern(self): + # type: () -> bytes + pass + + @abc.abstractproperty + def description(self): + # type: () -> Text + pass + + file_extensions = None # type: Optional[List[Text]] def __init__(self): - self._re = re.compile(self.pattern) + # type: () -> None + self._re = re.compile(self.pattern) # type: Pattern def applies(self, path): + # type: (str) -> bool return (self.file_extensions is None or os.path.splitext(path)[1] in self.file_extensions) def search(self, line): + # type: (bytes) -> Optional[Match[bytes]] return self._re.search(line) diff --git a/tests/wpt/web-platform-tests/tools/manifest/XMLParser.py b/tests/wpt/web-platform-tests/tools/manifest/XMLParser.py index 523f544b7c4..212bd7f32f4 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/XMLParser.py +++ b/tests/wpt/web-platform-tests/tools/manifest/XMLParser.py @@ -5,6 +5,11 @@ from collections import OrderedDict from xml.parsers import expat import xml.etree.ElementTree as etree +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import Dict + _catalog = join(dirname(__file__), "catalog") def _wrap_error(e): @@ -13,7 +18,7 @@ def _wrap_error(e): err.position = e.lineno, e.offset raise err -_names = {} +_names = {} # type: Dict[str, str] def _fixname(key): try: name = _names[key] diff --git a/tests/wpt/web-platform-tests/tools/manifest/item.py b/tests/wpt/web-platform-tests/tools/manifest/item.py index b6d33e8452c..1556bfafdaf 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/item.py +++ b/tests/wpt/web-platform-tests/tools/manifest/item.py @@ -3,6 +3,11 @@ from six import iteritems from six.moves.urllib.parse import urljoin, urlparse from abc import ABCMeta, abstractproperty +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import Optional + item_types = {} @@ -24,7 +29,7 @@ class ManifestItem(object): __slots__ = ("_tests_root", "path") - item_type = None + item_type = None # type: Optional[str] def __init__(self, tests_root=None, path=None): self._tests_root = tests_root diff --git a/tests/wpt/web-platform-tests/tools/manifest/manifest.py b/tests/wpt/web-platform-tests/tools/manifest/manifest.py index dc38d381988..dd2e3627f47 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/manifest.py +++ b/tests/wpt/web-platform-tests/tools/manifest/manifest.py @@ -10,8 +10,15 @@ from .item import (ManualTest, WebDriverSpecTest, Stub, RefTestNode, RefTest, from .log import get_logger from .utils import from_os_path, to_os_path +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from typing import Dict + from types import ModuleType + try: - import ujson as fast_json + import ujson + fast_json = ujson # type: ModuleType except ImportError: fast_json = json @@ -418,7 +425,7 @@ def load(tests_root, manifest, types=None): return _load(logger, tests_root, manifest, types) -__load_cache = {} +__load_cache = {} # type: Dict[str, Manifest] def _load(logger, tests_root, manifest, types=None, allow_cached=True): diff --git a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py index 56b938d64ba..cd5261183ee 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py +++ b/tests/wpt/web-platform-tests/tools/manifest/sourcefile.py @@ -5,10 +5,18 @@ from collections import deque from six import binary_type from six.moves.urllib.parse import urljoin from fnmatch import fnmatch + +MYPY = False +if MYPY: + # MYPY is set to True when run under Mypy. + from types import ModuleType + try: - from xml.etree import cElementTree as ElementTree + from xml.etree import cElementTree + ElementTree = cElementTree # type: ModuleType except ImportError: - from xml.etree import ElementTree + from xml.etree import ElementTree as _ElementTree + ElementTree = _ElementTree import html5lib diff --git a/tests/wpt/web-platform-tests/tools/manifest/update.py b/tests/wpt/web-platform-tests/tools/manifest/update.py index f1a70930bb3..013ec2147bc 100755 --- a/tests/wpt/web-platform-tests/tools/manifest/update.py +++ b/tests/wpt/web-platform-tests/tools/manifest/update.py @@ -2,7 +2,7 @@ import argparse import os -import manifest +from . import manifest from . import vcs from .log import get_logger from .download import download_from_github diff --git a/tests/wpt/web-platform-tests/tools/manifest/vcs.py b/tests/wpt/web-platform-tests/tools/manifest/vcs.py index b63df4d0a8a..d900012212e 100644 --- a/tests/wpt/web-platform-tests/tools/manifest/vcs.py +++ b/tests/wpt/web-platform-tests/tools/manifest/vcs.py @@ -78,7 +78,7 @@ class GitHasher(object): class FileSystem(object): def __init__(self, root, url_base, cache_path, manifest_path=None, rebuild=False): - from gitignore import gitignore + from gitignore import gitignore # type: ignore self.root = os.path.abspath(root) self.url_base = url_base self.ignore_cache = None @@ -115,7 +115,7 @@ class FileSystem(object): class CacheFile(object): - file_name = None + file_name = None # type: Optional[str] def __init__(self, cache_root, tests_root, rebuild=False): self.tests_root = tests_root diff --git a/tests/wpt/web-platform-tests/tools/mypy.ini b/tests/wpt/web-platform-tests/tools/mypy.ini new file mode 100644 index 00000000000..710df96244a --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/mypy.ini @@ -0,0 +1,25 @@ +[mypy] +#check_untyped_defs = True +#disallow_any_generics = True +#disallow_untyped_calls = True +#disallow_untyped_defs = True +disallow_incomplete_defs = True +disallow_subclassing_any = True +disallow_untyped_decorators = True +no_implicit_optional = True +warn_redundant_casts = True +warn_return_any = True +warn_unused_configs = True +warn_unused_ignores = True + +[mypy-html5lib.*] +ignore_missing_imports = True + +[mypy-hypothesis.*] +ignore_missing_imports = True + +[mypy-pytest.*] +ignore_missing_imports = True + +[mypy-zstandard.*] +ignore_missing_imports = True diff --git a/tests/wpt/web-platform-tests/tools/requirements_mypy.txt b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt new file mode 100644 index 00000000000..0654986be4f --- /dev/null +++ b/tests/wpt/web-platform-tests/tools/requirements_mypy.txt @@ -0,0 +1,3 @@ +mypy==0.701 +mypy-extensions==0.4.1 +typed-ast==1.3.4 diff --git a/tests/wpt/web-platform-tests/tools/runner/runner.js b/tests/wpt/web-platform-tests/tools/runner/runner.js index ef0b6a449d6..daaf9d45da5 100644 --- a/tests/wpt/web-platform-tests/tools/runner/runner.js +++ b/tests/wpt/web-platform-tests/tools/runner/runner.js @@ -153,13 +153,22 @@ ManifestIterator.prototype = { }, matches: function(manifest_item) { - return this.match_location(manifest_item.url) !== null; + var url_base = this.manifest.data.url_base; + if (url_base.charAt(url_base.length - 1) !== "/") { + url_base = url_base + "/"; + } + var url = url_base + manifest_item.url; + return this.match_location(url) !== null; }, to_test: function(manifest_item) { + var url_base = this.manifest.data.url_base; + if (url_base.charAt(url_base.length - 1) !== "/") { + url_base = url_base + "/"; + } var test = { type: this.test_types[this.test_types_index], - url: manifest_item.url + url: url_base + manifest_item.url }; if (manifest_item.hasOwnProperty("references")) { test.ref_length = manifest_item.references.length; @@ -638,8 +647,9 @@ Results.prototype = { }, to_json: function() { + var test_results = this.test_results || []; var data = { - "results": this.test_results.map(function(result) { + "results": test_results.map(function(result) { var rv = {"test":(result.test.hasOwnProperty("ref_url") ? [result.test.url, result.test.ref_type, result.test.ref_url] : result.test.url), diff --git a/tests/wpt/web-platform-tests/tools/tox.ini b/tests/wpt/web-platform-tests/tools/tox.ini index bb9873d5bc6..d0b186428ed 100644 --- a/tests/wpt/web-platform-tests/tools/tox.ini +++ b/tests/wpt/web-platform-tests/tools/tox.ini @@ -1,5 +1,5 @@ [tox] -envlist = py27,py36,pypy,{py27,py36}-flake8 +envlist = py27,py36,pypy,{py27,py36}-flake8,py36-mypy skipsdist=True [testenv] @@ -21,3 +21,10 @@ commands = flake8 --append-config={toxinidir}/py27-flake8.ini {posargs} [testenv:py36-flake8] deps = -rrequirements_flake8.txt commands = flake8 --append-config={toxinidir}/py36-flake8.ini {posargs} + +[testenv:py36-mypy] +deps = -rrequirements_mypy.txt +changedir = {toxinidir}/.. +commands = + mypy --config-file={toxinidir}/mypy.ini --no-incremental --py2 -p tools.manifest -p tools.lint -p tools.gitignore + mypy --config-file={toxinidir}/mypy.ini --no-incremental -p tools.manifest -p tools.lint -p tools.gitignore diff --git a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py index 7f0f221a1f6..09dd45bcbd8 100644 --- a/tests/wpt/web-platform-tests/tools/wpt/testfiles.py +++ b/tests/wpt/web-platform-tests/tools/wpt/testfiles.py @@ -185,7 +185,7 @@ def load_manifest(manifest_path=None, manifest_update=True): # Delay import after localpaths sets up sys.path, because otherwise the # import path will be "..manifest" and Python will treat it as a different # manifest module. - from manifest import manifest + from manifest import manifest # type: ignore if manifest_path is None: manifest_path = os.path.join(wpt_root, "MANIFEST.json") return manifest.load_and_update(wpt_root, manifest_path, "/", diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py index 45c83d9b816..9414ff230d4 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/fennec.py @@ -68,7 +68,8 @@ def env_extras(**kwargs): def run_info_extras(**kwargs): - rv = {"e10s": False, + package = kwargs["package_name"] + rv = {"e10s": True if package is not None and "geckoview" in package else False, "headless": False, "sw-e10s": False} rv.update(run_info_browser_version(kwargs["binary"])) @@ -110,6 +111,7 @@ class FennecBrowser(FirefoxBrowser): self.device_serial = device_serial self.tests_root = kwargs["tests_root"] self.install_fonts = kwargs["install_fonts"] + self.stackwalk_binary = kwargs["stackwalk_binary"] @property def package_name(self): @@ -220,3 +222,8 @@ class FennecBrowser(FirefoxBrowser): # browser to shut down. This allows the leak log to be written self.runner.stop() self.logger.debug("stopped") + + def check_crash(self, process, test): + if not os.environ.get("MINIDUMP_STACKWALK", "") and self.stackwalk_binary: + os.environ["MINIDUMP_STACKWALK"] = self.stackwalk_binary + return self.runner.check_for_crashes() diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py index f35c03a30e8..cfbc42f61a0 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/base.py @@ -9,8 +9,6 @@ import socket from six.moves.urllib.parse import urljoin, urlsplit, urlunsplit from abc import ABCMeta, abstractmethod -from PIL import Image, ImageChops, ImageStat - from ..testrunner import Stop from .protocol import Protocol, BaseProtocolPart @@ -316,6 +314,8 @@ class RefTestImplementation(object): return equal if relation == "==" else not equal def get_differences(self, screenshots): + from PIL import Image, ImageChops, ImageStat + lhs = Image.open(io.BytesIO(base64.b64decode(screenshots[0]))).convert("RGB") rhs = Image.open(io.BytesIO(base64.b64decode(screenshots[1]))).convert("RGB") diff = ImageChops.difference(lhs, rhs) diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py index 0b0068f8c5b..8ceb99261e2 100644 --- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py +++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/executormarionette.py @@ -708,7 +708,7 @@ class MarionetteTestharnessExecutor(TestharnessExecutor): format_map = {"url": strip_server(url)} - protocol.base.execute_script("window.open('about:blank', '%s', 'noopener')" % self.window_id) + protocol.base.execute_script("window.open(undefined, '%s', 'noopener')" % self.window_id) test_window = protocol.testharness.get_test_window(self.window_id, parent_window, timeout=10*self.timeout_multiplier) self.protocol.base.set_window(test_window) @@ -897,7 +897,8 @@ class InternalRefTestImplementation(RefTestImplementation): # with after closing a window we need to give a new window # focus handles = self.executor.protocol.marionette.window_handles - self.executor.protocol.marionette.switch_to_window(handles[0]) + if handles: + self.executor.protocol.marionette.switch_to_window(handles[0]) except Exception as e: # Ignore errors during teardown self.logger.warning(traceback.format_exc(e)) diff --git a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js index 8d9b296ff74..3ac142e6278 100644 --- a/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js +++ b/tests/wpt/web-platform-tests/web-animations/animation-model/animation-types/property-list.js @@ -1175,18 +1175,6 @@ const gCSSProperties = { { type: 'discrete', options: [ [ 'auto', 'smooth' ] ] } ] }, - 'scroll-snap-type-x': { - // https://developer.mozilla.org/en/docs/Web/CSS/scroll-snap-type-x - types: [ - { type: 'discrete', options: [ [ 'mandatory', 'proximity' ] ] } - ] - }, - 'scroll-snap-type-y': { - // https://developer.mozilla.org/en/docs/Web/CSS/scroll-snap-type-y - types: [ - { type: 'discrete', options: [ [ 'mandatory', 'proximity' ] ] } - ] - }, 'shape-outside': { // http://dev.w3.org/csswg/css-shapes/#propdef-shape-outside types: [ diff --git a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html index b7c590e67a0..fcf753baef3 100644 --- a/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html +++ b/tests/wpt/web-platform-tests/web-animations/interfaces/Animatable/animate.html @@ -243,6 +243,12 @@ test(t => { assert_class_string(anim, 'Animation', 'The returned object is an Animation'); }, 'CSSPseudoElement.animate() creates an Animation object'); +test(t => { + const pseudoTarget = getPseudoElement(t, 'marker'); + const anim = pseudoTarget.animate(null); + assert_class_string(anim, 'Animation', 'The returned object is an Animation for ::marker'); +}, 'CSSPseudoElement.animate() creates an Animation object for ::marker'); + test(t => { const pseudoTarget = getPseudoElement(t, 'before'); const anim = pseudoTarget.animate(null); @@ -250,5 +256,13 @@ test(t => { 'The returned Animation targets to the correct object'); }, 'CSSPseudoElement.animate() creates an Animation object targeting ' + 'to the correct CSSPseudoElement object'); + +test(t => { + const pseudoTarget = getPseudoElement(t, 'marker'); + const anim = pseudoTarget.animate(null); + assert_equals(anim.effect.target, pseudoTarget, + 'The returned Animation targets to the correct object for ::marker'); +}, 'CSSPseudoElement.animate() creates an Animation object targeting ' + + 'to the correct CSSPseudoElement object for ::marker'); diff --git a/tests/wpt/web-platform-tests/web-animations/testcommon.js b/tests/wpt/web-platform-tests/web-animations/testcommon.js index 889cab8bd31..82b70532321 100644 --- a/tests/wpt/web-platform-tests/web-animations/testcommon.js +++ b/tests/wpt/web-platform-tests/web-animations/testcommon.js @@ -93,6 +93,9 @@ function getPseudoElement(test, type) { [`.pseudo::${type}`]: 'animation: anim 10s; ' + 'content: \'\';' }); const div = createDiv(test); + if (type == 'marker') { + div.style.display = 'list-item'; + } div.classList.add('pseudo'); const anims = document.getAnimations(); assert_true(anims.length >= 1); diff --git a/tests/wpt/web-platform-tests/webdriver/tests/add_cookie/add.py b/tests/wpt/web-platform-tests/webdriver/tests/add_cookie/add.py index 24ac645029e..c1a886aafa7 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/add_cookie/add.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/add_cookie/add.py @@ -101,13 +101,13 @@ def test_add_cookie_for_ip(session, url, server_config, configuration): def test_add_non_session_cookie(session, url): - a_year_from_now = int( - (datetime.utcnow() + timedelta(days=365) - datetime.utcfromtimestamp(0)).total_seconds()) + a_day_from_now = int( + (datetime.utcnow() + timedelta(days=1) - datetime.utcfromtimestamp(0)).total_seconds()) new_cookie = { "name": "hello", "value": "world", - "expiry": a_year_from_now + "expiry": a_day_from_now } session.url = url("/common/blank.html") @@ -126,7 +126,7 @@ def test_add_non_session_cookie(session, url): assert cookie["name"] == "hello" assert cookie["value"] == "world" - assert cookie["expiry"] == a_year_from_now + assert cookie["expiry"] == a_day_from_now def test_add_session_cookie(session, url): diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/properties.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/properties.py new file mode 100644 index 00000000000..207daae1283 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_async_script/properties.py @@ -0,0 +1,71 @@ +from tests.support.asserts import assert_same_element, assert_success +from tests.support.inline import inline + + +def execute_async_script(session, script, args=None): + if args is None: + args = [] + body = {"script": script, "args": args} + return session.transport.send( + "POST", "/session/{session_id}/execute/async".format(**vars(session)), + body) + + +def test_content_attribute(session): + session.url = inline("") + response = execute_async_script(session, """ + const [resolve] = arguments; + const input = document.querySelector("input"); + resolve(input.value); + """) + assert_success(response, "foobar") + + +def test_idl_attribute(session): + session.url = inline(""" + + + """) + response = execute_async_script(session, """ + const [resolve] = arguments; + const input = document.querySelector("input"); + resolve(input.value); + """) + assert_success(response, "foobar") + + +def test_idl_attribute_element(session): + session.url = inline(""" +

    foo +

    bar + + + """) + _foo, bar = session.find.css("p") + response = execute_async_script(session, """ + const [resolve] = arguments; + const foo = document.querySelector("p"); + resolve(foo.bar); + """) + value = assert_success(response) + assert_same_element(session, bar, value) + + +def test_script_defining_property(session): + session.url = inline("") + session.execute_script(""" + const input = document.querySelector("input"); + input.foobar = "foobar"; + """) + response = execute_async_script(session, """ + const [resolve] = arguments; + const input = document.querySelector("input"); + resolve(input.foobar); + """) + assert_success(response, "foobar") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/execute_script/properties.py b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/properties.py new file mode 100644 index 00000000000..92f4722fbf6 --- /dev/null +++ b/tests/wpt/web-platform-tests/webdriver/tests/execute_script/properties.py @@ -0,0 +1,67 @@ +from tests.support.asserts import assert_same_element, assert_success +from tests.support.inline import inline + + +def execute_script(session, script, args=None): + if args is None: + args = [] + body = {"script": script, "args": args} + return session.transport.send( + "POST", "/session/{session_id}/execute/sync".format(**vars(session)), + body) + + +def test_content_attribute(session): + session.url = inline("") + response = execute_script(session, """ + const input = document.querySelector("input"); + return input.value; + """) + assert_success(response, "foobar") + + +def test_idl_attribute(session): + session.url = inline(""" + + + """) + response = execute_script(session, """ + const input = document.querySelector("input"); + return input.value; + """) + assert_success(response, "foobar") + + +def test_idl_attribute_element(session): + session.url = inline(""" +

    foo +

    bar + + + """) + _foo, bar = session.find.css("p") + response = execute_script(session, """ + const foo = document.querySelector("p"); + return foo.bar; + """) + value = assert_success(response) + assert_same_element(session, bar, value) + + +def test_script_defining_property(session): + session.url = inline("") + execute_script(session, """ + const input = document.querySelector("input"); + input.foobar = "foobar"; + """) + response = execute_script(session, """ + const input = document.querySelector("input"); + return input.foobar; + """) + assert_success(response, "foobar") diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py index fde0f2a0cd6..50185485b81 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_element_property/get.py @@ -1,8 +1,8 @@ +import pytest + from tests.support.asserts import assert_error, assert_success from tests.support.inline import inline -_input = inline("") - def get_element_property(session, element_id, prop): return session.transport.send( @@ -18,35 +18,90 @@ def test_no_browsing_context(session, closed_window): def test_element_not_found(session): - # 13.3 Step 3 - result = get_element_property(session, "foo", "id") - assert_error(result, "no such element") + response = get_element_property(session, "foo", "id") + assert_error(response, "no such element") def test_element_stale(session): - session.url = _input + session.url = inline("") element = session.find.css("input", all=False) session.refresh() - result = get_element_property(session, element.id, "id") - assert_error(result, "stale element reference") + response = get_element_property(session, element.id, "id") + assert_error(response, "stale element reference") def test_property_non_existent(session): - session.url = _input + session.url = inline("") element = session.find.css("input", all=False) - result = get_element_property(session, element.id, "foo") - assert_success(result, None) - - assert session.execute_script("return arguments[0].foo", args=[element]) is None + response = get_element_property(session, element.id, "foo") + assert_success(response, None) + assert session.execute_script("return arguments[0].foo", args=(element,)) is None -def test_element(session): +def test_content_attribute(session): + session.url = inline("") + element = session.find.css("input", all=False) + + response = get_element_property(session, element.id, "value") + assert_success(response, "foobar") + + +def test_idl_attribute(session): + session.url = inline("") + element = session.find.css("input", all=False) + session.execute_script("""arguments[0].value = "bar";""", args=(element,)) + + response = get_element_property(session, element.id, "value") + assert_success(response, "bar") + + +@pytest.mark.parametrize("js_primitive,py_primitive", [ + ("\"foobar\"", "foobar"), + (42, 42), + ([], []), + ({}, {}), + ("null", None), + ("undefined", None), +]) +def test_primitives(session, js_primitive, py_primitive): + session.url = inline(""" + + + + """.format(js_primitive=js_primitive)) + element = session.find.css("input", all=False) + + response = get_element_property(session, element.id, "foobar") + assert_success(response, py_primitive) + + +@pytest.mark.parametrize("js_primitive,py_primitive", [ + ("\"foobar\"", "foobar"), + (42, 42), + ([], []), + ({}, {}), + ("null", None), + ("undefined", None), +]) +def test_primitives_set_by_execute_script(session, js_primitive, py_primitive): + session.url = inline("") + element = session.find.css("input", all=False) + session.execute_script("arguments[0].foobar = {}".format(js_primitive), args=(element,)) + + response = get_element_property(session, element.id, "foobar") + assert_success(response, py_primitive) + + +def test_mutated_element(session): session.url = inline("") element = session.find.css("input", all=False) element.click() assert session.execute_script("return arguments[0].hasAttribute('checked')", args=(element,)) is False - result = get_element_property(session, element.id, "checked") - assert_success(result, True) + response = get_element_property(session, element.id, "checked") + assert_success(response, True) diff --git a/tests/wpt/web-platform-tests/webdriver/tests/get_named_cookie/get.py b/tests/wpt/web-platform-tests/webdriver/tests/get_named_cookie/get.py index 50a46519168..9ea29c8994e 100644 --- a/tests/wpt/web-platform-tests/webdriver/tests/get_named_cookie/get.py +++ b/tests/wpt/web-platform-tests/webdriver/tests/get_named_cookie/get.py @@ -52,8 +52,8 @@ def test_get_named_cookie(session, url): # same formatting as Date.toUTCString() in javascript utc_string_format = "%a, %d %b %Y %H:%M:%S" - a_year_from_now = (datetime.utcnow() + timedelta(days=365)).strftime(utc_string_format) - session.execute_script("document.cookie = 'foo=bar;expires=%s'" % a_year_from_now) + a_day_from_now = (datetime.utcnow() + timedelta(days=1)).strftime(utc_string_format) + session.execute_script("document.cookie = 'foo=bar;expires=%s'" % a_day_from_now) result = get_named_cookie(session, "foo") cookie = assert_success(result) @@ -70,7 +70,7 @@ def test_get_named_cookie(session, url): assert cookie["value"] == "bar" # convert from seconds since epoch assert datetime.utcfromtimestamp( - cookie["expiry"]).strftime(utc_string_format) == a_year_from_now + cookie["expiry"]).strftime(utc_string_format) == a_day_from_now def test_duplicated_cookie(session, url, server_config): diff --git a/tests/wpt/web-platform-tests/webmessaging/message-channels/worker-post-after-close.html b/tests/wpt/web-platform-tests/webmessaging/message-channels/worker-post-after-close.html new file mode 100644 index 00000000000..a2f6d92e9cc --- /dev/null +++ b/tests/wpt/web-platform-tests/webmessaging/message-channels/worker-post-after-close.html @@ -0,0 +1,36 @@ + + + + + + diff --git a/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html b/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html similarity index 91% rename from tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html rename to tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html index 2bd860d901d..901789109f0 100644 --- a/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.html +++ b/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-getIdentityAssertion.sub.https.html @@ -72,14 +72,14 @@ assert_equals(args.origin, window.origin, 'Expect args.origin argument to be the origin of this window'); - assert_equals(env.location, - `https://${idpHost}/.well-known/idp-proxy/idp-test.js?foo=bar`, + assert_equals(env.location.href, + `https://${idpHost}/.well-known/idp-proxy/mock-idp.js?foo=bar`, 'Expect IdP proxy to be loaded with full well-known URL constructed from provider and protocol'); - assert_equals(env.origin, `https://${idpHost}`, + assert_equals(env.location.origin, `https://${idpHost}`, 'Expect IdP to have its own origin'); - assert_equals(args.options.protocol, 'idp-test.js?foo=bar', + assert_equals(args.options.protocol, 'mock-idp.js?foo=bar', 'Expect options.protocol to be the same value as being passed from here'); assert_equals(args.options.usernameHint, `alice@${idpDomain}`, @@ -114,7 +114,7 @@ const { idp, assertion } = parseAssertionResult(assertionResultStr); assert_equals(idp.domain, idpDomain2); assert_equals(idp.protocol, 'foo'); - assert_equals(assertion.options.usernameHint, `alice@${idpDomain2}`); + assert_equals(assertion.args.options.usernameHint, `alice@${idpDomain2}`); }); }, 'getIdentityAssertion() should succeed if mock-idp.js return different domain and protocol in assertion'); @@ -350,12 +350,17 @@ }, 'createOffer() should return SDP containing identity assertion string if identity provider is set'); /* - 4.4.2. Steps to create an offer - 1. If the need for an identity assertion was identified when createOffer was - invoked, wait for the identity assertion request process to complete. - 2. If the identity provider was unable to produce an identity assertion, reject p - with a newly created NotReadableError and abort these steps. - */ + 6. Requesting Identity Assertions + + The identity assertion request process is triggered by a call to + createOffer, createAnswer, or getIdentityAssertion. When these calls are + invoked and an identity provider has been set, the following steps are + executed: + + ... + + If assertion generation fails, then the promise for the corresponding + function call is rejected with a newly created OperationError. */ promise_test(t => { const pc = new RTCPeerConnection(); const port = window.location.port; @@ -366,18 +371,10 @@ usernameHint: `alice@${idpDomain}` }); - return promise_rejects(t, 'NotReadableError', + return promise_rejects(t, 'OperationError', pc.createOffer()); - }, 'createOffer() should reject with NotReadableError if identitity assertion request fails'); + }, 'createOffer() should reject with OperationError if identity assertion request fails'); - /* - 4.4.2. Steps to create an answer - 1. If the need for an identity assertion was identified when createAnswer was - invoked, wait for the identity assertion request process to complete. - - 2. If the identity provider was unable to produce an identity assertion, reject p - with a newly created NotReadableError and abort these steps. - */ promise_test(t => { const pc = new RTCPeerConnection(); const port = window.location.port; @@ -392,9 +389,9 @@ .createOffer() .then(offer => pc.setRemoteDescription(offer)) .then(() => - promise_rejects(t, 'NotReadableError', + promise_rejects(t, 'OperationError', pc.createAnswer())); - }, 'createAnswer() should reject with NotReadableError if identitity assertion request fails'); + }, 'createAnswer() should reject with OperationError if identity assertion request fails'); diff --git a/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.html b/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.https.html similarity index 87% rename from tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.html rename to tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.https.html index 64ad212a5ba..518d57777aa 100644 --- a/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.html +++ b/tests/wpt/web-platform-tests/webrtc-identity/RTCPeerConnection-peerIdentity.https.html @@ -8,7 +8,7 @@ 'use strict'; // Test is based on the following editor draft: - // https://w3c.github.io/webrtc-pc/archives/20170605/webrtc.html + // https://w3c.github.io/webrtc-identity/identity.html // The tests here interacts with the mock identity provider located at // /.well-known/idp-proxy/mock-idp.js @@ -54,7 +54,7 @@ is, there is a current value for peerIdentity ), then this also establishes a target peer identity. */ - promise_test(t => { + promise_test(async t => { const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); const pc2 = new RTCPeerConnection(); @@ -70,51 +70,57 @@ usernameHint: `alice@${idpDomain}` }); - return pc1.createOffer() - .then(offer => pc2.setRemoteDescription(offer)) - .then(() => pc2.peerIdentity) - .then(identityAssertion => { - const { idp, name } = identityAssertion; - assert_equals(idp, idpDomain, `Expect IdP domain to be ${idpDomain}`); - assert_equals(identityAssertion, `alice@${idpDomain}`, - `Expect validated identity from mock-idp.js to be same as specified in usernameHint`); - }); + const peerIdentity = pc2.peerIdentity; + await pc2.setRemoteDescription(await pc1.createOffer()); + const { idp, name } = await peerIdentity; + assert_equals(idp, idpHost, `Expect IdP to be ${idpHost}`); + assert_equals(name, `alice@${idpDomain}`, + `Expect validated identity from mock-idp.js to be same as specified in usernameHint`); }, 'setRemoteDescription() on offer with a=identity should establish peerIdentity'); /* - 4.3.2. setRemoteDescription - The target peer identity cannot be changed once set. Once set, if a different - value is provided, the user agent MUST reject the returned promise with a newly - created InvalidModificationError and abort this operation. The RTCPeerConnection - MUST be closed if the validated peer identity does not match the target peer - identity. - */ - promise_test(t => { + If the peerIdentity configuration is applied to the RTCPeerConnection, this + establishes a target peer identity of the provided value. Alternatively, if the + RTCPeerConnection has previously authenticated the identity of the peer (that + is, the peerIdentity promise is resolved), then this also establishes a + target peer identity. + + The target peer identity cannot be changed once set. + */ + promise_test(async t => { const port = window.location.port; const [idpDomain] = getIdpDomains(); const idpHost = hostString(idpDomain, port); const pc1 = new RTCPeerConnection(); t.add_cleanup(() => pc1.close()); + pc1.setIdentityProvider(idpHost, { + protocol: 'mock-idp.js', + usernameHint: `doesnt_matter@${idpDomain}` + }); + const pc2 = new RTCPeerConnection({ peerIdentity: `bob@${idpDomain}` }); t.add_cleanup(() => pc2.close()); - pc1.setIdentityProvider(idpHost, { + pc2.setIdentityProvider(idpHost, { protocol: 'mock-idp.js', usernameHint: `alice@${idpDomain}` }); - return pc1.createOffer() - .then(offer => - promise_rejects(t, 'InvalidModificationError', - pc2.setRemoteDescription(offer))) - .then(() => { - assert_true(pc2.signalingState, 'closed', - 'Expect peer connection to be closed after mismatch peer identity'); - }); + const offer = await pc1.createOffer(); + + try { + await pc2.setRemoteDescription(offer); + assert_true(false, "Previous line (sRD) should have thrown!"); + } catch (e) { + assert_equals(e.name, 'InvalidModificationError'); + } + + assert_true(pc2.signalingState, 'closed', + 'Expect peer connection to be closed after mismatch peer identity'); }, 'setRemoteDescription() on offer with a=identity that resolve to value different from target peer identity should reject with InvalidModificationError'); /* @@ -154,7 +160,7 @@ return pc1.createOffer() .then(offer => Promise.all([ - promise_rejects(t, 'OperationError', + promise_rejects(t, 'IdpError', pc2.setRemoteDescription(offer)), promise_rejects(t, 'OperationError', peerIdentityPromise) @@ -194,10 +200,10 @@ .then(assertionResultStr => { const { idp, assertion } = parseAssertionResult(assertionResultStr); - assert_equals(idp.domain, idpDomain1, - 'Sanity check domain of assertion is domain1'); + assert_equals(idp.domain, idpHost1, + 'Sanity check domain of assertion is host1'); - assert_equals(assertion.options.usernameHint, `alice@${idpDomain2}`, + assert_equals(assertion.args.options.usernameHint, `alice@${idpDomain2}`, 'Sanity check domain1 is going to validate a domain2 identity'); return pc1.createOffer(); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCDataChannel-send.html b/tests/wpt/web-platform-tests/webrtc/RTCDataChannel-send.html index 4b8d0c2f204..76d3524d6eb 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCDataChannel-send.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCDataChannel-send.html @@ -1,5 +1,6 @@ + RTCDataChannel.prototype.send diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html index ffb3fececc4..f2add7f0d34 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-removeTrack.https.html @@ -292,6 +292,20 @@ assert_equals(transceiver.currentDirection, 'inactive'); }, 'Calling removeTrack with currentDirection inactive should not change direction'); + promise_test(async t => { + const pc = new RTCPeerConnection(); + t.add_cleanup(() => pc.close()); + const stream = await navigator.mediaDevices.getUserMedia({audio: true}); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + const [track] = stream.getTracks(); + const sender = pc.addTrack(track, stream); + + pc.getTransceivers()[0].stop(); + pc.removeTrack(sender); + assert_equals(sender.track, track); + }, "Calling removeTrack on a stopped transceiver should be a no-op"); + + /* TODO 5.1. removeTrack diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html index e8b3ef5071e..c97021b0fab 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setLocalDescription-answer.html @@ -153,9 +153,9 @@ return pc.createOffer() .then(offer => - promise_rejects(t, 'InvalidStateError', + promise_rejects(t, 'InvalidModificationError', pc.setLocalDescription({ type: 'answer', sdp: offer.sdp }))); - }, 'Calling setLocalDescription(answer) from stable state should reject with InvalidStateError'); + }, 'Calling setLocalDescription(answer) from stable state should reject with InvalidModificationError'); promise_test(t => { const pc = new RTCPeerConnection(); @@ -167,9 +167,9 @@ pc.setLocalDescription(offer) .then(() => generateAnswer(offer))) .then(answer => - promise_rejects(t, 'InvalidStateError', + promise_rejects(t, 'InvalidModificationError', pc.setLocalDescription(answer))); - }, 'Calling setLocalDescription(answer) from have-local-offer state should reject with InvalidStateError'); + }, 'Calling setLocalDescription(answer) from have-local-offer state should reject with InvalidModificationError'); promise_test(async t => { const pc1 = new RTCPeerConnection(); diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html index f2dbf0b96f3..255419258a3 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setRemoteDescription-rollback.html @@ -132,4 +132,31 @@ await pc1.setLocalDescription(offer1); }, `local offer created before setRemoteDescription(remote offer) then rollback should still be usable`); + promise_test(async t => { + const pc1 = new RTCPeerConnection(); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + t.add_cleanup(() => pc2.close()); + + const stream = await getNoiseStream({ video: true }); + t.add_cleanup(() => stream.getTracks().forEach(track => track.stop())); + pc1.addTrack(stream.getTracks()[0], stream); + + // We don't use this right away. pc1 has provisionally decided that the + // (only) transceiver is bound to level 0. + const offer1 = await pc1.createOffer(); + + // Create offer from pc2, apply and rollback on pc1 + const offer2 = await pc2.createOffer({offerToReceiveAudio: true, offerToReceiveVideo: true}); + // pc1 now should change its mind about what level its video transceiver is + // bound to. It was 0, now it is 1. + await pc1.setRemoteDescription(offer2); + + // Rolling back should put things back the way they were. + await pc1.setRemoteDescription({type: "rollback"}); + + // Then try applying pc1's old offer + await pc1.setLocalDescription(offer1); + }, "local offer created before setRemoteDescription(remote offer) with different transceiver level assignments then rollback should still be usable"); + diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html index b5f3c55ee58..0b560d2f26e 100644 --- a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html +++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html @@ -1,5 +1,6 @@ + RTCRtpTransceiver @@ -990,6 +991,9 @@ ]); hasProps(pc2.getTransceivers(), [{currentDirection: "sendrecv"}]); + + pc2.close(); + hasProps(pc2.getTransceivers(), [{currentDirection: null}]); }; const checkSendrecvWithNoSendTrack = async t => { @@ -1277,8 +1281,10 @@ pc1.close(); pc2.close(); - // Still shouldn't throw - stoppedTransceiver.stop(); + // Spec says the closed check comes before the stopped check, so this + // should throw now. + checkThrows(() => stoppedTransceiver.stop(), + "InvalidStateError", "RTCRtpTransceiver.stop() with closed PC"); }; const checkStopAfterCreateOffer = async t => { @@ -2182,6 +2188,36 @@ "No rejected m-line, because it was reused"); }; + const checkStopAfterCreateOfferWithReusedMsection = async t => { + const pc1 = new RTCPeerConnection(); + t.add_cleanup(() => pc1.close()); + const pc2 = new RTCPeerConnection(); + t.add_cleanup(() => pc2.close()); + + const stream = await getNoiseStream({audio: true, video: true}); + t.add_cleanup(() => stopTracks(stream)); + const audio = stream.getAudioTracks()[0]; + const video = stream.getVideoTracks()[0]; + + pc1.addTrack(audio, stream); + pc1.addTrack(video, stream); + + await offerAnswer(pc1, pc2); + pc1.getTransceivers()[1].stop(); + await offerAnswer(pc1, pc2); + + // Second (video) m-section has been negotiated disabled. + const transceiver = pc1.addTransceiver("video"); + const offer = await pc1.createOffer(); + transceiver.stop(); + await pc1.setLocalDescription(offer); + await pc2.setRemoteDescription(offer); + + const answer = await pc2.createAnswer(); + await pc2.setLocalDescription(answer); + await pc1.setRemoteDescription(answer); + }; + const tests = [ checkAddTransceiverNoTrack, checkAddTransceiverWithTrack, @@ -2217,7 +2253,8 @@ const tests = [ checkLocalRollback, checkRollbackAndSetRemoteOfferWithDifferentType, checkRemoteRollback, - checkMsectionReuse + checkMsectionReuse, + checkStopAfterCreateOfferWithReusedMsection ].forEach(test => promise_test(test, test.name)); diff --git a/tests/wpt/web-platform-tests/webrtc/no-media-call.html b/tests/wpt/web-platform-tests/webrtc/no-media-call.html index 10933fae4c3..dbe6a0dd4c2 100644 --- a/tests/wpt/web-platform-tests/webrtc/no-media-call.html +++ b/tests/wpt/web-platform-tests/webrtc/no-media-call.html @@ -14,7 +14,7 @@ - + diff --git a/tests/wpt/web-platform-tests/webxr/xrDevice_supportsSession_immersive_unsupported.https.html b/tests/wpt/web-platform-tests/webxr/xrDevice_supportsSession_immersive_unsupported.https.html index 2b17b96b1bc..0fb44a895d1 100644 --- a/tests/wpt/web-platform-tests/webxr/xrDevice_supportsSession_immersive_unsupported.https.html +++ b/tests/wpt/web-platform-tests/webxr/xrDevice_supportsSession_immersive_unsupported.https.html @@ -5,14 +5,14 @@