Update web-platform-tests to revision 093a97b6ecc6484c201d704d38b47bef1964d59d

This commit is contained in:
WPT Sync Bot 2018-12-05 21:05:42 -05:00
parent 16e4eb6964
commit f9972c83e3
79 changed files with 1530 additions and 824 deletions

View file

@ -138745,6 +138745,18 @@
{} {}
] ]
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-span-001.html": [
[
"/css/css-text/overflow-wrap/overflow-wrap-break-word-span-001.html",
[
[
"/css/css-text/overflow-wrap/reference/overflow-wrap-break-word-span-001-ref.html",
"=="
]
],
{}
]
],
"css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [
[ [
"/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html", "/css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html",
@ -173018,7 +173030,7 @@
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html", "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html",
[ [
[ [
"/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-001-ref.html", "/css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002-ref.html",
"==" "=="
] ]
], ],
@ -268536,6 +268548,11 @@
{} {}
] ]
], ],
"css/css-text/overflow-wrap/reference/overflow-wrap-break-word-span-001-ref.html": [
[
{}
]
],
"css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [ "css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [
[ [
{} {}
@ -297856,6 +297873,11 @@
{} {}
] ]
], ],
"interfaces/event-timing.idl": [
[
{}
]
],
"interfaces/feature-policy.idl": [ "interfaces/feature-policy.idl": [
[ [
{} {}
@ -343187,6 +343209,12 @@
{} {}
] ]
], ],
"css/css-sizing/percentage-min-width.html": [
[
"/css/css-sizing/percentage-min-width.html",
{}
]
],
"css/css-syntax/charset/page-utf16-css-bomless-utf16.html": [ "css/css-syntax/charset/page-utf16-css-bomless-utf16.html": [
[ [
"/css/css-syntax/charset/page-utf16-css-bomless-utf16.html", "/css/css-syntax/charset/page-utf16-css-bomless-utf16.html",
@ -344621,6 +344649,12 @@
{} {}
] ]
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-span-002.html": [
[
"/css/css-text/overflow-wrap/overflow-wrap-break-word-span-002.html",
{}
]
],
"css/css-text/overflow-wrap/word-wrap-alias.html": [ "css/css-text/overflow-wrap/word-wrap-alias.html": [
[ [
"/css/css-text/overflow-wrap/word-wrap-alias.html", "/css/css-text/overflow-wrap/word-wrap-alias.html",
@ -362001,6 +362035,14 @@
} }
] ]
], ],
"event-timing/event-timing-retrieve-firstInput.html": [
[
"/event-timing/event-timing-retrieve-firstInput.html",
{
"testdriver": true
}
]
],
"event-timing/event-timing-timingconditions.html": [ "event-timing/event-timing-timingconditions.html": [
[ [
"/event-timing/event-timing-timingconditions.html", "/event-timing/event-timing-timingconditions.html",
@ -362009,6 +362051,24 @@
} }
] ]
], ],
"event-timing/idlharness.any.js": [
[
"/event-timing/idlharness.any.html",
{}
],
[
"/event-timing/idlharness.any.serviceworker.html",
{}
],
[
"/event-timing/idlharness.any.sharedworker.html",
{}
],
[
"/event-timing/idlharness.any.worker.html",
{}
]
],
"eventsource/dedicated-worker/eventsource-close.htm": [ "eventsource/dedicated-worker/eventsource-close.htm": [
[ [
"/eventsource/dedicated-worker/eventsource-close.htm", "/eventsource/dedicated-worker/eventsource-close.htm",
@ -408497,6 +408557,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/color-interpolation-computed.svg": [
[
"/svg/painting/parsing/color-interpolation-computed.svg",
{}
]
],
"svg/painting/parsing/color-interpolation-invalid.svg": [ "svg/painting/parsing/color-interpolation-invalid.svg": [
[ [
"/svg/painting/parsing/color-interpolation-invalid.svg", "/svg/painting/parsing/color-interpolation-invalid.svg",
@ -408509,6 +408575,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/color-rendering-computed.svg": [
[
"/svg/painting/parsing/color-rendering-computed.svg",
{}
]
],
"svg/painting/parsing/color-rendering-invalid.svg": [ "svg/painting/parsing/color-rendering-invalid.svg": [
[ [
"/svg/painting/parsing/color-rendering-invalid.svg", "/svg/painting/parsing/color-rendering-invalid.svg",
@ -408521,6 +408593,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/fill-computed.svg": [
[
"/svg/painting/parsing/fill-computed.svg",
{}
]
],
"svg/painting/parsing/fill-invalid.svg": [ "svg/painting/parsing/fill-invalid.svg": [
[ [
"/svg/painting/parsing/fill-invalid.svg", "/svg/painting/parsing/fill-invalid.svg",
@ -408545,6 +408623,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/fill-rule-computed.svg": [
[
"/svg/painting/parsing/fill-rule-computed.svg",
{}
]
],
"svg/painting/parsing/fill-rule-invalid.svg": [ "svg/painting/parsing/fill-rule-invalid.svg": [
[ [
"/svg/painting/parsing/fill-rule-invalid.svg", "/svg/painting/parsing/fill-rule-invalid.svg",
@ -408563,6 +408647,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/image-rendering-computed.svg": [
[
"/svg/painting/parsing/image-rendering-computed.svg",
{}
]
],
"svg/painting/parsing/image-rendering-invalid.svg": [ "svg/painting/parsing/image-rendering-invalid.svg": [
[ [
"/svg/painting/parsing/image-rendering-invalid.svg", "/svg/painting/parsing/image-rendering-invalid.svg",
@ -408575,6 +408665,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/marker-end-computed.svg": [
[
"/svg/painting/parsing/marker-end-computed.svg",
{}
]
],
"svg/painting/parsing/marker-end-invalid.svg": [ "svg/painting/parsing/marker-end-invalid.svg": [
[ [
"/svg/painting/parsing/marker-end-invalid.svg", "/svg/painting/parsing/marker-end-invalid.svg",
@ -408587,6 +408683,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/marker-mid-computed.svg": [
[
"/svg/painting/parsing/marker-mid-computed.svg",
{}
]
],
"svg/painting/parsing/marker-mid-invalid.svg": [ "svg/painting/parsing/marker-mid-invalid.svg": [
[ [
"/svg/painting/parsing/marker-mid-invalid.svg", "/svg/painting/parsing/marker-mid-invalid.svg",
@ -408599,6 +408701,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/marker-start-computed.svg": [
[
"/svg/painting/parsing/marker-start-computed.svg",
{}
]
],
"svg/painting/parsing/marker-start-invalid.svg": [ "svg/painting/parsing/marker-start-invalid.svg": [
[ [
"/svg/painting/parsing/marker-start-invalid.svg", "/svg/painting/parsing/marker-start-invalid.svg",
@ -408611,6 +408719,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/paint-order-computed.svg": [
[
"/svg/painting/parsing/paint-order-computed.svg",
{}
]
],
"svg/painting/parsing/paint-order-invalid.svg": [ "svg/painting/parsing/paint-order-invalid.svg": [
[ [
"/svg/painting/parsing/paint-order-invalid.svg", "/svg/painting/parsing/paint-order-invalid.svg",
@ -408623,6 +408737,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/shape-rendering-computed.svg": [
[
"/svg/painting/parsing/shape-rendering-computed.svg",
{}
]
],
"svg/painting/parsing/shape-rendering-invalid.svg": [ "svg/painting/parsing/shape-rendering-invalid.svg": [
[ [
"/svg/painting/parsing/shape-rendering-invalid.svg", "/svg/painting/parsing/shape-rendering-invalid.svg",
@ -408635,6 +408755,18 @@
{} {}
] ]
], ],
"svg/painting/parsing/stroke-computed.svg": [
[
"/svg/painting/parsing/stroke-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-dasharray-computed.svg": [
[
"/svg/painting/parsing/stroke-dasharray-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-dasharray-invalid.svg": [ "svg/painting/parsing/stroke-dasharray-invalid.svg": [
[ [
"/svg/painting/parsing/stroke-dasharray-invalid.svg", "/svg/painting/parsing/stroke-dasharray-invalid.svg",
@ -408647,6 +408779,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/stroke-dashoffset-computed.svg": [
[
"/svg/painting/parsing/stroke-dashoffset-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-dashoffset-invalid.svg": [ "svg/painting/parsing/stroke-dashoffset-invalid.svg": [
[ [
"/svg/painting/parsing/stroke-dashoffset-invalid.svg", "/svg/painting/parsing/stroke-dashoffset-invalid.svg",
@ -408665,6 +408803,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/stroke-linecap-computed.svg": [
[
"/svg/painting/parsing/stroke-linecap-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-linecap-invalid.svg": [ "svg/painting/parsing/stroke-linecap-invalid.svg": [
[ [
"/svg/painting/parsing/stroke-linecap-invalid.svg", "/svg/painting/parsing/stroke-linecap-invalid.svg",
@ -408677,6 +408821,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/stroke-linejoin-computed.svg": [
[
"/svg/painting/parsing/stroke-linejoin-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-linejoin-invalid.svg": [ "svg/painting/parsing/stroke-linejoin-invalid.svg": [
[ [
"/svg/painting/parsing/stroke-linejoin-invalid.svg", "/svg/painting/parsing/stroke-linejoin-invalid.svg",
@ -408689,6 +408839,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/stroke-miterlimit-computed.svg": [
[
"/svg/painting/parsing/stroke-miterlimit-computed.svg",
{}
]
],
"svg/painting/parsing/stroke-miterlimit-invalid.svg": [ "svg/painting/parsing/stroke-miterlimit-invalid.svg": [
[ [
"/svg/painting/parsing/stroke-miterlimit-invalid.svg", "/svg/painting/parsing/stroke-miterlimit-invalid.svg",
@ -408743,6 +408899,12 @@
{} {}
] ]
], ],
"svg/painting/parsing/text-rendering-computed.svg": [
[
"/svg/painting/parsing/text-rendering-computed.svg",
{}
]
],
"svg/painting/parsing/text-rendering-invalid.svg": [ "svg/painting/parsing/text-rendering-invalid.svg": [
[ [
"/svg/painting/parsing/text-rendering-invalid.svg", "/svg/painting/parsing/text-rendering-invalid.svg",
@ -409295,6 +409457,12 @@
{} {}
] ]
], ],
"trusted-types/GlobalEventHandlers-onclick.tentative.html": [
[
"/trusted-types/GlobalEventHandlers-onclick.tentative.html",
{}
]
],
"trusted-types/HTMLElement-generic.tentative.html": [ "trusted-types/HTMLElement-generic.tentative.html": [
[ [
"/trusted-types/HTMLElement-generic.tentative.html", "/trusted-types/HTMLElement-generic.tentative.html",
@ -409325,6 +409493,42 @@
{} {}
] ]
], ],
"trusted-types/TrustedTypePolicy-CSP-no-name.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-CSP-no-name.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicy-CSP-wildcard.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-CSP-wildcard.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicy-CSP.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-CSP.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicy-createXXX.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-createXXX.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicy-exposed.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-exposed.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicy-name.tentative.html": [
[
"/trusted-types/TrustedTypePolicy-name.tentative.html",
{}
]
],
"trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [
[ [
"/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html", "/trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html",
@ -566758,6 +566962,10 @@
"fa95069dbf0083b0dc7095d2bb3acf20a6ccf898", "fa95069dbf0083b0dc7095d2bb3acf20a6ccf898",
"reftest" "reftest"
], ],
"css/css-sizing/percentage-min-width.html": [
"11c34eafc32812da1b4da1552afe08c231cd69db",
"testharness"
],
"css/css-sizing/whitespace-and-break.html": [ "css/css-sizing/whitespace-and-break.html": [
"f3ea3764478488b949433daccddf710cd0a91006", "f3ea3764478488b949433daccddf710cd0a91006",
"reftest" "reftest"
@ -570443,17 +570651,25 @@
"reftest" "reftest"
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [ "css/css-text/overflow-wrap/overflow-wrap-break-word-004.html": [
"560ef63b2f94c5eeca83ee5ef63cdfc15fbdfe34", "b277319cd23831a4911978f450d0bc812aedb695",
"reftest" "reftest"
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-005.html": [ "css/css-text/overflow-wrap/overflow-wrap-break-word-005.html": [
"3ef61bc9eff78b860c0bd2ed5c6bc4c28c168008", "dd005a816f2febca4c41b52df75372019c5fb451",
"reftest" "reftest"
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [ "css/css-text/overflow-wrap/overflow-wrap-break-word-fit-content-001.html": [
"bce6c68389c32960d79e8fbbf61f9fa28c733165", "bce6c68389c32960d79e8fbbf61f9fa28c733165",
"reftest" "reftest"
], ],
"css/css-text/overflow-wrap/overflow-wrap-break-word-span-001.html": [
"0565b8bb75d5feff2352a1dd3eb9a8f8ef0d1bef",
"reftest"
],
"css/css-text/overflow-wrap/overflow-wrap-break-word-span-002.html": [
"39426d0420287a730dcac47696bd69520e8a6b72",
"testharness"
],
"css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [ "css/css-text/overflow-wrap/overflow-wrap-min-content-size-001.html": [
"608d4853a2425d9b4157bbe331fd78763985cecd", "608d4853a2425d9b4157bbe331fd78763985cecd",
"reftest" "reftest"
@ -570482,6 +570698,10 @@
"30787e204fa7003e85e78fc65a885d0521659545", "30787e204fa7003e85e78fc65a885d0521659545",
"support" "support"
], ],
"css/css-text/overflow-wrap/reference/overflow-wrap-break-word-span-001-ref.html": [
"0264bcf322f4a6f9af451ffd6bed6e0fbdc46ef2",
"support"
],
"css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [ "css/css-text/overflow-wrap/reference/overflow-wrap-min-content-size-001-ref.html": [
"99d964777c663fb8ca37be00c162ddfbb82951c9", "99d964777c663fb8ca37be00c162ddfbb82951c9",
"support" "support"
@ -595951,7 +596171,7 @@
"support" "support"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-layout-suppress-baseline-002.html": [
"eb791427c0c8e6716122bc7957ed5c68c80be52a", "845290768acbe5b3bd81d4c78e4a4cf61fecc906",
"reftest" "reftest"
], ],
"css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [ "css/vendor-imports/mozilla/mozilla-central-reftests/contain/contain-paint-clip-001-ref.html": [
@ -604243,7 +604463,7 @@
"support" "support"
], ],
"docs/_writing-tests/testharness.md": [ "docs/_writing-tests/testharness.md": [
"9c21452607e8f3f9e5bbf3ef2fb7771441f4a680", "c19fe0ee881bb0517ef0617e6412ee6025a5079f",
"support" "support"
], ],
"docs/_writing-tests/visual.md": [ "docs/_writing-tests/visual.md": [
@ -608691,7 +608911,7 @@
"support" "support"
], ],
"event-timing/event-timing-bufferbeforeonload.html": [ "event-timing/event-timing-bufferbeforeonload.html": [
"223f5ed0fb5ce643d9f121f9af136e88a5d9e34d", "22fc4d547b90da989a292a44535c73d761f61293",
"testharness" "testharness"
], ],
"event-timing/event-timing-crossiframe.html": [ "event-timing/event-timing-crossiframe.html": [
@ -608707,11 +608927,11 @@
"testharness" "testharness"
], ],
"event-timing/event-timing-onloadthenobserve-firstInput.html": [ "event-timing/event-timing-onloadthenobserve-firstInput.html": [
"16f48411f9f12f17407c29098b97ce5479daed0f", "22ac4cb45e947ca3555fe57fbde03746397bfcb2",
"testharness" "testharness"
], ],
"event-timing/event-timing-onloadthenobserve.html": [ "event-timing/event-timing-onloadthenobserve.html": [
"7dc113247cd8cd7ffe452edeaffcc07ba67e516e", "07cc236cb47258bce490d2b18a29863922617ba1",
"testharness" "testharness"
], ],
"event-timing/event-timing-only-observe-firstInput.html": [ "event-timing/event-timing-only-observe-firstInput.html": [
@ -608722,10 +608942,18 @@
"f38761b469da693f2c14a62c96a4671098cbd4e5", "f38761b469da693f2c14a62c96a4671098cbd4e5",
"testharness" "testharness"
], ],
"event-timing/event-timing-retrieve-firstInput.html": [
"ded00e61c75dfb29a200082b0f9d477c09297fd4",
"testharness"
],
"event-timing/event-timing-timingconditions.html": [ "event-timing/event-timing-timingconditions.html": [
"1e5dd2fd65cde654f9223ee3a9180a5adfeb4a57", "1e5dd2fd65cde654f9223ee3a9180a5adfeb4a57",
"testharness" "testharness"
], ],
"event-timing/idlharness.any.js": [
"5ee98548fb6f2209b8c4b5346830c0d723e68170",
"testharness"
],
"event-timing/resources/event-timing-crossiframe-childframe.html": [ "event-timing/resources/event-timing-crossiframe-childframe.html": [
"7491fd88cb3c8cbfa849620e3690e4a42e454b9e", "7491fd88cb3c8cbfa849620e3690e4a42e454b9e",
"support" "support"
@ -631894,6 +632122,10 @@
"71e80c717b2becc9a005e471553910a26fd0a326", "71e80c717b2becc9a005e471553910a26fd0a326",
"support" "support"
], ],
"interfaces/event-timing.idl": [
"0e12737bcc6e75d643abdd0e6bc44d44bcd8e6af",
"support"
],
"interfaces/feature-policy.idl": [ "interfaces/feature-policy.idl": [
"c09cc33ce14daefd44db0a84c1a9b39264e856a1", "c09cc33ce14daefd44db0a84c1a9b39264e856a1",
"support" "support"
@ -632195,7 +632427,7 @@
"support" "support"
], ],
"interfaces/web-nfc.idl": [ "interfaces/web-nfc.idl": [
"699a31623a335641b8b8be21040f7f80df6555fa", "d54773be499366806bbd93c7fc119ff7a3a2ff72",
"support" "support"
], ],
"interfaces/web-share.idl": [ "interfaces/web-share.idl": [
@ -632247,7 +632479,7 @@
"support" "support"
], ],
"interfaces/webxr.idl": [ "interfaces/webxr.idl": [
"5561369931f749224f2dcf87d5fc921af64d82b2", "7f7b43c222bd3bc4dcab0c618402ff8ff61ae470",
"support" "support"
], ],
"interfaces/worklets.idl": [ "interfaces/worklets.idl": [
@ -658235,7 +658467,7 @@
"testharness" "testharness"
], ],
"service-workers/service-worker/fetch-cors-xhr.https.html": [ "service-workers/service-worker/fetch-cors-xhr.https.html": [
"397cb81d5462c6a1db7b67c08ad9a5739147745b", "f8ff445673bd42bafcc29c43eb86967dac1f9792",
"testharness" "testharness"
], ],
"service-workers/service-worker/fetch-csp.https.html": [ "service-workers/service-worker/fetch-csp.https.html": [
@ -659067,7 +659299,7 @@
"support" "support"
], ],
"service-workers/service-worker/resources/fetch-cors-xhr-iframe.html": [ "service-workers/service-worker/resources/fetch-cors-xhr-iframe.html": [
"51952a988efe0700276cefa032865c442dfcb6c6", "d88c5103d35b1880932608bea75d21a8d61cc038",
"support" "support"
], ],
"service-workers/service-worker/resources/fetch-csp-iframe.html": [ "service-workers/service-worker/resources/fetch-csp-iframe.html": [
@ -661015,7 +661247,7 @@
"support" "support"
], ],
"storage/estimate-indexeddb.https.any.js": [ "storage/estimate-indexeddb.https.any.js": [
"3e34ad19babf53da04974ceafe0fd4cb7be33621", "c62f5a96c1a2c22142988eabd5b59ce3d3409f95",
"testharness" "testharness"
], ],
"storage/estimate-parallel.https.any.js": [ "storage/estimate-parallel.https.any.js": [
@ -661615,7 +661847,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/cx-valid.svg": [ "svg/geometry/parsing/cx-valid.svg": [
"e7f627ac721fcc90597314ef0c97765566c343b3", "a96fee56555d69297ab833536ed3177cedfd7145",
"testharness" "testharness"
], ],
"svg/geometry/parsing/cy-computed.svg": [ "svg/geometry/parsing/cy-computed.svg": [
@ -661627,7 +661859,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/cy-valid.svg": [ "svg/geometry/parsing/cy-valid.svg": [
"4372c36ea225328926030830e895f64858e73784", "022445662b7d9d519ca28a1eeca47c9199ceafca",
"testharness" "testharness"
], ],
"svg/geometry/parsing/r-computed.svg": [ "svg/geometry/parsing/r-computed.svg": [
@ -661651,7 +661883,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/rx-valid.svg": [ "svg/geometry/parsing/rx-valid.svg": [
"e2b628f1de4bd8e2a3fec98fda1aa76b6af79b87", "9d156b3cccfd6bb967372bb2c9ade6fc9527efd9",
"testharness" "testharness"
], ],
"svg/geometry/parsing/ry-computed.svg": [ "svg/geometry/parsing/ry-computed.svg": [
@ -661663,7 +661895,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/ry-valid.svg": [ "svg/geometry/parsing/ry-valid.svg": [
"4ce5bec4084cf0e6cf1e6744701b756cc18e2f91", "e92e2cf6410ba4071baa81c18ec4462ba60b42dd",
"testharness" "testharness"
], ],
"svg/geometry/parsing/x-computed.svg": [ "svg/geometry/parsing/x-computed.svg": [
@ -661675,7 +661907,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/x-valid.svg": [ "svg/geometry/parsing/x-valid.svg": [
"5ff2fbd831d7373faee706538f08528dc4ac8a99", "2b06f26ac4c2b7ec0bf2b295854dc8d15fed130e",
"testharness" "testharness"
], ],
"svg/geometry/parsing/y-computed.svg": [ "svg/geometry/parsing/y-computed.svg": [
@ -661687,7 +661919,7 @@
"testharness" "testharness"
], ],
"svg/geometry/parsing/y-valid.svg": [ "svg/geometry/parsing/y-valid.svg": [
"24885ccfc7059dd9e26e57e3839571d2883f73c3", "aad0e4e2937064224de6a2313379fb43ffdf8322",
"testharness" "testharness"
], ],
"svg/historical.html": [ "svg/historical.html": [
@ -664126,6 +664358,10 @@
"47f70336a6f6774805c08c99f37e8ee7c32ecc10", "47f70336a6f6774805c08c99f37e8ee7c32ecc10",
"reftest" "reftest"
], ],
"svg/painting/parsing/color-interpolation-computed.svg": [
"88604d75b069afa3bbf894a5ae6c869e420f940d",
"testharness"
],
"svg/painting/parsing/color-interpolation-invalid.svg": [ "svg/painting/parsing/color-interpolation-invalid.svg": [
"11fd05be070350c13fabbc3f2627ae80a381f389", "11fd05be070350c13fabbc3f2627ae80a381f389",
"testharness" "testharness"
@ -664134,6 +664370,10 @@
"9465edb232fb30ed7237f48c159a454e672cd76b", "9465edb232fb30ed7237f48c159a454e672cd76b",
"testharness" "testharness"
], ],
"svg/painting/parsing/color-rendering-computed.svg": [
"4d63616c794b8c6666c34d46148cd0edd26c06b9",
"testharness"
],
"svg/painting/parsing/color-rendering-invalid.svg": [ "svg/painting/parsing/color-rendering-invalid.svg": [
"bfdf95ab2ee9ba336b295a8fa8dcf2a91130cdd1", "bfdf95ab2ee9ba336b295a8fa8dcf2a91130cdd1",
"testharness" "testharness"
@ -664142,12 +664382,16 @@
"5f7baa2dd08ace602a0a46a2840cfea1925a4055", "5f7baa2dd08ace602a0a46a2840cfea1925a4055",
"testharness" "testharness"
], ],
"svg/painting/parsing/fill-computed.svg": [
"4678999e8efcfd892e2d83d4ccf252d08ce03ee5",
"testharness"
],
"svg/painting/parsing/fill-invalid.svg": [ "svg/painting/parsing/fill-invalid.svg": [
"1feb867c3ab9e83f96e0566b53c75aa3dccb0653", "1feb867c3ab9e83f96e0566b53c75aa3dccb0653",
"testharness" "testharness"
], ],
"svg/painting/parsing/fill-opacity-computed.svg": [ "svg/painting/parsing/fill-opacity-computed.svg": [
"aa24d3efe8130053ae174a343c074743805794c0", "4526724b999419cd447d5f1a0acababd9653b425",
"testharness" "testharness"
], ],
"svg/painting/parsing/fill-opacity-invalid.svg": [ "svg/painting/parsing/fill-opacity-invalid.svg": [
@ -664158,6 +664402,10 @@
"41cfe985d623d682788c538e87502732821ccfc8", "41cfe985d623d682788c538e87502732821ccfc8",
"testharness" "testharness"
], ],
"svg/painting/parsing/fill-rule-computed.svg": [
"2b51c9edc4ac9e7cebeb378ad8cccca5b10c1a9b",
"testharness"
],
"svg/painting/parsing/fill-rule-invalid.svg": [ "svg/painting/parsing/fill-rule-invalid.svg": [
"d89a81acbb1533cfb121f851a005dde64f82d996", "d89a81acbb1533cfb121f851a005dde64f82d996",
"testharness" "testharness"
@ -664170,6 +664418,10 @@
"d5bb5ceb0f719c31786e3667bdecd01e1fa248d2", "d5bb5ceb0f719c31786e3667bdecd01e1fa248d2",
"testharness" "testharness"
], ],
"svg/painting/parsing/image-rendering-computed.svg": [
"18662ef835589024e21a0cdba65861400c10b0cd",
"testharness"
],
"svg/painting/parsing/image-rendering-invalid.svg": [ "svg/painting/parsing/image-rendering-invalid.svg": [
"5c3cc9f054bf4f0b21ba7c48c49fe810d9841615", "5c3cc9f054bf4f0b21ba7c48c49fe810d9841615",
"testharness" "testharness"
@ -664178,6 +664430,10 @@
"18402493f3c779b9427b383cc668033ac46c4936", "18402493f3c779b9427b383cc668033ac46c4936",
"testharness" "testharness"
], ],
"svg/painting/parsing/marker-end-computed.svg": [
"aa0bc6774a5cea491e36c3432670b3568d50ab7c",
"testharness"
],
"svg/painting/parsing/marker-end-invalid.svg": [ "svg/painting/parsing/marker-end-invalid.svg": [
"bc8e5fcc8bab475cdd086f533a7b9d6a82bcff7e", "bc8e5fcc8bab475cdd086f533a7b9d6a82bcff7e",
"testharness" "testharness"
@ -664186,6 +664442,10 @@
"5be036e994637be7abfe4440618cd4bb16b5d5a7", "5be036e994637be7abfe4440618cd4bb16b5d5a7",
"testharness" "testharness"
], ],
"svg/painting/parsing/marker-mid-computed.svg": [
"074c17c269e136d5fdacf34ec6920507526d141b",
"testharness"
],
"svg/painting/parsing/marker-mid-invalid.svg": [ "svg/painting/parsing/marker-mid-invalid.svg": [
"25cfbba82eb54a30c09e00580100627ccf0420b5", "25cfbba82eb54a30c09e00580100627ccf0420b5",
"testharness" "testharness"
@ -664194,6 +664454,10 @@
"119fd706b12189342a6ad9d9d94c512df57ccbdc", "119fd706b12189342a6ad9d9d94c512df57ccbdc",
"testharness" "testharness"
], ],
"svg/painting/parsing/marker-start-computed.svg": [
"e0ad38bbbc8df4563b6a81fba6dcdc54b92c3e1e",
"testharness"
],
"svg/painting/parsing/marker-start-invalid.svg": [ "svg/painting/parsing/marker-start-invalid.svg": [
"6c1fdbcd4b577f3d5de2f747d74bb34c670ce3bd", "6c1fdbcd4b577f3d5de2f747d74bb34c670ce3bd",
"testharness" "testharness"
@ -664202,6 +664466,10 @@
"fd6f2d6fe425ec1e4ab5c7ee6425a5e4ead823bc", "fd6f2d6fe425ec1e4ab5c7ee6425a5e4ead823bc",
"testharness" "testharness"
], ],
"svg/painting/parsing/paint-order-computed.svg": [
"0cba453f437a2e10f932ff83b95b6835a4920776",
"testharness"
],
"svg/painting/parsing/paint-order-invalid.svg": [ "svg/painting/parsing/paint-order-invalid.svg": [
"5043176dd97bd1d99ea2f9674abfa08f06d7383e", "5043176dd97bd1d99ea2f9674abfa08f06d7383e",
"testharness" "testharness"
@ -664210,6 +664478,10 @@
"25759d222d15a18ca49645e1ff10a17b50341f58", "25759d222d15a18ca49645e1ff10a17b50341f58",
"testharness" "testharness"
], ],
"svg/painting/parsing/shape-rendering-computed.svg": [
"8dbea5eba6c0b3962c8eec0bc04577762e56a90f",
"testharness"
],
"svg/painting/parsing/shape-rendering-invalid.svg": [ "svg/painting/parsing/shape-rendering-invalid.svg": [
"e20ca879dbaf7744157bca497a581d5f6083fcd5", "e20ca879dbaf7744157bca497a581d5f6083fcd5",
"testharness" "testharness"
@ -664218,12 +664490,24 @@
"803609476f8387710391fcc882ef4c6503eb5620", "803609476f8387710391fcc882ef4c6503eb5620",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-computed.svg": [
"331496b01b8f367dde202715251d52d77a864754",
"testharness"
],
"svg/painting/parsing/stroke-dasharray-computed.svg": [
"2e3a74b5728594e7378d47da659e801cfcfec7a9",
"testharness"
],
"svg/painting/parsing/stroke-dasharray-invalid.svg": [ "svg/painting/parsing/stroke-dasharray-invalid.svg": [
"0c356b6433955588c7b0ed32d9ff8c2eab4c7619", "0c356b6433955588c7b0ed32d9ff8c2eab4c7619",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-dasharray-valid.svg": [ "svg/painting/parsing/stroke-dasharray-valid.svg": [
"7301a54e65e2b38fd2e5d83ccb8780fe74ae6295", "e47ebc62a1296f75c42af980b85073ebe135605b",
"testharness"
],
"svg/painting/parsing/stroke-dashoffset-computed.svg": [
"bdb934614c109208326e357ea5b056dd4f754994",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-dashoffset-invalid.svg": [ "svg/painting/parsing/stroke-dashoffset-invalid.svg": [
@ -664231,13 +664515,17 @@
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-dashoffset-valid.svg": [ "svg/painting/parsing/stroke-dashoffset-valid.svg": [
"921b03a6a6f270307f281eafb609d81fc11f2b99", "ff913e06e4f849b5b14fac050986f697df9c81d8",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-invalid.svg": [ "svg/painting/parsing/stroke-invalid.svg": [
"a976ccb97742bb9aefc94d6cfd9c1e57ee18a06a", "a976ccb97742bb9aefc94d6cfd9c1e57ee18a06a",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-linecap-computed.svg": [
"7b5ce96ce5de296af7aed3d85f76d3ba2fee2ccf",
"testharness"
],
"svg/painting/parsing/stroke-linecap-invalid.svg": [ "svg/painting/parsing/stroke-linecap-invalid.svg": [
"ba4bd8640e40328f1fe913f497913df3dd7f3219", "ba4bd8640e40328f1fe913f497913df3dd7f3219",
"testharness" "testharness"
@ -664246,6 +664534,10 @@
"045c4eef7c708dbb7b33a04104290be8a93bbe2d", "045c4eef7c708dbb7b33a04104290be8a93bbe2d",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-linejoin-computed.svg": [
"a8e9aab8eb098cc17d470245bf1cedde7a2c5866",
"testharness"
],
"svg/painting/parsing/stroke-linejoin-invalid.svg": [ "svg/painting/parsing/stroke-linejoin-invalid.svg": [
"6a6c4282803ae337685c5465362c9dcf8981d354", "6a6c4282803ae337685c5465362c9dcf8981d354",
"testharness" "testharness"
@ -664254,6 +664546,10 @@
"876b2f67dd665c358a207fa14abfa470b787e31f", "876b2f67dd665c358a207fa14abfa470b787e31f",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-miterlimit-computed.svg": [
"d2ec631b168de1f6a53825a00aec84c281ac2ef7",
"testharness"
],
"svg/painting/parsing/stroke-miterlimit-invalid.svg": [ "svg/painting/parsing/stroke-miterlimit-invalid.svg": [
"c1307dab5b8c81e3ee1c68f37750a1466b022135", "c1307dab5b8c81e3ee1c68f37750a1466b022135",
"testharness" "testharness"
@ -664263,7 +664559,7 @@
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-opacity-computed.svg": [ "svg/painting/parsing/stroke-opacity-computed.svg": [
"58cb144935a378e25644c40bc5b372799a88e792", "02bef376f6178062e46b5035fb856db434351dc2",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-opacity-invalid.svg": [ "svg/painting/parsing/stroke-opacity-invalid.svg": [
@ -664279,7 +664575,7 @@
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-width-computed.svg": [ "svg/painting/parsing/stroke-width-computed.svg": [
"c9284be9a13a633872d9abb670f1c4390b540030", "71dead0942fc2e660f6ffe239f00ef502c1a8728",
"testharness" "testharness"
], ],
"svg/painting/parsing/stroke-width-invalid.svg": [ "svg/painting/parsing/stroke-width-invalid.svg": [
@ -664290,6 +664586,10 @@
"02bca189f74fe91088ebe913f848b80dfc24868c", "02bca189f74fe91088ebe913f848b80dfc24868c",
"testharness" "testharness"
], ],
"svg/painting/parsing/text-rendering-computed.svg": [
"e37f4fed5bbbc231a0d8e0e6989f4f18893c6e6d",
"testharness"
],
"svg/painting/parsing/text-rendering-invalid.svg": [ "svg/painting/parsing/text-rendering-invalid.svg": [
"92da841cad69b8cce5628439f30da5b189259094", "92da841cad69b8cce5628439f30da5b189259094",
"testharness" "testharness"
@ -670383,7 +670683,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/browsers/sauce.py": [ "tools/wptrunner/wptrunner/browsers/sauce.py": [
"02cc322aa35efb8db6c7a29ce5b95080f482124e", "c6863005a0fc7b48d415daaedae63e759f9b2f27",
"support" "support"
], ],
"tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat": [ "tools/wptrunner/wptrunner/browsers/sauce_setup/edge-prerun.bat": [
@ -670591,7 +670891,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/tests/browsers/test_sauce.py": [ "tools/wptrunner/wptrunner/tests/browsers/test_sauce.py": [
"e8542959aa2efbcdc5190afc1c906f0a6717e2c1", "06a5641d50fbbaed4de9df511c567753ef1a326d",
"support" "support"
], ],
"tools/wptrunner/wptrunner/tests/test_chunker.py": [ "tools/wptrunner/wptrunner/tests/test_chunker.py": [
@ -670659,7 +670959,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/wptcommandline.py": [ "tools/wptrunner/wptrunner/wptcommandline.py": [
"6881477a3c04de798ee3c30edfa00384da38961a", "08810fcc0272d6cf3096c5fc111014fdae85c9e6",
"support" "support"
], ],
"tools/wptrunner/wptrunner/wptlogging.py": [ "tools/wptrunner/wptrunner/wptlogging.py": [
@ -670719,7 +671019,7 @@
"support" "support"
], ],
"tools/wptrunner/wptrunner/wptrunner.py": [ "tools/wptrunner/wptrunner/wptrunner.py": [
"14f6cb9068d02ef92fe776ce8cbc2efa39f505ad", "7d35c51d90987672e34b8337d381ae7949845c33",
"support" "support"
], ],
"tools/wptrunner/wptrunner/wpttest.py": [ "tools/wptrunner/wptrunner/wpttest.py": [
@ -671134,6 +671434,10 @@
"80128cfbf0ebce7d878dd349fc8838b2a6469a16", "80128cfbf0ebce7d878dd349fc8838b2a6469a16",
"testharness" "testharness"
], ],
"trusted-types/GlobalEventHandlers-onclick.tentative.html": [
"6e8c560ebd1dafb4cc2b4509b2340790dade49c2",
"testharness"
],
"trusted-types/HTMLElement-generic.tentative.html": [ "trusted-types/HTMLElement-generic.tentative.html": [
"d1fafa70cd2768e7b98b5eab6da9f5eb77175fbc", "d1fafa70cd2768e7b98b5eab6da9f5eb77175fbc",
"testharness" "testharness"
@ -671158,6 +671462,30 @@
"3a880a53778acb165fd5d957eeaca22685baf2b5", "3a880a53778acb165fd5d957eeaca22685baf2b5",
"testharness" "testharness"
], ],
"trusted-types/TrustedTypePolicy-CSP-no-name.tentative.html": [
"2dfec26f5a0432e19fdbd139dadd3908b8acac3f",
"testharness"
],
"trusted-types/TrustedTypePolicy-CSP-wildcard.tentative.html": [
"22b87965614fd16d280d5a97f9150d07ccca3d3e",
"testharness"
],
"trusted-types/TrustedTypePolicy-CSP.tentative.html": [
"1293493ec1f7780b297d2040274150f0aba32adc",
"testharness"
],
"trusted-types/TrustedTypePolicy-createXXX.tentative.html": [
"6a0151ad9bcf7d02b6a98532ba53db509e086f83",
"testharness"
],
"trusted-types/TrustedTypePolicy-exposed.tentative.html": [
"e671c6fb61dcb58392c9fb0ac3f4fb37a67698bf",
"testharness"
],
"trusted-types/TrustedTypePolicy-name.tentative.html": [
"c121fe4cab50ab52a7159184bfa012e85d555768",
"testharness"
],
"trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-createXYZTests.tentative.html": [
"a162d84cd820051d6c5868c35b58cd347b0026e5", "a162d84cd820051d6c5868c35b58cd347b0026e5",
"testharness" "testharness"
@ -671171,7 +671499,7 @@
"testharness" "testharness"
], ],
"trusted-types/TrustedTypePolicyFactory-createPolicy-cspTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-cspTests.tentative.html": [
"9daf20ec1869919603965942fa6a4c99925ac8e9", "1293493ec1f7780b297d2040274150f0aba32adc",
"testharness" "testharness"
], ],
"trusted-types/TrustedTypePolicyFactory-createPolicy-defaultTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-defaultTests.tentative.html": [
@ -671179,7 +671507,7 @@
"testharness" "testharness"
], ],
"trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-exposedTests.tentative.html": [
"af6e04941c3b6206602bc7f547a3b0c9ef555a11", "137d0f54c8228645aaf184cc64654e1d66ffbaa6",
"testharness" "testharness"
], ],
"trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [ "trusted-types/TrustedTypePolicyFactory-createPolicy-nameTests.tentative.html": [
@ -671219,7 +671547,7 @@
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Document-write.tentative.html": [ "trusted-types/block-string-assignment-to-Document-write.tentative.html": [
"0d9ff61c9b305e193f96cebe18810d597aa75158", "5fa0b194df60c28dad98da828f5d22694d966e0f",
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html": [ "trusted-types/block-string-assignment-to-Element-insertAdjacentHTML.tentative.html": [
@ -671231,7 +671559,7 @@
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html": [ "trusted-types/block-string-assignment-to-Element-setAttribute.tentative.html": [
"646997de472ec98491d2d17fc65aeb77c999c03b", "4d06f014f2934a218b9e54be40fa14b95e0b51a7",
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Element-setAttributeNS.tentative.html": [ "trusted-types/block-string-assignment-to-Element-setAttributeNS.tentative.html": [
@ -671243,15 +671571,15 @@
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Location-assign.tentative.html": [ "trusted-types/block-string-assignment-to-Location-assign.tentative.html": [
"4ad4af9df5ae86b0bc2ab82d3b5ae062b88d70f6", "4c295ffa284acb21436f06ecbf06ac4073365efe",
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Location-href.tentative.html": [ "trusted-types/block-string-assignment-to-Location-href.tentative.html": [
"fd0a4e5ea0e53c5b85f0bfb6d092c4cd63ceb790", "86bce7994d6e9e43bddc590519126f4ee266cf06",
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Location-replace.tentative.html": [ "trusted-types/block-string-assignment-to-Location-replace.tentative.html": [
"9b8cabe58359e664e1ad9d8c43f604f88c7b3784", "aa3af64e12b1d2b296e8dedd40b9cef749b1431c",
"testharness" "testharness"
], ],
"trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html": [ "trusted-types/block-string-assignment-to-Range-createContextualFragment.tentative.html": [
@ -671267,7 +671595,7 @@
"testharness" "testharness"
], ],
"trusted-types/support/helper.sub.js": [ "trusted-types/support/helper.sub.js": [
"9ad605975555df539e6444d3b8935197c7925aef", "bae9d2dc7aa963271bdcc6ae72e4064f10ab8d05",
"support" "support"
], ],
"trusted-types/support/worker.js": [ "trusted-types/support/worker.js": [

View file

@ -0,0 +1,2 @@
[overflow-wrap-break-word-span-001.html]
expected: FAIL

View file

@ -0,0 +1,4 @@
[overflow-wrap-break-word-span-002.html]
[#container 1]
expected: FAIL

View file

@ -612,5 +612,23 @@
[windows-1254: iso8859-9 (XMLHttpRequest)] [windows-1254: iso8859-9 (XMLHttpRequest)]
expected: TIMEOUT expected: TIMEOUT
[windows-1253: x-cp1253 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1254: cp1254 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1253: cp1253 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: x-cp1252 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: windows-1252 (XMLHttpRequest)]
expected: TIMEOUT
[windows-1252: us-ascii (XMLHttpRequest)]
expected: TIMEOUT
[single-byte-decoder.html?TextDecoder] [single-byte-decoder.html?TextDecoder]

View file

@ -1,4 +0,0 @@
[traverse_the_history_2.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,4 +0,0 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -8,12 +8,9 @@
expected: TIMEOUT expected: TIMEOUT
[picture: source (max-width:500px) valid image, img broken image, resize to narrow] [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: FAIL expected: FAIL
[picture: source (max-width:500px) broken image, img valid image, resize to narrow] [picture: source (max-width:500px) valid image, img valid image, resize to narrow]
expected: FAIL expected: FAIL
[img (srcset 1 cand) valid image, resize to narrow] [img (srcset 1 cand) valid image, resize to narrow]

View file

@ -1,4 +1,5 @@
[parse-a-sizes-attribute-quirks-mode.html] [parse-a-sizes-attribute-quirks-mode.html]
expected: TIMEOUT
[<img srcset="/images/green-1x1.png?e38b 50w, /images/green-16x16.png?e38b 51w" sizes="(min-width:max(-200vw, 0)) 1px"> ref sizes="1px" (quirks mode)] [<img srcset="/images/green-1x1.png?e38b 50w, /images/green-16x16.png?e38b 51w" sizes="(min-width:max(-200vw, 0)) 1px"> ref sizes="1px" (quirks mode)]
expected: FAIL expected: FAIL

View file

@ -1,7 +0,0 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -1,4 +0,0 @@
[DOMContentLoaded-defer.html]
[The end: DOMContentLoaded and defer scripts]
expected: FAIL

View file

@ -2,3 +2,6 @@
[document.open() after parser is aborted] [document.open() after parser is aborted]
expected: FAIL expected: FAIL
[async document.open() after parser is aborted]
expected: FAIL

View file

@ -1,283 +0,0 @@
[limited-quirks.html]
[top: -\\31 .5]
expected: FAIL
[bottom: -1A]
expected: FAIL
[bottom: -1a]
expected: FAIL
[top: @1]
expected: FAIL
[top: "1a"]
expected: FAIL
[top: @a]
expected: FAIL
[bottom: "1"]
expected: FAIL
[bottom: -/**/1]
expected: FAIL
[top: +/**/1]
expected: FAIL
[bottom: @1a]
expected: FAIL
[top: 1\\31 ]
expected: FAIL
[top: url('1')]
expected: FAIL
[bottom: -\\31 ]
expected: FAIL
[top: calc(1)]
expected: FAIL
[top: \\31 ]
expected: FAIL
[bottom: +1\\31 ]
expected: FAIL
[bottom: 1\\31 .5]
expected: FAIL
[bottom: #0001]
expected: FAIL
[top: calc(2 * 2px)]
expected: FAIL
[bottom: 1a]
expected: FAIL
[bottom: A]
expected: FAIL
[bottom: #01]
expected: FAIL
[top: +\\31 .5]
expected: FAIL
[bottom: #1]
expected: FAIL
[top: -/**/1]
expected: FAIL
[bottom: +\\31 .5]
expected: FAIL
[bottom: \\31 ]
expected: FAIL
[bottom: calc(1)]
expected: FAIL
[top: #001]
expected: FAIL
[top: +\\31 ]
expected: FAIL
[bottom: +\\31 ]
expected: FAIL
[top: +1.5]
expected: FAIL
[top: +1\\31 ]
expected: FAIL
[bottom: @a]
expected: FAIL
[bottom: @1]
expected: FAIL
[top: #1]
expected: FAIL
[top: 1a]
expected: FAIL
[bottom: +1a]
expected: FAIL
[bottom: +1A]
expected: FAIL
[bottom: "a"]
expected: FAIL
[top: #00001]
expected: FAIL
[bottom: -1\\31 .5]
expected: FAIL
[top: "1"]
expected: FAIL
[bottom: 1.5]
expected: FAIL
[bottom: -\\31 .5]
expected: FAIL
[bottom: url('1')]
expected: FAIL
[bottom: -1.5]
expected: FAIL
[top: \\31 .5]
expected: FAIL
[bottom: "1a"]
expected: FAIL
[bottom: calc(2 * 2px)]
expected: FAIL
[bottom: +1\\31 .5]
expected: FAIL
[bottom: 1\\31 ]
expected: FAIL
[bottom: +/**/1]
expected: FAIL
[bottom: #00001]
expected: FAIL
[top: url(1)]
expected: FAIL
[bottom: #001]
expected: FAIL
[top: +1\\31 .5]
expected: FAIL
[top: -1a]
expected: FAIL
[top: -1A]
expected: FAIL
[bottom: url(1)]
expected: FAIL
[top: a]
expected: FAIL
[top: A]
expected: FAIL
[top: #000001]
expected: FAIL
[top: 1]
expected: FAIL
[top: 1\\31 .5]
expected: FAIL
[bottom: a]
expected: FAIL
[bottom: 1]
expected: FAIL
[bottom: +1]
expected: FAIL
[bottom: #000001]
expected: FAIL
[bottom: +a]
expected: FAIL
[bottom: +A]
expected: FAIL
[top: 1.5]
expected: FAIL
[top: +A]
expected: FAIL
[top: +a]
expected: FAIL
[top: +1]
expected: FAIL
[top: -1.5]
expected: FAIL
[top: -1\\31 .5]
expected: FAIL
[top: +1a]
expected: FAIL
[top: +1A]
expected: FAIL
[top: @1a]
expected: FAIL
[bottom: \\31 .5]
expected: FAIL
[top: "a"]
expected: FAIL
[top: #01]
expected: FAIL
[bottom: +1.5]
expected: FAIL
[bottom: -A]
expected: FAIL
[bottom: -a]
expected: FAIL
[bottom: -1\\31 ]
expected: FAIL
[top: #0001]
expected: FAIL
[bottom: -1]
expected: FAIL
[top: -\\31 ]
expected: FAIL
[top: -A]
expected: FAIL
[top: -a]
expected: FAIL
[top: -1]
expected: FAIL
[top: -1\\31 ]
expected: FAIL

View file

@ -1,283 +0,0 @@
[no-quirks.html]
[top: -\\31 .5]
expected: FAIL
[bottom: -1A]
expected: FAIL
[bottom: -1a]
expected: FAIL
[top: @1]
expected: FAIL
[top: "1a"]
expected: FAIL
[top: @a]
expected: FAIL
[bottom: "1"]
expected: FAIL
[bottom: -/**/1]
expected: FAIL
[top: +/**/1]
expected: FAIL
[bottom: @1a]
expected: FAIL
[top: 1\\31 ]
expected: FAIL
[top: url('1')]
expected: FAIL
[bottom: -\\31 ]
expected: FAIL
[top: calc(1)]
expected: FAIL
[top: \\31 ]
expected: FAIL
[bottom: +1\\31 ]
expected: FAIL
[bottom: 1\\31 .5]
expected: FAIL
[bottom: #0001]
expected: FAIL
[top: calc(2 * 2px)]
expected: FAIL
[bottom: 1a]
expected: FAIL
[bottom: A]
expected: FAIL
[bottom: #01]
expected: FAIL
[top: +\\31 .5]
expected: FAIL
[bottom: #1]
expected: FAIL
[top: -/**/1]
expected: FAIL
[bottom: +\\31 .5]
expected: FAIL
[bottom: \\31 ]
expected: FAIL
[bottom: calc(1)]
expected: FAIL
[top: #001]
expected: FAIL
[top: +\\31 ]
expected: FAIL
[bottom: +\\31 ]
expected: FAIL
[top: +1.5]
expected: FAIL
[top: +1\\31 ]
expected: FAIL
[bottom: @a]
expected: FAIL
[bottom: @1]
expected: FAIL
[top: #1]
expected: FAIL
[top: 1a]
expected: FAIL
[bottom: +1a]
expected: FAIL
[bottom: +1A]
expected: FAIL
[bottom: "a"]
expected: FAIL
[top: #00001]
expected: FAIL
[bottom: -1\\31 .5]
expected: FAIL
[top: "1"]
expected: FAIL
[bottom: 1.5]
expected: FAIL
[bottom: -\\31 .5]
expected: FAIL
[bottom: url('1')]
expected: FAIL
[bottom: -1.5]
expected: FAIL
[top: \\31 .5]
expected: FAIL
[bottom: "1a"]
expected: FAIL
[bottom: calc(2 * 2px)]
expected: FAIL
[bottom: +1\\31 .5]
expected: FAIL
[bottom: 1\\31 ]
expected: FAIL
[bottom: +/**/1]
expected: FAIL
[bottom: #00001]
expected: FAIL
[top: url(1)]
expected: FAIL
[bottom: #001]
expected: FAIL
[top: +1\\31 .5]
expected: FAIL
[top: -1a]
expected: FAIL
[top: -1A]
expected: FAIL
[bottom: url(1)]
expected: FAIL
[top: a]
expected: FAIL
[top: A]
expected: FAIL
[top: #000001]
expected: FAIL
[top: 1]
expected: FAIL
[top: 1\\31 .5]
expected: FAIL
[bottom: a]
expected: FAIL
[bottom: 1]
expected: FAIL
[bottom: +1]
expected: FAIL
[bottom: #000001]
expected: FAIL
[bottom: +a]
expected: FAIL
[bottom: +A]
expected: FAIL
[top: 1.5]
expected: FAIL
[top: +A]
expected: FAIL
[top: +a]
expected: FAIL
[top: +1]
expected: FAIL
[top: -1.5]
expected: FAIL
[top: -1\\31 .5]
expected: FAIL
[top: +1a]
expected: FAIL
[top: +1A]
expected: FAIL
[top: @1a]
expected: FAIL
[bottom: \\31 .5]
expected: FAIL
[top: "a"]
expected: FAIL
[top: #01]
expected: FAIL
[bottom: +1.5]
expected: FAIL
[bottom: -A]
expected: FAIL
[bottom: -a]
expected: FAIL
[bottom: -1\\31 ]
expected: FAIL
[top: #0001]
expected: FAIL
[bottom: -1]
expected: FAIL
[top: -\\31 ]
expected: FAIL
[top: -A]
expected: FAIL
[top: -a]
expected: FAIL
[top: -1]
expected: FAIL
[top: -1\\31 ]
expected: FAIL

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
<link rel="help" href="https://www.w3.org/TR/css-sizing-3/#sizing-values">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div id="container" data-expected-width="100" style="width:fit-content; min-width:100px; height:100px; background:red;">
<div data-expected-width="100" style="width:fit-content; min-width:100%; height:100px; background:green;"></div>
</div>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<script>
checkLayout("#container");
</script>

View file

@ -8,9 +8,10 @@
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken."> <meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
<style> <style>
div { div {
position: relative; position: relative;
font-size: 20px; font-size: 20px;
font-family: Ahem; font-family: Ahem;
line-height: 1em;
} }
.red { .red {
position: absolute; position: absolute;
@ -22,7 +23,6 @@ div {
} }
.test { .test {
color: green; color: green;
line-height: 1em;
width: 5ch; width: 5ch;
white-space: pre-wrap; white-space: pre-wrap;

View file

@ -9,9 +9,10 @@
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken."> <meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
<style> <style>
div { div {
position: relative; position: relative;
font-size: 20px; font-size: 20px;
font-family: Ahem; font-family: Ahem;
line-height: 1em;
} }
.fail { .fail {
position: absolute; position: absolute;
@ -21,7 +22,6 @@ div {
span { color: green; } span { color: green; }
.test { .test {
color: green; color: green;
line-height: 1em;
width: 5ch; width: 5ch;
white-space: pre-wrap; white-space: pre-wrap;

View file

@ -0,0 +1,17 @@
<!DOCTYPE html>
<title>CSS Text Test: overflow-wrap: break-word</title>
<link rel="author" title="Koji Ishii" href="kojii@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
<link rel="match" href="reference/overflow-wrap-break-word-span-001-ref.html">
<meta name="assert" content="Test when the `break-word` value is applied to an inline element.">
<style>
div {
font-size: 10px;
line-height: 1;
width: 8ch;
}
span {
word-wrap: break-word;
}
</style>
<div>12345<span>67890</span></div>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<title>CSS Text Test: overflow-wrap: break-word</title>
<link rel="author" title="Koji Ishii" href="kojii@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
<meta name="assert" content="Test when the `break-word` value is applied to an inline element.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script><style>
div {
font-size: 10px;
line-height: 1;
width: 5ch;
}
span {
word-wrap: break-word;
}
</style>
<div id=container data-expected-height=20>12345678<span>90</span></div>
<script>
checkLayout('#container')
</script>

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<style>
div {
font-size: 10px;
line-height: 1;
}
</style>
<div>12345678<br>90</div>

View file

@ -6,7 +6,7 @@
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com"> <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout"> <link rel="help" href="https://drafts.csswg.org/css-contain/#containment-layout">
<link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-align-items-baseline"> <link rel="help" href="https://drafts.csswg.org/css-flexbox-1/#valdef-align-items-baseline">
<link rel="match" href="contain-layout-suppress-baseline-001-ref.html"> <link rel="match" href="contain-layout-suppress-baseline-002-ref.html">
<style> <style>
.flexBaselineCheck { .flexBaselineCheck {
display: flex; display: flex;

View file

@ -32,7 +32,7 @@ for example:
The test can then do different things based on the URL. The test can then do different things based on the URL.
There are two utility scripts in that work well together with variants, There are two utility scripts in that work well together with variants,
`/common /subset-tests.js` and `/common/subset-tests-by- key.js`, where `/common/subset-tests.js` and `/common/subset-tests-by-key.js`, where
a test that would otherwise have too many tests to be useful can be a test that would otherwise have too many tests to be useful can be
split up in ranges of subtests. For example: split up in ranges of subtests. For example:

View file

@ -65,12 +65,22 @@
async_test(function(t) { async_test(function(t) {
clickTimeMin = performance.now(); clickTimeMin = performance.now();
clickAndBlockMain('button'); clickAndBlockMain('button');
// Use a dummy observer to know when both clicks have been dispatched.
const observerPromise = new Promise((resolve, reject) => {
let entryCount = 0;
new PerformanceObserver(entryList => {
entryCount += entryList.getEntries().length;
if (entryCount >= 2)
resolve();
}).observe({ entryTypes: ['event'] });
});
// Event handlers will be dispatched asynchronously, so this will be called // Event handlers will be dispatched asynchronously, so this will be called
// before processing begins. // before processing begins.
processingStartMin = performance.now(); processingStartMin = performance.now();
on_event(window, 'load', e => { on_event(window, 'load', e => {
onloadStart = performance.now(); onloadStart = performance.now();
clickAndBlockMain('button').then(wait).then( const clickPromise = clickAndBlockMain('button');
Promise.all([observerPromise, clickPromise]).then(
t.step_func_done(validateEntries)); t.step_func_done(validateEntries));
}); });
}, "Event Timing: click, onload."); }, "Event Timing: click, onload.");

View file

@ -31,8 +31,8 @@
if (numEventsObserved >= 2) { if (numEventsObserved >= 2) {
assert_equals(performance.getEntriesByType('event').length, 0, assert_equals(performance.getEntriesByType('event').length, 0,
"There should be no buffered event entries."); "There should be no buffered event entries.");
assert_equals(performance.getEntriesByType('firstInput').length, 0, assert_equals(performance.getEntriesByType('firstInput').length, 1,
"There should be no buffered firstInput entries."); "There should be a buffered firstInput entry.");
// There should be 2 event entries and one firstInput entry. // There should be 2 event entries and one firstInput entry.
assert_equals(numEventsObserved, 2, assert_equals(numEventsObserved, 2,
"There should be 2 observed event entries."); "There should be 2 observed event entries.");
@ -42,8 +42,8 @@
} }
})).observe({ entryTypes: ['event', 'firstInput'] }); })).observe({ entryTypes: ['event', 'firstInput'] });
on_event(window, 'load', () => { on_event(window, 'load', () => {
clickAndBlockMain('button').then(wait).then(() => { clickAndBlockMain('button').then(() => {
clickAndBlockMain('button').then(wait); clickAndBlockMain('button');
}); });
}); });
}, },

View file

@ -61,16 +61,22 @@ registration are lost
(Dispatch and Process Click 2 (not buffered, observed)) (Dispatch and Process Click 2 (not buffered, observed))
*/ */
async_test(function(t) { async_test(function(t) {
on_event(window, 'load', () => { // Use a dummy observer to know when the first click has been dispatched.
clickAndBlockMain('button').then(() => { const observerPromise = new Promise((resolve, reject) => {
startObserver(t); new PerformanceObserver((entryList, observer) => {
clickAndBlockMain('button').then(wait); resolve();
processingStartMin = performance.now(); observer.disconnect();
}); }).observe({ entryTypes: ['event'] });
});
on_event(window, 'load', () => {
const clickPromise = clickAndBlockMain('button');
Promise.all([observerPromise, clickPromise]).then(() => {
startObserver(t);
clickAndBlockMain('button');
processingStartMin = performance.now();
}); });
}, });
"Event Timing: onload, click, observer, click." },"Event Timing: onload, click, observer, click.");
);
</script> </script>
</html> </html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<meta charset=utf-8 />
<title>Event Timing: firstInput entry should be buffered even without observer</title>
<button id='button'>Generate a 'click' event</button>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=resources/event-timing-support.js></script>
<script>
async_test(function(t) {
function testEntries() {
// First callback is not ensured to have the entry.
if (performance.getEntriesByType('firstInput').length === 0) {
t.step_timeout(testEntries, 10);
return;
}
assert_equals(performance.getEntriesByType('firstInput').length, 1,
"There should be a firstInput entry in the performance timeline");
const entry = performance.getEntriesByType('firstInput')[0];
assert_equals(entry.name, 'click');
assert_equals(entry.entryType, 'firstInput');
assert_greater_than(entry.duration, 50,
"The first input was a long one.");
t.done();
}
clickAndBlockMain('button').then(wait).then(t.step_func(testEntries));
},
"Event Timing: check firstInput after onload, observer, click, click."
);
</script>
</html>

View file

@ -0,0 +1,18 @@
// META: global=window,worker
// META: script=/resources/WebIDLParser.js
// META: script=/resources/idlharness.js
// https://wicg.github.io/event-timing/
'use strict';
idl_test(
['event-timing'],
['performance-timeline', 'hr-time', 'dom'],
idl_array => {
idl_array.add_objects({
Performance: ['performance'],
// PerformanceEventTiming: [ TODO ]
});
}
);

View file

@ -0,0 +1,18 @@
// GENERATED CONTENT - DO NOT EDIT
// Content was automatically extracted by Reffy into reffy-reports
// (https://github.com/tidoust/reffy-reports)
// Source: Event Timing API (https://wicg.github.io/event-timing/)
interface PerformanceEventTiming : PerformanceEntry {
readonly attribute DOMHighResTimeStamp processingStart;
readonly attribute DOMHighResTimeStamp processingEnd;
readonly attribute boolean cancelable;
};
interface EventCounts {
readonly maplike<DOMString, unsigned long>;
};
partial interface Performance {
readonly attribute EventCounts eventCounts;
};

View file

@ -28,12 +28,12 @@ partial interface Navigator {
[SecureContext, SameObject] readonly attribute NFC nfc; [SecureContext, SameObject] readonly attribute NFC nfc;
}; };
typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage; typedef (DOMString or ArrayBuffer or NFCMessage) NFCMessageSource;
[SecureContext] [SecureContext]
interface NFC { interface NFC {
Promise<void> push(NFCPushMessage message, optional NFCPushOptions options); Promise<void> push(NFCMessageSource message, optional NFCPushOptions options);
Promise<long> watch(MessageCallback callback, optional NFCWatchOptions options); Promise<void> watch(MessageCallback callback, optional NFCWatchOptions options);
}; };
callback MessageCallback = void (NFCMessage message); callback MessageCallback = void (NFCMessage message);

View file

@ -45,7 +45,7 @@ enum XREnvironmentBlendMode {
attribute XRLayer baseLayer; attribute XRLayer baseLayer;
// Methods // Methods
Promise<XRFrameOfReference> requestFrameOfReference(XRFrameOfReferenceType type, optional XRFrameOfReferenceOptions options); Promise<XRReferenceSpace> requestReferenceSpace(XRReferenceSpaceType type, optional XRReferenceSpaceOptions options);
FrozenArray<XRInputSource> getInputSources(); FrozenArray<XRInputSource> getInputSources();
@ -57,7 +57,6 @@ enum XREnvironmentBlendMode {
// Events // Events
attribute EventHandler onblur; attribute EventHandler onblur;
attribute EventHandler onfocus; attribute EventHandler onfocus;
attribute EventHandler onresetpose;
attribute EventHandler onend; attribute EventHandler onend;
attribute EventHandler onselect; attribute EventHandler onselect;
attribute EventHandler oninputsourceschange; attribute EventHandler oninputsourceschange;
@ -70,34 +69,51 @@ callback XRFrameRequestCallback = void (DOMHighResTimeStamp time, XRFrame frame)
[SecureContext, Exposed=Window] interface XRFrame { [SecureContext, Exposed=Window] interface XRFrame {
readonly attribute XRSession session; readonly attribute XRSession session;
XRViewerPose? getViewerPose(XRFrameOfReference frameOfRef); XRViewerPose? getViewerPose(optional XRReferenceSpace referenceSpace);
XRInputPose? getInputPose(XRInputSource inputSource, XRFrameOfReference frameOfRef); XRInputPose? getInputPose(XRInputSource inputSource, optional XRReferenceSpace referenceSpace);
}; };
[SecureContext, Exposed=Window] interface XRCoordinateSystem : EventTarget { [SecureContext, Exposed=Window] interface XRSpace : EventTarget {
Float32Array? getTransformTo(XRCoordinateSystem other); Float32Array? getTransformTo(XRSpace other);
}; };
enum XRFrameOfReferenceType { enum XRReferenceSpaceType {
"head-model", "stationary",
"bounded",
"unbounded"
};
dictionary XRReferenceSpaceOptions {
required XRReferenceSpaceType type;
};
[SecureContext, Exposed=Window] interface XRReferenceSpace : XRSpace {
attribute EventHandler onreset;
};
enum XRStationaryReferenceSpaceSubtype {
"eye-level", "eye-level",
"stage", "floor-level",
"position-disabled"
}; };
dictionary XRFrameOfReferenceOptions { dictionary XRStationaryReferenceSpaceOptions : XRReferenceSpaceOptions {
boolean disableStageEmulation = false; required XRStationaryReferenceSpaceSubtype subtype;
double stageEmulationHeight = 0.0;
}; };
[SecureContext, Exposed=Window] interface XRFrameOfReference : XRCoordinateSystem { [SecureContext, Exposed=Window]
readonly attribute XRStageBounds? bounds; interface XRStationaryReferenceSpace : XRReferenceSpace {
readonly attribute double emulatedHeight; readonly attribute XRStationaryReferenceSpaceSubtype subtype;
attribute EventHandler onboundschange;
}; };
[SecureContext, Exposed=Window] interface XRStageBounds { [SecureContext, Exposed=Window]
readonly attribute FrozenArray<DOMPointReadOnly> geometry; interface XRBoundedReferenceSpace : XRReferenceSpace {
readonly attribute FrozenArray<DOMPointReadOnly> boundsGeometry;
};
[SecureContext, Exposed=Window]
interface XRUnboundedReferenceSpace : XRReferenceSpace {
}; };
enum XREye { enum XREye {
@ -224,11 +240,13 @@ dictionary XRInputSourceEventInit : EventInit {
required XRInputSource inputSource; required XRInputSource inputSource;
}; };
[SecureContext, Exposed=Window, Constructor(DOMString type, XRCoordinateSystemEventInit eventInitDict)] [SecureContext, Exposed=Window, Constructor(DOMString type, XRReferenceSpaceEventInit eventInitDict)]
interface XRCoordinateSystemEvent : Event { interface XRReferenceSpaceEvent : Event {
readonly attribute XRCoordinateSystem coordinateSystem; readonly attribute XRReferenceSpace referenceSpace;
readonly attribute Float32Array? transformMatrix;
}; };
dictionary XRCoordinateSystemEventInit : EventInit { dictionary XRReferenceSpaceEventInit : EventInit {
required XRCoordinateSystem coordinateSystem; required XRReferenceSpace referenceSpace;
Float32Array transformMatrix;
}; };

View file

@ -30,14 +30,19 @@ promise_test(function(t) {
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
var channel = new MessageChannel(); var channel = new MessageChannel();
channel.port1.onmessage = resolve; channel.port1.onmessage = (event) => {
if (event.data === 'done') {
resolve();
return;
}
test(() => {
assert_true(event.data.result);
}, event.data.testName);
};
frame.contentWindow.postMessage({}, frame.contentWindow.postMessage({},
host_info['HTTPS_ORIGIN'], host_info['HTTPS_ORIGIN'],
[channel.port2]); [channel.port2]);
}); });
})
.then(function(e) {
assert_equals(e.data.results, 'finish');
}); });
}, 'Verify CORS XHR of fetch() in a Service Worker'); }, 'Verify CORS XHR of fetch() in a Service Worker');
</script> </script>

View file

@ -26,38 +26,10 @@ function create_test_case_promise(url, with_credentials) {
}); });
} }
function create_test_promise(url, with_credentials, expected_result) { window.addEventListener('message', async (evt) => {
return new Promise(function(resolve, reject) {
create_test_case_promise(url, with_credentials)
.then(function(result) {
if (result == expected_result) {
resolve();
} else {
reject('Result of url:' + url + ' ' +
' with_credentials: ' + with_credentials + ' must be ' +
expected_result + ' but ' + result);
}
})
});
}
function create_serial_promise(test_cases) {
var promise = Promise.resolve();
test_cases.forEach(function(test_case) {
promise = promise.then(function() {
return create_test_promise(test_case[0], test_case[1], test_case[2]);
});
});
return promise;
}
window.addEventListener('message', function(evt) {
var port = evt.ports[0]; var port = evt.ports[0];
var url = host_info['HTTPS_ORIGIN'] + path; var url = host_info['HTTPS_ORIGIN'] + path;
var remote_url = host_info['HTTPS_REMOTE_ORIGIN'] + path; var remote_url = host_info['HTTPS_REMOTE_ORIGIN'] + path;
// If the 4th value of the item of TEST_CASES is true, the test case outputs
// warning messages. So such tests must be executed in serial to match the
// expected output text.
var TEST_CASES = [ var TEST_CASES = [
// Reject tests // Reject tests
[url + '?reject', false, FAIL], [url + '?reject', false, FAIL],
@ -95,8 +67,8 @@ window.addEventListener('message', function(evt) {
// Credential test (fallback) // Credential test (fallback)
[url + '?Auth&ignore', false, SUCCESS], [url + '?Auth&ignore', false, SUCCESS],
[url + '?Auth&ignore', true, SUCCESS], [url + '?Auth&ignore', true, SUCCESS],
[remote_url + '?Auth&ignore', false, FAIL, true], // Executed in serial. [remote_url + '?Auth&ignore', false, FAIL],
[remote_url + '?Auth&ignore', true, FAIL, true], // Executed in serial. [remote_url + '?Auth&ignore', true, FAIL],
[ [
remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore', remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore',
false, 'STATUS401' false, 'STATUS401'
@ -186,24 +158,13 @@ window.addEventListener('message', function(evt) {
true, SUCCESS true, SUCCESS
] ]
]; ];
var promises = [];
var serial_tests = []; let counter = 0;
for (var i = 0; i < TEST_CASES.length ; ++i) { for (let test of TEST_CASES) {
if (!TEST_CASES[i][3]) { let result = await create_test_case_promise(test[0], test[1]);
promises.push(create_test_promise(TEST_CASES[i][0], let testName = 'test ' + (++counter) + ': ' + test[0] + ' with credentials ' + test[1] + ' must be ' + test[2];
TEST_CASES[i][1], port.postMessage({testName: testName, result: result === test[2]});
TEST_CASES[i][2]));
} else {
serial_tests.push(TEST_CASES[i]);
}
} }
promises.push(create_serial_promise(serial_tests)); port.postMessage('done');
Promise.all(promises)
.then(function() {
port.postMessage({results: 'finish'});
})
.catch(function(e) {
port.postMessage({results: 'failure:' + e});
});
}, false); }, false);
</script> </script>

View file

@ -1,92 +1,101 @@
// META: title=StorageManager: estimate() for indexeddb // META: title=StorageManager: estimate() for indexeddb
function indexedDbOpenRequest(t, dbname, upgrade_func) {
return new Promise((resolve, reject) => {
const openRequest = indexedDB.open(dbname);
t.add_cleanup(() => {
indexedDbDeleteRequest(dbname);
});
openRequest.onerror = () => {
reject(openRequest.error);
};
openRequest.onsuccess = () => {
resolve(openRequest.result);
};
openRequest.onupgradeneeded = event => {
upgrade_func(openRequest.result);
};
});
}
function indexedDbDeleteRequest(name) {
return new Promise((resolve, reject) => {
const deleteRequest = indexedDB.deleteDatabase(name);
deleteRequest.onerror = () => {
reject(deleteRequest.error);
};
deleteRequest.onsuccess = () => {
resolve();
};
});
}
function transactionPromise(txn) {
return new Promise((resolve, reject) => {
txn.onabort = () => {
reject(txn.error);
};
txn.oncomplete = () => {
resolve();
};
});
}
test(t => { test(t => {
assert_true('estimate' in navigator.storage); assert_true('estimate' in navigator.storage);
assert_equals(typeof navigator.storage.estimate, 'function'); assert_equals(typeof navigator.storage.estimate, 'function');
assert_true(navigator.storage.estimate() instanceof Promise); assert_true(navigator.storage.estimate() instanceof Promise);
}, 'estimate() method exists and returns a Promise'); }, 'estimate() method exists and returns a Promise');
promise_test(t => { promise_test(async t => {
return navigator.storage.estimate().then(result => { const estimate = await navigator.storage.estimate();
assert_true(typeof result === 'object'); assert_true(typeof estimate === 'object');
assert_true('usage' in result); assert_true('usage' in estimate);
assert_equals(typeof result.usage, 'number'); assert_equals(typeof estimate.usage, 'number');
assert_true('quota' in result); assert_true('quota' in estimate);
assert_equals(typeof result.quota, 'number'); assert_equals(typeof estimate.quota, 'number');
});
}, 'estimate() resolves to dictionary with members'); }, 'estimate() resolves to dictionary with members');
promise_test(t => { promise_test(async t => {
const arraySize = 1e6; const arraySize = 1e6;
const objectStoreName = "storageManager"; const objectStoreName = "storageManager";
const dbname = this.window ? window.location.pathname : const dbname = this.window ? window.location.pathname :
"estimate-worker.https.html"; "estimate-worker.https.html";
let db; await indexedDbDeleteRequest(dbname);
let usageBeforeCreate, usageAfterCreate, usageAfterPut; let estimate = await navigator.storage.estimate();
function deleteDB(name) { const usageBeforeCreate = estimate.usage;
return new Promise((resolve, reject) => { const db = await indexedDbOpenRequest(t, dbname, (db_to_upgrade) => {
let deleteRequest = indexedDB.deleteDatabase(name); db_to_upgrade.createObjectStore(objectStoreName);
deleteRequest.onerror = () => { reject(deleteRequest.error); }; });
deleteRequest.onsuccess = () => { resolve(); };
}); estimate = await navigator.storage.estimate();
const usageAfterCreate = estimate.usage;
assert_greater_than(
usageAfterCreate, usageBeforeCreate,
'estimated usage should increase after object store is created');
const txn = db.transaction(objectStoreName, 'readwrite');
const buffer = new ArrayBuffer(arraySize);
const view = new Uint8Array(buffer);
for (let i = 0; i < arraySize; i++) {
view[i] = Math.floor(Math.random() * 255);
} }
return deleteDB(dbname) const testBlob = new Blob([buffer], {type: "binary/random"});
.then(() => { txn.objectStore(objectStoreName).add(testBlob, 1);
return navigator.storage.estimate();
})
.then(estimate => {
usageBeforeCreate = estimate.usage;
return new Promise((resolve, reject) => {
let openRequest = indexedDB.open(dbname);
openRequest.onerror = () => { reject(openRequest.error); };
openRequest.onupgradeneeded = event => {
openRequest.result.createObjectStore(objectStoreName);
};
openRequest.onsuccess = () => { resolve(openRequest.result); };
});
})
.then(connection => {
db = connection;
return navigator.storage.estimate();
})
.then(estimate => {
usageAfterCreate = estimate.usage;
assert_greater_than(
usageAfterCreate, usageBeforeCreate,
'estimated usage should increase after object store is created');
let txn = db.transaction(objectStoreName, 'readwrite'); await transactionPromise(txn);
let buffer = new ArrayBuffer(arraySize);
let view = new Uint8Array(buffer);
for (let i = 0; i < arraySize; i++) { estimate = await navigator.storage.estimate();
view[i] = parseInt(Math.random() * 255); const usageAfterPut = estimate.usage;
} assert_greater_than(
usageAfterPut, usageAfterCreate,
'estimated usage should increase after large value is stored');
let testBlob = new Blob([buffer], {type: "binary/random"}); db.close();
txn.objectStore(objectStoreName).add(testBlob, 1);
return new Promise((resolve, reject) => {
txn.onabort = () => { reject(txn.error); };
txn.oncomplete = () => { resolve(); };
});
})
.then(() => {
return navigator.storage.estimate();
})
.then(estimate => {
usageAfterPut = estimate.usage;
assert_greater_than(
usageAfterPut, usageAfterCreate,
'estimated usage should increase after large value is stored');
db.close();
return deleteDB(dbname);
})
.then(() => {
t.done();
});
}, 'estimate() shows usage increase after large value is stored'); }, 'estimate() shows usage increase after large value is stored');

View file

@ -17,6 +17,7 @@ test_valid_value("cx", "0", "0px");
test_valid_value("cx", "-1px"); test_valid_value("cx", "-1px");
test_valid_value("cx", "calc(2em + 3ex)"); test_valid_value("cx", "calc(2em + 3ex)");
test_valid_value("cx", "4%"); test_valid_value("cx", "4%");
test_valid_value("cx", "5ch");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 791 B

After

Width:  |  Height:  |  Size: 822 B

Before After
Before After

View file

@ -17,6 +17,7 @@ test_valid_value("cy", "0", "0px");
test_valid_value("cy", "-1px"); test_valid_value("cy", "-1px");
test_valid_value("cy", "calc(2em + 3ex)"); test_valid_value("cy", "calc(2em + 3ex)");
test_valid_value("cy", "4%"); test_valid_value("cy", "4%");
test_valid_value("cy", "5rem");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 791 B

After

Width:  |  Height:  |  Size: 823 B

Before After
Before After

View file

@ -19,6 +19,7 @@ test_valid_value("rx", "0", "0px");
test_valid_value("rx", "1px"); test_valid_value("rx", "1px");
test_valid_value("rx", "calc(2em + 3ex)"); test_valid_value("rx", "calc(2em + 3ex)");
test_valid_value("rx", "4%"); test_valid_value("rx", "4%");
test_valid_value("rx", "5vw");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 830 B

After

Width:  |  Height:  |  Size: 861 B

Before After
Before After

View file

@ -19,6 +19,7 @@ test_valid_value("rx", "0", "0px");
test_valid_value("rx", "1px"); test_valid_value("rx", "1px");
test_valid_value("rx", "calc(2em + 3ex)"); test_valid_value("rx", "calc(2em + 3ex)");
test_valid_value("rx", "4%"); test_valid_value("rx", "4%");
test_valid_value("rx", "5vh");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 830 B

After

Width:  |  Height:  |  Size: 861 B

Before After
Before After

View file

@ -17,6 +17,7 @@ test_valid_value("x", "0", "0px");
test_valid_value("x", "-1px"); test_valid_value("x", "-1px");
test_valid_value("x", "calc(2em + 3ex)"); test_valid_value("x", "calc(2em + 3ex)");
test_valid_value("x", "4%"); test_valid_value("x", "4%");
test_valid_value("x", "5cm");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 814 B

Before After
Before After

View file

@ -17,6 +17,7 @@ test_valid_value("y", "0", "0px");
test_valid_value("y", "-1px"); test_valid_value("y", "-1px");
test_valid_value("y", "calc(2em + 3ex)"); test_valid_value("y", "calc(2em + 3ex)");
test_valid_value("y", "4%"); test_valid_value("y", "4%");
test_valid_value("y", "5mm");
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 784 B

After

Width:  |  Height:  |  Size: 814 B

Before After
Before After

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().colorInterpolation</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#ColorInterpolationProperty"/>
<h:meta name="assert" content="color-interpolation computed value is as specified."/>
</metadata>
<g id="target"></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("color-interpolation", "auto");
test_computed_value("color-interpolation", "srgb");
test_computed_value("color-interpolation", "linearrgb");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 827 B

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().colorRendering</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#ColorRenderingProperty"/>
<h:meta name="assert" content="color-rendering computed value is as specified."/>
</metadata>
<g id="target"></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("color-rendering", "auto");
test_computed_value("color-rendering", "optimizespeed");
test_computed_value("color-rendering", "optimizequality");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 818 B

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().fill</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#FillProperty"/>
<h:meta name="assert" content="fill computed value is as specified, with url values absolute."/>
</metadata>
<g id="target"></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("fill", "none");
test_computed_value("fill", "rgb(12, 34, 56)");
test_computed_value("fill", 'url("https://example.com/")');
test_computed_value("fill", 'url("https://example.com/") none');
test_computed_value("fill", 'url("https://example.com/") rgb(12, 34, 56)');
// context-fill and context-stroke are not yet supported by browsers.
test(() => {
const target = document.getElementById('target');
target.style['fill'] = 'url("a.b#c")';
const result = getComputedStyle(target)['fill'];
const resolved = new URL("a.b#c", document.URL).href;
assert_equals(result, 'url("' + resolved + '")');
}, 'url values are made absolute');
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -2,7 +2,7 @@
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml" xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px"> width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().fillOpacity</title> <title>SVG Painting: getComputedValue().fillOpacity</title>
<metadata> <metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#FillOpacity"/> <h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#FillOpacity"/>
<h:meta name="assert" content="fill-opacity computed value is clamped to the range [0,1]."/> <h:meta name="assert" content="fill-opacity computed value is clamped to the range [0,1]."/>

Before

Width:  |  Height:  |  Size: 801 B

After

Width:  |  Height:  |  Size: 790 B

Before After
Before After

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().fillRule</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#FillRuleProperty"/>
<h:meta name="assert" content="fill-rule computed value is as specified."/>
</metadata>
<g id="target"></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("fill-rule", "nonzero");
test_computed_value("fill-rule", "evenodd");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 726 B

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().imageRendering</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#ImageRenderingProperty"/>
<h:meta name="assert" content="image-rendering computed value is as specified."/>
</metadata>
<g id="target"></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("image-rendering", "auto");
test_computed_value("image-rendering", "optimizequality");
test_computed_value("image-rendering", "optimizespeed");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 818 B

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().MarkerEnd</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#MarkerEndProperty"/>
<h:meta name="assert" content="marker-end computed value is as specified, with url values absolute."/>
</metadata>
<g id="target"></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("marker-end", "none");
test_computed_value("marker-end", 'url("https://example.com/")');
test(() => {
const target = document.getElementById('target');
target.style['marker-end'] = 'url("a.b#c")';
const result = getComputedStyle(target)['marker-end'];
const resolved = new URL("a.b#c", document.URL).href;
assert_equals(result, 'url("' + resolved + '")');
}, 'url values are made absolute');
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().markerMid</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#MarkerMidProperty"/>
<h:meta name="assert" content="marker-mid computed value is as specified, with url values absolute."/>
</metadata>
<g id="target"></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("marker-mid", "none");
test_computed_value("marker-mid", 'url("https://example.com/")');
test(() => {
const target = document.getElementById('target');
target.style['marker-mid'] = 'url("a.b#c")';
const result = getComputedStyle(target)['marker-mid'];
const resolved = new URL("a.b#c", document.URL).href;
assert_equals(result, 'url("' + resolved + '")');
}, 'url values are made absolute');
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().markerStart</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#MarkerStartProperty"/>
<h:meta name="assert" content="marker-start computed value is as specified, with url values absolute."/>
</metadata>
<g id="target"></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("marker-start", "none");
test_computed_value("marker-start", 'url("https://example.com/")');
test(() => {
const target = document.getElementById('target');
target.style['marker-start'] = 'url("a.b#c")';
const result = getComputedStyle(target)['marker-start'];
const resolved = new URL("a.b#c", document.URL).href;
assert_equals(result, 'url("' + resolved + '")');
}, 'url values are made absolute');
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().paintOrder</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#PaintOrderProperty"/>
<h:meta name="assert" content="paint-order computed value is as specified."/>
</metadata>
<g id="target"></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("paint-order", "normal");
test_computed_value("paint-order", "fill");
test_computed_value("paint-order", "stroke");
test_computed_value("paint-order", "markers");
test_computed_value("paint-order", "fill stroke", "fill");
test_computed_value("paint-order", "fill markers");
test_computed_value("paint-order", "stroke fill", "stroke");
test_computed_value("paint-order", "stroke markers");
test_computed_value("paint-order", "markers fill", "markers");
test_computed_value("paint-order", "markers stroke");
test_computed_value("paint-order", "fill stroke markers", "fill");
test_computed_value("paint-order", "fill markers stroke", "fill markers");
test_computed_value("paint-order", "stroke fill markers", "stroke");
test_computed_value("paint-order", "stroke markers fill", "stroke markers");
test_computed_value("paint-order", "markers fill stroke", "markers");
test_computed_value("paint-order", "markers stroke fill", "markers stroke");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View file

@ -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"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().shapeRendering</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#ShapeRenderingProperty"/>
<h:meta name="assert" content="shape-rendering computed value is as specified."/>
</metadata>
<g id="target"></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("shape-rendering", "auto");
test_computed_value("shape-rendering", "optimizespeed");
test_computed_value("shape-rendering", "crispedges");
test_computed_value("shape-rendering", "geometricprecision");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 875 B

View file

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().stroke</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeProperty"/>
<h:meta name="assert" content="stroke computed value is as specified, with url values absolute."/>
</metadata>
<g id="target"></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("stroke", "none");
test_computed_value("stroke", "rgb(12, 34, 56)");
test_computed_value("stroke", 'url("https://example.com/")');
test_computed_value("stroke", 'url("https://example.com/") none');
test_computed_value("stroke", 'url("https://example.com/") rgb(12, 34, 56)');
// context-fill and context-stroke are not yet supported by browsers.
test(() => {
const target = document.getElementById('target');
target.style['stroke'] = 'url("a.b#c")';
const result = getComputedStyle(target)['stroke'];
const resolved = new URL("a.b#c", document.URL).href;
assert_equals(result, 'url("' + resolved + '")');
}, 'url values are made absolute');
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().strokeDasharray</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeDasharrayProperty"/>
<h:meta name="assert" content="stroke-dasharray computed value uses absolute lengths."/>
</metadata>
<g id="target"></g>
<style>
#target {
font-size: 40px;
}
</style>
<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("stroke-dasharray", "none");
test_computed_value("stroke-dasharray", "10", "10px");
test_computed_value("stroke-dasharray", "calc(10px + 0.5em)", "30px");
test_computed_value("stroke-dasharray", "calc(10px - 0.5em)", "0px");
test_computed_value("stroke-dasharray", "40%");
test_computed_value("stroke-dasharray", "calc(50% + 60px)");
test_computed_value("stroke-dasharray", "10px 20% 30px", "10px, 20%, 30px");
test_computed_value("stroke-dasharray", "0, 5", "0px, 5px");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View file

@ -20,7 +20,8 @@ test_valid_value("stroke-dasharray", "10px");
test_valid_value("stroke-dasharray", "20%"); test_valid_value("stroke-dasharray", "20%");
test_valid_value("stroke-dasharray", "calc(2em + 3ex)"); test_valid_value("stroke-dasharray", "calc(2em + 3ex)");
test_valid_value("stroke-dasharray", "10px, 20%, 30px"); test_valid_value("stroke-dasharray", "10pt 20% 30pc 40in", "10pt, 20%, 30pc, 40in");
test_valid_value("stroke-dasharray", "10vmin, 20vmax, 30em, 40ex");
test_valid_value("stroke-dasharray", "0, 5", ["0, 5", "0px, 5px"]); // Edge/Safari serialize numbers as lengths. test_valid_value("stroke-dasharray", "0, 5", ["0, 5", "0px, 5px"]); // Edge/Safari serialize numbers as lengths.
]]></script> ]]></script>

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Before After
Before After

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().strokeDashoffset</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeDashoffsetProperty"/>
<h:meta name="assert" content="stroke-dashoffset computed value is absolute length."/>
</metadata>
<g id="target"></g>
<style>
#target {
font-size: 40px;
}
</style>
<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("stroke-dashoffset", "10", "10px");
test_computed_value("stroke-dashoffset", "0.5em", "20px");
test_computed_value("stroke-dashoffset", "calc(10px + 0.5em)", "30px");
test_computed_value("stroke-dashoffset", "calc(10px - 0.5em)", "-10px");
test_computed_value("stroke-dashoffset", "-40%");
test_computed_value("stroke-dashoffset", "calc(50% + 60px)");
// https://www.w3.org/TR/css-values-3/#absolute-lengths
test_computed_value("stroke-dashoffset", "254cm", "9600px");
test_computed_value("stroke-dashoffset", "2540mm", "9600px");
test_computed_value("stroke-dashoffset", "10160Q", "9600px");
test_computed_value("stroke-dashoffset", "1in", "96px");
test_computed_value("stroke-dashoffset", "6pc", "96px");
test_computed_value("stroke-dashoffset", "72pt", "96px");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -17,6 +17,7 @@ test_valid_value("stroke-dashoffset", "0");
test_valid_value("stroke-dashoffset", "10px"); test_valid_value("stroke-dashoffset", "10px");
test_valid_value("stroke-dashoffset", "-20%"); test_valid_value("stroke-dashoffset", "-20%");
test_valid_value("stroke-dashoffset", "30"); test_valid_value("stroke-dashoffset", "30");
test_valid_value("stroke-dashoffset", "40Q", "40q");
test_valid_value("stroke-dashoffset", "calc(2em + 3ex)"); test_valid_value("stroke-dashoffset", "calc(2em + 3ex)");
]]></script> ]]></script>

Before

Width:  |  Height:  |  Size: 922 B

After

Width:  |  Height:  |  Size: 975 B

Before After
Before After

View file

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().strokeLinecap</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeLinecapProperty"/>
<h:meta name="assert" content="stroke-linecap computed value is as specified."/>
</metadata>
<g id="target"></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("stroke-linecap", "butt");
test_computed_value("stroke-linecap", "round");
test_computed_value("stroke-linecap", "square");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 795 B

View file

@ -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"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().strokeLinejoin</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeLinejoinProperty"/>
<h:meta name="assert" content="stroke-linejoin computed value is as specified."/>
</metadata>
<g id="target"></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("stroke-linejoin", "miter");
test_computed_value("stroke-linejoin", "round");
test_computed_value("stroke-linejoin", "bevel");
// "miter-clip" and "arcs" are not yet supported by browsers.
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 863 B

View file

@ -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"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().strokeMiterlimit</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeMiterlimitProperty"/>
<h:meta name="assert" content="stroke-miterlimit computed value is as specified."/>
</metadata>
<g id="target"></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("stroke-miterlimit", "0");
test_computed_value("stroke-miterlimit", "0.5");
test_computed_value("stroke-miterlimit", "1");
test_computed_value("stroke-miterlimit", "7.5");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 852 B

View file

@ -2,7 +2,7 @@
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml" xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px"> width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().strokeOpacity</title> <title>SVG Painting: getComputedValue().strokeOpacity</title>
<metadata> <metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeOpacityProperty"/> <h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeOpacityProperty"/>
<h:meta name="assert" content="stroke-opacity computed value is clamped to the range [0,1]."/> <h:meta name="assert" content="stroke-opacity computed value is clamped to the range [0,1]."/>

Before

Width:  |  Height:  |  Size: 821 B

After

Width:  |  Height:  |  Size: 810 B

Before After
Before After

View file

@ -2,13 +2,15 @@
<svg xmlns="http://www.w3.org/2000/svg" <svg xmlns="http://www.w3.org/2000/svg"
xmlns:h="http://www.w3.org/1999/xhtml" xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px"> width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().strokeWidth</title> <title>SVG Painting: getComputedValue().strokeWidth</title>
<metadata> <metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeWidth"/> <h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#StrokeWidth"/>
<h:meta name="assert" content="stroke-width computed value is absolute length."/>
</metadata> </metadata>
<g id="target"></g> <g id="target"></g>
<g id="ref"></g>
<style> <style>
#target { #target, #ref {
font-size: 40px; font-size: 40px;
} }
</style> </style>
@ -23,5 +25,36 @@ test_computed_value("stroke-width", "calc(10px - 0.5em)", "0px");
test_computed_value("stroke-width", "40%"); test_computed_value("stroke-width", "40%");
test_computed_value("stroke-width", "calc(50% + 60px)"); test_computed_value("stroke-width", "calc(50% + 60px)");
const lengthUnits = [
'em',
'ex',
'ch',
'rem',
'vw',
'vh',
'vmin',
'vmax',
'cm',
'mm',
'Q',
'in',
'pt',
'pc',
'px'
];
for (let lengthUnit of lengthUnits) {
const length = '987' + lengthUnit;
test(() => {
const target = document.getElementById('target');
target.style.strokeWidth = length;
const ref = document.getElementById('ref');
ref.style.wordSpacing = length;
assert_equals(getComputedStyle(target).strokeWidth, getComputedStyle(ref).wordSpacing);
}, 'stroke-width computes ' + lengthUnit + ' lengths');
}
]]></script> ]]></script>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 914 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Before After
Before After

View file

@ -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"
width="800px" height="800px">
<title>SVG Painting: getComputedValue().textRendering</title>
<metadata>
<h:link rel="help" href="https://svgwg.org/svg2-draft/painting.html#TextRenderingProperty"/>
<h:meta name="assert" content="text-rendering computed value is as specified."/>
</metadata>
<g id="target"></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("text-rendering", "auto");
test_computed_value("text-rendering", "optimizespeed");
test_computed_value("text-rendering", "optimizelegibility");
test_computed_value("text-rendering", "geometricprecision");
]]></script>
</svg>

After

Width:  |  Height:  |  Size: 876 B

View file

@ -133,6 +133,7 @@ class SauceConnect():
self.sauce_key = kwargs["sauce_key"] self.sauce_key = kwargs["sauce_key"]
self.sauce_tunnel_id = kwargs["sauce_tunnel_id"] self.sauce_tunnel_id = kwargs["sauce_tunnel_id"]
self.sauce_connect_binary = kwargs.get("sauce_connect_binary") self.sauce_connect_binary = kwargs.get("sauce_connect_binary")
self.sauce_connect_args = kwargs.get("sauce_connect_args")
self.sauce_init_timeout = kwargs.get("sauce_init_timeout") self.sauce_init_timeout = kwargs.get("sauce_init_timeout")
self.sc_process = None self.sc_process = None
self.temp_dir = None self.temp_dir = None
@ -171,7 +172,7 @@ class SauceConnect():
"--readyfile=./sauce_is_ready", "--readyfile=./sauce_is_ready",
"--tunnel-domains", "--tunnel-domains",
",".join(self.env_config.domains_set) ",".join(self.env_config.domains_set)
]) ] + self.sauce_connect_args)
tot_wait = 0 tot_wait = 0
while not os.path.exists('./sauce_is_ready') and self.sc_process.poll() is None: while not os.path.exists('./sauce_is_ready') and self.sc_process.poll() is None:

View file

@ -25,7 +25,8 @@ def test_sauceconnect_success():
sauce_user="aaa", sauce_user="aaa",
sauce_key="bbb", sauce_key="bbb",
sauce_tunnel_id="ccc", sauce_tunnel_id="ccc",
sauce_connect_binary="ddd") sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config: with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config) sauce_connect(None, env_config)
@ -54,7 +55,8 @@ def test_sauceconnect_failure_exit(readyfile, returncode):
sauce_user="aaa", sauce_user="aaa",
sauce_key="bbb", sauce_key="bbb",
sauce_tunnel_id="ccc", sauce_tunnel_id="ccc",
sauce_connect_binary="ddd") sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config: with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config) sauce_connect(None, env_config)
@ -82,7 +84,8 @@ def test_sauceconnect_cleanup():
sauce_user="aaa", sauce_user="aaa",
sauce_key="bbb", sauce_key="bbb",
sauce_tunnel_id="ccc", sauce_tunnel_id="ccc",
sauce_connect_binary="ddd") sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config: with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config) sauce_connect(None, env_config)
@ -106,7 +109,8 @@ def test_sauceconnect_failure_never_ready():
sauce_user="aaa", sauce_user="aaa",
sauce_key="bbb", sauce_key="bbb",
sauce_tunnel_id="ccc", sauce_tunnel_id="ccc",
sauce_connect_binary="ddd") sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config: with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config) sauce_connect(None, env_config)
@ -134,7 +138,8 @@ def test_sauceconnect_tunnel_domains():
sauce_user="aaa", sauce_user="aaa",
sauce_key="bbb", sauce_key="bbb",
sauce_tunnel_id="ccc", sauce_tunnel_id="ccc",
sauce_connect_binary="ddd") sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net", with ConfigBuilder(browser_host="example.net",
alternate_hosts={"alt": "example.org"}, alternate_hosts={"alt": "example.org"},

View file

@ -302,6 +302,10 @@ scheme host and port.""")
help="Number of seconds to wait for Sauce " help="Number of seconds to wait for Sauce "
"Connect tunnel to be available before " "Connect tunnel to be available before "
"aborting") "aborting")
sauce_group.add_argument("--sauce-connect-arg", action="append",
default=[], dest="sauce_connect_args",
help="Command-line argument to forward to the "
"Sauce Connect binary (repeatable)")
webkit_group = parser.add_argument_group("WebKit-specific") webkit_group = parser.add_argument_group("WebKit-specific")
webkit_group.add_argument("--webkit-port", dest="webkit_port", webkit_group.add_argument("--webkit-port", dest="webkit_port",

View file

@ -284,6 +284,8 @@ def run_tests(config, test_paths, product, **kwargs):
logger.suite_end() logger.suite_end()
if repeat_until_unexpected and unexpected_total > 0: if repeat_until_unexpected and unexpected_total > 0:
break break
if len(test_loader.test_ids) == skipped_tests:
break
if test_total == 0: if test_total == 0:
if skipped_tests > 0: if skipped_tests > 0:

View file

@ -0,0 +1,23 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body>
<div id="container"></div>
<script>
var container = document.querySelector('#container');
// Trusted Type assignments do not throw.
async_test(t => {
window.onclickTest = t.step_func_done();
let policy = createScript_policy(window, 'onclick');
let script = policy.createScript("window.onclickTest();");
let el = document.createElement('a');
el.setAttribute('onclick', script);
container.appendChild(el);
el.click();
}, "a.onclick assigned via policy (successful Script transformation).");
</script>

View file

@ -0,0 +1,16 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types">
<body>
<script>
// No name given test
test(t => {
assert_throws(new TypeError(),
() => window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } ),
"createPolicy with an empty trusted-types CSP directive");
}, "No name list given - policy creation fails.");
</script>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body>
<script>
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(policy.name, 'SomeName');
}, "CSP supports wildcards.");
</script>

View file

@ -0,0 +1,27 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types SomeName JustOneMoreName">
<body>
<script>
// Whitelisted name test
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(policy.name, 'SomeName');
}, "Whitelisted policy creation works.");
// Another whitelisted name test
test(t => {
let policy = window.TrustedTypes.createPolicy('JustOneMoreName', { createHTML: s => s } );
assert_equals(policy.name, 'JustOneMoreName');
}, "Another whitelisted policy creation works.");
// Non-whitelisted names test
test(t => {
assert_throws(new TypeError(), _ => {
window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } );
});
}, "Non-whitelisted policy creation throws.");
</script>

View file

@ -0,0 +1,119 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body>
<script>
test(t => {
const p1 = TrustedTypes.createPolicy("policyHTMLAndScript", {
createHTML: s => s,
createScript: s => s
});
assert_throws(new TypeError(), _ => { p1.createScriptURL("foo"); });
assert_throws(new TypeError(), _ => { p1.createURL("foo"); });
const p2 = TrustedTypes.createPolicy("policyURLAndScriptURL", {
createURL: s => s,
createScriptURL: s => s
});
assert_throws(new TypeError(), _ => { p2.createHTML("foo"); });
assert_throws(new TypeError(), _ => { p2.createScript("foo"); });
}, "calling undefined callbacks throws");
test(t => {
const noopPolicy = {
createHTML: (s) => s,
createScriptURL: (s) => s,
createURL: (s) => s,
createScript: (s) => s,
};
policy = TrustedTypes.createPolicy(Math.random(), noopPolicy, true);
let el = document.createElement("div");
el.title = policy.createHTML(INPUTS.URL);
assert_equals(el.title, INPUTS.URL);
el.title = policy.createURL(INPUTS.HTML);
assert_equals(el.title, "");
}, "Attributes without type constraints will work as before.");
test(t => {
const policy = TrustedTypes.createPolicy("nullpolicy", null);
assert_throws(new TypeError(), _ => { policy.createScriptURL("foo"); });
assert_throws(new TypeError(), _ => { policy.createURL("foo"); });
assert_throws(new TypeError(), _ => { policy.createHTML("foo"); });
assert_throws(new TypeError(), _ => { policy.createScript("foo"); });
}, "TrustedTypes.createPolicy(.., null) creates empty policy.");
// testCases contains a list of policy functions and expected results (when
// called with a given default argument). They also use various helper
// variables (declared just below) to test side effects or interactions of
// global vars/functions with policy callbacks.
let aGlobalVarForSideEffectTesting = "global";
var aGlobalObject = { "foo": "well," };
function aGlobalFunction(s) { return this.foo + " " + s; }
function anotherGlobalFunction(s) { return s + "#" + this.foo; }
var foo = "a global var named foo";
const stringTestCases = [
[ s => s, "whatever" ],
[ s => null, "null" ],
[ s => "well, " + s, "well, whatever" ],
[ s => { throw new Error() }, new Error() ],
[ s => { aGlobalVarForSideEffectTesting = s; return s }, "whatever" ],
[ s => aGlobalVarForSideEffectTesting + s, "whateverwhatever" ],
[ aGlobalFunction.bind(aGlobalObject), "well, whatever" ],
[ s => aGlobalFunction(s), "a global var named foo whatever" ],
];
const urlTestCases = [
[ s => s, INPUTS.SCRIPTURL ],
[ s => null, "" ],
[ s => s + "#duck", INPUTS.SCRIPTURL + "#duck" ],
[ s => { throw new Error() }, new Error() ],
[ s => s + "#" + aGlobalVarForSideEffectTesting,
INPUTS.SCRIPTURL + "#global" ],
[ anotherGlobalFunction.bind(aGlobalObject), INPUTS.SCRIPTURL + "#well," ],
[ s => anotherGlobalFunction(s),
INPUTS.SCRIPTURL + "#a%20global%20var%20named%20foo" ],
];
function policyBuilder(trustedMethodName, trustedType, defaultArg) {
return function(name, fn) {
let options = {};
options[trustedMethodName] = fn;
let policy = window.TrustedTypes.createPolicy(name, options);
let result = policy[trustedMethodName](defaultArg);
assert_true(result instanceof trustedType);
return result;
}
}
const testCases = [
[TrustedHTML, "createHTML", "whatever", stringTestCases],
[TrustedScript, "createScript", "whatever", stringTestCases],
[TrustedURL, "createURL", INPUTS.SCRIPTURL, urlTestCases],
[TrustedScriptURL, "createScriptURL", INPUTS.SCRIPTURL, urlTestCases],
];
// Iterate over all trusted types, iterate over all test cases.
// For each, build the suitable policy and check the result.
for (let [trusted_class, trusted_method, default_arg, test_cases] of testCases) {
aGlobalVarForSideEffectTesting = "global";
let builder = policyBuilder(trusted_method, trusted_class, default_arg);
for (let [index, [policy_fn, value]] of test_cases.entries()) {
let subtest_name = "TestPolicy" + trusted_class.name + index;
test(t => {
if (value instanceof Error) {
assert_throws(value, () => builder(subtest_name, policy_fn));
} else {
assert_equals("" + builder(subtest_name, policy_fn), value);
}
}, subtest_name + " (" + trusted_class.name + ": " +
policy_fn.toString() + ")");
}
}
</script>

View file

@ -0,0 +1,25 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body>
<script>
// Not exposed policy test
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(window.TrustedTypes.getExposedPolicy('SomeName'), null);
}, "Null is returned when policy is not exposed - by default");
// Non-existent policy test
test(t => {
assert_equals(window.TrustedTypes.getExposedPolicy('JustAName'), null);
}, "Null is returned when policy is non-existent.");
// Exposed policy test
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s }, true );
assert_equals(window.TrustedTypes.getExposedPolicy('SomeOtherName'), policy);
}, "Policy is returned when exposed == true.");
</script>

View file

@ -0,0 +1,31 @@
<!DOCTYPE html>
<script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body>
<script>
// Policy name test
test(t => {
let policy = TrustedTypes.createPolicy('hidden', { createHTML: s => s }, false );
assert_true(policy instanceof TrustedTypePolicy);
assert_equals(policy.name, 'hidden');
}, "policy.name = name");
// Duplicate names test
test(t => {
assert_throws(new TypeError(), _ => {
TrustedTypes.createPolicy('hidden', { createURL: s => s } );
});
}, "duplicate policy name attempt throws");
// Retrieve policy names tests
test(t => {
let policy = TrustedTypes.createPolicy('exposed', { createURL: s => s }, true );
let names = TrustedTypes.getPolicyNames();
assert_equals(names.length, 2);
assert_true(names.includes('hidden'));
assert_true(names.includes('exposed'));
}, "getPolicyNames returns all policy names");
</script>

View file

@ -2,23 +2,26 @@
<script src="/resources/testharness.js" ></script> <script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script> <script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types SomeName JustOneMoreName"> <meta http-equiv="Content-Security-Policy" content="trusted-types SomeName JustOneMoreName">
<body> <body>
<script> <script>
//Whitelisted name test // Whitelisted name test
test(t => { test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } ); let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(policy.name, 'SomeName'); assert_equals(policy.name, 'SomeName');
}, "Whitelisted policy creation works"); }, "Whitelisted policy creation works.");
//Another whitelisted name test
// Another whitelisted name test
test(t => { test(t => {
let policy = window.TrustedTypes.createPolicy('JustOneMoreName', { createHTML: s => s } ); let policy = window.TrustedTypes.createPolicy('JustOneMoreName', { createHTML: s => s } );
assert_equals(policy.name, 'JustOneMoreName'); assert_equals(policy.name, 'JustOneMoreName');
}, "Another whitelisted policy creation works"); }, "Another whitelisted policy creation works.");
//Non-whitelisted names test
// Non-whitelisted names test
test(t => { test(t => {
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } ); window.TrustedTypes.createPolicy('SomeOtherName', { createURL: s => s } );
}); });
}, "Non-whitelisted policy creation throws"); }, "Non-whitelisted policy creation throws.");
</script> </script>

View file

@ -2,23 +2,25 @@
<script src="/resources/testharness.js" ></script> <script src="/resources/testharness.js" ></script>
<script src="/resources/testharnessreport.js"></script> <script src="/resources/testharnessreport.js"></script>
<script src="support/helper.sub.js"></script> <script src="support/helper.sub.js"></script>
<meta http-equiv="Content-Security-Policy" content="trusted-types *">
<body> <body>
<script> <script>
//Not exposed policy test // Not exposed policy test
test(t => { test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } ); let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(window.TrustedTypes.getExposedPolicy('SomeName'), null); assert_equals(window.TrustedTypes.getExposedPolicy('SomeName'), null);
}, "Null is returned when policy is not exposed"); }, "Null is returned when policy is not exposed - by default");
//Non-existent policy test // Non-existent policy test
test(t => { test(t => {
let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } ); let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } );
assert_equals(window.TrustedTypes.getExposedPolicy('JustAName'), null); assert_equals(window.TrustedTypes.getExposedPolicy('JustAName'), null);
}, "Null is returned when policy is non-existent"); }, "Null is returned when policy is non-existent.");
//Exposed policy test // Exposed policy test
test(t => { test(t => {
let policy = window.TrustedTypes.createPolicy('EvenSomeOtherName', { createHTML: s => s }, true ); let policy = window.TrustedTypes.createPolicy('EvenSomeOtherName', { createHTML: s => s }, true );
assert_equals(window.TrustedTypes.getExposedPolicy('EvenSomeOtherName'), policy); assert_equals(window.TrustedTypes.getExposedPolicy('EvenSomeOtherName'), policy);
}, "Policy is returned when exposed == true"); }, "Policy is returned when exposed == true.");
</script> </script>

View file

@ -9,8 +9,9 @@
</head> </head>
<body> <body>
<script> <script>
// TrustedHTML assignments do not throw. // TrustedURL assignments do not throw.
test(t => { test(t => {
document.body.innerText = '';
let p = createHTML_policy(window, 1); let p = createHTML_policy(window, 1);
let html = p.createHTML(INPUTS.HTML); let html = p.createHTML(INPUTS.HTML);
document.write(html); document.write(html);
@ -19,15 +20,19 @@
// String assignments throw. // String assignments throw.
test(t => { test(t => {
const old = document.body.innerText;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
document.write('A string'); document.write('A string');
}); });
assert_equals(document.body.innerText, old);
}, "`document.write(string)` throws"); }, "`document.write(string)` throws");
// Null assignment throws. // Null assignment throws.
test(t => { test(t => {
const old = document.body.innerText;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
document.write(null); document.write(null);
}); });
assert_equals(document.body.innerText, old);
}, "`document.write(null)` throws"); }, "`document.write(null)` throws");
</script> </script>

View file

@ -103,6 +103,18 @@
assert_element_accepts_non_trusted_type_explicit_set('a', 'rel', null, 'null'); assert_element_accepts_non_trusted_type_explicit_set('a', 'rel', null, 'null');
}, "a.rel accepts null"); }, "a.rel accepts null");
test(t => {
let div = document.createElement('div');
let span = document.createElement('span');
div.setAttribute('src', INPUTS.URL);
let attr = div.getAttributeNode('src');
div.removeAttributeNode(attr);
span.setAttributeNode(attr);
assert_equals(span.getAttribute('src'), INPUTS.URL);
}, "`span.src = setAttributeNode(div.src)` with string works.");
test(t => { test(t => {
let el = document.createElement('iframe'); let el = document.createElement('iframe');

View file

@ -19,16 +19,20 @@
// String assignments throw. // String assignments throw.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.assign("A string"); location.assign("A string");
}); });
assert_equals(location.href, href);
}, "`location.assign = string` throws"); }, "`location.assign = string` throws");
// Null assignment throws. // Null assignment throws.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.assign(null); location.assign(null);
}); });
assert_equals(location.href, href);
}, "`location.assign = null` throws"); }, "`location.assign = null` throws");
// Create default policy. Applies to all subsequent tests. // Create default policy. Applies to all subsequent tests.

View file

@ -19,19 +19,22 @@
// String assignments throw. // String assignments throw.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.href = 'A string'; location.href = 'A string';
}); });
assert_equals(location.href, href);
}, "`location.href = string` throws"); }, "`location.href = string` throws");
// Null assignment throws. // Null assignment throws.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.href = null; location.href = null;
}); });
assert_equals(location.href, href);
}, "`location.href = null` throws"); }, "`location.href = null` throws");
// Create default policy. Applies to all subsequent tests. // Create default policy. Applies to all subsequent tests.
let p = window.TrustedTypes.createPolicy("default", let p = window.TrustedTypes.createPolicy("default",
{ createURL: createLocationURLJS }, true); { createURL: createLocationURLJS }, true);

View file

@ -19,16 +19,20 @@
// String replacements throw. // String replacements throw.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.replace("A string"); location.replace("A string");
}); });
assert_equals(location.href, href);
}, "`location.replace = string` throws"); }, "`location.replace = string` throws");
// Null replacement throws. // Null replacement throws.
test(t => { test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
location.replace(null); location.replace(null);
}); });
assert_equals(location.href, href);
}, "`location.replace = null` throws"); }, "`location.replace = null` throws");
// Create default policy. Applies to all subsequent tests. // Create default policy. Applies to all subsequent tests.

View file

@ -87,9 +87,11 @@ function assert_element_accepts_trusted_type(tag, attribute, value, expected) {
function assert_throws_no_trusted_type(tag, attribute, value) { function assert_throws_no_trusted_type(tag, attribute, value) {
let elem = document.createElement(tag); let elem = document.createElement(tag);
let prev = elem[attribute];
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
elem[attribute] = value; elem[attribute] = value;
}); });
assert_equals(elem[attribute], prev);
} }
function assert_element_accepts_trusted_html_explicit_set(win, c, t, tag, attribute, expected) { function assert_element_accepts_trusted_html_explicit_set(win, c, t, tag, attribute, expected) {
@ -120,19 +122,24 @@ function assert_element_accepts_trusted_type_explicit_set(tag, attribute, value,
let elem = document.createElement(tag); let elem = document.createElement(tag);
elem.setAttribute(attribute, value); elem.setAttribute(attribute, value);
assert_equals(elem[attribute] + "", expected); assert_equals(elem[attribute] + "", expected);
assert_equals(elem.getAttribute(attribute), expected);
} }
function assert_throws_no_trusted_type_explicit_set(tag, attribute, value) { function assert_throws_no_trusted_type_explicit_set(tag, attribute, value) {
let elem = document.createElement(tag); let elem = document.createElement(tag);
let prev = elem[attribute];
assert_throws(new TypeError(), _ => { assert_throws(new TypeError(), _ => {
elem.setAttribute(attribute, value); elem.setAttribute(attribute, value);
}); });
assert_equals(elem[attribute], prev);
assert_equals(elem.getAttribute(attribute), null);
} }
function assert_element_accepts_non_trusted_type_explicit_set(tag, attribute, value, expected) { function assert_element_accepts_non_trusted_type_explicit_set(tag, attribute, value, expected) {
let elem = document.createElement(tag); let elem = document.createElement(tag);
elem.setAttribute(attribute, value); elem.setAttribute(attribute, value);
assert_equals(elem[attribute] + "", expected); assert_equals(elem[attribute] + "", expected);
assert_equals(elem.getAttribute(attribute), expected);
} }
let namespace = 'http://www.w3.org/1999/xhtml'; let namespace = 'http://www.w3.org/1999/xhtml';