diff options
author | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-12-14 20:35:55 -0500 |
---|---|---|
committer | WPT Sync Bot <josh+wptsync@joshmatthews.net> | 2018-12-14 21:54:18 -0500 |
commit | b0862d9cc1138a651c53214c73fae3a2e6d168c5 (patch) | |
tree | c27b610acd7f6ed8f37c12325522413fed2966e7 | |
parent | c9229f3f99936627229edf7a616b2af915ce2416 (diff) | |
download | servo-b0862d9cc1138a651c53214c73fae3a2e6d168c5.tar.gz servo-b0862d9cc1138a651c53214c73fae3a2e6d168c5.zip |
Update web-platform-tests to revision ac4274136e9a034628a3a469890c8e37babbc902
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; |