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

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
[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
[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
[img (srcset 1 cand) valid image, resize to narrow]

View file

@ -1,4 +1,5 @@
[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)]
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]
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

@ -11,6 +11,7 @@ div {
position: relative;
font-size: 20px;
font-family: Ahem;
line-height: 1em;
}
.red {
position: absolute;
@ -22,7 +23,6 @@ div {
}
.test {
color: green;
line-height: 1em;
width: 5ch;
white-space: pre-wrap;

View file

@ -12,6 +12,7 @@ div {
position: relative;
font-size: 20px;
font-family: Ahem;
line-height: 1em;
}
.fail {
position: absolute;
@ -21,7 +22,6 @@ div {
span { color: green; }
.test {
color: green;
line-height: 1em;
width: 5ch;
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="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="match" href="contain-layout-suppress-baseline-001-ref.html">
<link rel="match" href="contain-layout-suppress-baseline-002-ref.html">
<style>
.flexBaselineCheck {
display: flex;

View file

@ -65,12 +65,22 @@
async_test(function(t) {
clickTimeMin = performance.now();
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
// before processing begins.
processingStartMin = performance.now();
on_event(window, 'load', e => {
onloadStart = performance.now();
clickAndBlockMain('button').then(wait).then(
const clickPromise = clickAndBlockMain('button');
Promise.all([observerPromise, clickPromise]).then(
t.step_func_done(validateEntries));
});
}, "Event Timing: click, onload.");

View file

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

View file

@ -61,16 +61,22 @@ registration are lost
(Dispatch and Process Click 2 (not buffered, observed))
*/
async_test(function(t) {
// Use a dummy observer to know when the first click has been dispatched.
const observerPromise = new Promise((resolve, reject) => {
new PerformanceObserver((entryList, observer) => {
resolve();
observer.disconnect();
}).observe({ entryTypes: ['event'] });
});
on_event(window, 'load', () => {
clickAndBlockMain('button').then(() => {
const clickPromise = clickAndBlockMain('button');
Promise.all([observerPromise, clickPromise]).then(() => {
startObserver(t);
clickAndBlockMain('button').then(wait);
clickAndBlockMain('button');
processingStartMin = performance.now();
});
});
},
"Event Timing: onload, click, observer, click."
);
},"Event Timing: onload, click, observer, click.");
</script>
</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;
};
typedef (DOMString or ArrayBuffer or NFCMessage) NFCPushMessage;
typedef (DOMString or ArrayBuffer or NFCMessage) NFCMessageSource;
[SecureContext]
interface NFC {
Promise<void> push(NFCPushMessage message, optional NFCPushOptions options);
Promise<long> watch(MessageCallback callback, optional NFCWatchOptions options);
Promise<void> push(NFCMessageSource message, optional NFCPushOptions options);
Promise<void> watch(MessageCallback callback, optional NFCWatchOptions options);
};
callback MessageCallback = void (NFCMessage message);

View file

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

View file

@ -30,14 +30,19 @@ promise_test(function(t) {
return new Promise(function(resolve, reject) {
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({},
host_info['HTTPS_ORIGIN'],
[channel.port2]);
});
})
.then(function(e) {
assert_equals(e.data.results, 'finish');
});
}, 'Verify CORS XHR of fetch() in a Service Worker');
</script>

View file

@ -26,38 +26,10 @@ function create_test_case_promise(url, with_credentials) {
});
}
function create_test_promise(url, with_credentials, expected_result) {
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) {
window.addEventListener('message', async (evt) => {
var port = evt.ports[0];
var url = host_info['HTTPS_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 = [
// Reject tests
[url + '?reject', false, FAIL],
@ -95,8 +67,8 @@ window.addEventListener('message', function(evt) {
// Credential test (fallback)
[url + '?Auth&ignore', false, SUCCESS],
[url + '?Auth&ignore', true, SUCCESS],
[remote_url + '?Auth&ignore', false, FAIL, true], // Executed in serial.
[remote_url + '?Auth&ignore', true, FAIL, true], // Executed in serial.
[remote_url + '?Auth&ignore', false, FAIL],
[remote_url + '?Auth&ignore', true, FAIL],
[
remote_url + '?Auth&ACAOrigin=' + host_info['HTTPS_ORIGIN'] + '&ignore',
false, 'STATUS401'
@ -186,24 +158,13 @@ window.addEventListener('message', function(evt) {
true, SUCCESS
]
];
var promises = [];
var serial_tests = [];
for (var i = 0; i < TEST_CASES.length ; ++i) {
if (!TEST_CASES[i][3]) {
promises.push(create_test_promise(TEST_CASES[i][0],
TEST_CASES[i][1],
TEST_CASES[i][2]));
} else {
serial_tests.push(TEST_CASES[i]);
let counter = 0;
for (let test of TEST_CASES) {
let result = await create_test_case_promise(test[0], test[1]);
let testName = 'test ' + (++counter) + ': ' + test[0] + ' with credentials ' + test[1] + ' must be ' + test[2];
port.postMessage({testName: testName, result: result === test[2]});
}
}
promises.push(create_serial_promise(serial_tests));
Promise.all(promises)
.then(function() {
port.postMessage({results: 'finish'});
})
.catch(function(e) {
port.postMessage({results: 'failure:' + e});
});
port.postMessage('done');
}, false);
</script>

View file

@ -1,92 +1,101 @@
// 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 => {
assert_true('estimate' in navigator.storage);
assert_equals(typeof navigator.storage.estimate, 'function');
assert_true(navigator.storage.estimate() instanceof Promise);
}, 'estimate() method exists and returns a Promise');
promise_test(t => {
return navigator.storage.estimate().then(result => {
assert_true(typeof result === 'object');
assert_true('usage' in result);
assert_equals(typeof result.usage, 'number');
assert_true('quota' in result);
assert_equals(typeof result.quota, 'number');
});
promise_test(async t => {
const estimate = await navigator.storage.estimate();
assert_true(typeof estimate === 'object');
assert_true('usage' in estimate);
assert_equals(typeof estimate.usage, 'number');
assert_true('quota' in estimate);
assert_equals(typeof estimate.quota, 'number');
}, 'estimate() resolves to dictionary with members');
promise_test(t => {
promise_test(async t => {
const arraySize = 1e6;
const objectStoreName = "storageManager";
const dbname = this.window ? window.location.pathname :
"estimate-worker.https.html";
let db;
let usageBeforeCreate, usageAfterCreate, usageAfterPut;
await indexedDbDeleteRequest(dbname);
let estimate = await navigator.storage.estimate();
function deleteDB(name) {
return new Promise((resolve, reject) => {
let deleteRequest = indexedDB.deleteDatabase(name);
deleteRequest.onerror = () => { reject(deleteRequest.error); };
deleteRequest.onsuccess = () => { resolve(); };
const usageBeforeCreate = estimate.usage;
const db = await indexedDbOpenRequest(t, dbname, (db_to_upgrade) => {
db_to_upgrade.createObjectStore(objectStoreName);
});
}
return deleteDB(dbname)
.then(() => {
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;
estimate = await navigator.storage.estimate();
const usageAfterCreate = estimate.usage;
assert_greater_than(
usageAfterCreate, usageBeforeCreate,
'estimated usage should increase after object store is created');
let txn = db.transaction(objectStoreName, 'readwrite');
let buffer = new ArrayBuffer(arraySize);
let view = new Uint8Array(buffer);
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] = parseInt(Math.random() * 255);
view[i] = Math.floor(Math.random() * 255);
}
let testBlob = new Blob([buffer], {type: "binary/random"});
const testBlob = new Blob([buffer], {type: "binary/random"});
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;
await transactionPromise(txn);
estimate = await navigator.storage.estimate();
const 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');

View file

@ -17,6 +17,7 @@ test_valid_value("cx", "0", "0px");
test_valid_value("cx", "-1px");
test_valid_value("cx", "calc(2em + 3ex)");
test_valid_value("cx", "4%");
test_valid_value("cx", "5ch");
]]></script>
</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", "calc(2em + 3ex)");
test_valid_value("cy", "4%");
test_valid_value("cy", "5rem");
]]></script>
</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", "calc(2em + 3ex)");
test_valid_value("rx", "4%");
test_valid_value("rx", "5vw");
]]></script>
</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", "calc(2em + 3ex)");
test_valid_value("rx", "4%");
test_valid_value("rx", "5vh");
]]></script>
</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", "calc(2em + 3ex)");
test_valid_value("x", "4%");
test_valid_value("x", "5cm");
]]></script>
</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", "calc(2em + 3ex)");
test_valid_value("y", "4%");
test_valid_value("y", "5mm");
]]></script>
</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"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().fillOpacity</title>
<title>SVG Painting: getComputedValue().fillOpacity</title>
<metadata>
<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]."/>

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", "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.
]]></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", "-20%");
test_valid_value("stroke-dashoffset", "30");
test_valid_value("stroke-dashoffset", "40Q", "40q");
test_valid_value("stroke-dashoffset", "calc(2em + 3ex)");
]]></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"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().strokeOpacity</title>
<title>SVG Painting: getComputedValue().strokeOpacity</title>
<metadata>
<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]."/>

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"
xmlns:h="http://www.w3.org/1999/xhtml"
width="800px" height="800px">
<title>SVG Geometry Properties: getComputedValue().strokeWidth</title>
<title>SVG Painting: getComputedValue().strokeWidth</title>
<metadata>
<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>
<g id="target"></g>
<g id="ref"></g>
<style>
#target {
#target, #ref {
font-size: 40px;
}
</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", "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>
</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_tunnel_id = kwargs["sauce_tunnel_id"]
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.sc_process = None
self.temp_dir = None
@ -171,7 +172,7 @@ class SauceConnect():
"--readyfile=./sauce_is_ready",
"--tunnel-domains",
",".join(self.env_config.domains_set)
])
] + self.sauce_connect_args)
tot_wait = 0
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_key="bbb",
sauce_tunnel_id="ccc",
sauce_connect_binary="ddd")
sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config)
@ -54,7 +55,8 @@ def test_sauceconnect_failure_exit(readyfile, returncode):
sauce_user="aaa",
sauce_key="bbb",
sauce_tunnel_id="ccc",
sauce_connect_binary="ddd")
sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config)
@ -82,7 +84,8 @@ def test_sauceconnect_cleanup():
sauce_user="aaa",
sauce_key="bbb",
sauce_tunnel_id="ccc",
sauce_connect_binary="ddd")
sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config)
@ -106,7 +109,8 @@ def test_sauceconnect_failure_never_ready():
sauce_user="aaa",
sauce_key="bbb",
sauce_tunnel_id="ccc",
sauce_connect_binary="ddd")
sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net") as env_config:
sauce_connect(None, env_config)
@ -134,7 +138,8 @@ def test_sauceconnect_tunnel_domains():
sauce_user="aaa",
sauce_key="bbb",
sauce_tunnel_id="ccc",
sauce_connect_binary="ddd")
sauce_connect_binary="ddd",
sauce_connect_args=[])
with ConfigBuilder(browser_host="example.net",
alternate_hosts={"alt": "example.org"},

View file

@ -302,6 +302,10 @@ scheme host and port.""")
help="Number of seconds to wait for Sauce "
"Connect tunnel to be available before "
"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.add_argument("--webkit-port", dest="webkit_port",

View file

@ -284,6 +284,8 @@ def run_tests(config, test_paths, product, **kwargs):
logger.suite_end()
if repeat_until_unexpected and unexpected_total > 0:
break
if len(test_loader.test_ids) == skipped_tests:
break
if test_total == 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,6 +2,7 @@
<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>
@ -9,16 +10,18 @@
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeName', { createHTML: s => s } );
assert_equals(policy.name, 'SomeName');
}, "Whitelisted policy creation works");
}, "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");
}, "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");
}, "Non-whitelisted policy creation throws.");
</script>

View file

@ -2,23 +2,25 @@
<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");
}, "Null is returned when policy is not exposed - by default");
// Non-existent policy test
test(t => {
let policy = window.TrustedTypes.createPolicy('SomeOtherName', { createHTML: s => s } );
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
test(t => {
let policy = window.TrustedTypes.createPolicy('EvenSomeOtherName', { createHTML: s => s }, true );
assert_equals(window.TrustedTypes.getExposedPolicy('EvenSomeOtherName'), policy);
}, "Policy is returned when exposed == true");
}, "Policy is returned when exposed == true.");
</script>

View file

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

View file

@ -103,6 +103,18 @@
assert_element_accepts_non_trusted_type_explicit_set('a', 'rel', null, '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 => {
let el = document.createElement('iframe');

View file

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

View file

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

View file

@ -19,16 +19,20 @@
// String replacements throw.
test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => {
location.replace("A string");
});
assert_equals(location.href, href);
}, "`location.replace = string` throws");
// Null replacement throws.
test(t => {
let href = location.href;
assert_throws(new TypeError(), _ => {
location.replace(null);
});
assert_equals(location.href, href);
}, "`location.replace = null` throws");
// 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) {
let elem = document.createElement(tag);
let prev = elem[attribute];
assert_throws(new TypeError(), _ => {
elem[attribute] = value;
});
assert_equals(elem[attribute], prev);
}
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);
elem.setAttribute(attribute, value);
assert_equals(elem[attribute] + "", expected);
assert_equals(elem.getAttribute(attribute), expected);
}
function assert_throws_no_trusted_type_explicit_set(tag, attribute, value) {
let elem = document.createElement(tag);
let prev = elem[attribute];
assert_throws(new TypeError(), _ => {
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) {
let elem = document.createElement(tag);
elem.setAttribute(attribute, value);
assert_equals(elem[attribute] + "", expected);
assert_equals(elem.getAttribute(attribute), expected);
}
let namespace = 'http://www.w3.org/1999/xhtml';