aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-12-14 20:35:55 -0500
committerWPT Sync Bot <josh+wptsync@joshmatthews.net>2018-12-14 21:54:18 -0500
commitb0862d9cc1138a651c53214c73fae3a2e6d168c5 (patch)
treec27b610acd7f6ed8f37c12325522413fed2966e7
parentc9229f3f99936627229edf7a616b2af915ce2416 (diff)
downloadservo-b0862d9cc1138a651c53214c73fae3a2e6d168c5.tar.gz
servo-b0862d9cc1138a651c53214c73fae3a2e6d168c5.zip
Update web-platform-tests to revision ac4274136e9a034628a3a469890c8e37babbc902
-rw-r--r--tests/wpt/metadata/MANIFEST.json354
-rw-r--r--tests/wpt/metadata/css/css-animations/computed-style-animation-parsing.html.ini16
-rw-r--r--tests/wpt/metadata/css/css-animations/style-animation-parsing.html.ini16
-rw-r--r--tests/wpt/metadata/css/css-backgrounds/background-size/background-size-cover-svg.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/pre-float-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-text/white-space/pre-wrap-float-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/css-transitions/transition-reparented.html.ini4
-rw-r--r--tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini4
-rw-r--r--tests/wpt/metadata/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html.ini2
-rw-r--r--tests/wpt/metadata/css/selectors/attribute-selectors/attribute-case/cssom.html.ini24
-rw-r--r--tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini9
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini4
-rw-r--r--tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini4
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini22
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini10
-rw-r--r--tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini1
-rw-r--r--tests/wpt/metadata/html/syntax/parsing/quotes-in-meta.html.ini4
-rw-r--r--tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini3
-rw-r--r--tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini (renamed from tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini)2
-rw-r--r--tests/wpt/metadata/resource-timing/single-entry-per-resource.html.ini3
-rw-r--r--tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini1
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/computed-style-animation-parsing.html68
-rw-r--r--tests/wpt/web-platform-tests/css/css-animations/style-animation-parsing.html53
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-size/background-size-cover-svg.html25
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html22
-rw-r--r--tests/wpt/web-platform-tests/css/css-backgrounds/background-size/support/rectangle-2560x208.svg3
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005-ref.html67
-rw-r--r--tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005.html70
-rw-r--r--tests/wpt/web-platform-tests/css/css-scoping/slotted-nested.html49
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/pre-float-001.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-float-001.html35
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-float-001-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-float-001-ref.html30
-rw-r--r--tests/wpt/web-platform-tests/css/css-transitions/transition-reparented.html39
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html515
-rw-r--r--tests/wpt/web-platform-tests/css/cssom/support/constructable-import.css3
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/reference/green-100x100.html2
-rw-r--r--tests/wpt/web-platform-tests/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html48
-rw-r--r--tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html2
-rw-r--r--tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js10
-rw-r--r--tests/wpt/web-platform-tests/html/syntax/parsing/quotes-in-meta.html12
-rw-r--r--tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl2
-rw-r--r--tests/wpt/web-platform-tests/resource-timing/single-entry-per-resource.html5
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-relative.xsl5
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-iframe.xml5
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-worker.js12
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/resources/xslt-pass.xsl11
-rw-r--r--tests/wpt/web-platform-tests/service-workers/service-worker/xsl-base-url.https.html32
-rw-r--r--tests/wpt/web-platform-tests/svg/extensibility/foreignObject/properties.svg6
-rw-r--r--tests/wpt/web-platform-tests/svg/geometry/parsing/height-computed.svg130
-rw-r--r--tests/wpt/web-platform-tests/svg/geometry/parsing/width-computed.svg130
-rw-r--r--tests/wpt/web-platform-tests/svg/pservers/parsing/stop-color-computed.svg27
-rw-r--r--tests/wpt/web-platform-tests/svg/pservers/reftests/reference/green-100x100.svg3
-rw-r--r--tests/wpt/web-platform-tests/svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg18
-rw-r--r--tests/wpt/web-platform-tests/svg/pservers/scripted/stop-color-inheritance-currentcolor.svg22
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py10
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py22
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js17
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py2
-rw-r--r--tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py14
-rw-r--r--tests/wpt/web-platform-tests/user-timing/mark-measure-feature-detection.html36
-rw-r--r--tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html46
-rw-r--r--tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py6
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html23
-rw-r--r--tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html2
68 files changed, 2064 insertions, 135 deletions
diff --git a/tests/wpt/metadata/MANIFEST.json b/tests/wpt/metadata/MANIFEST.json
index 064dbc83dc9..7457d8bccb8 100644
--- a/tests/wpt/metadata/MANIFEST.json
+++ b/tests/wpt/metadata/MANIFEST.json
@@ -104065,6 +104065,18 @@
{}
]
],
+ "css/css-backgrounds/background-size/background-size-cover-svg.html": [
+ [
+ "/css/css-backgrounds/background-size/background-size-cover-svg.html",
+ [
+ [
+ "/css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-backgrounds/background-size/background-size-cover.xht": [
[
"/css/css-backgrounds/background-size/background-size-cover.xht",
@@ -128085,6 +128097,18 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-005.html": [
+ [
+ "/css/css-multicol/multicol-span-all-005.html",
+ [
+ [
+ "/css/css-multicol/multicol-span-all-005-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
[
"/css/css-multicol/multicol-span-all-block-sibling-003.xht",
@@ -141433,6 +141457,18 @@
{}
]
],
+ "css/css-text/white-space/pre-float-001.html": [
+ [
+ "/css/css-text/white-space/pre-float-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-float-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/pre-wrap-001.html": [
[
"/css/css-text/white-space/pre-wrap-001.html",
@@ -141577,6 +141613,18 @@
{}
]
],
+ "css/css-text/white-space/pre-wrap-float-001.html": [
+ [
+ "/css/css-text/white-space/pre-wrap-float-001.html",
+ [
+ [
+ "/css/css-text/white-space/reference/pre-wrap-float-001-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/css-text/white-space/tab-stop-threshold-001.html": [
[
"/css/css-text/white-space/tab-stop-threshold-001.html",
@@ -169017,6 +169065,18 @@
{}
]
],
+ "css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html": [
+ [
+ "/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html",
+ [
+ [
+ "/css/filter-effects/reference/green-100x100.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"css/filter-effects/svg-unknown-input-001.html": [
[
"/css/filter-effects/svg-unknown-input-001.html",
@@ -192481,6 +192541,18 @@
{}
]
],
+ "svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg": [
+ [
+ "/svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg",
+ [
+ [
+ "/svg/pservers/reftests/reference/green-100x100.svg",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"svg/render/reftests/blending-001.svg": [
[
"/svg/render/reftests/blending-001.svg",
@@ -250621,6 +250693,11 @@
{}
]
],
+ "css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-backgrounds/background-size/reference/background-size-cover.xht": [
[
{}
@@ -250641,6 +250718,11 @@
{}
]
],
+ "css/css-backgrounds/background-size/support/rectangle-2560x208.svg": [
+ [
+ {}
+ ]
+ ],
"css/css-backgrounds/background-size/support/rectangle-96x60.png": [
[
{}
@@ -264171,6 +264253,11 @@
{}
]
],
+ "css/css-multicol/multicol-span-all-005-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-multicol/multicol-span-all-block-sibling-3-ref.xht": [
[
{}
@@ -269681,11 +269768,21 @@
{}
]
],
+ "css/css-text/white-space/reference/pre-float-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/white-space/reference/pre-wrap-001-ref.html": [
[
{}
]
],
+ "css/css-text/white-space/reference/pre-wrap-float-001-ref.html": [
+ [
+ {}
+ ]
+ ],
"css/css-text/white-space/reference/tab-stop-threshold-001-ref.html": [
[
{}
@@ -276441,6 +276538,11 @@
{}
]
],
+ "css/cssom/support/constructable-import.css": [
+ [
+ {}
+ ]
+ ],
"css/cssom/support/getComputedStyle-insets.js": [
[
{}
@@ -276851,6 +276953,11 @@
{}
]
],
+ "css/filter-effects/reference/green-100x100.html": [
+ [
+ {}
+ ]
+ ],
"css/filter-effects/reference/svg-feflood-ref.html": [
[
{}
@@ -308546,6 +308653,11 @@
{}
]
],
+ "service-workers/service-worker/resources/import-relative.xsl": [
+ [
+ {}
+ ]
+ ],
"service-workers/service-worker/resources/import-scripts-echo.py": [
[
{}
@@ -309336,6 +309448,21 @@
{}
]
],
+ "service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
+ [
+ {}
+ ]
+ ],
+ "service-workers/service-worker/resources/xsl-base-url-worker.js": [
+ [
+ {}
+ ]
+ ],
+ "service-workers/service-worker/resources/xslt-pass.xsl": [
+ [
+ {}
+ ]
+ ],
"service-workers/specgen.json": [
[
{}
@@ -310266,6 +310393,11 @@
{}
]
],
+ "svg/pservers/reftests/reference/green-100x100.svg": [
+ [
+ {}
+ ]
+ ],
"svg/render/reftests/blending-001-ref.svg": [
[
{}
@@ -338085,6 +338217,12 @@
}
]
],
+ "css/css-animations/computed-style-animation-parsing.html": [
+ [
+ "/css/css-animations/computed-style-animation-parsing.html",
+ {}
+ ]
+ ],
"css/css-animations/event-dispatch.tentative.html": [
[
"/css/css-animations/event-dispatch.tentative.html",
@@ -338253,6 +338391,12 @@
{}
]
],
+ "css/css-animations/style-animation-parsing.html": [
+ [
+ "/css/css-animations/style-animation-parsing.html",
+ {}
+ ]
+ ],
"css/css-backgrounds/background-331.html": [
[
"/css/css-backgrounds/background-331.html",
@@ -342655,6 +342799,12 @@
{}
]
],
+ "css/css-scoping/slotted-nested.html": [
+ [
+ "/css/css-scoping/slotted-nested.html",
+ {}
+ ]
+ ],
"css/css-scoping/slotted-parsing.html": [
[
"/css/css-scoping/slotted-parsing.html",
@@ -345733,6 +345883,12 @@
{}
]
],
+ "css/css-transitions/transition-reparented.html": [
+ [
+ "/css/css-transitions/transition-reparented.html",
+ {}
+ ]
+ ],
"css/css-transitions/transition-timing-function-001.html": [
[
"/css/css-transitions/transition-timing-function-001.html",
@@ -349369,6 +349525,12 @@
{}
]
],
+ "css/cssom/CSSStyleSheet-constructable.html": [
+ [
+ "/css/cssom/CSSStyleSheet-constructable.html",
+ {}
+ ]
+ ],
"css/cssom/CSSStyleSheet.html": [
[
"/css/cssom/CSSStyleSheet.html",
@@ -376925,6 +377087,12 @@
{}
]
],
+ "html/syntax/parsing/quotes-in-meta.html": [
+ [
+ "/html/syntax/parsing/quotes-in-meta.html",
+ {}
+ ]
+ ],
"html/syntax/parsing/template/additions-to-foster-parenting/template-is-a-foster-parent-element.html": [
[
"/html/syntax/parsing/template/additions-to-foster-parenting/template-is-a-foster-parent-element.html",
@@ -406871,6 +407039,12 @@
{}
]
],
+ "service-workers/service-worker/xsl-base-url.https.html": [
+ [
+ "/service-workers/service-worker/xsl-base-url.https.html",
+ {}
+ ]
+ ],
"shadow-dom/Document-prototype-adoptNode.html": [
[
"/shadow-dom/Document-prototype-adoptNode.html",
@@ -408847,6 +409021,12 @@
{}
]
],
+ "svg/geometry/parsing/height-computed.svg": [
+ [
+ "/svg/geometry/parsing/height-computed.svg",
+ {}
+ ]
+ ],
"svg/geometry/parsing/r-computed.svg": [
[
"/svg/geometry/parsing/r-computed.svg",
@@ -408901,6 +409081,12 @@
{}
]
],
+ "svg/geometry/parsing/width-computed.svg": [
+ [
+ "/svg/geometry/parsing/width-computed.svg",
+ {}
+ ]
+ ],
"svg/geometry/parsing/x-computed.svg": [
[
"/svg/geometry/parsing/x-computed.svg",
@@ -409477,6 +409663,12 @@
{}
]
],
+ "svg/pservers/parsing/stop-color-computed.svg": [
+ [
+ "/svg/pservers/parsing/stop-color-computed.svg",
+ {}
+ ]
+ ],
"svg/pservers/parsing/stop-opacity-computed.svg": [
[
"/svg/pservers/parsing/stop-opacity-computed.svg",
@@ -409495,6 +409687,12 @@
{}
]
],
+ "svg/pservers/scripted/stop-color-inheritance-currentcolor.svg": [
+ [
+ "/svg/pservers/scripted/stop-color-inheritance-currentcolor.svg",
+ {}
+ ]
+ ],
"svg/scripted/text-attrs-dxdy-have-length.svg": [
[
"/svg/scripted/text-attrs-dxdy-have-length.svg",
@@ -410639,9 +410837,9 @@
{}
]
],
- "user-timing/mark-measure-return-null.html": [
+ "user-timing/mark-measure-feature-detection.html": [
[
- "/user-timing/mark-measure-return-null.html",
+ "/user-timing/mark-measure-feature-detection.html",
{}
]
],
@@ -537162,6 +537360,10 @@
"4ca5eb736e76274eee9883121970fee0ab8280ca",
"manual"
],
+ "css/css-animations/computed-style-animation-parsing.html": [
+ "15a1665be5ee13c66c434f6da48af42ac622baff",
+ "testharness"
+ ],
"css/css-animations/event-dispatch.tentative.html": [
"54bc9499a535dba81f302e4c40eb20193bee0da6",
"testharness"
@@ -537274,6 +537476,10 @@
"fb74d7fa7d062d60153d47913df9eb2b0c7267c8",
"testharness"
],
+ "css/css-animations/style-animation-parsing.html": [
+ "792fda33ed8b0bacf355e62066ec05d54cc5c729",
+ "testharness"
+ ],
"css/css-animations/support/testcommon.js": [
"b4fde4b967de2eb67cb3e0819c3a896375e861f9",
"support"
@@ -538022,6 +538228,10 @@
"d168e154fb34fea05c6c05a201b030099d5cdf01",
"reftest"
],
+ "css/css-backgrounds/background-size/background-size-cover-svg.html": [
+ "5e33c75afcec1ecd8b393a753ae97703d4728bf2",
+ "reftest"
+ ],
"css/css-backgrounds/background-size/background-size-cover.xht": [
"c88e7fd2ed34aa61f24fde1a8d424155d430fc37",
"reftest"
@@ -538030,6 +538240,10 @@
"62e1ed65f4f5acebdf2d6594178c16168f5cc74a",
"support"
],
+ "css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html": [
+ "b6dd172aa6624a5dec591d5b37294bb432c168c1",
+ "support"
+ ],
"css/css-backgrounds/background-size/reference/background-size-cover.xht": [
"29ac66132d7539ca6d897c3e69a206a91ac0d23a",
"support"
@@ -538046,6 +538260,10 @@
"6c1406b7dfd7c59f413a183c8896b8c2b3395bf5",
"support"
],
+ "css/css-backgrounds/background-size/support/rectangle-2560x208.svg": [
+ "578dd86ae055e0eab3ce57ad003481dfa000fd2c",
+ "support"
+ ],
"css/css-backgrounds/background-size/support/rectangle-96x60.png": [
"add0d272b1eb56d0003d414c6e04f080053b62a4",
"support"
@@ -561306,6 +561524,14 @@
"e9165658c11fea62e4f714fc4643f33853e95500",
"reftest"
],
+ "css/css-multicol/multicol-span-all-005-ref.html": [
+ "641fbb9dcf5e093ab0892aba918c05965c9f23e1",
+ "support"
+ ],
+ "css/css-multicol/multicol-span-all-005.html": [
+ "249b69b7107e3ee65cf52986af0f298e18ea743e",
+ "reftest"
+ ],
"css/css-multicol/multicol-span-all-block-sibling-003.xht": [
"bd2cdd6cdab0fc15c2e16e2237f6b025230332c4",
"reftest"
@@ -566018,6 +566244,10 @@
"c06c96143ba0d478940fb54208d241adb4f6ee8b",
"testharness"
],
+ "css/css-scoping/slotted-nested.html": [
+ "c7139fea4c280585197db5bd432931bcf53c2e53",
+ "testharness"
+ ],
"css/css-scoping/slotted-parsing.html": [
"6888693bbf40932d62a19b535adba22adbd43b19",
"testharness"
@@ -572986,6 +573216,10 @@
"f3dbf4609f44e537328a741bd03059c09a38af45",
"reftest"
],
+ "css/css-text/white-space/pre-float-001.html": [
+ "4d9f8bba4d50964544dff35c8d2049d2f6ea8e27",
+ "reftest"
+ ],
"css/css-text/white-space/pre-wrap-001.html": [
"31486f8f77c4c77188d94e9c21e9a8d5003e1bc4",
"reftest"
@@ -573034,6 +573268,10 @@
"f9063c98767e70c3899bc9a59b50b42a61240ae4",
"reftest"
],
+ "css/css-text/white-space/pre-wrap-float-001.html": [
+ "6ef0faa0cf8e22ddea43dcd06ce3f9e5edf9cfd6",
+ "reftest"
+ ],
"css/css-text/white-space/reference/control-chars-000-ref.html": [
"9d5fcb27147a8c53e410d08511cb5035b612f80c",
"support"
@@ -573046,10 +573284,18 @@
"ea1faa2ed1f7af05f932167762f85fc2e5150884",
"support"
],
+ "css/css-text/white-space/reference/pre-float-001-ref.html": [
+ "b05c008bed1fe69bbe968c16604d582434907c44",
+ "support"
+ ],
"css/css-text/white-space/reference/pre-wrap-001-ref.html": [
"8a8b5132db197bb9a76b1b44e461405f4cd9d1bc",
"support"
],
+ "css/css-text/white-space/reference/pre-wrap-float-001-ref.html": [
+ "09ca86dd699186162137d4090ba2bfa3e930389e",
+ "support"
+ ],
"css/css-text/white-space/reference/tab-stop-threshold-001-ref.html": [
"5694dd2f526176b1a662f5e06c2b1d97cff425df",
"support"
@@ -579714,6 +579960,10 @@
"3fa82c16d1f9e7f01760003c07bdfbc38afa060d",
"manual"
],
+ "css/css-transitions/transition-reparented.html": [
+ "3dfd19425fcaa76051618113bfb4793baf06f364",
+ "testharness"
+ ],
"css/css-transitions/transition-test.html": [
"10700abf9bc48d0938fd3f5b77b031ecc0c05e4a",
"reftest"
@@ -591638,6 +591888,10 @@
"3acdfb12852356ac28e91af25c82052d45864b0e",
"testharness"
],
+ "css/cssom/CSSStyleSheet-constructable.html": [
+ "7df1820c0437edbe0edfe4d7bb25c02f832dd3bc",
+ "testharness"
+ ],
"css/cssom/CSSStyleSheet.html": [
"86016ef5a3db6636bf97edc58992f30f909c13a2",
"testharness"
@@ -592030,6 +592284,10 @@
"85dd7324815b8f8ef1a1d0496224c1a0661db9d8",
"support"
],
+ "css/cssom/support/constructable-import.css": [
+ "d8ccc9d491b65c54bc990066d8292eba8a6d5461",
+ "support"
+ ],
"css/cssom/support/getComputedStyle-insets.js": [
"beec32e76bc5fcef4640193e321805975c8554b9",
"support"
@@ -592666,6 +592924,10 @@
"cfd8029223165871c4e2d78bee4a221b54822957",
"support"
],
+ "css/filter-effects/reference/green-100x100.html": [
+ "f718ea6abfbab54333ba674ff0dcd320d8672bcd",
+ "support"
+ ],
"css/filter-effects/reference/svg-feflood-ref.html": [
"5623b08ecd71b292e698ee249a79b59d0046300f",
"support"
@@ -592870,6 +593132,10 @@
"3d8118b387d938b588e8e88ad5ec87a5343e4f72",
"reftest"
],
+ "css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html": [
+ "e3be6544dc803ba7d9c69e9a1d906296c2c15301",
+ "reftest"
+ ],
"css/filter-effects/svg-unknown-input-001.html": [
"7789f2a9af4f1492fa6db36b53a72ada151f61d5",
"reftest"
@@ -593403,7 +593669,7 @@
"reftest"
],
"css/selectors/attribute-selectors/attribute-case/cssom.html": [
- "d03d820a3e6ed93b217558de2c3b91c040b22dd7",
+ "74e7b9645f89423c628914cd3f246728de8ac71f",
"testharness"
],
"css/selectors/attribute-selectors/attribute-case/resources/semantics-quirks.html": [
@@ -610855,7 +611121,7 @@
"testharness"
],
"fetch/api/headers/headers-no-cors.window.js": [
- "ebf0142e280c668ac2adf5205e7e26712598e203",
+ "9ea76e03e138f1604053771bb1a75130758726f7",
"testharness"
],
"fetch/api/headers/headers-normalize.html": [
@@ -630518,6 +630784,10 @@
"d09915cd974dd3a8b828eb58c004d63c853d1271",
"testharness"
],
+ "html/syntax/parsing/quotes-in-meta.html": [
+ "3d1eaf02a20c7dad80656f69adb26e24e1b1647f",
+ "testharness"
+ ],
"html/syntax/parsing/template.js": [
"b249fb64c71c16f1b6cefcc59668699f769a2341",
"support"
@@ -633179,7 +633449,7 @@
"support"
],
"interfaces/webrtc-stats.idl": [
- "b2bf38e9fd45f81598bbdef1daef789cbdd75977",
+ "cf07738b8b45c808a80895356699a5e04967e25e",
"support"
],
"interfaces/webrtc.idl": [
@@ -656255,7 +656525,7 @@
"support"
],
"resource-timing/single-entry-per-resource.html": [
- "39d7d5b256616d6b1d8a93c2c188412746791355",
+ "1f8f4005e42c61ebb0dc0cae549429b29c68bd97",
"testharness"
],
"resource-timing/supported_resource_type.any.js": [
@@ -660310,6 +660580,10 @@
"aa885e7a4de04820822eb562d47780999fa253e4",
"support"
],
+ "service-workers/service-worker/resources/import-relative.xsl": [
+ "063a62d03143a32f44365bf1e7b08d283ae52895",
+ "support"
+ ],
"service-workers/service-worker/resources/import-scripts-echo.py": [
"7d92794e31b6b1270db26779f63644ac42a3d3d6",
"support"
@@ -660942,6 +661216,18 @@
"e388e461448f64d37d747b26830f4e869a2c6528",
"support"
],
+ "service-workers/service-worker/resources/xsl-base-url-iframe.xml": [
+ "065a07acb284821dde1cbea8680781a524f21bc2",
+ "support"
+ ],
+ "service-workers/service-worker/resources/xsl-base-url-worker.js": [
+ "50e2b1842ffc7f2ef2017846406eb67ed9491ead",
+ "support"
+ ],
+ "service-workers/service-worker/resources/xslt-pass.xsl": [
+ "2cd7f2f8f86a23d464b30feab0939931134810cc",
+ "support"
+ ],
"service-workers/service-worker/respond-with-body-accessed-response.https.html": [
"f6713d89216ec0a8e5cfc6f4cbb326f0bd6e672e",
"testharness"
@@ -661114,6 +661400,10 @@
"f9ba656b5178359f2c7b6e2419a57ff12ec79d23",
"testharness"
],
+ "service-workers/service-worker/xsl-base-url.https.html": [
+ "1d3c36408a66a7785b884c9cdc39dcd2820f9af0",
+ "testharness"
+ ],
"service-workers/specgen.json": [
"88c36ed04aada9b61dfe65f97dc6e73d7913a6a9",
"support"
@@ -662587,7 +662877,7 @@
"reftest"
],
"svg/extensibility/foreignObject/properties.svg": [
- "b92a6d1d15bcfa61da6ead3eeaba5122d9c2be76",
+ "dd198f177dfb2906ce6be9184df9fbbb8feefe93",
"testharness"
],
"svg/extensibility/foreignObject/stacking-context-ref.html": [
@@ -662630,6 +662920,10 @@
"022445662b7d9d519ca28a1eeca47c9199ceafca",
"testharness"
],
+ "svg/geometry/parsing/height-computed.svg": [
+ "bcc1f9d0e11ab8e223a2aa238ac448273f93ea08",
+ "testharness"
+ ],
"svg/geometry/parsing/r-computed.svg": [
"b0f6bb0f671267c4895413ff749f8a7a96f2cb5a",
"testharness"
@@ -662666,6 +662960,10 @@
"e92e2cf6410ba4071baa81c18ec4462ba60b42dd",
"testharness"
],
+ "svg/geometry/parsing/width-computed.svg": [
+ "1af3de12347af146aad2cff7447a753942beaf60",
+ "testharness"
+ ],
"svg/geometry/parsing/x-computed.svg": [
"9355ea3ae95767b9cee92d49b4f1d1809e2edc06",
"testharness"
@@ -665554,6 +665852,10 @@
"297f8ede687a28a12ced98a4b89051dd9ddf5090",
"testharness"
],
+ "svg/pservers/parsing/stop-color-computed.svg": [
+ "b05a69f10b9e3614f7a588998ea06879df437da7",
+ "testharness"
+ ],
"svg/pservers/parsing/stop-opacity-computed.svg": [
"cb0f8295ce4777a91c26c66995a2b11c5d03b43c",
"testharness"
@@ -665630,6 +665932,18 @@
"04d8d3025ee0f039a05bdd439f2dc02c13f49a23",
"reftest"
],
+ "svg/pservers/reftests/reference/green-100x100.svg": [
+ "120941444a4898197d6b6001f9908a6cd48b62ba",
+ "support"
+ ],
+ "svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg": [
+ "da0a05dd879cc9358535002ea4737cdbdaef45f2",
+ "reftest"
+ ],
+ "svg/pservers/scripted/stop-color-inheritance-currentcolor.svg": [
+ "22bf513c862bf8d1ccbac358c71560fd834e545a",
+ "testharness"
+ ],
"svg/render/reftests/blending-001-ref.svg": [
"dcd39a8a1d5b2c76038a50506e661d3c5513a847",
"support"
@@ -671319,7 +671633,7 @@
"support"
],
"tools/wptrunner/requirements_sauce.txt": [
- "666db37ac1a4822250ee1dcdbf3c23e672a154e3",
+ "e38f4dea67038c44f64b5e9696c3484f117ed849",
"support"
],
"tools/wptrunner/requirements_servo.txt": [
@@ -671459,7 +671773,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/base.py": [
- "712ff3fbc9b30dfcd4b0719391bc80ee5eb22340",
+ "6413753929100c5042e2ab8191a616372e8fd6d3",
"support"
],
"tools/wptrunner/wptrunner/browsers/chrome.py": [
@@ -671483,7 +671797,7 @@
"support"
],
"tools/wptrunner/wptrunner/browsers/firefox.py": [
- "618f011abaf40a9d7fe42b34106e44326388076b",
+ "14cac17cf6d292de5f48c4bfa556ef1c30853011",
"support"
],
"tools/wptrunner/wptrunner/browsers/ie.py": [
@@ -671599,11 +671913,11 @@
"support"
],
"tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js": [
- "61f894f8760bc623c8953e0eb7f0c3e01d5f72e4",
+ "194e192c2f4e22021781f633841a33eae9925417",
"support"
],
"tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js": [
- "c1cc649e323f9742396b73e301ff306271b160d3",
+ "a7486b6594d96093ae2267c48ca0b87ab40ef7cc",
"support"
],
"tools/wptrunner/wptrunner/executors/reftest.js": [
@@ -671679,15 +671993,15 @@
"support"
],
"tools/wptrunner/wptrunner/testharnessreport.js": [
- "281f97ddaa6673333056e35c3e2f3adb804e100c",
+ "29fc0e9873188223ac3783a8c622bbbe21ec5af5",
"support"
],
"tools/wptrunner/wptrunner/testloader.py": [
- "a395a50a45c427262d604223dfd341f2a6e5892b",
+ "f8849ebe75e6c5a2370ad45bc8fd9d5d43750277",
"support"
],
"tools/wptrunner/wptrunner/testrunner.py": [
- "e819f242e2df532d6e9c62e9292e1f563047c148",
+ "d3a62646278e38fcb0c86bc163c4595560f5fa3f",
"support"
],
"tools/wptrunner/wptrunner/tests/__init__.py": [
@@ -673146,8 +673460,8 @@
"e47a3ba7a981e978cdf015f8fc6bfbae6762dba9",
"testharness"
],
- "user-timing/mark-measure-return-null.html": [
- "5afd9633f24751eb40e3bd5e1d73c47922639f0c",
+ "user-timing/mark-measure-feature-detection.html": [
+ "6f1ad489e95680fc5d1be4e25dcaa2eeee9a0aa5",
"testharness"
],
"user-timing/mark.any.js": [
@@ -676487,7 +676801,7 @@
"support"
],
"webdriver/tests/element_clear/clear.py": [
- "5d60b991acd0ae708312462a6b40d190c706059f",
+ "a1017745f3d3999d42fda413324890132f4b04a8",
"wdspec"
],
"webdriver/tests/element_clear/user_prompts.py": [
@@ -678055,7 +678369,7 @@
"testharness"
],
"webrtc/RTCPeerConnection-setDescription-transceiver.html": [
- "5fc957df8fb8d93385fb09b37b388399ddef64d3",
+ "a8056d473cd7ad3a3bdd348bc689aab756fab778",
"testharness"
],
"webrtc/RTCPeerConnection-setLocalDescription-answer.html": [
@@ -678203,7 +678517,7 @@
"testharness"
],
"webrtc/RTCRtpTransceiver.https.html": [
- "aba2796489603b9798832a64f08988e8507fa29a",
+ "c200271490eaee404101360768276d9563453c24",
"testharness"
],
"webrtc/RTCSctpTransport-constructor.html": [
diff --git a/tests/wpt/metadata/css/css-animations/computed-style-animation-parsing.html.ini b/tests/wpt/metadata/css/css-animations/computed-style-animation-parsing.html.ini
new file mode 100644
index 00000000000..6a1ab9d1ea0
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/computed-style-animation-parsing.html.ini
@@ -0,0 +1,16 @@
+[computed-style-animation-parsing.html]
+ [Test an animation name that is the same as a possible animation fill-mode.]
+ expected: FAIL
+
+ [Test an animation name that is the same as a possible running state.]
+ expected: FAIL
+
+ [Test animation name being empty.]
+ expected: FAIL
+
+ [Test a non-conflicting animation name.]
+ expected: FAIL
+
+ [Test an animation name that is the same as a possible animation direction.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-animations/style-animation-parsing.html.ini b/tests/wpt/metadata/css/css-animations/style-animation-parsing.html.ini
new file mode 100644
index 00000000000..46d53ea9343
--- /dev/null
+++ b/tests/wpt/metadata/css/css-animations/style-animation-parsing.html.ini
@@ -0,0 +1,16 @@
+[style-animation-parsing.html]
+ [Test an animation name that is the same as a possible animation fill-mode.]
+ expected: FAIL
+
+ [Test an animation name that is the same as a possible running state.]
+ expected: FAIL
+
+ [Test animation name being empty.]
+ expected: FAIL
+
+ [Test a non-conflicting animation name.]
+ expected: FAIL
+
+ [Test an animation name that is the same as a possible animation direction.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/css-backgrounds/background-size/background-size-cover-svg.html.ini b/tests/wpt/metadata/css/css-backgrounds/background-size/background-size-cover-svg.html.ini
new file mode 100644
index 00000000000..8d655776232
--- /dev/null
+++ b/tests/wpt/metadata/css/css-backgrounds/background-size/background-size-cover-svg.html.ini
@@ -0,0 +1,2 @@
+[background-size-cover-svg.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-float-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-float-001.html.ini
new file mode 100644
index 00000000000..cb52264545b
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/pre-float-001.html.ini
@@ -0,0 +1,2 @@
+[pre-float-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-text/white-space/pre-wrap-float-001.html.ini b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-float-001.html.ini
new file mode 100644
index 00000000000..6345438ea47
--- /dev/null
+++ b/tests/wpt/metadata/css/css-text/white-space/pre-wrap-float-001.html.ini
@@ -0,0 +1,2 @@
+[pre-wrap-float-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/css-transitions/transition-reparented.html.ini b/tests/wpt/metadata/css/css-transitions/transition-reparented.html.ini
new file mode 100644
index 00000000000..b2d796167e0
--- /dev/null
+++ b/tests/wpt/metadata/css/css-transitions/transition-reparented.html.ini
@@ -0,0 +1,4 @@
+[transition-reparented.html]
+ [When an element is reparented, any CSS Transition on it should be cancelled]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini
new file mode 100644
index 00000000000..de84b9ffb05
--- /dev/null
+++ b/tests/wpt/metadata/css/cssom/CSSStyleSheet-constructable.html.ini
@@ -0,0 +1,4 @@
+[CSSStyleSheet-constructable.html]
+ [CSSStyleSheet constructor and adoptedStyleSheets]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html.ini b/tests/wpt/metadata/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html.ini
new file mode 100644
index 00000000000..58c89707184
--- /dev/null
+++ b/tests/wpt/metadata/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html.ini
@@ -0,0 +1,2 @@
+[svg-sourcegraphic-currentcolor-dynamic-001.html]
+ expected: FAIL
diff --git a/tests/wpt/metadata/css/selectors/attribute-selectors/attribute-case/cssom.html.ini b/tests/wpt/metadata/css/selectors/attribute-selectors/attribute-case/cssom.html.ini
index c1bf5fa223a..63cd6bde7aa 100644
--- a/tests/wpt/metadata/css/selectors/attribute-selectors/attribute-case/cssom.html.ini
+++ b/tests/wpt/metadata/css/selectors/attribute-selectors/attribute-case/cssom.html.ini
@@ -71,3 +71,27 @@
[[foo="bar"/**/s\] setting CSSStyleRule#selectorText in @media]
expected: FAIL
+ [[*|foo="bar" s\] getting CSSStyleRule#selectorText]
+ expected: FAIL
+
+ [[*|foo="bar" s\] getting CSSRule#cssText in @media]
+ expected: FAIL
+
+ [[*|foo="bar" s\] insertRule in @media]
+ expected: FAIL
+
+ [[*|foo="bar" s\] getting CSSRule#cssText]
+ expected: FAIL
+
+ [[*|foo="bar" s\] insertRule]
+ expected: FAIL
+
+ [[*|foo="bar" s\] getting CSSStyleRule#selectorText in @media]
+ expected: FAIL
+
+ [[*|foo="bar" s\] setting CSSStyleRule#selectorText]
+ expected: FAIL
+
+ [[*|foo="bar" s\] setting CSSStyleRule#selectorText in @media]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini b/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini
index 6c1059dbd29..2483e89044c 100644
--- a/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini
+++ b/tests/wpt/metadata/fetch/api/headers/headers-no-cors.window.js.ini
@@ -32,3 +32,12 @@
["no-cors" Headers object cannot have content-language set to sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss, , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
expected: FAIL
+ ["no-cors" Headers object cannot have content-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
+ expected: FAIL
+
+ ["no-cors" Headers object cannot have accept-language set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
+ expected: FAIL
+
+ ["no-cors" Headers object cannot have accept set to , sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
new file mode 100644
index 00000000000..87b07c3e670
--- /dev/null
+++ b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_1.html.ini
@@ -0,0 +1,4 @@
+[traverse_the_history_1.html]
+ [Multiple history traversals from the same task]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini b/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
deleted file mode 100644
index dc2e45516de..00000000000
--- a/tests/wpt/metadata/html/browsers/history/the-history-interface/traverse_the_history_5.html.ini
+++ /dev/null
@@ -1,4 +0,0 @@
-[traverse_the_history_5.html]
- [Multiple history traversals, last would be aborted]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
index 29b0025a2ae..0f1a214d0ee 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/environment-changes/viewport-change.html.ini
@@ -5,11 +5,29 @@
expected: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
- expected: TIMEOUT
+ expected: FAIL
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
expected: TIMEOUT
[picture: source (max-width:500px) valid image, img valid image, resize to narrow]
- expected: TIMEOUT
+ expected: FAIL
+
+ [picture: source (max-width:500px) broken image, img valid image, resize to narrow]
+ expected: FAIL
+
+ [img (srcset 1 cand) valid image, resize to wide]
+ expected: FAIL
+
+ [picture: same URL in source (max-width:500px) and img, resize to wide]
+ expected: FAIL
+
+ [img (srcset 1 cand) valid image, resize to narrow]
+ expected: FAIL
+
+ [picture: source (max-width:500px) valid image, img broken image, resize to wide]
+ expected: FAIL
+
+ [picture: same URL in source (max-width:500px) and img, resize to narrow]
+ expected: FAIL
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
deleted file mode 100644
index 8cc42056d34..00000000000
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/non-active-document.html.ini
+++ /dev/null
@@ -1,10 +0,0 @@
-[non-active-document.html]
- [DOMParser]
- expected: FAIL
-
- [createHTMLDocument]
- expected: FAIL
-
- [<template>]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini
index 72a023d1ce4..caa0aa5f39e 100644
--- a/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini
+++ b/tests/wpt/metadata/html/semantics/embedded-content/the-img-element/sizes/parse-a-sizes-attribute-standards-mode.html.ini
@@ -1,5 +1,4 @@
[parse-a-sizes-attribute-standards-mode.html]
- expected: TIMEOUT
[<img srcset="/images/green-1x1.png?e59 50w, /images/green-16x16.png?e59 51w" sizes="(min-width:0) or (min-width:unknown-mf-value) 1px"> ref sizes="1px" (standards mode)]
expected: FAIL
diff --git a/tests/wpt/metadata/html/syntax/parsing/quotes-in-meta.html.ini b/tests/wpt/metadata/html/syntax/parsing/quotes-in-meta.html.ini
new file mode 100644
index 00000000000..48f4a17ca64
--- /dev/null
+++ b/tests/wpt/metadata/html/syntax/parsing/quotes-in-meta.html.ini
@@ -0,0 +1,4 @@
+[quotes-in-meta.html]
+ [quotes-in-meta]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
index 99a24216c88..7725b118e9d 100644
--- a/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
+++ b/tests/wpt/metadata/performance-timeline/webtiming-resolution.any.js.ini
@@ -12,3 +12,6 @@
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
expected: TIMEOUT
+ [Verifies the resolution of performance.now() is at least 5 microseconds.]
+ expected: FAIL
+
diff --git a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
index c7e9c7434f5..818a429ed39 100644
--- a/tests/wpt/metadata/quirks/unitless-length/limited-quirks.html.ini
+++ b/tests/wpt/metadata/quirks/unitless-length/no-quirks.html.ini
@@ -1,4 +1,4 @@
-[limited-quirks.html]
+[no-quirks.html]
[top: -\\31 .5]
expected: FAIL
diff --git a/tests/wpt/metadata/resource-timing/single-entry-per-resource.html.ini b/tests/wpt/metadata/resource-timing/single-entry-per-resource.html.ini
index 485e42b1d78..325806cd7c6 100644
--- a/tests/wpt/metadata/resource-timing/single-entry-per-resource.html.ini
+++ b/tests/wpt/metadata/resource-timing/single-entry-per-resource.html.ini
@@ -2,6 +2,3 @@
[One resource when reusing data]
expected: FAIL
- [Only one resource entry per resource]
- expected: FAIL
-
diff --git a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
index 268949ced5c..f584fce5df1 100644
--- a/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
+++ b/tests/wpt/metadata/workers/semantics/multiple-workers/005.html.ini
@@ -1,4 +1,5 @@
[005.html]
+ expected: ERROR
[dedicated worker in shared worker in dedicated worker]
expected: FAIL
diff --git a/tests/wpt/web-platform-tests/css/css-animations/computed-style-animation-parsing.html b/tests/wpt/web-platform-tests/css/css-animations/computed-style-animation-parsing.html
new file mode 100644
index 00000000000..15a1665be5e
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/computed-style-animation-parsing.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Animations: parsing computedStyle.animation</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations/#animation">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test1"></div>
+<div id="test2"></div>
+<script>
+function testComputedStyle(computedStyle1, computedStyle2, name) {
+ assert_equals(computedStyle1.animationName, name, "computedStyle1.animationName");
+ assert_equals(computedStyle2.animationName, name, "computedStyle2.animationName");
+ assert_equals(computedStyle1.animation, computedStyle2.animation,
+ "computedStyle1 and computedStyle2 should have the same animation");
+}
+
+function testAnimation(input, name) {
+ var style1 = test1.style;
+ var style2 = test2.style;
+ var computedStyle1 = getComputedStyle(test1);
+ var computedStyle2 = getComputedStyle(test2);
+
+ style1.animation = input;
+ style2.animation = style1.animation;
+ testComputedStyle(computedStyle1, computedStyle2, name);
+ style2.animation = computedStyle1.animation;
+ testComputedStyle(computedStyle1, computedStyle2, name);
+}
+
+test(() => {
+ // We are duplicating the logic of testAnimation because the animationName of
+ // the getComputedStyle is "none" when there is no animation.
+ var style1 = test1.style;
+ var style2 = test2.style;
+ var computedStyle1 = getComputedStyle(test1);
+ var computedStyle2 = getComputedStyle(test2);
+
+ style1.animation = "";
+ style2.animation = style1.animation;
+ testComputedStyle(computedStyle1, computedStyle2, "none");
+ style2.animation = computedStyle1.animation;
+ assert_equals(computedStyle2.animationName, "none");
+}, "Test animation name being empty.");
+
+test(() => {
+ testAnimation("myShorthandAnim", "myShorthandAnim");
+}, "Test a non-conflicting animation name.");
+
+test(() => {
+ testAnimation("none", "none");
+ testAnimation("forwards", "none");
+ testAnimation("none forwards", "forwards");
+}, "Test an animation name that is the same as a possible animation fill-mode.");
+
+test(() => {
+ testAnimation("normal", "none");
+ testAnimation("reverse", "none");
+ testAnimation("normal normal", "normal");
+ testAnimation("normal reverse", "reverse");
+}, "Test an animation name that is the same as a possible animation direction.");
+
+test(() => {
+ testAnimation("running", "none");
+ testAnimation("paused", "none");
+ testAnimation("running running", "running");
+ testAnimation("running paused", "paused");
+}, "Test an animation name that is the same as a possible running state.");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-animations/style-animation-parsing.html b/tests/wpt/web-platform-tests/css/css-animations/style-animation-parsing.html
new file mode 100644
index 00000000000..792fda33ed8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-animations/style-animation-parsing.html
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Animations: parsing style.animation</title>
+<link rel="help" href="https://drafts.csswg.org/css-animations/#animation">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="test1"></div>
+<div id="test2"></div>
+<script>
+function testStyle(style1, style2, name) {
+ assert_equals(style1.animationName, name, "style1.animationName");
+ assert_equals(style2.animationName, name, "style2.animationName");
+ assert_equals(style1.animation, style2.animation,
+ "style1 and style2 should have the same animation");
+}
+
+function testAnimation(input, name) {
+ var style1 = test1.style;
+ var style2 = test2.style;
+
+ style1.animation = input;
+ style2.animation = style1.animation;
+ testStyle(style1, style2, name);
+}
+
+test(() => {
+ testAnimation("", "");
+}, "Test animation name being empty.");
+
+test(() => {
+ testAnimation("myShorthandAnim", "myShorthandAnim");
+}, "Test a non-conflicting animation name.");
+
+test(() => {
+ testAnimation("none", "none");
+ testAnimation("forwards", "none");
+ testAnimation("none forwards", "forwards");
+}, "Test an animation name that is the same as a possible animation fill-mode.");
+
+test(() => {
+ testAnimation("normal", "none");
+ testAnimation("reverse", "none");
+ testAnimation("normal normal", "normal");
+ testAnimation("normal reverse", "reverse");
+}, "Test an animation name that is the same as a possible animation direction.");
+
+test(() => {
+ testAnimation("running", "none");
+ testAnimation("paused", "none");
+ testAnimation("running running", "running");
+ testAnimation("running paused", "paused");
+}, "Test an animation name that is the same as a possible running state.");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/background-size-cover-svg.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/background-size-cover-svg.html
new file mode 100644
index 00000000000..5e33c75afce
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/background-size-cover-svg.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Background Test: A SVG background should fully cover the positioning area</title>
+ <link rel="author" title="schenney" href="mailto:schenney@chromium.org">
+ <link rel="help" href="http://www.w3.org/TR/css3-background">
+ <link rel="match" href="reference/background-size-cover-svg-ref.html">
+ <style>
+ div {
+ height: 400px;
+ width: 600px;
+ position: relative;
+ background-color: red;
+ background-size: cover;
+ background-repeat: no-repeat;
+ background-position: bottom center;
+ background-image: url("support/rectangle-2560x208.svg");
+ }
+ </style>
+</head>
+
+<body>
+ <div></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html
new file mode 100644
index 00000000000..b6dd172aa66
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/reference/background-size-cover-svg-ref.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <title>CSS Background Test Reference</title>
+ <link rel="author" title="schenney" href="mailto:schenney@chromium.org">
+ <style>
+ div {
+ height: 400px;
+ width: 600px;
+ position: relative;
+ background-color: red;
+ background-repeat: repeat;
+ background-position: bottom center;
+ background-image: url("../support/50x50-green.png");
+ }
+ </style>
+</head>
+
+<body>
+ <div></div>
+</body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/support/rectangle-2560x208.svg b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/support/rectangle-2560x208.svg
new file mode 100644
index 00000000000..578dd86ae05
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-backgrounds/background-size/support/rectangle-2560x208.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2560 208">
+ <rect fill="green" width="2560" height="208"/>
+</svg>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005-ref.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005-ref.html
new file mode 100644
index 00000000000..641fbb9dcf5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005-ref.html
@@ -0,0 +1,67 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test Reference: Test column-span:all with various display types</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+
+ <style>
+ .column {
+ column-count: 1;
+ column-rule: 6px solid;
+ width: 600px;
+ outline: 1px solid black;
+ }
+ .spanner {
+ /* column-count: 1 makes this behave like a real spanner. */
+ outline: 1px solid blue;
+ }
+ fieldset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ }
+ </style>
+
+ <body>
+ <article class="column">
+ <div>block1</div>
+ <table class="spanner">
+ <tr>
+ <td>table as a spanner</td>
+ </tr>
+ </table>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <div class="spanner" style="display: grid;">grid as a spanner</div>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <div class="spanner" style="display: flex;">flex as a spanner</div>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <fieldset class="spanner">fieldset as a spanner</fieldset>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <details open class="spanner">details as a spanner</details>
+ <div>block2</div>
+ </article>
+ <br>
+
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005.html b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005.html
new file mode 100644
index 00000000000..249b69b7107
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-multicol/multicol-span-all-005.html
@@ -0,0 +1,70 @@
+<!DOCTYPE html>
+<html>
+ <meta charset="utf-8">
+ <title>CSS Multi-column Layout Test: Test column-span:all with various display types</title>
+ <link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
+ <link rel="author" title="Mozilla" href="http://www.mozilla.org/">
+ <link rel="help" href="https://drafts.csswg.org/css-multicol-1/#column-span">
+ <link rel="match" href="multicol-span-all-005-ref.html">
+ <meta name="assert" content="This test checks a column-span:all element should act like column-span: none if it's under different block formatting context.">
+
+ <style>
+ .column {
+ column-count: 3;
+ column-rule: 6px solid;
+ width: 600px;
+ outline: 1px solid black;
+ }
+ .spanner {
+ column-span: all;
+ outline: 1px solid blue;
+ }
+ fieldset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ }
+ </style>
+
+ <body>
+ <article class="column">
+ <div>block1</div>
+ <table class="spanner">
+ <tr>
+ <td>table as a spanner</td>
+ </tr>
+ </table>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <div class="spanner" style="display: grid;">grid as a spanner</div>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <div class="spanner" style="display: flex;">flex as a spanner</div>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <fieldset class="spanner">fieldset as a spanner</fieldset>
+ <div>block2</div>
+ </article>
+ <br>
+
+ <article class="column">
+ <div>block1</div>
+ <details open class="spanner">details as a spanner</details>
+ <div>block2</div>
+ </article>
+ <br>
+
+ </body>
+</html>
diff --git a/tests/wpt/web-platform-tests/css/css-scoping/slotted-nested.html b/tests/wpt/web-platform-tests/css/css-scoping/slotted-nested.html
new file mode 100644
index 00000000000..c7139fea4c2
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-scoping/slotted-nested.html
@@ -0,0 +1,49 @@
+<!doctype html>
+<link rel="href" href="https://mozilla.org" title="Mozilla">
+<link rel="author" href="mailto:emilio@crisal.io" title="Emilio Cobos Álvarez">
+<link rel="help" href="https://drafts.csswg.org/css-scoping/#slotted-pseudo">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<div id="host"><p>This text should be green</p></div>
+<script>
+ let shadow = host.attachShadow({ mode: "open" });
+ shadow.innerHTML = `
+ <style>
+ /* This is not expected to match */
+ .container ::slotted(p) {
+ color: red !important;
+ }
+
+ /* This _is_ expected to match */
+ #nested ::slotted(p) {
+ background-color: green;
+ }
+ </style>
+ <div id="nested"><slot></slot></div>
+ `;
+
+ let nested = shadow.querySelector("#nested").attachShadow({ mode: "open" });
+ nested.innerHTML = `
+ <style>
+ .container ::slotted(p) {
+ color: green;
+ }
+ </style>
+ <div class="container">
+ <slot></slot>
+ </div>
+ `;
+
+ let p = document.querySelector("p");
+ test(function() {
+ assert_equals(getComputedStyle(p).color, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(p).backgroundColor, "rgb(0, 128, 0)");
+ }, "Slotted matches rules against the slot in the right tree");
+ test(function() {
+ nested.querySelector(".container").classList.remove("container");
+ assert_not_equals(getComputedStyle(p).color, "rgb(0, 128, 0)");
+
+ nested.host.removeAttribute("id");
+ assert_not_equals(getComputedStyle(p).backgroundColor, "rgb(0, 128, 0)");
+ }, "Style invalidation works correctly for nested slots");
+</script>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-float-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-float-001.html
new file mode 100644
index 00000000000..4d9f8bba4d5
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-float-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>CSS test preserved spaces and floats interaction</title>
+<link rel="author" title="Koji Ishii" href="kojii@chromium.org">
+<link rel="match" href="reference/pre-float-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<style>
+html {
+ font-family: Ahem;
+ font-size: 20px;
+ line-height: 1;
+}
+.container {
+ white-space: pre;
+ width: 10ch;
+ margin-bottom: 1em;
+}
+.float {
+ float: left;
+ width: 3ch;
+ height: 2em;
+ background: orange;
+}
+</style>
+<body>
+ <div class="float"></div>
+ <div class="container">123456 <br>123456</div>
+ <div class="float"></div>
+ <div class="container">1234567 <br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567 <br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567 <br>1234567</div>
+ <div class="float"></div>
+ <div class="container">12345678 <br>12345678</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-float-001.html b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-float-001.html
new file mode 100644
index 00000000000..6ef0faa0cf8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/pre-wrap-float-001.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+<title>CSS test preserved spaces and floats interaction</title>
+<link rel="author" title="Koji Ishii" href="kojii@chromium.org">
+<link rel="match" href="reference/pre-wrap-float-001-ref.html">
+<link rel="help" href="https://drafts.csswg.org/css-text-3/#white-space-property">
+<style>
+html {
+ font-family: Ahem;
+ font-size: 20px;
+ line-height: 1;
+}
+.container {
+ white-space: pre-wrap;
+ width: 10ch;
+ margin-bottom: 1em;
+}
+.float {
+ float: left;
+ width: 3ch;
+ height: 2em;
+ background: orange;
+}
+</style>
+<body>
+ <div class="float"></div>
+ <div class="container">123456 123456</div>
+ <div class="float"></div>
+ <div class="container">1234567 1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567 1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567 1234567</div>
+ <div class="float"></div>
+ <div class="container">12345678 12345678</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-float-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-float-001-ref.html
new file mode 100644
index 00000000000..b05c008bed1
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-float-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<style>
+html {
+ font-family: Ahem;
+ font-size: 20px;
+ line-height: 1;
+}
+.container {
+ white-space: pre;
+ margin-bottom: 1em;
+}
+.float {
+ float: left;
+ width: 3ch;
+ height: 2em;
+ background: orange;
+}
+</style>
+<body>
+ <div class="float"></div>
+ <div class="container">123456<br>123456</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container">12345678<br>12345678</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-float-001-ref.html b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-float-001-ref.html
new file mode 100644
index 00000000000..09ca86dd699
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-text/white-space/reference/pre-wrap-float-001-ref.html
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<style>
+html {
+ font-family: Ahem;
+ font-size: 20px;
+ line-height: 1;
+}
+.container {
+ white-space: pre;
+ margin-bottom: 1em;
+}
+.float {
+ float: left;
+ width: 3ch;
+ height: 2em;
+ background: orange;
+}
+</style>
+<body>
+ <div class="float"></div>
+ <div class="container">123456<br>123456</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container">1234567<br>1234567</div>
+ <div class="float"></div>
+ <div class="container"><br><br>12345678<br>12345678</div>
+</body>
diff --git a/tests/wpt/web-platform-tests/css/css-transitions/transition-reparented.html b/tests/wpt/web-platform-tests/css/css-transitions/transition-reparented.html
new file mode 100644
index 00000000000..3dfd19425fc
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/css-transitions/transition-reparented.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>CSS Transition should cancel when an element is reparented</title>
+<link rel="help" href="https://www.w3.org/TR/css-transitions-1/#starting">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+.animated-div {
+ margin-left: 100px;
+ transition: margin-left 10s -5s linear;
+}
+</style>
+
+<div id="parent1">
+ <div id="target" class='animated-div'></div>
+</div>
+
+<div id="parent2"></div>
+
+<script>
+'use strict';
+
+test(t => {
+ assert_equals(getComputedStyle(target).marginLeft, '100px');
+ target.style.marginLeft = '200px';
+
+ // Because the start delay is -50% of the transition duration, we should
+ // immediately be (approximately) at the halfway point. What we really care
+ // about checking is that the transition has started but has not ended.
+ assert_not_equals(getComputedStyle(target).marginLeft, '100px');
+ assert_not_equals(getComputedStyle(target).marginLeft, '200px');
+
+ // Now change the target's parent. This should cancel the transition and
+ // skip straight to the end state.
+ parent2.appendChild(target);
+ assert_equals(getComputedStyle(target).marginLeft, '200px');
+}, 'When an element is reparented, any CSS Transition on it should be cancelled');
+</script>
diff --git a/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html
new file mode 100644
index 00000000000..7df1820c043
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/CSSStyleSheet-constructable.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html>
+<title>CSSStyleSheet constructor and adoptedStyleSheets</title>
+<link rel="author" title="Rakina Zata Amni" href="mailto:rakina@chromium.org">
+<link rel="help" href="https://wicg.github.io/construct-stylesheets/">
+<script src = '/resources/testharness.js'></script>
+<script src = '/resources/testharnessreport.js'></script>
+
+<section id="firstSection">
+ <div>
+ <span class="green"></span>
+ <span class="red"></span>
+ <span class="blue"></span>
+ <span class="white"></span>
+ <span class="yellow"></span>
+ </div>
+</section>
+<section id="secondSection"></section>
+<section id="thirdSection"></section>
+
+<script>
+'use strict';
+const greenStyleText = ".green { color: green; }";
+const redStyleTexts = [".red { color: red; }", ".red + span + span { color: red; }"];
+const blueStyleTexts = [".blue { color: blue; }", ".blue + span + span { color: blue; }"];
+const whiteStyleText = "* { color: white; }";
+const yellowStyleText = ".yellow { color: yellow; }";
+
+const firstDiv = document.querySelector('#firstSection > div');
+const secondDiv = firstDiv.cloneNode(true);
+const shadowRoot = document.querySelector('#secondSection').attachShadow({mode: 'open'});
+shadowRoot.appendChild(secondDiv);
+
+const greenSpan = firstDiv.children[0];
+const redSpan = firstDiv.children[1];
+const blueSpan = firstDiv.children[2];
+const whiteSpan = firstDiv.children[3];
+const yellowSpan = firstDiv.children[4];
+const greenShadowSpan = secondDiv.children[0];
+const redShadowSpan = secondDiv.children[1];
+const blueShadowSpan = secondDiv.children[2];
+const whiteShadowSpan = secondDiv.children[3];
+const yellowShadowSpan = secondDiv.children[4];
+
+test(() => {
+ assert_equals(document.adoptedStyleSheets.length, 0);
+}, "document.adoptedStyleSheets should initially have length 0.");
+
+test(() => {
+ const sheet = new CSSStyleSheet({title: "Red", disabled: true, media: "screen, print"});
+ assert_equals(sheet.title, "Red");
+ assert_equals(sheet.ownerNode, null);
+ assert_equals(sheet.ownerRule, null);
+ assert_equals(sheet.media.length, 2);
+ assert_equals(sheet.media.item(0), "screen");
+ assert_equals(sheet.media.item(1), "print");
+ assert_true(sheet.disabled);
+ assert_equals(sheet.cssRules.length, 0);
+
+ sheet.insertRule(redStyleTexts[0]);
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[0]);
+
+ sheet.insertRule(redStyleTexts[1]);
+ assert_equals(sheet.cssRules.length, 2);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[1]);
+
+ const sheet2 = new CSSStyleSheet({});
+ assert_equals(sheet2.title, "")
+ assert_equals(sheet2.ownerNode, null);
+ assert_equals(sheet2.ownerRule, null);
+ assert_equals(sheet2.media.length, 0);
+ assert_false(sheet2.disabled);
+ assert_equals(sheet2.cssRules.length, 0);
+
+ sheet2.insertRule(redStyleTexts[1]);
+ assert_equals(sheet2.cssRules.length, 1);
+ assert_equals(sheet2.cssRules[0].cssText, redStyleTexts[1]);
+
+ sheet2.deleteRule(0);
+ assert_equals(sheet2.cssRules.length, 0);
+
+const sheet3 = new CSSStyleSheet();
+ assert_equals(sheet3.title, "")
+ assert_equals(sheet3.ownerNode, null);
+ assert_equals(sheet3.ownerRule, null);
+ assert_equals(sheet3.media.length, 0);
+ assert_false(sheet3.disabled);
+ assert_equals(sheet3.cssRules.length, 0);
+
+ sheet3.insertRule(redStyleTexts[1]);
+ assert_equals(sheet3.cssRules.length, 1);
+ assert_equals(sheet3.cssRules[0].cssText, redStyleTexts[1]);
+
+ sheet3.deleteRule(0);
+ assert_equals(sheet3.cssRules.length, 0);
+}, 'new CSSStyleSheet produces empty CSSStyleSheet');
+
+promise_test(() => {
+ const sheet = new CSSStyleSheet({title: "Red", disabled: true, media: "screen, print"});
+ const promise_sheet = sheet.replace(redStyleTexts[0]);
+ return promise_sheet.then(function(sheet) {
+ assert_equals(sheet.title, "Red");
+ assert_equals(sheet.ownerNode, null);
+ assert_equals(sheet.ownerRule, null);
+ assert_equals(sheet.media.length, 2);
+ assert_equals(sheet.media.item(0), "screen");
+ assert_equals(sheet.media.item(1), "print");
+ assert_true(sheet.disabled);
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[0]);
+
+ sheet.insertRule(redStyleTexts[1]);
+ assert_equals(sheet.cssRules.length, 2);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[1]);
+ });
+}, 'CSSStyleSheet.replace produces Promise<CSSStyleSheet>');
+
+function createAllSheetsPromise() {
+ const greenSheet = new CSSStyleSheet();
+ const redSheet = new CSSStyleSheet({media: "screen, print"});
+ const blueSheet = new CSSStyleSheet({title: "Blue", disabled: true});
+ const whiteSheet = new CSSStyleSheet({title: "White", alternate: true});
+ const yellowSheet = new CSSStyleSheet({disabled: false});
+
+ const greenPromise = greenSheet.replace(greenStyleText);
+ const redPromise = redSheet.replace(redStyleTexts[0] + redStyleTexts[1]);
+ const bluePromise = blueSheet.replace(blueStyleTexts[0] + blueStyleTexts[1]);
+ const whitePromise = whiteSheet.replace(whiteStyleText);
+ const yellowPromise = yellowSheet.replace(yellowStyleText);
+ return [greenPromise, redPromise, bluePromise, whitePromise, yellowPromise];
+}
+
+promise_test(() => {
+ return Promise.all(createAllSheetsPromise()).then(values => {
+ const greenStyleSheet = values[0];
+ const redStyleSheet = values[1];
+ const blueStyleSheet = values[2];
+ const whiteStyleSheet = values[3];
+ const yellowStyleSheet = values[4];
+
+ // Lists of style sheets can be created, assigned and read.
+ document.adoptedStyleSheets = [whiteStyleSheet];
+ // alternate stylesheets aren't applied when title != current preferable name
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ document.adoptedStyleSheets = [greenStyleSheet, blueStyleSheet];
+ // disabled stylesheets aren't applied
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ document.adoptedStyleSheets = [redStyleSheet, yellowStyleSheet];
+
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(255, 255, 0)");
+
+ document.adoptedStyleSheets = [redStyleSheet, yellowStyleSheet, greenStyleSheet, blueStyleSheet];
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(255, 255, 0)");
+ });
+}, 'Constructed style sheets can be applied on document');
+
+promise_test(() => {
+ return Promise.all(createAllSheetsPromise()).then(values => {
+ const greenStyleSheet = values[0];
+ const redStyleSheet = values[1];
+ const blueStyleSheet = values[2];
+ const whiteStyleSheet = values[3];
+ const yellowStyleSheet = values[4];
+ shadowRoot.adoptedStyleSheets = [whiteStyleSheet];
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(0, 0, 0)");
+
+ shadowRoot.adoptedStyleSheets = [greenStyleSheet, blueStyleSheet];
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(0, 0, 0)");
+
+ shadowRoot.adoptedStyleSheets = [redStyleSheet, yellowStyleSheet];
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(255, 255, 0)");
+
+ shadowRoot.adoptedStyleSheets = [redStyleSheet, yellowStyleSheet, greenStyleSheet, blueStyleSheet];
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 128, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(255, 255, 0)");
+ });
+}, 'Constructed style sheets can be applied on shadow root');
+
+promise_test(() => {
+ const plainSheet = new CSSStyleSheet();
+ const redStyleSheetPromise = plainSheet.replace(redStyleTexts[0]);
+ return redStyleSheetPromise.then(function(redStyleSheet) {
+ document.adoptedStyleSheets = [redStyleSheet];
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ redStyleSheet.insertRule(redStyleTexts[1]);
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ redStyleSheet.deleteRule(1);
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ redStyleSheet.cssRules[0].style.color = "white";
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 255, 255)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+});
+}, 'Changes to constructed stylesheets through CSSOM is reflected');
+
+promise_test(() => {
+ const plainSheet = new CSSStyleSheet();
+ const redStyleSheetPromise = plainSheet.replace(redStyleTexts[0]);
+ return redStyleSheetPromise.then(function(redStyleSheet) {
+ document.adoptedStyleSheets = [redStyleSheet];
+ shadowRoot.adoptedStyleSheets = [redStyleSheet];
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(0, 0, 0)");
+
+ shadowRoot.adoptedStyleSheets[0].insertRule(redStyleTexts[1]);
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ assert_equals(getComputedStyle(greenShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueShadowSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteShadowSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowShadowSpan).color, "rgb(0, 0, 0)");
+});
+}, 'Constructed stylesheet can be used and modified in multiple TreeScopes');
+
+promise_test(() => {
+ const iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ const thirdDiv = firstDiv.cloneNode(true);
+ iframe.contentDocument.body.appendChild(thirdDiv);
+ const greenIframeSpan = thirdDiv.children[0];
+ const redIframeSpan = thirdDiv.children[1];
+ const blueIframeSpan = thirdDiv.children[2];
+ const whiteIframeSpan = thirdDiv.children[3];
+ const yellowIframeSpan = thirdDiv.children[4];
+
+ const plainSheet = new CSSStyleSheet();
+ const redStyleSheetPromise = plainSheet.replace(redStyleTexts[0]);
+ return redStyleSheetPromise.then(function(redStyleSheet) {
+ assert_throws('NotAllowedError', () => { iframe.contentDocument.adoptedStyleSheets = [redStyleSheet]; });
+ assert_equals(getComputedStyle(greenIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowIframeSpan).color, "rgb(0, 0, 0)");
+
+ document.adoptedStyleSheets = [redStyleSheet];
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ document.adoptedStyleSheets[0].insertRule(redStyleTexts[1]);
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+ });
+}, 'Stylesheets constructed on the main Document cannot be used in iframes');
+
+promise_test(() => {
+ const iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ const thirdDiv = firstDiv.cloneNode(true);
+ iframe.contentDocument.body.appendChild(thirdDiv);
+ const greenIframeSpan = thirdDiv.children[0];
+ const redIframeSpan = thirdDiv.children[1];
+ const blueIframeSpan = thirdDiv.children[2];
+ const whiteIframeSpan = thirdDiv.children[3];
+ const yellowIframeSpan = thirdDiv.children[4];
+
+ // Make sure both the main Document and the iframe are not styled
+ const emptyStyleSheet = new CSSStyleSheet();
+ document.adoptedStyleSheets = [emptyStyleSheet];
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ assert_equals(getComputedStyle(greenIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowIframeSpan).color, "rgb(0, 0, 0)");
+
+ const iframePlainSheet = new iframe.contentWindow.CSSStyleSheet();
+ const iframeRedStyleSheetPromise = iframePlainSheet.replace(redStyleTexts[0]);
+ return iframeRedStyleSheetPromise.then(function(iframeRedStyleSheet) {
+ assert_throws('NotAllowedError', () => { document.adoptedStyleSheets = [iframeRedStyleSheet]; });
+ assert_equals(getComputedStyle(greenSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(blueSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowSpan).color, "rgb(0, 0, 0)");
+
+ iframe.contentDocument.adoptedStyleSheets = [iframeRedStyleSheet];
+ assert_equals(getComputedStyle(greenIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redIframeSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(yellowIframeSpan).color, "rgb(0, 0, 0)");
+
+ iframe.contentDocument.adoptedStyleSheets[0].insertRule(redStyleTexts[1]);
+ assert_equals(getComputedStyle(greenIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(redIframeSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(blueIframeSpan).color, "rgb(0, 0, 0)");
+ assert_equals(getComputedStyle(whiteIframeSpan).color, "rgb(255, 0, 0)");
+ assert_equals(getComputedStyle(yellowIframeSpan).color, "rgb(0, 0, 0)");
+ });
+}, 'Stylesheet constructed on iframe cannot be used in the main Document');
+</script>
+
+<div id="divNonConstructed" class="nonConstructed">
+</div>
+
+<script>
+`use strict`;
+const shadowRootNonConstructed = divNonConstructed.attachShadow({mode:'open'})
+nonConstructedStyle = document.createElement("style");
+shadowRootNonConstructed.appendChild(nonConstructedStyle);
+nonConstructedStyle.sheet.insertRule(".nonConstructed { color: red; }", 0);
+const nonConstructedStyleSheet = nonConstructedStyle.sheet;
+
+test(() => {
+ assert_equals(getComputedStyle(divNonConstructed).color, "rgb(0, 0, 0)");
+ assert_throws('NotAllowedError', () => { document.adoptedStyleSheets = [nonConstructedStyleSheet]; });
+}, 'Adding non-constructed stylesheet to AdoptedStyleSheets is not allowed when the owner document of the stylesheet is in the same document tree as the AdoptedStyleSheets');
+
+test(() => {
+ const iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ iframeDiv = iframe.contentDocument.createElement("div");
+ iframeDiv.classList.add("nonConstructed");
+ iframe.contentDocument.body.appendChild(iframeDiv);
+
+ assert_equals(getComputedStyle(iframeDiv).color, "rgb(0, 0, 0)");
+ assert_throws('NotAllowedError', () => { iframe.contentDocument.adoptedStyleSheets = [nonConstructedStyleSheet]; });
+ assert_equals(getComputedStyle(iframeDiv).color, "rgb(0, 0, 0)");
+
+ iframeStyle = iframe.contentDocument.createElement("style");
+ iframe.contentDocument.body.appendChild(iframeStyle);
+ iframeStyle.sheet.insertRule(".nonConstructedSpan { color: red; }");
+ const iframeStyleSheet = iframeStyle.sheet;
+ nonConstructedSpan = document.createElement("span");
+ nonConstructedSpan.classList.add(".nonConstructedSpan");
+ divNonConstructed.appendChild(nonConstructedSpan);
+
+ assert_equals(getComputedStyle(iframeDiv).color, "rgb(0, 0, 0)");
+ assert_throws('NotAllowedError', () => { document.adoptedStyleSheets = [iframeStyleSheet]; });
+ assert_equals(getComputedStyle(iframeDiv).color, "rgb(0, 0, 0)");
+}, 'Adding non-constructed stylesheet to AdoptedStyleSheets is not allowed when the owner document of the stylesheet and the AdoptedStyleSheets are in different document trees');
+
+function attachShadowDiv(host) {
+ const shadowRoot = host.attachShadow({mode: 'open'});
+ const shadowDiv = document.createElement("div");
+ shadowRoot.appendChild(shadowDiv);
+ return shadowDiv;
+}
+
+test(() => {
+ // Attach a div inside a shadow root with the class ".red".
+ const span = document.createElement("span");
+ thirdSection.appendChild(span);
+ const shadowDiv = attachShadowDiv(span);
+ shadowDiv.classList.add("red");
+ // Create empty stylesheet.
+ const sheet = new CSSStyleSheet();
+ span.shadowRoot.adoptedStyleSheets = [sheet];
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
+ // Replace the stylesheet text that will color it red.
+ sheet.replaceSync(redStyleTexts[0]);
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[0]);
+ sheet.insertRule(redStyleTexts[1]);
+ assert_equals(sheet.cssRules.length, 2);
+ assert_equals(sheet.cssRules[0].cssText, redStyleTexts[1]);
+}, 'CSSStyleSheet.replaceSync replaces stylesheet text synchronously');
+
+const import_text = '@import url("support/constructable-import.css");';
+
+test(() => {
+ assert_throws("NotAllowedError", () => { (new CSSStyleSheet).replaceSync(import_text) });
+}, 'CSSStyleSheet.replaceSync throws exception when there is import rule inside');
+
+test(() => {
+ assert_throws("NotAllowedError", () => { (new CSSStyleSheet).insertRule(import_text) });
+}, 'Inserting an @import rule through insertRule on a constructed stylesheet throws an exception');
+
+promise_test(() => {
+ const span = document.createElement("span");
+ thirdSection.appendChild(span);
+ const shadowDiv = attachShadowDiv(span);
+ const sheet = new CSSStyleSheet();
+ span.shadowRoot.adoptedStyleSheets = [sheet];
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
+ // Replace and assert that the imported rule is applied.
+ const sheet_promise = sheet.replace(import_text);
+ return sheet_promise.then((sheet) => {
+ assert_equals(sheet.cssRules.length, 1);
+ assert_equals(sheet.cssRules[0].cssText, import_text);
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
+ });
+}, 'CSSStyleSheet.replace allows import rule inside');
+
+promise_test(() => {
+ const sheet = new CSSStyleSheet();
+ const sheet_promise = sheet.replace("import url('not-there.css');");
+ return sheet_promise.catch((reason) => {
+ assert_equals(reason.name, "NotAllowedError");
+ });
+}, 'CSSStyleSheet.replace returns rejected promise on failed imports');
+
+test(() => {
+ const span = document.createElement("span");
+ thirdSection.appendChild(span);
+ const shadowDiv = attachShadowDiv(span);
+ const sheet = new CSSStyleSheet();
+ span.shadowRoot.adoptedStyleSheets = [sheet];
+
+ const newSpan = span.cloneNode(true);
+ assert_equals(newSpan.shadowRoot, null);
+}, 'Cloning a shadow host will not clone shadow root, and also adoptedStyleSheets');
+
+test(() => {
+ const span = document.createElement("span");
+ thirdSection.appendChild(span);
+ const shadowDiv = attachShadowDiv(span);
+ const sheet = new CSSStyleSheet();
+ span.shadowRoot.adoptedStyleSheets = [sheet];
+
+ const iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ const newSpan = iframe.contentDocument.importNode(span, true);
+ iframe.contentDocument.body.appendChild(newSpan);
+ assert_equals(newSpan.shadowRoot, null);
+}, 'Importing a shadow host will not copy shadow root, and also adoptedStyleSheets');
+
+test(() => {
+ const span = document.createElement("span");
+ thirdSection.appendChild(span);
+ const shadowDiv = attachShadowDiv(span);
+ const sheet = new CSSStyleSheet();
+ sheet.replaceSync("* { color: red; }");
+ span.shadowRoot.adoptedStyleSheets = [sheet];
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(255, 0, 0)");
+
+ const iframe = document.createElement("iframe");
+ document.body.appendChild(iframe);
+ iframe.contentDocument.adoptNode(span);
+ iframe.contentDocument.body.appendChild(span);
+ assert_not_equals(span.shadowRoot, null);
+ assert_equals(span.shadowRoot.adoptedStyleSheets.length, 1);
+ assert_equals(span.shadowRoot.adoptedStyleSheets[0], sheet);
+ assert_equals(getComputedStyle(shadowDiv).color, "rgb(0, 0, 0)");
+}, 'Adopting a shadow host will move adoptedStyleSheets but it is not applied');
+
+</script>
+
diff --git a/tests/wpt/web-platform-tests/css/cssom/support/constructable-import.css b/tests/wpt/web-platform-tests/css/cssom/support/constructable-import.css
new file mode 100644
index 00000000000..d8ccc9d491b
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/cssom/support/constructable-import.css
@@ -0,0 +1,3 @@
+* {
+ color: red;
+}
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/reference/green-100x100.html b/tests/wpt/web-platform-tests/css/filter-effects/reference/green-100x100.html
new file mode 100644
index 00000000000..f718ea6abfb
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/reference/green-100x100.html
@@ -0,0 +1,2 @@
+<!DOCTYPE html>
+<div style="width: 100px; height: 100px; background-color: green"></div>
diff --git a/tests/wpt/web-platform-tests/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html b/tests/wpt/web-platform-tests/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html
new file mode 100644
index 00000000000..e3be6544dc8
--- /dev/null
+++ b/tests/wpt/web-platform-tests/css/filter-effects/svg-sourcegraphic-currentcolor-dynamic-001.html
@@ -0,0 +1,48 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<title>Filter Effects: Dynamic 'currentcolor' in SourceGraphic</title>
+<link rel="help" href="https://drafts.fxtf.org/filter-effects/#attr-valuedef-in-sourcegraphic">
+<link rel="match" href="reference/green-100x100.html">
+<style>
+rect {
+ fill: currentColor;
+}
+
+.filtered {
+ filter: url(#filter);
+}
+
+.green {
+ color: green;
+}
+</style>
+<svg style="color: red">
+ <defs>
+ <filter id="filter" color-interpolation-filters="sRGB">
+ <feMerge>
+ <feMergeNode/>
+ </feMerge>
+ </filter>
+ </defs>
+
+ <g class="target filtered">
+ <rect width="50" height="100"/>
+ </g>
+
+ <g class="target">
+ <g class="filtered">
+ <rect x="50" width="50" height="100"/>
+ </g>
+ </g>
+</svg>
+<script>
+document.body.offsetTop;
+requestAnimationFrame(function() {
+ requestAnimationFrame(function() {
+ let targets = document.querySelectorAll('.target');
+ for (let i = 0; i < targets.length; ++i)
+ targets[i].classList.toggle('green');
+ document.documentElement.classList.remove('reftest-wait');
+ });
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html b/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html
index d03d820a3e6..74e7b9645f8 100644
--- a/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html
+++ b/tests/wpt/web-platform-tests/css/selectors/attribute-selectors/attribute-case/cssom.html
@@ -24,9 +24,11 @@ var tests = [
['[foo="bar" i]', '[foo="bar" i]'],
['[foo="bar" /**/ i]', '[foo="bar" i]'],
['[foo="bar"/**/i]', '[foo="bar" i]'],
+ ['[*|foo="bar" i]', '[*|foo="bar" i]'],
['[foo="bar" s]', '[foo="bar" s]'],
['[foo="bar" /**/ s]', '[foo="bar" s]'],
['[foo="bar"/**/s]', '[foo="bar" s]'],
+ ['[*|foo="bar" s]', '[*|foo="bar" s]'],
]
tests.forEach(function(arr) {
diff --git a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js
index ebf0142e280..9ea76e03e13 100644
--- a/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js
+++ b/tests/wpt/web-platform-tests/fetch/api/headers/headers-no-cors.window.js
@@ -8,6 +8,10 @@ const longValue = "s".repeat(127);
"values": [longValue, "", longValue]
},
{
+ "headers": ["accept", "accept-language", "content-language"],
+ "values": ["", longValue]
+ },
+ {
"headers": ["content-type"],
"values": ["text/plain;" + "s".repeat(116), "text/plain"]
}
@@ -17,10 +21,10 @@ const longValue = "s".repeat(127);
const noCorsHeaders = new Request("about:blank", { mode: "no-cors" }).headers;
testItem.values.forEach((value) => {
noCorsHeaders.append(header, value);
- assert_equals(noCorsHeaders.get(header), testItem.values[0]);
+ assert_equals(noCorsHeaders.get(header), testItem.values[0], '1');
});
- noCorsHeaders.set(header, values.join(", "));
- assert_equals(noCorsHeaders.get(header), testItem.values[0]);
+ noCorsHeaders.set(header, testItem.values.join(", "));
+ assert_equals(noCorsHeaders.get(header), testItem.values[0], '2');
noCorsHeaders.delete(header);
assert_false(noCorsHeaders.has(header));
}, "\"no-cors\" Headers object cannot have " + header + " set to " + testItem.values.join(", "));
diff --git a/tests/wpt/web-platform-tests/html/syntax/parsing/quotes-in-meta.html b/tests/wpt/web-platform-tests/html/syntax/parsing/quotes-in-meta.html
new file mode 100644
index 00000000000..3d1eaf02a20
--- /dev/null
+++ b/tests/wpt/web-platform-tests/html/syntax/parsing/quotes-in-meta.html
@@ -0,0 +1,12 @@
+<!doctype html>
+<meta http-equiv="Content-Type" content='charset="windows-1251'>
+<meta charset=windows-1250>
+<title></title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<link rel=help href="https://html.spec.whatwg.org/#algorithm-for-extracting-a-character-encoding-from-a-meta-element">
+<script>
+test(function() {
+ assert_equals(document.characterSet, "windows-1250");
+});
+</script>
diff --git a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
index b2bf38e9fd4..cf07738b8b4 100644
--- a/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
+++ b/tests/wpt/web-platform-tests/interfaces/webrtc-stats.idl
@@ -239,7 +239,7 @@ dictionary RTCTransportStats : RTCStats {
dictionary RTCIceCandidateStats : RTCStats {
DOMString transportId;
RTCNetworkType networkType;
- DOMString address;
+ DOMString? address;
long port;
DOMString protocol;
RTCIceCandidateType candidateType;
diff --git a/tests/wpt/web-platform-tests/resource-timing/single-entry-per-resource.html b/tests/wpt/web-platform-tests/resource-timing/single-entry-per-resource.html
index 39d7d5b2566..1f8f4005e42 100644
--- a/tests/wpt/web-platform-tests/resource-timing/single-entry-per-resource.html
+++ b/tests/wpt/web-platform-tests/resource-timing/single-entry-per-resource.html
@@ -13,6 +13,11 @@
function (entryList, obs) {
var entries = entryList.getEntriesByType("resource");
for (var i = 0; i < entries.length; ++i) {
+ // Ignore any entries for the test harness files if present.
+ if (/testharness(report)?\.js/.test(entries[i].name)) {
+ continue;
+ }
+
++observed;
if (entries[i].name.indexOf(img_url) != -1)
++img_entries;
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-relative.xsl b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-relative.xsl
new file mode 100644
index 00000000000..063a62d0314
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/import-relative.xsl
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:import href="xslt-pass.xsl"/>
+</xsl:stylesheet>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-iframe.xml b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-iframe.xml
new file mode 100644
index 00000000000..065a07acb28
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-iframe.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="resources/request-url-path/import-relative.xsl"?>
+<stylesheet-test>
+This tests a stylesheet which has a xsl:import with a relative URL.
+</stylesheet-test>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-worker.js b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-worker.js
new file mode 100644
index 00000000000..50e2b1842ff
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xsl-base-url-worker.js
@@ -0,0 +1,12 @@
+self.addEventListener('fetch', event => {
+ const url = new URL(event.request.url);
+
+ // For the import-relative.xsl file, respond in a way that changes the
+ // response URL. This is expected to change the base URL and allow the import
+ // from the file to succeed.
+ const path = 'request-url-path/import-relative.xsl';
+ if (url.pathname.indexOf(path) != -1) {
+ // Respond with a different URL, deleting "request-url-path/".
+ event.respondWith(fetch('import-relative.xsl'));
+ }
+});
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xslt-pass.xsl b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xslt-pass.xsl
new file mode 100644
index 00000000000..2cd7f2f8f86
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/resources/xslt-pass.xsl
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:template match="/">
+ <html>
+ <body>
+ <p>PASS</p>
+ </body>
+ </html>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/tests/wpt/web-platform-tests/service-workers/service-worker/xsl-base-url.https.html b/tests/wpt/web-platform-tests/service-workers/service-worker/xsl-base-url.https.html
new file mode 100644
index 00000000000..1d3c36408a6
--- /dev/null
+++ b/tests/wpt/web-platform-tests/service-workers/service-worker/xsl-base-url.https.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Service Worker: XSL's base URL must be the response URL</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="resources/test-helpers.sub.js?pipe=sub"></script>
+<script>
+// This test loads an XML document which is controlled a service worker. The
+// document loads a stylesheet and a service worker responds with another URL.
+// The stylesheet imports a relative URL to test that the base URL is the
+// response URL from the service worker.
+promise_test(async (t) => {
+ const SCOPE = 'resources/xsl-base-url-iframe.xml';
+ const SCRIPT = 'resources/xsl-base-url-worker.js';
+ let worker;
+ let frame;
+
+ t.add_cleanup(() => {
+ if (frame)
+ frame.remove();
+ service_worker_unregister(t, SCOPE);
+ });
+
+ const registration = await service_worker_unregister_and_register(
+ t, SCRIPT, SCOPE);
+ worker = registration.installing;
+ await wait_for_state(t, worker, 'activated');
+
+ frame = await with_iframe(SCOPE);
+ assert_equals(frame.contentDocument.body.textContent, 'PASS');
+}, 'base URL when service worker does respondWith(fetch(responseUrl))');
+</script>
diff --git a/tests/wpt/web-platform-tests/svg/extensibility/foreignObject/properties.svg b/tests/wpt/web-platform-tests/svg/extensibility/foreignObject/properties.svg
index b92a6d1d15b..dd198f177df 100644
--- a/tests/wpt/web-platform-tests/svg/extensibility/foreignObject/properties.svg
+++ b/tests/wpt/web-platform-tests/svg/extensibility/foreignObject/properties.svg
@@ -25,9 +25,9 @@
var first = document.getElementById('first');
assert_equals(getComputedStyle(first).x, "0px");
assert_equals(getComputedStyle(first).y, "0px");
- assert_equals(getComputedStyle(first).width, "auto");
- assert_equals(getComputedStyle(first).height, "auto");
- }, 'width and height default to auto');
+ assert_equals(getComputedStyle(first).width, "0px");
+ assert_equals(getComputedStyle(first).height, "0px");
+ }, 'width and height default to auto (which computes to "0px")');
test(function() {
var second = document.getElementById('second');
diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/height-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/height-computed.svg
new file mode 100644
index 00000000000..bcc1f9d0e11
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/height-computed.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
+ <title>SVG Geometry Properties: getComputedStyle().height</title>
+ <metadata>
+ <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#Sizing"/>
+ <h:link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values"/>
+ </metadata>
+ <h:script src="/resources/testharness.js"/>
+ <h:script src="/resources/testharnessreport.js"/>
+ <svg width="200" height="100" id="test-content">
+ <rect/>
+ <rect width="100" height="200"/>
+ <rect width="42" style="height: auto"/>
+ <rect width="42" style="height: 20px"/>
+ <rect width="42" style="height: 40%"/>
+ <rect width="42" style="height: 80%; display: none"/>
+
+ <g><rect width="100" height="100"/></g>
+ <g width="100" height="42px"><rect width="100" height="100"/></g>
+ <g style="width: 10%; height: auto"><rect width="100" height="100"/></g>
+ <g style="width: auto; height: 20px"><rect width="100" height="100"/></g>
+ <g style="width: 20px; height: 10%"><rect width="100" height="100"/></g>
+
+ <image/>
+ <image width="42" height="200"/>
+ <image width="42" style="height: auto"/>
+ <image width="42" style="height: 230px"/>
+ <image width="42" style="height: 25%"/>
+ <image width="42" style="height: 25%; display: none"/>
+
+ <foreignObject>Some content</foreignObject>
+ <foreignObject height="200">Some content</foreignObject>
+ <foreignObject style="height: auto">Some content</foreignObject>
+ <foreignObject style="height: 75px">Some content</foreignObject>
+ <foreignObject style="height: 50%">Some content</foreignObject>
+ <foreignObject style="height: auto; display: none">Some content</foreignObject>
+
+ <svg/>
+ <svg height="200"/>
+ <svg style="height: auto"/>
+ <svg style="height: 200px"/>
+ <svg style="height: 50%"/>
+ <svg style="height: auto; display: none"/>
+
+ <text>Text1</text>
+ <text width="100px" height="42">Text2</text>
+ <text style="width: 30%; height: auto">Text3</text>
+ <text style="width: auto; height: 20px">Text3</text>
+ <text style="width: 20px; height: 30%">Text3</text>
+ </svg>
+ <script><![CDATA[
+[
+ // Cases where computed 'height' return the used value.
+ {
+ element: 'rect',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '200px', description: 'presentation attribute' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ { value: '40px', description: 'inline style (percentage)' },
+ { value: '80%', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'image',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '200px', description: 'presentation attribute' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '230px', description: 'inline style (pixels)' },
+ { value: '25px', description: 'inline style (percentage)' },
+ { value: '25%', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'foreignObject',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '200px', description: 'presentation attribute' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '75px', description: 'inline style (pixels)' },
+ { value: '50px', description: 'inline style (percentage)' },
+ { value: 'auto', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'svg',
+ expected: [
+ { value: '100px', description: 'initial' },
+ { value: '200px', description: 'presentation attribute' },
+ { value: '100px', description: 'inline style (auto)' },
+ { value: '200px', description: 'inline style (pixels)' },
+ { value: '50px', description: 'inline style (percentage)' },
+ { value: 'auto', description: 'inline style but "display: none"' },
+ ]
+ },
+
+ // Cases where computed 'height' return the computed value.
+ {
+ element: 'g',
+ expected: [
+ { value: 'auto', description: 'initial' },
+ { value: 'auto', description: 'initial (with dummy attribute)' },
+ { value: 'auto', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ { value: '10%', description: 'inline style (percentage)' },
+ ]
+ },
+ {
+ element: 'text',
+ expected: [
+ { value: 'auto', description: 'initial' },
+ { value: 'auto', description: 'initial (with dummy attribute)' },
+ { value: 'auto', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ { value: '30%', description: 'inline style (percentage)' },
+ ]
+ },
+].forEach(function(entry) {
+ let element_set = document.querySelectorAll('#test-content > ' + entry.element);
+ entry.expected.forEach(function(expected, index) {
+ test(function() {
+ let style = getComputedStyle(element_set[index]);
+ assert_equals(style.height, expected.value, expected.description);
+ }, document.title + ', <' + entry.element + '> ' + expected.description);
+ });
+});
+ ]]></script>
+</svg>
diff --git a/tests/wpt/web-platform-tests/svg/geometry/parsing/width-computed.svg b/tests/wpt/web-platform-tests/svg/geometry/parsing/width-computed.svg
new file mode 100644
index 00000000000..1af3de12347
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/geometry/parsing/width-computed.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
+ <title>SVG Geometry Properties: getComputedStyle().width</title>
+ <metadata>
+ <h:link rel="help" href="https://svgwg.org/svg2-draft/geometry.html#Sizing"/>
+ <h:link rel="help" href="https://drafts.csswg.org/cssom/#resolved-values"/>
+ </metadata>
+ <h:script src="/resources/testharness.js"/>
+ <h:script src="/resources/testharnessreport.js"/>
+ <svg width="200" height="100" id="test-content">
+ <rect/>
+ <rect width="100" height="200"/>
+ <rect height="42" style="width: 40%"/>
+ <rect height="42" style="width: auto"/>
+ <rect height="42" style="width: 20px"/>
+ <rect height="42" style="width: 42%; display: none"/>
+
+ <g><rect width="100" height="100"/></g>
+ <g width="100" height="42px"><rect width="100" height="100"/></g>
+ <g style="width: 10%; height: auto"><rect width="100" height="100"/></g>
+ <g style="width: auto; height: 20px"><rect width="100" height="100"/></g>
+ <g style="width: 20px; height: 10%"><rect width="100" height="100"/></g>
+
+ <image/>
+ <image width="100"/>
+ <image height="42" style="width: 25%"/>
+ <image height="42" style="width: auto"/>
+ <image height="42" style="width: 230px"/>
+ <image height="42" style="width: 25%; display: none"/>
+
+ <foreignObject>Some content</foreignObject>
+ <foreignObject width="100">Some content</foreignObject>
+ <foreignObject style="width: 50%">Some content</foreignObject>
+ <foreignObject style="width: auto">Some content</foreignObject>
+ <foreignObject style="width: 75px">Some content</foreignObject>
+ <foreignObject style="width: auto; display: none">Some content</foreignObject>
+
+ <svg/>
+ <svg width="100"/>
+ <svg style="width: auto"/>
+ <svg style="width: 200px"/>
+ <svg style="width: 50%"/>
+ <svg style="width: auto; display: none"/>
+
+ <text>Text1</text>
+ <text width="100px" height="42">Text2</text>
+ <text style="width: 30%; height: auto">Text3</text>
+ <text style="width: auto; height: 20px">Text3</text>
+ <text style="width: 20px; height: 30%">Text3</text>
+ </svg>
+ <script><![CDATA[
+[
+ // Cases where computed 'width' return the used value.
+ {
+ element: 'rect',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '100px', description: 'presentation attribute' },
+ { value: '80px', description: 'inline style (percentage)' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ { value: '42%', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'image',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '100px', description: 'presentation attribute' },
+ { value: '50px', description: 'inline style (percentage)' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '230px', description: 'inline style (pixels)' },
+ { value: '25%', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'foreignObject',
+ expected: [
+ { value: '0px', description: 'initial' },
+ { value: '100px', description: 'presentation attribute' },
+ { value: '100px', description: 'inline style (percentage)' },
+ { value: '0px', description: 'inline style (auto)' },
+ { value: '75px', description: 'inline style (pixels)' },
+ { value: 'auto', description: 'inline style but "display: none"' },
+ ]
+ },
+ {
+ element: 'svg',
+ expected: [
+ { value: '200px', description: 'initial' },
+ { value: '100px', description: 'presentation attribute' },
+ { value: '200px', description: 'inline style (auto)' },
+ { value: '200px', description: 'inline style (pixels)' },
+ { value: '100px', description: 'inline style (percentage)' },
+ { value: 'auto', description: 'inline style but "display: none"' },
+ ]
+ },
+
+ // Cases where computed 'width' return the computed value.
+ {
+ element: 'g',
+ expected: [
+ { value: 'auto', description: 'initial' },
+ { value: 'auto', description: 'initial (with dummy attribute)' },
+ { value: '10%', description: 'inline style (percentage)' },
+ { value: 'auto', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ ]
+ },
+ {
+ element: 'text',
+ expected: [
+ { value: 'auto', description: 'initial' },
+ { value: 'auto', description: 'initial (with dummy attribute)' },
+ { value: '30%', description: 'inline style (percentage)' },
+ { value: 'auto', description: 'inline style (auto)' },
+ { value: '20px', description: 'inline style (pixels)' },
+ ]
+ },
+].forEach(function(entry) {
+ let element_set = document.querySelectorAll('#test-content > ' + entry.element);
+ entry.expected.forEach(function(expected, index) {
+ test(function() {
+ let style = getComputedStyle(element_set[index]);
+ assert_equals(style.width, expected.value, expected.description);
+ }, document.title + ', <' + entry.element + '> ' + expected.description);
+ });
+});
+ ]]></script>
+</svg>
diff --git a/tests/wpt/web-platform-tests/svg/pservers/parsing/stop-color-computed.svg b/tests/wpt/web-platform-tests/svg/pservers/parsing/stop-color-computed.svg
new file mode 100644
index 00000000000..b05a69f10b9
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/pservers/parsing/stop-color-computed.svg
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml">
+ <title>SVG Paint Servers: getComputedStyle().stopColor</title>
+ <metadata>
+ <h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#StopColorProperty"/>
+ <h:link rel="help" href="https://drafts.csswg.org/css-color/#resolve-color-values"/>
+ <h:link rel="help" href="https://drafts.csswg.org/cssom/#serializing-css-values"/>
+ </metadata>
+ <g id="target" style="color: blue"></g>
+ <h:script src="/resources/testharness.js"/>
+ <h:script src="/resources/testharnessreport.js"/>
+ <h:script src="/css/support/computed-testcommon.js"/>
+ <script><![CDATA[
+
+test_computed_value("stop-color", "currentcolor", "rgb(0, 0, 255)");
+test_computed_value("stop-color", "white", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "transparent", "rgba(0, 0, 0, 0)");
+test_computed_value("stop-color", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "#ffffff", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "rgba(255, 255, 255, 1.0)", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "rgba(255, 255, 255, 0.4)");
+test_computed_value("stop-color", "hsl(0deg, 100%, 100%)", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "hsla(0deg, 100%, 100%, 1.0)", "rgb(255, 255, 255)");
+test_computed_value("stop-color", "hsla(0deg, 100%, 100%, 0.4)", "rgba(255, 255, 255, 0.4)");
+
+ ]]></script>
+</svg>
diff --git a/tests/wpt/web-platform-tests/svg/pservers/reftests/reference/green-100x100.svg b/tests/wpt/web-platform-tests/svg/pservers/reftests/reference/green-100x100.svg
new file mode 100644
index 00000000000..120941444a4
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/pservers/reftests/reference/green-100x100.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+ <rect width="100" height="100" fill="green"/>
+</svg>
diff --git a/tests/wpt/web-platform-tests/svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg b/tests/wpt/web-platform-tests/svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg
new file mode 100644
index 00000000000..da0a05dd879
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/pservers/reftests/stop-color-currentcolor-dynamic-001.svg
@@ -0,0 +1,18 @@
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml"
+ style="color: red">
+ <title>stop-color: Dynamically changing 'color' for a gradient with a stop with 'currentcolor'</title>
+ <h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#StopColorProperty"/>
+ <h:link rel="match" href="reference/green-100x100.svg"/>
+ <linearGradient id="g">
+ <stop stop-color="currentcolor"/>
+ </linearGradient>
+ <rect width="50" height="100" fill="url(#g)"/>
+ <rect width="50" height="100" x="50" fill="currentcolor"/>
+ <script>
+ <![CDATA[
+ let root = document.querySelector(':root');
+ root.getBoundingClientRect(); // Force layout
+ root.style.color = 'green';
+ ]]>
+ </script>
+</svg>
diff --git a/tests/wpt/web-platform-tests/svg/pservers/scripted/stop-color-inheritance-currentcolor.svg b/tests/wpt/web-platform-tests/svg/pservers/scripted/stop-color-inheritance-currentcolor.svg
new file mode 100644
index 00000000000..22bf513c862
--- /dev/null
+++ b/tests/wpt/web-platform-tests/svg/pservers/scripted/stop-color-inheritance-currentcolor.svg
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:h="http://www.w3.org/1999/xhtml"
+ color="red">
+ <title>SVG Paint Servers: 'stop-color' inheritance of 'currentcolor'</title>
+ <metadata>
+ <h:link rel="help" href="https://svgwg.org/svg2-draft/pservers.html#StopColorProperty"/>
+ <h:link rel="help" href="https://drafts.csswg.org/css-color/#resolve-color-values"/>
+ </metadata>
+ <h:script src="/resources/testharness.js"/>
+ <h:script src="/resources/testharnessreport.js"/>
+ <linearGradient stop-color="currentcolor" id="g">
+ <stop stop-color="inherit" color="green"/>
+ </linearGradient>
+ <script><![CDATA[
+
+ test(function() {
+ let stop = document.querySelector('stop');
+ assert_equals(getComputedStyle(stop).stopColor, 'rgb(0, 128, 0)');
+ }, '"currentcolor" is inherited as a keyword');
+
+ ]]></script>
+</svg>
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
index 666db37ac1a..e38f4dea670 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/requirements_sauce.txt
@@ -1,3 +1,3 @@
mozprocess == 0.26
selenium==3.141.0
-requests==2.20.1
+requests==2.21.0
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
index 712ff3fbc9b..64137539291 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/base.py
@@ -146,15 +146,11 @@ class Browser(object):
with which it should be instantiated"""
return ExecutorBrowser, {}
- def check_for_crashes(self):
- """Check for crashes that didn't cause the browser process to terminate"""
+ def check_crash(self, process, test):
+ """Check if a crash occured and output any useful information to the
+ log. Returns a boolean indicating whether a crash occured."""
return False
- def log_crash(self, process, test):
- """Return a list of dictionaries containing information about crashes that happend
- in the browser, or an empty list if no crashes occurred"""
- self.logger.crash(process, test)
-
class NullBrowser(Browser):
def __init__(self, logger, **kwargs):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
index 618f011abaf..14cac17cf6d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/browsers/firefox.py
@@ -397,23 +397,15 @@ class FirefoxBrowser(Browser):
assert self.marionette_port is not None
return ExecutorBrowser, {"marionette_port": self.marionette_port}
- def check_for_crashes(self):
+ def check_crash(self, process, test):
dump_dir = os.path.join(self.profile.profile, "minidumps")
- return bool(mozcrash.check_for_crashes(dump_dir,
- symbols_path=self.symbols_path,
- stackwalk_binary=self.stackwalk_binary,
- quiet=True))
-
- def log_crash(self, process, test):
- dump_dir = os.path.join(self.profile.profile, "minidumps")
-
- mozcrash.log_crashes(self.logger,
- dump_dir,
- symbols_path=self.symbols_path,
- stackwalk_binary=self.stackwalk_binary,
- process=process,
- test=test)
+ return bool(mozcrash.log_crashes(self.logger,
+ dump_dir,
+ symbols_path=self.symbols_path,
+ stackwalk_binary=self.stackwalk_binary,
+ process=process,
+ test=test))
def setup_ssl(self):
"""Create a certificate database to use in the test profile. This is configured
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js
index 61f894f8760..194e192c2f4 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_marionette.js
@@ -13,7 +13,7 @@ var observer = new MutationObserver(test);
observer.observe(root, {attributes: true});
if (document.readyState != "complete") {
- onload = test
+ addEventListener('load', test);
} else {
test();
}
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js
index c1cc649e323..a7486b6594d 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/executors/reftest-wait_webdriver.js
@@ -38,7 +38,7 @@ var observer = new MutationObserver(root_wait);
observer.observe(root, {attributes: true});
if (document.readyState != "complete") {
- onload = root_wait;
+ addEventListener('load', root_wait);
} else {
root_wait();
}
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js
index 281f97ddaa6..29fc0e98731 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testharnessreport.js
@@ -1,5 +1,20 @@
+class MessageQueue {
+ constructor() {
+ this._queue = [];
+ }
+
+ push(item) {
+ this._queue.push(item);
+ __wptrunner_process_next_event();
+ }
+
+ shift() {
+ return this._queue.shift();
+ }
+}
+
window.__wptrunner_testdriver_callback = null;
-window.__wptrunner_message_queue = [];
+window.__wptrunner_message_queue = new MessageQueue();
window.__wptrunner_url = null;
window.__wptrunner_process_next_event = function() {
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
index a395a50a45c..f8849ebe75e 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testloader.py
@@ -404,7 +404,7 @@ class ManifestLoader(object):
download_from_github(manifest_path, tests_path)
return manifest.load_and_update(tests_path, manifest_path, url_base,
cache_root=cache_root, update=self.force_manifest_update,
- meta_filters=self.meta_filters)
+ meta_filters=self.meta_filters, types=self.types)
def iterfilter(filters, iter):
diff --git a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
index e819f242e2d..d3a62646278 100644
--- a/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
+++ b/tests/wpt/web-platform-tests/tools/wptrunner/wptrunner/testrunner.py
@@ -233,11 +233,8 @@ class BrowserManager(object):
if self.init_timer is not None:
self.init_timer.cancel()
- def check_for_crashes(self):
- return self.browser.check_for_crashes()
-
- def log_crash(self, test_id):
- return self.browser.log_crash(process=self.browser_pid, test=test_id)
+ def check_crash(self, test_id):
+ return self.browser.check_crash(process=self.browser_pid, test=test_id)
def is_alive(self):
return self.browser.is_alive()
@@ -504,8 +501,7 @@ class TestRunnerManager(threading.Thread):
def init_failed(self):
assert isinstance(self.state, RunnerManagerState.initializing)
- if self.browser.check_for_crashes():
- self.browser.log_crash(None)
+ self.browser.check_crash(None)
self.browser.after_init()
self.stop_runner(force=True)
return RunnerManagerState.initializing(self.state.test,
@@ -580,7 +576,7 @@ class TestRunnerManager(threading.Thread):
expected = test.expected()
status = status_subns.get(file_result.status, file_result.status)
- if self.browser.check_for_crashes():
+ if self.browser.check_crash(test.id):
status = "CRASH"
self.test_count += 1
@@ -588,8 +584,6 @@ class TestRunnerManager(threading.Thread):
if is_unexpected:
self.unexpected_count += 1
self.logger.debug("Unexpected count in this thread %i" % self.unexpected_count)
- if status == "CRASH":
- self.browser.log_crash(test.id)
if "assertion_count" in file_result.extra:
assertion_count = file_result.extra.pop("assertion_count")
diff --git a/tests/wpt/web-platform-tests/user-timing/mark-measure-feature-detection.html b/tests/wpt/web-platform-tests/user-timing/mark-measure-feature-detection.html
new file mode 100644
index 00000000000..6f1ad489e95
--- /dev/null
+++ b/tests/wpt/web-platform-tests/user-timing/mark-measure-feature-detection.html
@@ -0,0 +1,36 @@
+<!DOCTYPE HTML>
+<meta charset=utf-8>
+<title>User Timing: L2 vs L3 feature detection</title>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+ test(() => {
+ // Feature detection for PerformanceMark.
+ assert_equals(typeof(PerformanceMark.prototype), "object");
+ // Test for UserTiming L3.
+ if (PerformanceMark.prototype.hasOwnProperty('detail')) {
+ assert_equals(typeof(performance.mark("mark")), "object",
+ "performance.mark should return an object in UserTiming L3.");
+ }
+ // Test for UserTiming L2.
+ else {
+ assert_equals(typeof(performance.mark("mark")), "undefined",
+ "performance.mark should be void in UserTiming L2.");
+ }
+ }, "Test PerformanceMark existence and feature detection");
+
+ test(() => {
+ // Feature detection for PerformanceMeasure.
+ assert_equals(typeof(PerformanceMeasure.prototype), "object");
+ // Test for UserTiming L3.
+ if (PerformanceMeasure.prototype.hasOwnProperty('detail')) {
+ assert_equals(typeof(performance.measure("measure")), "object",
+ "performance.measure should return an object in UserTiming L3.");
+ }
+ // Test for UserTiming L2.
+ else {
+ assert_equals(typeof(performance.measure("measure")), "undefined",
+ "performance.measure should be void in UserTiming L2.");
+ }
+ }, "Test PerformanceMeasure existence and feature detection");
+</script>
diff --git a/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html b/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html
deleted file mode 100644
index 5afd9633f24..00000000000
--- a/tests/wpt/web-platform-tests/user-timing/mark-measure-return-null.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML>
-<meta charset=utf-8>
-<title>User Timing: L2 APIs return null</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<p>User Timing: L2 APIs return null</p>
-<div id="log"></div>
-<script>
- async_test(function (t) {
- self.performance.clearMeasures();
- const measure = self.performance.measure("measure1");
- assert_equals(measure, null);
- t.done();
- }, "L2: performance.measure(name) should return null.");
-
- async_test(function (t) {
- self.performance.clearMeasures();
- self.performance.mark("1");
- const measure = self.performance.measure("measure2", 1);
- assert_equals(measure, null);
- t.done();
- }, "L2: performance.measure(name, param1) should return null.");
-
- async_test(function (t) {
- self.performance.clearMeasures();
- self.performance.mark("1");
- self.performance.mark("2");
- const measure = self.performance.measure("measure3", 1, 2);
- assert_equals(measure, null);
- t.done();
- }, "L2: performance.measure(name, param1, param2) should return null.");
-
- async_test(function (t) {
- self.performance.clearMarks();
- const mark = self.performance.mark("mark1");
- assert_equals(mark, null);
- t.done();
- }, "L2: performance.mark(name) should return null.");
-
- async_test(function (t) {
- self.performance.clearMarks();
- const mark = self.performance.mark("mark2", { startTime: 34 });
- assert_equals(mark, null);
- t.done();
- }, "L2: performance.mark(name, param) should return null.");
-</script>
diff --git a/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py b/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py
index 5d60b991acd..a1017745f3d 100644
--- a/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py
+++ b/tests/wpt/web-platform-tests/webdriver/tests/element_clear/clear.py
@@ -245,9 +245,7 @@ def test_button(session):
def test_button_with_subtree(session):
"""
- Whilst an <input> is normally editable, the focusable area
- where it is placed will default to the <button>. I.e. if you
- try to click <input> to focus it, you will hit the <button>.
+ Elements inside button elements are interactable.
"""
session.url = inline("""
<button>
@@ -257,7 +255,7 @@ def test_button_with_subtree(session):
text_field = session.find.css("input", all=False)
response = element_clear(session, text_field)
- assert_error(response, "element not interactable")
+ assert_success(response)
def test_contenteditable(session, add_event_listeners, tracked_events):
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
index 5fc957df8fb..a8056d473cd 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCPeerConnection-setDescription-transceiver.html
@@ -238,6 +238,29 @@
});
}, 'setRemoteDescription(rollback) should remove newly created transceiver from transceiver list');
+ promise_test(async t => {
+ const pc1 = new RTCPeerConnection();
+ t.add_cleanup(() => pc1.close());
+ const pc2 = new RTCPeerConnection();
+ t.add_cleanup(() => pc2.close());
+
+ pc1.addTransceiver('audio');
+ const offer = await pc1.createOffer();
+ await pc1.setLocalDescription(offer);
+
+ assert_false(pc1.getTransceivers()[0].stopped, 'Transceiver is not stopped');
+
+ await pc2.setRemoteDescription(offer);
+ pc2.getTransceivers()[0].stop();
+ const answer = await pc2.createAnswer();
+
+ await pc1.setRemoteDescription(answer);
+
+ assert_true(pc1.getTransceivers()[0].stopped, 'Transceiver is stopped');
+ assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver');
+ assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
+ }, 'setRemoteDescription should stop the transceiver if its corresponding m section is rejected');
+
/*
TODO
- Steps for transceiver direction is added to tip of tree draft, but not yet
diff --git a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
index aba27964896..c200271490e 100644
--- a/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
+++ b/tests/wpt/web-platform-tests/webrtc/RTCRtpTransceiver.https.html
@@ -1175,6 +1175,8 @@
stoppedTransceiver.receiver.track.onended = resolve;
});
stoppedTransceiver.stop();
+ assert_equals(pc1.getReceivers().length, 0, 'getReceivers does not expose a receiver of a stopped transceiver');
+ assert_equals(pc1.getSenders().length, 0, 'getSenders does not expose a sender of a stopped transceiver');
await onended;