Update web-platform-tests to revision ac4274136e9a034628a3a469890c8e37babbc902
|
@ -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": [
|
||||
|
|
|
@ -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
|
||||
|
|
@ -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
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[background-size-cover-svg.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[pre-float-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
|||
[pre-wrap-float-001.html]
|
||||
expected: FAIL
|
|
@ -0,0 +1,4 @@
|
|||
[transition-reparented.html]
|
||||
[When an element is reparented, any CSS Transition on it should be cancelled]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
[CSSStyleSheet-constructable.html]
|
||||
[CSSStyleSheet constructor and adoptedStyleSheets]
|
||||
expected: FAIL
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
[svg-sourcegraphic-currentcolor-dynamic-001.html]
|
||||
expected: FAIL
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[traverse_the_history_1.html]
|
||||
[Multiple history traversals from the same task]
|
||||
expected: FAIL
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
[traverse_the_history_5.html]
|
||||
[Multiple history traversals, last would be aborted]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
[non-active-document.html]
|
||||
[DOMParser]
|
||||
expected: FAIL
|
||||
|
||||
[createHTMLDocument]
|
||||
expected: FAIL
|
||||
|
||||
[<template>]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
[quotes-in-meta.html]
|
||||
[quotes-in-meta]
|
||||
expected: FAIL
|
||||
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[limited-quirks.html]
|
||||
[no-quirks.html]
|
||||
[top: -\\31 .5]
|
||||
expected: FAIL
|
||||
|
|
@ -2,6 +2,3 @@
|
|||
[One resource when reusing data]
|
||||
expected: FAIL
|
||||
|
||||
[Only one resource entry per resource]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
[005.html]
|
||||
expected: ERROR
|
||||
[dedicated worker in shared worker in dedicated worker]
|
||||
expected: FAIL
|
||||
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
After Width: | Height: | Size: 122 B |
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
3
tests/wpt/web-platform-tests/css/cssom/support/constructable-import.css
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
* {
|
||||
color: red;
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
<!DOCTYPE html>
|
||||
<div style="width: 100px; height: 100px; background-color: green"></div>
|
|
@ -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>
|
|
@ -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) {
|
||||
|
|
|
@ -7,6 +7,10 @@ const longValue = "s".repeat(127);
|
|||
"headers": ["accept", "accept-language", "content-language"],
|
||||
"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(", "));
|
||||
|
|
|
@ -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>
|
|
@ -239,7 +239,7 @@ dictionary RTCTransportStats : RTCStats {
|
|||
dictionary RTCIceCandidateStats : RTCStats {
|
||||
DOMString transportId;
|
||||
RTCNetworkType networkType;
|
||||
DOMString address;
|
||||
DOMString? address;
|
||||
long port;
|
||||
DOMString protocol;
|
||||
RTCIceCandidateType candidateType;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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'));
|
||||
}
|
||||
});
|
|
@ -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>
|
|
@ -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>
|
|
@ -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');
|
||||
|
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
@ -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>
|
After Width: | Height: | Size: 5.1 KiB |
|
@ -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>
|
After Width: | Height: | Size: 5.1 KiB |
|
@ -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>
|
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="100" height="100" fill="green"/>
|
||||
</svg>
|
After Width: | Height: | Size: 96 B |
|
@ -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>
|
After Width: | Height: | Size: 742 B |
|
@ -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>
|
After Width: | Height: | Size: 881 B |
|
@ -1,3 +1,3 @@
|
|||
mozprocess == 0.26
|
||||
selenium==3.141.0
|
||||
requests==2.20.1
|
||||
requests==2.21.0
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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):
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|