mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
Update web-platform-tests to revision cd44958a002b1ad494168e0290554644de84526e
This commit is contained in:
parent
2ed23ce4c9
commit
4443426308
103 changed files with 1740 additions and 1138 deletions
|
@ -182949,78 +182949,6 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2a.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2a.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2b.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2b.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2c.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2c.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2d.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2d.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2e.html": [
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2e.html",
|
|
||||||
[
|
|
||||||
[
|
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html",
|
|
||||||
"=="
|
|
||||||
]
|
|
||||||
],
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html": [
|
||||||
[
|
[
|
||||||
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html",
|
"/css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html",
|
||||||
|
@ -190669,6 +190597,18 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"quirks/vertical-align-in-quirks.html": [
|
||||||
|
[
|
||||||
|
"/quirks/vertical-align-in-quirks.html",
|
||||||
|
[
|
||||||
|
[
|
||||||
|
"/quirks/reference/vertical-align-in-quirks-ref.html",
|
||||||
|
"=="
|
||||||
|
]
|
||||||
|
],
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"service-workers/service-worker/svg-target-reftest.https.html": [
|
"service-workers/service-worker/svg-target-reftest.https.html": [
|
||||||
[
|
[
|
||||||
"/service-workers/service-worker/svg-target-reftest.https.html",
|
"/service-workers/service-worker/svg-target-reftest.https.html",
|
||||||
|
@ -280254,16 +280194,6 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1-ref.html": [
|
|
||||||
[
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html": [
|
|
||||||
[
|
|
||||||
{}
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-untransformable-no-stacking-context-ref.html": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-untransformable-no-stacking-context-ref.html": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -299649,6 +299579,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"quirks/reference/vertical-align-in-quirks-ref.html": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"quirks/support/test-ref-iframe.js": [
|
"quirks/support/test-ref-iframe.js": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -307279,6 +307214,11 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"streams/piping/abort.js": [
|
||||||
|
[
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"streams/piping/close-propagation-backward.js": [
|
"streams/piping/close-propagation-backward.js": [
|
||||||
[
|
[
|
||||||
{}
|
{}
|
||||||
|
@ -346788,6 +346728,24 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-computed.html": [
|
||||||
|
[
|
||||||
|
"/css/filter-effects/parsing/backdrop-filter-computed.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-parsing-invalid.html": [
|
||||||
|
[
|
||||||
|
"/css/filter-effects/parsing/backdrop-filter-parsing-invalid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-parsing-valid.html": [
|
||||||
|
[
|
||||||
|
"/css/filter-effects/parsing/backdrop-filter-parsing-valid.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html": [
|
"css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html": [
|
||||||
[
|
[
|
||||||
"/css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html",
|
"/css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html",
|
||||||
|
@ -359623,25 +359581,33 @@
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html": [
|
||||||
[
|
[
|
||||||
"/feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html",
|
"/feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html",
|
||||||
{}
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html": [
|
||||||
[
|
[
|
||||||
"/feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html",
|
"/feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html",
|
||||||
{}
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
||||||
[
|
[
|
||||||
"/feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html",
|
"/feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html",
|
||||||
{}
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html": [
|
||||||
[
|
[
|
||||||
"/feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html",
|
"/feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html",
|
||||||
{}
|
{
|
||||||
|
"timeout": "long"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html": [
|
"feature-policy/feature-policy-header-policy-allowed-for-all.https.sub.html": [
|
||||||
|
@ -376654,6 +376620,12 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"mediacapture-streams/MediaDevices-SecureContext.html": [
|
||||||
|
[
|
||||||
|
"/mediacapture-streams/MediaDevices-SecureContext.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"mediacapture-streams/MediaDevices-enumerateDevices.https.html": [
|
"mediacapture-streams/MediaDevices-enumerateDevices.https.html": [
|
||||||
[
|
[
|
||||||
"/mediacapture-streams/MediaDevices-enumerateDevices.https.html",
|
"/mediacapture-streams/MediaDevices-enumerateDevices.https.html",
|
||||||
|
@ -402614,6 +402586,30 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"streams/piping/abort.dedicatedworker.html": [
|
||||||
|
[
|
||||||
|
"/streams/piping/abort.dedicatedworker.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"streams/piping/abort.html": [
|
||||||
|
[
|
||||||
|
"/streams/piping/abort.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"streams/piping/abort.serviceworker.https.html": [
|
||||||
|
[
|
||||||
|
"/streams/piping/abort.serviceworker.https.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"streams/piping/abort.sharedworker.html": [
|
||||||
|
[
|
||||||
|
"/streams/piping/abort.sharedworker.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"streams/piping/close-propagation-backward.dedicatedworker.html": [
|
"streams/piping/close-propagation-backward.dedicatedworker.html": [
|
||||||
[
|
[
|
||||||
"/streams/piping/close-propagation-backward.dedicatedworker.html",
|
"/streams/piping/close-propagation-backward.dedicatedworker.html",
|
||||||
|
@ -404048,6 +404044,24 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"svg/interact/inheritance.svg": [
|
||||||
|
[
|
||||||
|
"/svg/interact/inheritance.svg",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"svg/interact/parsing/pointer-events-invalid.svg": [
|
||||||
|
[
|
||||||
|
"/svg/interact/parsing/pointer-events-invalid.svg",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"svg/interact/parsing/pointer-events-valid.svg": [
|
||||||
|
[
|
||||||
|
"/svg/interact/parsing/pointer-events-valid.svg",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"svg/linking/scripted/a-download-click.svg": [
|
"svg/linking/scripted/a-download-click.svg": [
|
||||||
[
|
[
|
||||||
"/svg/linking/scripted/a-download-click.svg",
|
"/svg/linking/scripted/a-download-click.svg",
|
||||||
|
@ -409264,15 +409278,15 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"webrtc/RTCRtpTransceiver-setCodecPreferences.html": [
|
"webrtc/RTCRtpTransceiver-direction.html": [
|
||||||
[
|
[
|
||||||
"/webrtc/RTCRtpTransceiver-setCodecPreferences.html",
|
"/webrtc/RTCRtpTransceiver-direction.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
"webrtc/RTCRtpTransceiver-setDirection.html": [
|
"webrtc/RTCRtpTransceiver-setCodecPreferences.html": [
|
||||||
[
|
[
|
||||||
"/webrtc/RTCRtpTransceiver-setDirection.html",
|
"/webrtc/RTCRtpTransceiver-setCodecPreferences.html",
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
@ -436918,7 +436932,7 @@
|
||||||
},
|
},
|
||||||
"paths": {
|
"paths": {
|
||||||
".azure-pipelines.yml": [
|
".azure-pipelines.yml": [
|
||||||
"f2a7b84f358e87013755bc27cc64f3f01c92bab1",
|
"e5d247af94e87fc5bba0363d794ab9f060e14d82",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
".codecov.yml": [
|
".codecov.yml": [
|
||||||
|
@ -436938,7 +436952,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
".taskcluster.yml": [
|
".taskcluster.yml": [
|
||||||
"d29e686785234b1a5cc1c490ba7ea8efcb62674b",
|
"bcac7f5abbc4b32be599475a5506df9e2e135abd",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
".travis.yml": [
|
".travis.yml": [
|
||||||
|
@ -446938,7 +446952,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"background-fetch/service_workers/sw-update-ui.js": [
|
"background-fetch/service_workers/sw-update-ui.js": [
|
||||||
"5dec087cd155b486b974f3a26c149fcd113380c3",
|
"3848dc4402b71bed79b5f9662405acd03cf30f1e",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"background-fetch/service_workers/sw.js": [
|
"background-fetch/service_workers/sw.js": [
|
||||||
|
@ -446946,7 +446960,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"background-fetch/update-ui.https.window.js": [
|
"background-fetch/update-ui.https.window.js": [
|
||||||
"aed0bb86d26398aabc3688c6fee90c0cfc7d4206",
|
"90d3c2e7ed423db877ff91693546cafc85bd9e65",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"battery-status/META.yml": [
|
"battery-status/META.yml": [
|
||||||
|
@ -531146,7 +531160,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-animations/KeyframeEffect-getKeyframes.tentative.html": [
|
"css/css-animations/KeyframeEffect-getKeyframes.tentative.html": [
|
||||||
"280f32a4852abaeb847092032fa49c9a6cb9797d",
|
"81b0d18946440a34ed80e064ba9c9dd322d10f69",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-animations/KeyframeEffect-target.tentative.html": [
|
"css/css-animations/KeyframeEffect-target.tentative.html": [
|
||||||
|
@ -532126,7 +532140,7 @@
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"css/css-backgrounds/background-size-001.html": [
|
"css/css-backgrounds/background-size-001.html": [
|
||||||
"b5cf0c84c6aa8af885ba21a2a5517a11caa74413",
|
"3c9b9d5e55d320ed9a372fd43ed7723260288cf9",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"css/css-backgrounds/background-size-002.html": [
|
"css/css-backgrounds/background-size-002.html": [
|
||||||
|
@ -585753,6 +585767,18 @@
|
||||||
"e7de16e8d62904986610a484b046a4caf0f161e3",
|
"e7de16e8d62904986610a484b046a4caf0f161e3",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-computed.html": [
|
||||||
|
"96de7b941bafda4e87c185148f6f11169e1d80a7",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-parsing-invalid.html": [
|
||||||
|
"4e6b74682c5d48583f221f03c10a99a52964afe3",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"css/filter-effects/parsing/backdrop-filter-parsing-valid.html": [
|
||||||
|
"2531b09a3283037c85e5fc377bc5517396191eb0",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html": [
|
"css/filter-effects/parsing/color-interpolation-filters-parsing-invalid.html": [
|
||||||
"6fdf647a43d0deed2da93239e4e4b0fc3b66a16a",
|
"6fdf647a43d0deed2da93239e4e4b0fc3b66a16a",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -588422,11 +588448,11 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/support/inheritance-testcommon.js": [
|
"css/support/inheritance-testcommon.js": [
|
||||||
"9f59cbbb6de304857175f7471bbbc253f21c4fa6",
|
"9229f1268ea8e8ec8d83fca77665b17602aebf56",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/support/parsing-testcommon.js": [
|
"css/support/parsing-testcommon.js": [
|
||||||
"b075882f89aae49b419220b234534241cde5fd42",
|
"7ecd588aaf5160f121b9eb240f58d2739135c829",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/support/pattern-grg-rgr-grg.png": [
|
"css/support/pattern-grg-rgr-grg.png": [
|
||||||
|
@ -594406,7 +594432,7 @@
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/reftest.list": [
|
||||||
"75a318005ebe2eb9675a58e446e8a25659ac8039",
|
"9a6799e9dcc2722fb99832f9955dbd1e0270cae0",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001-ref.html": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/shapes1/shape-outside-border-box-001-ref.html": [
|
||||||
|
@ -596293,38 +596319,6 @@
|
||||||
"34b66abdb143f3566cadba64d3fd8f66511528f3",
|
"34b66abdb143f3566cadba64d3fd8f66511528f3",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1-ref.html": [
|
|
||||||
"8a568d25d927a4bf768521b511c8507bc19f889e",
|
|
||||||
"support"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-1.html": [
|
|
||||||
"4f83e2eac47f5265b4b28ab7d66977f47f57ed1c",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2-ref.html": [
|
|
||||||
"ee956aa301f7afef1e863d60bc6edf949dd31038",
|
|
||||||
"support"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2a.html": [
|
|
||||||
"3f6c97386bae62103d66b208bdf0660f4f58b0f7",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2b.html": [
|
|
||||||
"94dac2f10ffc59cfc1d9c218d8b21991b627d52c",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2c.html": [
|
|
||||||
"f84ae2280650adc941464c3dec258674c89cdaa6",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2d.html": [
|
|
||||||
"5b5694f544e25bba345d03cbc2f44c00a8dd50ba",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/individual-transform-2e.html": [
|
|
||||||
"0350137bedefbf1491faf54a75115be08a858703",
|
|
||||||
"reftest"
|
|
||||||
],
|
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/perspective-containing-block-dynamic-1a.html": [
|
||||||
"51e76745b5a41320058aa3669499afa85ec41e72",
|
"51e76745b5a41320058aa3669499afa85ec41e72",
|
||||||
"reftest"
|
"reftest"
|
||||||
|
@ -596358,7 +596352,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/reftest.list": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/reftest.list": [
|
||||||
"33773a4c09f23797212a1e9077c155e2731d668f",
|
"e4777148d4ba3ab83c4db9b2ae99a27db54b3041",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/transform-containing-block-dynamic-1a.html": [
|
"css/vendor-imports/mozilla/mozilla-central-reftests/transforms/transform-containing-block-dynamic-1a.html": [
|
||||||
|
@ -598146,7 +598140,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"docs/_running-tests/safari.md": [
|
"docs/_running-tests/safari.md": [
|
||||||
"1fb5cb02359a9e5ee3e07485b547221ccb7faa1c",
|
"ca73fd6073d6378ccd734598497c5c14dde90d40",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"docs/_writing-tests/ahem.md": [
|
"docs/_writing-tests/ahem.md": [
|
||||||
|
@ -603150,7 +603144,7 @@
|
||||||
"manual"
|
"manual"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html": [
|
||||||
"f3082c4200e41e9343728f7ae691a715b88099c8",
|
"aede7e7876b197417d4fb6f156fda3285ac7e9a4",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html.sub.headers": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-all.https.sub.html.sub.headers": [
|
||||||
|
@ -603158,7 +603152,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html": [
|
||||||
"d2d0d1301aacdd1088f179360c155c76f0f4a485",
|
"b2b668256ff745bf41c26443b0703b76eab736cf",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html.sub.headers": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-self.https.sub.html.sub.headers": [
|
||||||
|
@ -603166,7 +603160,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html": [
|
||||||
"c777b2f769873f0f04f3ac8afad505f3b52ad7da",
|
"9a020f9e6b5d513adaf2d36b25bd62b239789e50",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers": [
|
"feature-policy/feature-policy-frame-policy-allowed-for-some.https.sub.html.sub.headers": [
|
||||||
|
@ -603174,7 +603168,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html": [
|
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html": [
|
||||||
"33fcb4bb29d65c7477076d139a8824d84e0c43af",
|
"7ac821d88562295bef234974172e9d83c03d9e03",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html.sub.headers": [
|
"feature-policy/feature-policy-frame-policy-disallowed-for-all.https.sub.html.sub.headers": [
|
||||||
|
@ -608346,7 +608340,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/resources/message-opener.html": [
|
"html/browsers/the-window-object/apis-for-creating-and-navigating-browsing-contexts-by-name/resources/message-opener.html": [
|
||||||
"12836f536f05766f628e65c57f835481c65264f9",
|
"07662c63cd01337e3b6a53ce6001d187b719fbe7",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-1.html": [
|
"html/browsers/the-window-object/garbage-collection-and-browsing-contexts/discard_iframe_history_1-1.html": [
|
||||||
|
@ -627621,6 +627615,10 @@
|
||||||
"1ed650e97c451ef1266fd8435e2260d6bf617b67",
|
"1ed650e97c451ef1266fd8435e2260d6bf617b67",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"mediacapture-streams/MediaDevices-SecureContext.html": [
|
||||||
|
"d0fc70ca0e84d4f02970b1fa81d649b96116c1c4",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"mediacapture-streams/MediaDevices-enumerateDevices.https.html": [
|
"mediacapture-streams/MediaDevices-enumerateDevices.https.html": [
|
||||||
"c66251a03f30f2100670d07508fcb449f8609510",
|
"c66251a03f30f2100670d07508fcb449f8609510",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -639165,6 +639163,10 @@
|
||||||
"987cc245ca220bd92108b6babe17d35733fd0697",
|
"987cc245ca220bd92108b6babe17d35733fd0697",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"quirks/reference/vertical-align-in-quirks-ref.html": [
|
||||||
|
"2395923cd2c5d391f386bb9483178fa0e35f8d79",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
"quirks/support/test-ref-iframe.js": [
|
"quirks/support/test-ref-iframe.js": [
|
||||||
"e5df41d4249bc93b7458774524bf90f0a6f36be7",
|
"e5df41d4249bc93b7458774524bf90f0a6f36be7",
|
||||||
"support"
|
"support"
|
||||||
|
@ -639221,6 +639223,10 @@
|
||||||
"f2f7eab4e33858b571344940c67de9b50e18e119",
|
"f2f7eab4e33858b571344940c67de9b50e18e119",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"quirks/vertical-align-in-quirks.html": [
|
||||||
|
"1826d0152fb73c48238fb58ea6989fc270064296",
|
||||||
|
"reftest"
|
||||||
|
],
|
||||||
"referrer-policy/META.yml": [
|
"referrer-policy/META.yml": [
|
||||||
"a622289c0562dbac99de0a9dbd3b9a70e0783923",
|
"a622289c0562dbac99de0a9dbd3b9a70e0783923",
|
||||||
"support"
|
"support"
|
||||||
|
@ -650510,7 +650516,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"service-workers/service-worker/clients-matchall-include-uncontrolled.https.html": [
|
"service-workers/service-worker/clients-matchall-include-uncontrolled.https.html": [
|
||||||
"d3b5a966d330412562fc6cbc614e4995f3d1260b",
|
"9f34e5709eb3cb607dcd1b91ec80b51c3706dca6",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"service-workers/service-worker/clients-matchall-on-evaluation.https.html": [
|
"service-workers/service-worker/clients-matchall-on-evaluation.https.html": [
|
||||||
|
@ -653425,6 +653431,26 @@
|
||||||
"22e5c786bbc4d755805f35eb0bdc957dad1c90db",
|
"22e5c786bbc4d755805f35eb0bdc957dad1c90db",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"streams/piping/abort.dedicatedworker.html": [
|
||||||
|
"231c3543d52892c3bb6352793e5865a80398afc8",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"streams/piping/abort.html": [
|
||||||
|
"d55e6f7074e3d216572e8b76e6bd7a921a5f672c",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"streams/piping/abort.js": [
|
||||||
|
"bb20ee30b396c99f050b400557e4883a5d373475",
|
||||||
|
"support"
|
||||||
|
],
|
||||||
|
"streams/piping/abort.serviceworker.https.html": [
|
||||||
|
"5c0809f0d0c1deba87a7675a6b3c2112d1d29e9f",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"streams/piping/abort.sharedworker.html": [
|
||||||
|
"8cdf8512c8112db0c9cdaa7fded5472841a65c5a",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"streams/piping/close-propagation-backward.dedicatedworker.html": [
|
"streams/piping/close-propagation-backward.dedicatedworker.html": [
|
||||||
"07f3875b2b0285411a7009fb87947989eab4c250",
|
"07f3875b2b0285411a7009fb87947989eab4c250",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
@ -657049,6 +657075,18 @@
|
||||||
"288fdf8052ee47ec946ff2679c384d4aa56e0f60",
|
"288fdf8052ee47ec946ff2679c384d4aa56e0f60",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
|
"svg/interact/inheritance.svg": [
|
||||||
|
"e67f19ed43529af5e34683b6853ae870435be014",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"svg/interact/parsing/pointer-events-invalid.svg": [
|
||||||
|
"1c09010f694d89fc7128617de2e3b3ec385d2145",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"svg/interact/parsing/pointer-events-valid.svg": [
|
||||||
|
"643ddba1664fd5d2155aec05af8518188fdc354c",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"svg/linking/reftests/href-a-element-attr-change.html": [
|
"svg/linking/reftests/href-a-element-attr-change.html": [
|
||||||
"c74b2e015613a09d1cecb5a0c3136d26f07e2a5b",
|
"c74b2e015613a09d1cecb5a0c3136d26f07e2a5b",
|
||||||
"reftest"
|
"reftest"
|
||||||
|
@ -658138,7 +658176,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/ci/tcdownload.py": [
|
"tools/ci/tcdownload.py": [
|
||||||
"8813dccc888881ac8e96a05b22b113d887de0463",
|
"91c763a7acdd3416d7eff55407bf8f73b840d96a",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/ci/tests/test_jobs.py": [
|
"tools/ci/tests/test_jobs.py": [
|
||||||
|
@ -658414,11 +658452,11 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/py27-flake8.ini": [
|
"tools/py27-flake8.ini": [
|
||||||
"1a5ce431ca808eb1683cd3d1eaa70fd5fdf6524f",
|
"99324b2aad14d921f469f52934f7ff9374a1d9ee",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/py36-flake8.ini": [
|
"tools/py36-flake8.ini": [
|
||||||
"9b01f22a3cdd25fc02d1334e5da99e71fa35bcb0",
|
"4ad34105b917670c78255d72d6a39b052b779339",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/pytest.ini": [
|
"tools/pytest.ini": [
|
||||||
|
@ -658810,7 +658848,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/requirements_flake8.txt": [
|
"tools/requirements_flake8.txt": [
|
||||||
"6d6ee4d885a480addf06d4df057cd4e4e6a8575f",
|
"d2e7dd64232ad76a71d00368d163957922aeedcb",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/runner/css/bootstrap-theme.min.css": [
|
"tools/runner/css/bootstrap-theme.min.css": [
|
||||||
|
@ -663166,7 +663204,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/browsers/fennec.py": [
|
"tools/wptrunner/wptrunner/browsers/fennec.py": [
|
||||||
"c783006cfa49857e236658ee17d1da3cf8c5bae4",
|
"15396fba22c2a39a9ccfce439cf7e477dc5e1378",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/browsers/firefox.py": [
|
"tools/wptrunner/wptrunner/browsers/firefox.py": [
|
||||||
|
@ -663210,7 +663248,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/browsers/webkit.py": [
|
"tools/wptrunner/wptrunner/browsers/webkit.py": [
|
||||||
"b09114a9a5444717157edb37c24add6ba99cf421",
|
"19527a132c7d8c8c158f8b960560b3f1966b59d3",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/config.py": [
|
"tools/wptrunner/wptrunner/config.py": [
|
||||||
|
@ -663326,7 +663364,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/formatters.py": [
|
"tools/wptrunner/wptrunner/formatters.py": [
|
||||||
"1ea09dbe553713c799b40c1e40d98f8ee2d4d81a",
|
"70cbef8c10b964a8b50590d39487c7543f87c3e4",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/manifestexpected.py": [
|
"tools/wptrunner/wptrunner/manifestexpected.py": [
|
||||||
|
@ -663406,7 +663444,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/tests/test_formatters.py": [
|
"tools/wptrunner/wptrunner/tests/test_formatters.py": [
|
||||||
"fc2ce5bc11161057a0fa110e6aa64a21cc0e8aad",
|
"9e354f09db38d51804e50dde357cb2fc18e9caef",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptrunner/wptrunner/tests/test_products.py": [
|
"tools/wptrunner/wptrunner/tests/test_products.py": [
|
||||||
|
@ -663778,7 +663816,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptserve/wptserve/handlers.py": [
|
"tools/wptserve/wptserve/handlers.py": [
|
||||||
"7fbe4234ea0a252aaed07182fd3bed741c147285",
|
"2dd01e29338115c1c4c6e4a35973835fe0193137",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptserve/wptserve/logger.py": [
|
"tools/wptserve/wptserve/logger.py": [
|
||||||
|
@ -663810,7 +663848,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptserve/wptserve/server.py": [
|
"tools/wptserve/wptserve/server.py": [
|
||||||
"53f093b8e3da07839b54361216d649a4f870e30d",
|
"802ae9ca9a98feddcb68077985cf4be536d72f78",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"tools/wptserve/wptserve/sslutils/__init__.py": [
|
"tools/wptserve/wptserve/sslutils/__init__.py": [
|
||||||
|
@ -666390,7 +666428,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"web-animations/animation-model/animation-types/property-list.js": [
|
"web-animations/animation-model/animation-types/property-list.js": [
|
||||||
"0f84c376721d125afd8ec64a5689069273c68a68",
|
"6ad90a356e483cbfbd94c2cb147e68417f75357e",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"web-animations/animation-model/animation-types/property-types.js": [
|
"web-animations/animation-model/animation-types/property-types.js": [
|
||||||
|
@ -668366,15 +668404,15 @@
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/get_element_rect/__init__.py": [
|
"webdriver/tests/get_element_rect/__init__.py": [
|
||||||
"abf1a91367517107b3b690466a4b570c0a3b7cab",
|
"8b137891791fe96927ad78e64b0aad7bded08bdc",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/get_element_rect/get.py": [
|
"webdriver/tests/get_element_rect/get.py": [
|
||||||
"433e2f6bf8b428136a36b81138386e62eb257daf",
|
"e3744c4bce574b5c673b767a031b3a46185e4843",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/get_element_rect/user_prompts.py": [
|
"webdriver/tests/get_element_rect/user_prompts.py": [
|
||||||
"ec1047bd3893d51f4b2be9597d87ba4a63b6a353",
|
"c51866cb8758ad03554413aecafd42c13c1bc194",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/get_element_tag_name/__init__.py": [
|
"webdriver/tests/get_element_tag_name/__init__.py": [
|
||||||
|
@ -668770,7 +668808,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/asserts.py": [
|
"webdriver/tests/support/asserts.py": [
|
||||||
"1dea6ce68779269b005061a391f7553a6741157f",
|
"67711987d4b7cf683ff4e6d1ace3ad0189b7ec91",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/defaults.py": [
|
"webdriver/tests/support/defaults.py": [
|
||||||
|
@ -668778,11 +668816,11 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/fixtures.py": [
|
"webdriver/tests/support/fixtures.py": [
|
||||||
"d16883256aca4f600400f060719d0a7ac8d16dfd",
|
"f662040e4066f14afa6a5f8c40778db23ccab29a",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/helpers.py": [
|
"webdriver/tests/support/helpers.py": [
|
||||||
"dd733809fd5a1169a433ba9bd0c2f4dd17b927a3",
|
"6c62d756259b6677bd5e77fc6b6a48def4b3b46b",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/http_request.py": [
|
"webdriver/tests/support/http_request.py": [
|
||||||
|
@ -668790,7 +668828,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/image.py": [
|
"webdriver/tests/support/image.py": [
|
||||||
"1eb3a187a43b86ffe752d4d73f6e639bdd9e96da",
|
"81dd933943f78b4bad69967c26729b70b992acb6",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/support/inline.py": [
|
"webdriver/tests/support/inline.py": [
|
||||||
|
@ -668830,27 +668868,27 @@
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_element_screenshot/__init__.py": [
|
"webdriver/tests/take_element_screenshot/__init__.py": [
|
||||||
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
|
"d289ee3b912001e63cf3a34331098ce7b7258aa6",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_element_screenshot/screenshot.py": [
|
"webdriver/tests/take_element_screenshot/screenshot.py": [
|
||||||
"e4d2869af4f3a50aa4da87b499d84b75254967a7",
|
"35a1ffe75f042b6e2a995cf980ecaa19e97590e3",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_element_screenshot/user_prompts.py": [
|
"webdriver/tests/take_element_screenshot/user_prompts.py": [
|
||||||
"fa239999e4f3479526423498f5718a455ffde53f",
|
"221eaa9363528d3fa102f9506d81bca89546e9f5",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_screenshot/__init__.py": [
|
"webdriver/tests/take_screenshot/__init__.py": [
|
||||||
"e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
|
"d38c8a0f79f81d5977d0a8dfa1a9f63e236988fb",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_screenshot/screenshot.py": [
|
"webdriver/tests/take_screenshot/screenshot.py": [
|
||||||
"d3153710f7b108f167a4ff82b9ef288bcfa9440c",
|
"07879530120dfbf8203fe8c4827d2bf36fb3eedb",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webdriver/tests/take_screenshot/user_prompts.py": [
|
"webdriver/tests/take_screenshot/user_prompts.py": [
|
||||||
"4d4840f08ba6f57f3e22bda72a0071128bea9be0",
|
"902463f22c8165628ce5fccffafdc70481300f20",
|
||||||
"wdspec"
|
"wdspec"
|
||||||
],
|
],
|
||||||
"webgl/META.yml": [
|
"webgl/META.yml": [
|
||||||
|
@ -669482,7 +669520,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCDTMFSender-ontonechange.https.html": [
|
"webrtc/RTCDTMFSender-ontonechange.https.html": [
|
||||||
"ff6d117b3c75dde71cc52b4087f223477ad08bb4",
|
"49e23abe2f4aa631e39eb66dd0b619d28e7de1a7",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCDataChannel-bufferedAmount.html": [
|
"webrtc/RTCDataChannel-bufferedAmount.html": [
|
||||||
|
@ -669646,7 +669684,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html": [
|
"webrtc/RTCPeerConnection-setRemoteDescription-replaceTrack.https.html": [
|
||||||
"6c98eae52cd4ce78765671ccbea9ebe523bde17f",
|
"4bdcddec5115c3d9c953859950854b3ec97fbbef",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCPeerConnection-setRemoteDescription-rollback.html": [
|
"webrtc/RTCPeerConnection-setRemoteDescription-rollback.html": [
|
||||||
|
@ -669753,16 +669791,16 @@
|
||||||
"1278737414c418a2b1604eae32590c0999e0d645",
|
"1278737414c418a2b1604eae32590c0999e0d645",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"webrtc/RTCRtpTransceiver-direction.html": [
|
||||||
|
"e76bc1fbb7740f7a575f0acba397284aa5d5db94",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"webrtc/RTCRtpTransceiver-setCodecPreferences.html": [
|
"webrtc/RTCRtpTransceiver-setCodecPreferences.html": [
|
||||||
"a1f7854e1a2f18036040f882889ff6758e9968c0",
|
"a1f7854e1a2f18036040f882889ff6758e9968c0",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCRtpTransceiver-setDirection.html": [
|
|
||||||
"32cbff5d98586840ab9c37a1e1e05f262560848e",
|
|
||||||
"testharness"
|
|
||||||
],
|
|
||||||
"webrtc/RTCRtpTransceiver.https.html": [
|
"webrtc/RTCRtpTransceiver.https.html": [
|
||||||
"2de9fb9f6ee4dbc555bf30ba46f21df30385dd5c",
|
"7d16deaa8c7633928b39e1ed638f26e820e1e8d8",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/RTCSctpTransport-constructor.html": [
|
"webrtc/RTCSctpTransport-constructor.html": [
|
||||||
|
@ -669806,7 +669844,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/historical.html": [
|
"webrtc/historical.html": [
|
||||||
"d49503e16d6c5de6f7ea991120e7fb2b53bbcfd5",
|
"ffa28be5bca307e6662b2d3720f97367f8c47cde",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"webrtc/idlharness.https.window.js": [
|
"webrtc/idlharness.https.window.js": [
|
||||||
|
@ -672466,7 +672504,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/basic.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/basic.html": [
|
||||||
"4ffed9193b9abedd04b76c8f4848c4d0d93f1fab",
|
"d799c8fa88a7218756c6c0b77ba0b0a13d55ade3",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_x_50_percent-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_x_50_percent-ref.html": [
|
||||||
|
@ -672474,7 +672512,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_x_50_percent.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_x_50_percent.html": [
|
||||||
"b9ef28212a4f80e67378247c75afc30c70228281",
|
"7a1c0711624cfbbc0bf4fa1a53b44265dba32cac",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_y_50_percent-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_y_50_percent-ref.html": [
|
||||||
|
@ -672482,7 +672520,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_y_50_percent.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/regionanchor_y_50_percent.html": [
|
||||||
"5067d12e6f40b40e7bcc75f809c1afb5000fbf2d",
|
"98b5fc540c635da9679de2ebaac7f1d16ad1ea94",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/scroll_up-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/scroll_up-ref.html": [
|
||||||
|
@ -672490,7 +672528,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/scroll_up.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/scroll_up.html": [
|
||||||
"e1619af932a5bef76c5fb72ef7a97e11c8851bcc",
|
"93fa0e0ec039c1044abaaf9b136b38cc12dda150",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/single_line_top_left-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/single_line_top_left-ref.html": [
|
||||||
|
@ -672498,7 +672536,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/single_line_top_left.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/single_line_top_left.html": [
|
||||||
"c2edcb9f626a0096f8cd5d95408caa8a3da0c201",
|
"3ed340b4bf4096da1cbcd44c80ab1a9e574d2a56",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/support/basic.vtt": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/support/basic.vtt": [
|
||||||
|
@ -672538,7 +672576,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_x_50_percent.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_x_50_percent.html": [
|
||||||
"85e699a262b8e03fc8592a22e6acc6dabf73b29a",
|
"69e71bf83c0bfea4457d0ef31319e187c8c11c5e",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_y_50_percent-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_y_50_percent-ref.html": [
|
||||||
|
@ -672546,7 +672584,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_y_50_percent.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/viewportanchor_y_50_percent.html": [
|
||||||
"0641b176e6f617359b8f93912dfe88eff56d1032",
|
"58f1362892d163cc8a787f01b5bab4b8d68836f4",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/width_50_percent-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/width_50_percent-ref.html": [
|
||||||
|
@ -672554,7 +672592,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/regions/width_50_percent.html": [
|
"webvtt/rendering/cues-with-video/processing-model/regions/width_50_percent.html": [
|
||||||
"4377e9b4c03b224d60d1fcd029804118346daf47",
|
"2d23d1641afaa1a7ba08e711ac5f782f6c94fc83",
|
||||||
"reftest"
|
"reftest"
|
||||||
],
|
],
|
||||||
"webvtt/rendering/cues-with-video/processing-model/repaint-ref.html": [
|
"webvtt/rendering/cues-with-video/processing-model/repaint-ref.html": [
|
||||||
|
@ -675074,7 +675112,7 @@
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"workers/modules/dedicated-worker-import-failure.html": [
|
"workers/modules/dedicated-worker-import-failure.html": [
|
||||||
"81d93322c77dd0d223ade30fed5c6b43ab8f05e0",
|
"439bea888b2bac65f5de50d47c12639fd49168a4",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
"workers/modules/dedicated-worker-import-meta.html": [
|
"workers/modules/dedicated-worker-import-meta.html": [
|
||||||
|
@ -675190,7 +675228,7 @@
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"workers/modules/resources/new-worker-window.html": [
|
"workers/modules/resources/new-worker-window.html": [
|
||||||
"5ae150725eb973ce1c2c7b54eb45669e057e8875",
|
"a7bd2eedef6ab6d639f28e063ccd50aefbbb0528",
|
||||||
"support"
|
"support"
|
||||||
],
|
],
|
||||||
"workers/modules/resources/post-message-on-load-worker.js": [
|
"workers/modules/resources/post-message-on-load-worker.js": [
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
[inheritance.html]
|
|
||||||
[Property animation-name has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-name does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-direction has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-duration does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-play-state has initial value running]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-fill-mode has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-delay has initial value 0s]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-timing-function does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-direction does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-duration has initial value 0s]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-delay does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-iteration-count does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-fill-mode does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-timing-function has initial value ease]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-play-state does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property animation-iteration-count has initial value 1]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -27,3 +27,6 @@
|
||||||
[background-size_percentage_max]
|
[background-size_percentage_max]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[background-size_auto_auto]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -323,3 +323,15 @@
|
||||||
[Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
|
[Matching font-style: 'italic' should prefer 'oblique 5deg 10deg' over 'oblique 5deg']
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Matching font-style: 'italic' should prefer 'oblique 5deg' over 'normal']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Matching font-weight: '400' should prefer '400' over '450 460']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Matching font-weight: '501' should prefer '390 410' over '300 350']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Matching font-weight: '430' should prefer '420 440' over '450 460']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
[inheritance.html]
|
|
||||||
[Property text-emphasis-style inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-emphasis-style has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-style has initial value solid]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-underline-position has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-line has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-emphasis-color has initial value rgba(2, 3, 4, 0.5)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-shadow has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-color has initial value rgba(2, 3, 4, 0.5)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-line does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-underline-position inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-emphasis-position inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-color does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-emphasis-position has initial value over right]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-decoration-style does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-shadow inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-emphasis-color inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,91 +1,7 @@
|
||||||
[inheritance.html]
|
[inheritance.html]
|
||||||
[Property white-space has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property overflow-wrap has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-align-all has initial value start]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property word-break has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-indent inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property overflow-wrap inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property word-wrap has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-justify has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property hanging-punctuation inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-transform inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property tab-size inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property letter-spacing inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-justify inherits]
|
[Property text-justify inherits]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Property word-spacing has initial value 0px]
|
[Property word-spacing has initial value 0px]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Property text-indent has initial value 0px]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property line-break inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property word-break inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property hyphens inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-align-last inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property letter-spacing has initial value normal]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property word-wrap inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property white-space inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property hyphens has initial value manual]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property hanging-punctuation has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property tab-size has initial value 8]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-align-all inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-align-last has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property line-break has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property text-transform has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property word-spacing inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,61 +1,10 @@
|
||||||
[inheritance.html]
|
[inheritance.html]
|
||||||
[Property rotate does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property scale has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property scale does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform-origin has initial value 30px 20px]
|
[Property transform-origin has initial value 30px 20px]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Property backface-visibility does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property perspective-origin has initial value 30px 20px]
|
[Property perspective-origin has initial value 30px 20px]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Property transform-box has initial value view-box]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform-style does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property translate does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property translate has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property backface-visibility has initial value visible]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property perspective-origin does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform-style has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform-box does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transform-origin does not inherit]
|
[Property transform-origin does not inherit]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Property perspective does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property rotate has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property perspective has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
[inheritance.html]
|
|
||||||
[Property transition-delay does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-property has initial value all]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-timing-function has initial value ease]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-duration has initial value 0s]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-duration does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-delay has initial value 0s]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-timing-function does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property transition-property does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1055,3 +1055,27 @@
|
||||||
[min-width length(ex) / values]
|
[min-width length(ex) / values]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(mm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(cm) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-shadow shadow(shadow) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(in) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent length(em) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[text-indent percentage(%) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,3 @@
|
||||||
[opacity end]
|
[opacity end]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[outline-width end]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
[inheritance.html]
|
|
||||||
[Property scroll-behavior has initial value auto]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property scroll-behavior does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
[inheritance.html]
|
|
||||||
[Property color-interpolation-filters has initial value linearrgb]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property flood-color does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property lighting-color does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property color-interpolation-filters inherits]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property lighting-color has initial value rgb(255, 255, 255)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property flood-opacity does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property flood-opacity has initial value 1]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property filter does not inherit]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property filter has initial value none]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Property flood-color has initial value rgb(0, 0, 0)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
[backdrop-filter-computed.html]
|
||||||
|
[Property backdrop-filter value 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)' computes to 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'contrast()' computes to 'contrast(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'grayscale(50%)' computes to 'grayscale(0.5)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'opacity(100%)' computes to 'opacity(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'invert()' computes to 'invert(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'saturate(0)' computes to 'saturate(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'invert(0)' computes to 'invert(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'hue-rotate()' computes to 'hue-rotate(0deg)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'drop-shadow(1px 2px)' computes to 'drop-shadow(rgb(0, 255, 0) 1px 2px 0px)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'brightness(0)' computes to 'brightness(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'opacity()' computes to 'opacity(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'brightness(300%)' computes to 'brightness(3)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'blur()' computes to 'blur(0px)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'sepia()' computes to 'sepia(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'grayscale()' computes to 'grayscale(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'sepia(100%)' computes to 'sepia(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'sepia(0)' computes to 'sepia(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'brightness()' computes to 'brightness(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'invert(100%)' computes to 'invert(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'saturate(300%)' computes to 'saturate(3)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'hue-rotate(90deg)' computes to 'hue-rotate(90deg)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'contrast(0)' computes to 'contrast(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'none' computes to 'none']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'contrast(300%)' computes to 'contrast(3)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)' computes to 'drop-shadow(rgb(4, 5, 6) 1px 2px 0px)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'opacity(0)' computes to 'opacity(0)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'saturate()' computes to 'saturate(1)']
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property backdrop-filter value 'blur(100px)' computes to 'blur(100px)']
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -0,0 +1,112 @@
|
||||||
|
[backdrop-filter-parsing-valid.html]
|
||||||
|
[e.style['backdrop-filter'\] = "sepia()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "hue-rotate(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "brightness(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "grayscale()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "saturate()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "invert(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "opacity(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "sepia(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "url(\\"picture.svg#f\\")" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "opacity()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "opacity(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "none" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(0 0 0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "blur()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "contrast(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "blur(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "invert(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "brightness(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(1px 2px 3px)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "hue-rotate(90deg)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(rgba(4, 5, 6, 0.75) 1px 2px 3px)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(1px 2px rgb(4, 5, 6))" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "sepia(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "grayscale(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(rgb(4, 5, 6) 1px 2px)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "blur(10px) url(\\"picture.svg#f\\") contrast(20) brightness(30)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "drop-shadow(1px 2px)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "url(\\"https://www.example.com/picture.svg#f\\")" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "saturate(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "grayscale(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "saturate(300%)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "invert()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "brightness()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "contrast()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "hue-rotate()" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "contrast(0)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[e.style['backdrop-filter'\] = "blur(100px)" should set the property value]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -509,7 +509,7 @@
|
||||||
|
|
||||||
|
|
||||||
[single-byte-decoder.html?XMLHttpRequest]
|
[single-byte-decoder.html?XMLHttpRequest]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -540,9 +540,6 @@
|
||||||
[windows-1258: cp1258 (XMLHttpRequest)]
|
[windows-1258: cp1258 (XMLHttpRequest)]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[windows-1253: x-cp1253 (XMLHttpRequest)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[windows-1256: cp1256 (XMLHttpRequest)]
|
[windows-1256: cp1256 (XMLHttpRequest)]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
@ -579,21 +576,9 @@
|
||||||
[windows-1257: x-cp1257 (XMLHttpRequest)]
|
[windows-1257: x-cp1257 (XMLHttpRequest)]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[windows-1254: cp1254 (XMLHttpRequest)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[windows-1254: iso8859-9 (XMLHttpRequest)]
|
[windows-1254: iso8859-9 (XMLHttpRequest)]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
[windows-1253: windows-1253 (XMLHttpRequest)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[windows-1253: cp1253 (XMLHttpRequest)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[windows-1254: l5 (XMLHttpRequest)]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
||||||
[windows-1254: x-cp1254 (XMLHttpRequest)]
|
[windows-1254: x-cp1254 (XMLHttpRequest)]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_1.html]
|
|
||||||
[Multiple history traversals from the same task]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[traverse_the_history_4.html]
|
||||||
|
[Multiple history traversals, last would be aborted]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
[picture: source (max-width:500px) broken image, img valid image, resize to wide]
|
[picture: source (max-width:500px) broken image, img valid image, resize to wide]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
|
[picture: source (max-width:500px) valid image, img valid image, resize to wide]
|
||||||
expected: FAIL
|
expected: TIMEOUT
|
||||||
|
|
||||||
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
|
[picture: source (max-width:500px) valid image, img broken image, resize to narrow]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -9,3 +9,6 @@
|
||||||
[document.open should throw an InvalidStateError with XML document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
|
[document.open should throw an InvalidStateError with XML document even when the ignore-opens-during-unload counter is greater than 0 (during pagehide event)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[document.open should throw an InvalidStateError with XML document even when there is an active parser executing script]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -12,3 +12,6 @@
|
||||||
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
|
[Verifies the resolution of entry.startTime is at least 5 microseconds.]
|
||||||
expected: TIMEOUT
|
expected: TIMEOUT
|
||||||
|
|
||||||
|
[Verifies the resolution of performance.now() is at least 5 microseconds.]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[no-quirks.html]
|
[quirks.html]
|
||||||
[top: -\\31 .5]
|
[top: -\\31 .5]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
[dedicated-worker-import-csp.html]
|
[dedicated-worker-import-csp.html]
|
||||||
expected: ERROR
|
expected: CRASH
|
||||||
[DedicatedWorker: CSP for ES Modules]
|
[DedicatedWorker: CSP for ES Modules]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
[dedicated-worker-import-failure.html]
|
[dedicated-worker-import-failure.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
expected: ERROR
|
|
||||||
[DedicatedWorker: import failure]
|
[DedicatedWorker: import failure]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
[005.html]
|
[005.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
|
expected: ERROR
|
||||||
[dedicated worker in shared worker in dedicated worker]
|
[dedicated worker in shared worker in dedicated worker]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@
|
||||||
# macOS. Documentation to help understand this setup:
|
# macOS. Documentation to help understand this setup:
|
||||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/yaml-schema
|
||||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables
|
||||||
|
#
|
||||||
|
# In addition to this configuration file, the "Build pull requests from forks
|
||||||
|
# of this repository" setting must also be enabled in the Azure DevOps project:
|
||||||
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks
|
||||||
|
|
||||||
trigger: none # disable builds for branches
|
trigger: none # disable builds for branches
|
||||||
|
|
||||||
|
|
|
@ -125,7 +125,7 @@ tasks:
|
||||||
owner: ${event.pull_request.user.login}@users.noreply.github.com
|
owner: ${event.pull_request.user.login}@users.noreply.github.com
|
||||||
source: ${event.repository.url}
|
source: ${event.repository.url}
|
||||||
payload:
|
payload:
|
||||||
image: jugglinmike/web-platform-tests:0.21
|
image: harjgam/web-platform-tests:0.22
|
||||||
maxRunTime: 7200
|
maxRunTime: 7200
|
||||||
artifacts:
|
artifacts:
|
||||||
public/results:
|
public/results:
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
importScripts('/resources/testharness.js');
|
||||||
importScripts('sw-helpers.js');
|
importScripts('sw-helpers.js');
|
||||||
|
|
||||||
async function updateUI(event) {
|
async function updateUI(event) {
|
||||||
|
@ -13,10 +14,20 @@ async function updateUI(event) {
|
||||||
|
|
||||||
return Promise.all(updateParams.map(param => event.updateUI(param)))
|
return Promise.all(updateParams.map(param => event.updateUI(param)))
|
||||||
.then(() => 'update success')
|
.then(() => 'update success')
|
||||||
.catch(e => e.message);
|
.catch(e => e.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
self.addEventListener('backgroundfetchsuccess', event => {
|
self.addEventListener('backgroundfetchsuccess', event => {
|
||||||
|
if (event.registration.id === 'update-inactive') {
|
||||||
|
// Post an async task before calling updateUI from the inactive event.
|
||||||
|
// Any async behaviour outside `waitUntil` should mark the event as
|
||||||
|
// inactive, and subsequent calls to `updateUI` should fail.
|
||||||
|
new Promise(r => step_timeout(r, 0))
|
||||||
|
.then(() => event.updateUI({ title: 'New title' }))
|
||||||
|
.catch(e => sendMessageToDocument({ update: e.name }));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
event.waitUntil(updateUI(event)
|
event.waitUntil(updateUI(event)
|
||||||
.then(update => sendMessageToDocument({ type: event.type, update })))
|
.then(update => sendMessageToDocument({ update })));
|
||||||
});
|
});
|
||||||
|
|
|
@ -27,6 +27,17 @@ backgroundFetchTest(async (test, backgroundFetch) => {
|
||||||
assert_equals(registration.id, registrationId);
|
assert_equals(registration.id, registrationId);
|
||||||
|
|
||||||
const message = await getMessageFromServiceWorker();
|
const message = await getMessageFromServiceWorker();
|
||||||
assert_equals(message.update, 'updateUI may only be called once.');
|
assert_equals(message.update, 'InvalidStateError');
|
||||||
|
|
||||||
}, 'Background Fetch updateUI called twice fails', swName);
|
}, 'Background Fetch updateUI called twice fails', swName);
|
||||||
|
|
||||||
|
backgroundFetchTest(async (test, backgroundFetch) => {
|
||||||
|
const registrationId = 'update-inactive';
|
||||||
|
const registration =
|
||||||
|
await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt');
|
||||||
|
assert_equals(registration.id, registrationId);
|
||||||
|
|
||||||
|
const message = await getMessageFromServiceWorker();
|
||||||
|
assert_equals(message.update, 'InvalidStateError');
|
||||||
|
|
||||||
|
}, 'Background Fetch updateUI fails when event is not active', swName);
|
||||||
|
|
|
@ -645,7 +645,7 @@ test(t => {
|
||||||
|
|
||||||
const expected = [
|
const expected = [
|
||||||
{ offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
|
{ offset: 0, computedOffset: 0, easing: "ease", composite: "auto",
|
||||||
backgroundSize: "auto auto" },
|
backgroundSize: "auto" },
|
||||||
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
|
{ offset: 1, computedOffset: 1, easing: "ease", composite: "auto",
|
||||||
backgroundSize: "50% auto, 6px auto, contain" },
|
backgroundSize: "50% auto, 6px auto, contain" },
|
||||||
];
|
];
|
||||||
|
@ -657,7 +657,7 @@ test(t => {
|
||||||
// Test inheriting a background-size value
|
// Test inheriting a background-size value
|
||||||
|
|
||||||
expected[0].backgroundSize = div.style.backgroundSize =
|
expected[0].backgroundSize = div.style.backgroundSize =
|
||||||
"30px auto, 40% auto, auto auto";
|
"30px auto, 40% auto, auto";
|
||||||
frames = getKeyframes(div);
|
frames = getKeyframes(div);
|
||||||
|
|
||||||
for (let i = 0; i < frames.length; i++) {
|
for (let i = 0; i < frames.length; i++) {
|
||||||
|
|
|
@ -81,7 +81,7 @@
|
||||||
document.getElementById("test").style.backgroundSize = "auto auto";
|
document.getElementById("test").style.backgroundSize = "auto auto";
|
||||||
test(function() {
|
test(function() {
|
||||||
assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"),
|
assert_equals(getComputedStyle(document.getElementById("test"), null).getPropertyValue("background-size"),
|
||||||
"auto auto", "background-size supporting value");
|
"auto", "background-size supporting value");
|
||||||
}, "background-size_auto_auto");
|
}, "background-size_auto_auto");
|
||||||
|
|
||||||
document.getElementById("test").style.backgroundSize = "auto 15px";
|
document.getElementById("test").style.backgroundSize = "auto 15px";
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Filter Effects Module Level 2: getComputedValue().backdropFilter</title>
|
||||||
|
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
|
||||||
|
<meta name="assert" content="backdrop-filter supports omitted arguments'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/computed-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<style>
|
||||||
|
#target {
|
||||||
|
color: lime;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id="target"></div>
|
||||||
|
<script>
|
||||||
|
test_computed_value("backdrop-filter", "none");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "blur(100px)");
|
||||||
|
test_computed_value("backdrop-filter", "blur()", "blur(0px)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "brightness(0)");
|
||||||
|
test_computed_value("backdrop-filter", "brightness(300%)", "brightness(3)");
|
||||||
|
test_computed_value("backdrop-filter", "brightness()", "brightness(0)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "contrast(0)");
|
||||||
|
test_computed_value("backdrop-filter", "contrast(300%)", "contrast(3)");
|
||||||
|
test_computed_value("backdrop-filter", "contrast()", "contrast(1)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "drop-shadow(1px 2px)", "drop-shadow(rgb(0, 255, 0) 1px 2px 0px)");
|
||||||
|
test_computed_value("backdrop-filter", "drop-shadow(rgb(4, 5, 6) 1px 2px 0px)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "grayscale(50%)", "grayscale(0.5)");
|
||||||
|
test_computed_value("backdrop-filter", "grayscale()", "grayscale(1)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "hue-rotate(90deg)");
|
||||||
|
test_computed_value("backdrop-filter", "hue-rotate()", "hue-rotate(0deg)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "invert(0)");
|
||||||
|
test_computed_value("backdrop-filter", "invert(100%)", "invert(1)");
|
||||||
|
test_computed_value("backdrop-filter", "invert()", "invert(0)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "opacity(0)");
|
||||||
|
test_computed_value("backdrop-filter", "opacity(100%)", "opacity(1)");
|
||||||
|
test_computed_value("backdrop-filter", "opacity()", "opacity(1)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "saturate(0)");
|
||||||
|
test_computed_value("backdrop-filter", "saturate(300%)", "saturate(3)");
|
||||||
|
test_computed_value("backdrop-filter", "saturate()", "saturate(1)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", "sepia(0)");
|
||||||
|
test_computed_value("backdrop-filter", "sepia(100%)", "sepia(1)");
|
||||||
|
test_computed_value("backdrop-filter", "sepia()", "sepia(1)");
|
||||||
|
|
||||||
|
test_computed_value("backdrop-filter", 'blur(10px) url("https://www.example.com/picture.svg#f") contrast(20) brightness(30)');
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,54 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Filter Effects Module Level 2: parsing backdrop-filter with invalid values</title>
|
||||||
|
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
|
||||||
|
<meta name="assert" content="backdrop-filter supports only the grammar 'none | <backdrop-filter-function-list>'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
// Edge fails: expected "" but got "none"
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "auto");
|
||||||
|
test_invalid_value("backdrop-filter", "none hue-rotate(0deg)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "blur(10)");
|
||||||
|
test_invalid_value("backdrop-filter", "blur(-100px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "brightness(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "brightness(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "contrast(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "contrast(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow(10 20)");
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow(10% 20%)");
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow(1px)");
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow(1px 2px 3px 4px)");
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow(rgb(4, 5, 6))");
|
||||||
|
test_invalid_value("backdrop-filter", "drop-shadow()");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "grayscale(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "grayscale(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "hue-rotate(90)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "invert(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "invert(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "opacity(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "opacity(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "saturate(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "saturate(30px)");
|
||||||
|
|
||||||
|
test_invalid_value("backdrop-filter", "sepia(-20)");
|
||||||
|
test_invalid_value("backdrop-filter", "sepia(30px)");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,67 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Filter Effects Module Level 2: parsing backdrop-filter with valid values</title>
|
||||||
|
<link rel="author" title="Eric Willigers" href="mailto:ericwilligers@chromium.org">
|
||||||
|
<link rel="help" href="https://drafts.fxtf.org/filter-effects-2/#BackdropFilterProperty">
|
||||||
|
<meta name="assert" content="backdrop-filter supports the full grammar 'none | <backdrop-filter-function-list>'.">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/css/support/parsing-testcommon.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
test_valid_value("backdrop-filter", "none");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "blur(100px)");
|
||||||
|
test_valid_value("backdrop-filter", "blur(0)", "blur(0px)");
|
||||||
|
test_valid_value("backdrop-filter", "blur()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "brightness(0)");
|
||||||
|
test_valid_value("backdrop-filter", "brightness(300%)");
|
||||||
|
test_valid_value("backdrop-filter", "brightness()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "contrast(0)");
|
||||||
|
test_valid_value("backdrop-filter", "contrast(300%)");
|
||||||
|
test_valid_value("backdrop-filter", "contrast()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(1px 2px)");
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(1px 2px 3px)");
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(0 0 0)", "drop-shadow(0px 0px 0px)");
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(rgb(4, 5, 6) 1px 2px)");
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(1px 2px rgb(4, 5, 6))", "drop-shadow(rgb(4, 5, 6) 1px 2px)");
|
||||||
|
test_valid_value("backdrop-filter", "drop-shadow(rgba(4, 5, 6, 0.75) 1px 2px 3px)");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "grayscale(0)");
|
||||||
|
test_valid_value("backdrop-filter", "grayscale(300%)", "grayscale(100%)");
|
||||||
|
test_valid_value("backdrop-filter", "grayscale()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "hue-rotate(90deg)");
|
||||||
|
test_valid_value("backdrop-filter", "hue-rotate(0)", "hue-rotate(0deg)");
|
||||||
|
test_valid_value("backdrop-filter", "hue-rotate()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "invert(0)");
|
||||||
|
test_valid_value("backdrop-filter", "invert(300%)", "invert(100%)");
|
||||||
|
test_valid_value("backdrop-filter", "invert()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "opacity(0)");
|
||||||
|
test_valid_value("backdrop-filter", "opacity(300%)", "opacity(100%)");
|
||||||
|
test_valid_value("backdrop-filter", "opacity()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "saturate(0)");
|
||||||
|
test_valid_value("backdrop-filter", "saturate(300%)");
|
||||||
|
test_valid_value("backdrop-filter", "saturate()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", "sepia(0)");
|
||||||
|
test_valid_value("backdrop-filter", "sepia(300%)", "sepia(100%)");
|
||||||
|
test_valid_value("backdrop-filter", "sepia()");
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", 'url("picture.svg#f")');
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", 'url("https://www.example.com/picture.svg#f")');
|
||||||
|
|
||||||
|
test_valid_value("backdrop-filter", 'blur(10px) url("picture.svg#f") contrast(20) brightness(30)');
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -1,7 +1,10 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
function assert_initial(property, initial) {
|
function assert_initial(property, initial) {
|
||||||
test(() => {
|
test(() => {
|
||||||
|
const target = document.getElementById('target');
|
||||||
if (!getComputedStyle(target)[property])
|
if (!getComputedStyle(target)[property])
|
||||||
return;
|
return;
|
||||||
target.style[property] = 'initial';
|
target.style[property] = 'initial';
|
||||||
|
@ -13,6 +16,8 @@ function assert_initial(property, initial) {
|
||||||
/**
|
/**
|
||||||
* Create tests that a CSS property inherits and has the given initial value.
|
* Create tests that a CSS property inherits and has the given initial value.
|
||||||
*
|
*
|
||||||
|
* The current document must have an element #target within element #container.
|
||||||
|
*
|
||||||
* @param {string} property The name of the CSS property being tested.
|
* @param {string} property The name of the CSS property being tested.
|
||||||
* @param {string} initial The computed value for 'initial'.
|
* @param {string} initial The computed value for 'initial'.
|
||||||
* @param {string} other An arbitrary value for the property that round
|
* @param {string} other An arbitrary value for the property that round
|
||||||
|
@ -22,6 +27,8 @@ function assert_inherited(property, initial, other) {
|
||||||
assert_initial(property, initial);
|
assert_initial(property, initial);
|
||||||
|
|
||||||
test(() => {
|
test(() => {
|
||||||
|
const container = document.getElementById('container');
|
||||||
|
const target = document.getElementById('target');
|
||||||
if (!getComputedStyle(target)[property])
|
if (!getComputedStyle(target)[property])
|
||||||
return;
|
return;
|
||||||
container.style[property] = 'initial';
|
container.style[property] = 'initial';
|
||||||
|
@ -45,6 +52,8 @@ function assert_inherited(property, initial, other) {
|
||||||
* Create tests that a CSS property does not inherit, and that it has the
|
* Create tests that a CSS property does not inherit, and that it has the
|
||||||
* given initial value.
|
* given initial value.
|
||||||
*
|
*
|
||||||
|
* The current document must have an element #target within element #container.
|
||||||
|
*
|
||||||
* @param {string} property The name of the CSS property being tested.
|
* @param {string} property The name of the CSS property being tested.
|
||||||
* @param {string} initial The computed value for 'initial'.
|
* @param {string} initial The computed value for 'initial'.
|
||||||
* @param {string} other An arbitrary value for the property that round
|
* @param {string} other An arbitrary value for the property that round
|
||||||
|
@ -54,6 +63,8 @@ function assert_not_inherited(property, initial, other) {
|
||||||
assert_initial(property, initial);
|
assert_initial(property, initial);
|
||||||
|
|
||||||
test(() => {
|
test(() => {
|
||||||
|
const container = document.getElementById('container');
|
||||||
|
const target = document.getElementById('target');
|
||||||
if (!getComputedStyle(target)[property])
|
if (!getComputedStyle(target)[property])
|
||||||
return;
|
return;
|
||||||
container.style[property] = 'initial';
|
container.style[property] = 'initial';
|
||||||
|
@ -69,3 +80,7 @@ function assert_not_inherited(property, initial, other) {
|
||||||
target.style[property] = '';
|
target.style[property] = '';
|
||||||
}, 'Property ' + property + ' does not inherit');
|
}, 'Property ' + property + ' does not inherit');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window.assert_inherited = assert_inherited;
|
||||||
|
window.assert_not_inherited = assert_not_inherited;
|
||||||
|
})();
|
||||||
|
|
|
@ -10,14 +10,12 @@ function test_valid_value(property, value, serializedValue) {
|
||||||
var stringifiedValue = JSON.stringify(value);
|
var stringifiedValue = JSON.stringify(value);
|
||||||
|
|
||||||
test(function(){
|
test(function(){
|
||||||
var div = document.createElement('div');
|
var div = document.getElementById('target') || document.createElement('div');
|
||||||
div.style[property] = value;
|
div.style[property] = "";
|
||||||
assert_not_equals(div.style.getPropertyValue(property), "", "property should be set");
|
|
||||||
|
|
||||||
var div = document.createElement('div');
|
|
||||||
div.style[property] = value;
|
div.style[property] = value;
|
||||||
var readValue = div.style.getPropertyValue(property);
|
var readValue = div.style.getPropertyValue(property);
|
||||||
if (serializedValue instanceof Array)
|
assert_not_equals(readValue, "", "property should be set");
|
||||||
|
if (Array.isArray(serializedValue))
|
||||||
assert_in_array(readValue, serializedValue, "serialization should be sound");
|
assert_in_array(readValue, serializedValue, "serialization should be sound");
|
||||||
else
|
else
|
||||||
assert_equals(readValue, serializedValue, "serialization should be canonical");
|
assert_equals(readValue, serializedValue, "serialization should be canonical");
|
||||||
|
@ -32,7 +30,8 @@ function test_invalid_value(property, value) {
|
||||||
var stringifiedValue = JSON.stringify(value);
|
var stringifiedValue = JSON.stringify(value);
|
||||||
|
|
||||||
test(function(){
|
test(function(){
|
||||||
var div = document.createElement('div');
|
var div = document.getElementById('target') || document.createElement('div');
|
||||||
|
div.style[property] = "";
|
||||||
div.style[property] = value;
|
div.style[property] = value;
|
||||||
assert_equals(div.style.getPropertyValue(property), "");
|
assert_equals(div.style.getPropertyValue(property), "");
|
||||||
}, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value");
|
}, "e.style['" + property + "'] = " + stringifiedValue + " should not set the property value");
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
# <shape-box> only
|
# <shape-box> only
|
||||||
== shape-outside-margin-box-001.html shape-outside-margin-box-001-ref.html
|
== shape-outside-margin-box-001.html shape-outside-margin-box-001-ref.html
|
||||||
== shape-outside-margin-box-002.html shape-outside-margin-box-002-ref.html
|
== shape-outside-margin-box-002.html shape-outside-margin-box-002-ref.html
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: compare individual transform with transform functions</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<meta name="assert" content="Tests whether individaul transform works correctlyi by compare the rendering result with transfrom functions of the 'transform' property."/>
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
}
|
|
||||||
.row_1 {
|
|
||||||
top: 100px;
|
|
||||||
}
|
|
||||||
.scale_1{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 100px;
|
|
||||||
transform: scaleX(2);
|
|
||||||
}
|
|
||||||
.translate_1 {
|
|
||||||
left: 150px;
|
|
||||||
transform: translateX(150px);
|
|
||||||
}
|
|
||||||
.rotate_1 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
transform: rotate(90deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.row_2 {
|
|
||||||
top: 250px;
|
|
||||||
}
|
|
||||||
.scale_2{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
transform: scale(2, 2);
|
|
||||||
}
|
|
||||||
.translate_2 {
|
|
||||||
left: 150px;
|
|
||||||
top: 200px;
|
|
||||||
transform: translate(150px, 50px);
|
|
||||||
}
|
|
||||||
.rotate_2 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
transform: rotate3d(0, 0, 1, 90deg);
|
|
||||||
}
|
|
||||||
.row_3 {
|
|
||||||
transform: perspective(500px);
|
|
||||||
top: 400px;
|
|
||||||
}
|
|
||||||
.scale_3{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
transform: scale3d(2, 2, 2);
|
|
||||||
}
|
|
||||||
.translate_3 {
|
|
||||||
left: 150px;
|
|
||||||
transform: translate3d(150px, 10px, 10px);
|
|
||||||
}
|
|
||||||
.rotate_3 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
transform: rotate3d(0, 1, 0, 45deg);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="scale_1 row_1"></div>
|
|
||||||
<div class="translate_1 row_1"></div>
|
|
||||||
<div class="rotate_1 row_1"></div>
|
|
||||||
<div class="scale_2 row_2"></div>
|
|
||||||
<div class="translate_2 row_2"></div>
|
|
||||||
<div class="rotate_2 row_2"></div>
|
|
||||||
<div class="scale_3 row_3"></div>
|
|
||||||
<div class="translate_3 row_3"></div>
|
|
||||||
<div class="rotate_3 row_3"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,100 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: compare individual transform with transform functions</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<meta name="assert" content="Tests whether individaul transform works correctlyi by compare the rendering result with transfrom functions of the 'transform' property."/>
|
|
||||||
<link rel="match" href="individual-transform-1-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
}
|
|
||||||
.row_1 {
|
|
||||||
top: 100px;
|
|
||||||
}
|
|
||||||
.scale_1{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 100px;
|
|
||||||
/* test 'scale: <number>' */
|
|
||||||
scale: 2;
|
|
||||||
}
|
|
||||||
.translate_1 {
|
|
||||||
left: 150px;
|
|
||||||
/* test 'translate: <length-percentage>' */
|
|
||||||
translate: 150px;
|
|
||||||
}
|
|
||||||
.rotate_1 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
/* test 'rota: te<angle>' */
|
|
||||||
rotate: 90deg;
|
|
||||||
}
|
|
||||||
|
|
||||||
.row_2 {
|
|
||||||
top: 250px;
|
|
||||||
}
|
|
||||||
.scale_2{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
/* test 'scale: <number>{2}'' */
|
|
||||||
scale: 2 2;
|
|
||||||
}
|
|
||||||
.translate_2 {
|
|
||||||
left: 150px;
|
|
||||||
top: 200px;
|
|
||||||
/* test 'translate: <length-percentage><length-percentage>' */
|
|
||||||
translate: 150px 50px;
|
|
||||||
}
|
|
||||||
.rotate_2 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
/* test 'rotate: <number>{3}<angle>'*/
|
|
||||||
rotate: 0 0 1 90deg;
|
|
||||||
}
|
|
||||||
.row_3 {
|
|
||||||
transform: perspective(500px);
|
|
||||||
top: 400px;
|
|
||||||
}
|
|
||||||
.scale_3{
|
|
||||||
left: 100px;
|
|
||||||
width: 50px;
|
|
||||||
height: 50px;
|
|
||||||
/* test 'scale: <number>{3}'' */
|
|
||||||
scale: 2 2 2;
|
|
||||||
}
|
|
||||||
.translate_3 {
|
|
||||||
left: 150px;
|
|
||||||
/* test 'translate: <length-percentage><length>' */
|
|
||||||
translate: 150px 10px 10px;
|
|
||||||
}
|
|
||||||
.rotate_3 {
|
|
||||||
left: 450px;
|
|
||||||
transform-origin: 50% 50%;
|
|
||||||
/* test 'rotate: <number>{3}<angle>'*/
|
|
||||||
rotate: 0 1 0 45deg;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="scale_1 row_1"></div>
|
|
||||||
<div class="translate_1 row_1"></div>
|
|
||||||
<div class="rotate_1 row_1"></div>
|
|
||||||
<div class="scale_2 row_2"></div>
|
|
||||||
<div class="translate_2 row_2"></div>
|
|
||||||
<div class="rotate_2 row_2"></div>
|
|
||||||
<div class="scale_3 row_3"></div>
|
|
||||||
<div class="translate_3 row_3"></div>
|
|
||||||
<div class="rotate_3 row_3"></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,30 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
transform: translate(50px, 50px) rotate(45deg) scale(2, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,32 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<link rel="match" href="individual-transform-2-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
translate: 50px 50px;
|
|
||||||
rotate: 45deg;
|
|
||||||
scale: 2 2;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,32 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<link rel="match" href="individual-transform-2-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
rotate: 45deg;
|
|
||||||
scale: 2 2;
|
|
||||||
translate: 50px 50px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,32 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<link rel="match" href="individual-transform-2-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
translate: 50px 50px;
|
|
||||||
rotate: 45deg;
|
|
||||||
transform: scale(2, 2);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,31 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<link rel="match" href="individual-transform-2-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
translate: 50px 50px;
|
|
||||||
transform: rotate(45deg) scale(2, 2);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,31 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Individual transform: combine individual transform properties</title>
|
|
||||||
<link rel="author" title="CJ Ku" href="mailto:cku@mozilla.com">
|
|
||||||
<link rel="author" title="Mozilla" href="https://www.mozilla.org">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#individual-transforms">
|
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-transforms-2/#ctm">
|
|
||||||
<meta name="assert" content="Tests that we combine transforms in the correct order."/>
|
|
||||||
<link rel="match" href="individual-transform-2-ref.html">
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
position: fixed;
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
top: 200px;
|
|
||||||
left: 200px;
|
|
||||||
transform-origin: 0 0;
|
|
||||||
border-style: solid;
|
|
||||||
border-width: 10px 0px 10px 0px;
|
|
||||||
border-color: lime;
|
|
||||||
translate: 0px 50px;
|
|
||||||
transform: translateX(50px) rotate(45deg) scale(2, 2);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div></div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -5,10 +5,3 @@
|
||||||
== perspective-zero.html reference/green.html
|
== perspective-zero.html reference/green.html
|
||||||
== perspective-zero-2.html perspective-zero-2-ref.html
|
== perspective-zero-2.html perspective-zero-2-ref.html
|
||||||
== perspective-untransformable-no-stacking-context.html perspective-untransformable-no-stacking-context-ref.html
|
== perspective-untransformable-no-stacking-context.html perspective-untransformable-no-stacking-context-ref.html
|
||||||
|
|
||||||
== individual-transform-1.html individual-transform-1-ref.html
|
|
||||||
== individual-transform-2a.html individual-transform-2-ref.html
|
|
||||||
== individual-transform-2b.html individual-transform-2-ref.html
|
|
||||||
== individual-transform-2c.html individual-transform-2-ref.html
|
|
||||||
== individual-transform-2d.html individual-transform-2-ref.html
|
|
||||||
== individual-transform-2e.html individual-transform-2-ref.html
|
|
||||||
|
|
|
@ -9,6 +9,12 @@ To run Safari on macOS, some manual setup is required:
|
||||||
* Allow pop-up windows:
|
* Allow pop-up windows:
|
||||||
`defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1`
|
`defaults write com.apple.Safari WebKitJavaScriptCanOpenWindowsAutomatically 1`
|
||||||
|
|
||||||
|
* Turn on experimental features that are "off" by default:
|
||||||
|
|
||||||
|
* `defaults write com.apple.Safari ExperimentalServerTimingEnabled -bool true`
|
||||||
|
|
||||||
|
[//]: # (TODO\(cvazac\) Remove this if/when Server-Timing is enabled by default in Safari)
|
||||||
|
|
||||||
* Trust the certificate:
|
* Trust the certificate:
|
||||||
`security add-trusted-cert -k "$(security default-keychain | cut -d\" -f2)" tools/certs/cacert.pem`
|
`security add-trusted-cert -k "$(security default-keychain | cut -d\" -f2)" tools/certs/cacert.pem`
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
<script src=/feature-policy/resources/featurepolicy.js></script>
|
<script src=/feature-policy/resources/featurepolicy.js></script>
|
||||||
<!-- Feature-Policy: fullscreen *; -->
|
<!-- Feature-Policy: fullscreen *; -->
|
||||||
<script>
|
<script>
|
||||||
|
@ -143,3 +147,4 @@
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
<script src=/feature-policy/resources/featurepolicy.js></script>
|
<script src=/feature-policy/resources/featurepolicy.js></script>
|
||||||
<!-- Feature-Policy: fullscreen 'self'; -->
|
<!-- Feature-Policy: fullscreen 'self'; -->
|
||||||
<script>
|
<script>
|
||||||
|
@ -177,3 +181,4 @@
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
<script src=/feature-policy/resources/featurepolicy.js></script>
|
<script src=/feature-policy/resources/featurepolicy.js></script>
|
||||||
<!-- Feature-Policy: fullscreen 'self' cross_origin https://www.example.com; -->
|
<!-- Feature-Policy: fullscreen 'self' cross_origin https://www.example.com; -->
|
||||||
<script>
|
<script>
|
||||||
|
@ -184,3 +188,4 @@
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<body>
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta name="timeout" content="long">
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
<script src=/feature-policy/resources/featurepolicy.js></script>
|
<script src=/feature-policy/resources/featurepolicy.js></script>
|
||||||
<!-- Feature-Policy: fullscreen 'none'; -->
|
<!-- Feature-Policy: fullscreen 'none'; -->
|
||||||
<script>
|
<script>
|
||||||
|
@ -143,3 +147,4 @@
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
</html>
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<script src="/common/PrefixedPostMessage.js"></script>
|
<script src="/common/PrefixedPostMessage.js"></script>
|
||||||
<script>
|
<script>
|
||||||
var prefixedMessage = new PrefixedMessageResource();
|
var prefixedMessage = new PrefixedMessageResource();
|
||||||
var max = 50, attempts = 0;
|
var max = 150, attempts = 0;
|
||||||
function sendCoordinates() {
|
function sendCoordinates() {
|
||||||
// Certain windowing systems position windows asynchronously.
|
// Certain windowing systems position windows asynchronously.
|
||||||
// As a result, the window may not be positioned yet when the
|
// As a result, the window may not be positioned yet when the
|
||||||
// load event fires. To accommodate this, allow waiting up to
|
// load event fires. To accommodate this, allow waiting up to
|
||||||
// 5 seconds for positioning to take place.
|
// 15 seconds for positioning to take place.
|
||||||
if (!window.screenX && !window.screenY && ++attempts < max) {
|
if (!window.screenX && !window.screenY && ++attempts < max) {
|
||||||
setTimeout(sendCoordinates, 100);
|
setTimeout(sendCoordinates, 100);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>MediaDevices and SecureContext</title>
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
|
||||||
|
assert_false(window.isSecureContext, "This test must be run in a non secure context");
|
||||||
|
assert_false('MediaDevices' in window, "MediaDevices is not exposed");
|
||||||
|
assert_false('getUserMedia' in navigator, "getUserMedia is not exposed");
|
||||||
|
assert_false('mediaDevices' in navigator, "mediaDevices is not exposed");
|
||||||
|
|
||||||
|
done();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,52 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 50px;
|
||||||
|
border: 1px solid blue;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 1em;
|
||||||
|
height: 2em;
|
||||||
|
background: orange;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
.text-top {
|
||||||
|
vertical-align: text-top;
|
||||||
|
}
|
||||||
|
.text-bottom {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
.top {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.bottom {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<img class="text-top" src="../../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-bottom" src="../../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="top" src="../../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="bottom" src="../../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-top" src="../../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-bottom" src="../../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="top" src="../../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="bottom" src="../../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,56 @@
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text level 3 Test: letter spacing after bidi</title>
|
||||||
|
<link rel="author" href="kojii@chromium.org">
|
||||||
|
<link rel="match" href="reference/vertical-align-in-quirks-ref.html">
|
||||||
|
<meta name="assert" content="Tests some vertical-align values match in quirks and standard modes.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
font-size: 10px;
|
||||||
|
line-height: 50px;
|
||||||
|
border: 1px solid blue;
|
||||||
|
}
|
||||||
|
img {
|
||||||
|
width: 1em;
|
||||||
|
height: 2em;
|
||||||
|
background: orange;
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
.text-top {
|
||||||
|
vertical-align: text-top;
|
||||||
|
}
|
||||||
|
.text-bottom {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
}
|
||||||
|
.top {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.bottom {
|
||||||
|
vertical-align: bottom;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<div>
|
||||||
|
<img class="text-top" src="../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-bottom" src="../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="top" src="../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="bottom" src="../css/support/60x60-red.png">Y
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-top" src="../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="text-bottom" src="../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="top" src="../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<img class="bottom" src="../css/support/60x60-red.png"><span>Y</span>
|
||||||
|
</div>
|
||||||
|
</body>
|
|
@ -4,46 +4,13 @@
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="resources/test-helpers.sub.js"></script>
|
<script src="resources/test-helpers.sub.js"></script>
|
||||||
<script>
|
<script>
|
||||||
const base_url = 'resources/blank.html'; // This is out-of-scope.
|
function test_matchall(service_worker, expected, query_options) {
|
||||||
const scope = base_url + '?clients-matchAll-includeUncontrolled';
|
|
||||||
let frames = [];
|
|
||||||
|
|
||||||
// Creates 3 iframes, 2 for in-scope and 1 for out-of-scope. Returns the frame
|
|
||||||
// opened for scope + '#2'.
|
|
||||||
async function create_iframes(scope) {
|
|
||||||
frames.push(await with_iframe(base_url));
|
|
||||||
frames.push(await with_iframe(scope + '#1'));
|
|
||||||
frames.push(await with_iframe(scope + '#2'));
|
|
||||||
return frames[2];
|
|
||||||
}
|
|
||||||
|
|
||||||
const expected_without_include_uncontrolled = [
|
|
||||||
// visibilityState, focused, url, type, frameType
|
|
||||||
['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
|
|
||||||
['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested']
|
|
||||||
];
|
|
||||||
|
|
||||||
const expected_with_include_uncontrolled = [
|
|
||||||
// visibilityState, focused, url, type, frameType
|
|
||||||
['visible', true, location.href, 'window', 'top-level'],
|
|
||||||
['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
|
|
||||||
['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested'],
|
|
||||||
['visible', false, new URL(base_url, location).toString(), 'window', 'nested']
|
|
||||||
];
|
|
||||||
|
|
||||||
function test_matchall(frame, expected, query_options) {
|
|
||||||
// Make sure we have focus for '#2' frame and its parent window.
|
|
||||||
frame.focus();
|
|
||||||
frame.contentWindow.focus();
|
|
||||||
expected.sort((a, b) => a[2] > b[2] ? 1 : -1);
|
expected.sort((a, b) => a[2] > b[2] ? 1 : -1);
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const channel = new MessageChannel();
|
const channel = new MessageChannel();
|
||||||
channel.port1.onmessage = e => {
|
channel.port1.onmessage = e => {
|
||||||
// Ignore hidden clients which may be coming from background tabs, or
|
|
||||||
// clients unrelated to this test.
|
|
||||||
const data = e.data.filter(info => {
|
const data = e.data.filter(info => {
|
||||||
return info[0] == 'visible' &&
|
return info[2].indexOf('clients-matchall') > -1;
|
||||||
info[2].indexOf('service-worker') > -1;
|
|
||||||
});
|
});
|
||||||
data.sort((a, b) => a[2] > b[2] ? 1 : -1);
|
data.sort((a, b) => a[2] > b[2] ? 1 : -1);
|
||||||
assert_equals(data.length, expected.length);
|
assert_equals(data.length, expected.length);
|
||||||
|
@ -51,9 +18,8 @@ function test_matchall(frame, expected, query_options) {
|
||||||
assert_array_equals(data[i], expected[i]);
|
assert_array_equals(data[i], expected[i]);
|
||||||
resolve();
|
resolve();
|
||||||
};
|
};
|
||||||
frame.contentWindow.navigator.serviceWorker.controller.postMessage(
|
service_worker.postMessage({port:channel.port2, options:query_options},
|
||||||
{port:channel.port2, options:query_options},
|
[channel.port2]);
|
||||||
[channel.port2]);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,14 +27,91 @@ function test_matchall(frame, expected, query_options) {
|
||||||
// (We want to run the two tests sequentially in the same promise_test
|
// (We want to run the two tests sequentially in the same promise_test
|
||||||
// so that we can use the same set of iframes without intefering each other.
|
// so that we can use the same set of iframes without intefering each other.
|
||||||
promise_test(async t => {
|
promise_test(async t => {
|
||||||
|
// |base_url| is out-of-scope.
|
||||||
|
const base_url = 'resources/blank.html?clients-matchall';
|
||||||
|
const scope = base_url + '-includeUncontrolled';
|
||||||
|
|
||||||
const registration =
|
const registration =
|
||||||
await service_worker_unregister_and_register(
|
await service_worker_unregister_and_register(
|
||||||
t, 'resources/clients-matchall-worker.js', scope);
|
t, 'resources/clients-matchall-worker.js', scope);
|
||||||
t.add_cleanup(() => service_worker_unregister(t, scope));
|
t.add_cleanup(() => service_worker_unregister(t, scope));
|
||||||
await wait_for_state(t, registration.installing, 'activated');
|
const service_worker = registration.installing;
|
||||||
const frame = await create_iframes(scope);
|
await wait_for_state(t, service_worker, 'activated');
|
||||||
await test_matchall(frame, expected_without_include_uncontrolled);
|
|
||||||
await test_matchall(frame, expected_with_include_uncontrolled,
|
// Creates 3 iframes, 2 for in-scope and 1 for out-of-scope.
|
||||||
{includeUncontrolled:true});
|
let frames = [];
|
||||||
}, 'Verify matchAll() respect includeUncontrolled');
|
frames.push(await with_iframe(base_url));
|
||||||
|
frames.push(await with_iframe(scope + '#1'));
|
||||||
|
frames.push(await with_iframe(scope + '#2'));
|
||||||
|
|
||||||
|
// Make sure we have focus for '#2' frame and its parent window.
|
||||||
|
frames[2].focus();
|
||||||
|
frames[2].contentWindow.focus();
|
||||||
|
|
||||||
|
const expected_without_include_uncontrolled = [
|
||||||
|
// visibilityState, focused, url, type, frameType
|
||||||
|
['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
|
||||||
|
['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested']
|
||||||
|
];
|
||||||
|
const expected_with_include_uncontrolled = [
|
||||||
|
// visibilityState, focused, url, type, frameType
|
||||||
|
['visible', true, location.href, 'window', 'top-level'],
|
||||||
|
['visible', false, new URL(scope + '#1', location).toString(), 'window', 'nested'],
|
||||||
|
['visible', true, new URL(scope + '#2', location).toString(), 'window', 'nested'],
|
||||||
|
['visible', false, new URL(base_url, location).toString(), 'window', 'nested']
|
||||||
|
];
|
||||||
|
|
||||||
|
await test_matchall(service_worker, expected_without_include_uncontrolled);
|
||||||
|
await test_matchall(service_worker, expected_with_include_uncontrolled,
|
||||||
|
{ includeUncontrolled: true });
|
||||||
|
}, 'Verify matchAll() with windows respect includeUncontrolled');
|
||||||
|
|
||||||
|
// TODO: Add tests for clients.matchAll for dedicated workers.
|
||||||
|
|
||||||
|
async function create_shared_worker(script_url) {
|
||||||
|
const shared_worker = new SharedWorker(script_url);
|
||||||
|
const msgEvent = await new Promise(r => shared_worker.port.onmessage = r);
|
||||||
|
assert_equals(msgEvent.data, 'started');
|
||||||
|
return shared_worker;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Run clients.matchAll for shared workers without and with
|
||||||
|
// includeUncontrolled=true.
|
||||||
|
promise_test(async t => {
|
||||||
|
const script_url = 'resources/clients-matchall-client-types-shared-worker.js';
|
||||||
|
const uncontrolled_script_url =
|
||||||
|
new URL(script_url + '?uncontrolled', location).toString();
|
||||||
|
const controlled_script_url =
|
||||||
|
new URL(script_url + '?controlled', location).toString();
|
||||||
|
|
||||||
|
// Start a shared worker that is not controlled by a service worker.
|
||||||
|
const uncontrolled_shared_worker =
|
||||||
|
await create_shared_worker(uncontrolled_script_url);
|
||||||
|
|
||||||
|
// Register a service worker.
|
||||||
|
const registration =
|
||||||
|
await service_worker_unregister_and_register(
|
||||||
|
t, 'resources/clients-matchall-worker.js', script_url);
|
||||||
|
t.add_cleanup(() => service_worker_unregister(t, script_url));
|
||||||
|
const service_worker = registration.installing;
|
||||||
|
await wait_for_state(t, service_worker, 'activated');
|
||||||
|
|
||||||
|
// Start another shared worker controlled by the service worker.
|
||||||
|
await create_shared_worker(controlled_script_url);
|
||||||
|
|
||||||
|
const expected_without_include_uncontrolled = [
|
||||||
|
// visibilityState, focused, url, type, frameType
|
||||||
|
[undefined, undefined, controlled_script_url, 'sharedworker', 'none'],
|
||||||
|
];
|
||||||
|
const expected_with_include_uncontrolled = [
|
||||||
|
// visibilityState, focused, url, type, frameType
|
||||||
|
[undefined, undefined, controlled_script_url, 'sharedworker', 'none'],
|
||||||
|
[undefined, undefined, uncontrolled_script_url, 'sharedworker', 'none'],
|
||||||
|
];
|
||||||
|
|
||||||
|
await test_matchall(service_worker, expected_without_include_uncontrolled,
|
||||||
|
{ type: 'sharedworker' });
|
||||||
|
await test_matchall(service_worker, expected_with_include_uncontrolled,
|
||||||
|
{ includeUncontrolled: true, type: 'sharedworker' });
|
||||||
|
}, 'Verify matchAll() with shared workers respect includeUncontrolled');
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>abort.js dedicated worker wrapper file</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
fetch_tests_from_worker(new Worker('abort.js'));
|
||||||
|
</script>
|
11
tests/wpt/web-platform-tests/streams/piping/abort.html
Normal file
11
tests/wpt/web-platform-tests/streams/piping/abort.html
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>abort.js browser context wrapper file</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script src="../resources/recording-streams.js"></script>
|
||||||
|
<script src="../resources/test-utils.js"></script>
|
||||||
|
|
||||||
|
<script src="abort.js"></script>
|
365
tests/wpt/web-platform-tests/streams/piping/abort.js
Normal file
365
tests/wpt/web-platform-tests/streams/piping/abort.js
Normal file
|
@ -0,0 +1,365 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
// Tests for the use of pipeTo with AbortSignal.
|
||||||
|
// There is some extra complexity to avoid timeouts in environments where abort is not implemented.
|
||||||
|
|
||||||
|
if (self.importScripts) {
|
||||||
|
self.importScripts('/resources/testharness.js');
|
||||||
|
self.importScripts('../resources/recording-streams.js');
|
||||||
|
self.importScripts('../resources/test-utils.js');
|
||||||
|
}
|
||||||
|
|
||||||
|
const error1 = new Error('error1');
|
||||||
|
error1.name = 'error1';
|
||||||
|
const error2 = new Error('error2');
|
||||||
|
error2.name = 'error2';
|
||||||
|
|
||||||
|
const errorOnPull = {
|
||||||
|
pull(controller) {
|
||||||
|
// This will cause the test to error if pipeTo abort is not implemented.
|
||||||
|
controller.error('failed to abort');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// To stop pull() being called immediately when the stream is created, we need to set highWaterMark to 0.
|
||||||
|
const hwm0 = { highWaterMark: 0 };
|
||||||
|
|
||||||
|
for (const invalidSignal of [null, 'AbortSignal', true, -1, Object.create(AbortSignal.prototype)]) {
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = recordingReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = recordingWritableStream();
|
||||||
|
return promise_rejects(t, new TypeError(), rs.pipeTo(ws, { signal: invalidSignal }), 'pipeTo should reject')
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(rs.events.length, 0, 'no ReadableStream methods should have been called');
|
||||||
|
assert_equals(ws.events.length, 0, 'no WritableStream methods should have been called');
|
||||||
|
});
|
||||||
|
}, `a signal argument '${invalidSignal}' should cause pipeTo() to reject`);
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = recordingReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject')
|
||||||
|
.then(() => Promise.all([
|
||||||
|
rs.getReader().closed,
|
||||||
|
promise_rejects(t, 'AbortError', ws.getWriter().closed, 'writer.closed should reject')
|
||||||
|
]))
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(rs.events.length, 2, 'cancel should have been called');
|
||||||
|
assert_equals(rs.events[0], 'cancel', 'first event should be cancel');
|
||||||
|
assert_equals(rs.events[1].name, 'AbortError', 'the argument to cancel should be an AbortError');
|
||||||
|
assert_equals(rs.events[1].constructor.name, 'DOMException',
|
||||||
|
'the argument to cancel should be a DOMException');
|
||||||
|
});
|
||||||
|
}, 'an aborted signal should cause the writable stream to reject with an AbortError');
|
||||||
|
|
||||||
|
promise_test(() => {
|
||||||
|
let error;
|
||||||
|
const rs = recordingReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return rs.pipeTo(ws, { signal })
|
||||||
|
.catch(e => {
|
||||||
|
error = e;
|
||||||
|
})
|
||||||
|
.then(() => Promise.all([
|
||||||
|
rs.getReader().closed,
|
||||||
|
ws.getWriter().closed.catch(e => {
|
||||||
|
assert_equals(e, error, 'the writable should be errored with the same object');
|
||||||
|
})
|
||||||
|
]))
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(rs.events.length, 2, 'cancel should have been called');
|
||||||
|
assert_equals(rs.events[0], 'cancel', 'first event should be cancel');
|
||||||
|
assert_equals(rs.events[1], error, 'the readable should be canceled with the same object');
|
||||||
|
});
|
||||||
|
}, 'all the AbortError objects should be the same object');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = recordingReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal, preventCancel: true }), 'pipeTo should reject')
|
||||||
|
.then(() => assert_equals(rs.events.length, 0, 'cancel should not be called'));
|
||||||
|
}, 'preventCancel should prevent canceling the readable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = recordingWritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal, preventAbort: true }), 'pipeTo should reject')
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(ws.events.length, 0, 'writable should not have been aborted');
|
||||||
|
return ws.getWriter().ready;
|
||||||
|
});
|
||||||
|
}, 'preventAbort should prevent aborting the readable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(controller) {
|
||||||
|
controller.enqueue('a');
|
||||||
|
controller.enqueue('b');
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
const ws = recordingWritableStream({
|
||||||
|
write() {
|
||||||
|
abortController.abort();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject')
|
||||||
|
.then(() => {
|
||||||
|
assert_equals(ws.events.length, 4, 'only chunk "a" should have been written');
|
||||||
|
assert_array_equals(ws.events.slice(0, 3), ['write', 'a', 'abort'], 'events should match');
|
||||||
|
assert_equals(ws.events[3].name, 'AbortError', 'abort reason should be an AbortError');
|
||||||
|
});
|
||||||
|
}, 'abort should prevent further reads');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let readController;
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(c) {
|
||||||
|
readController = c;
|
||||||
|
c.enqueue('a');
|
||||||
|
c.enqueue('b');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
let resolveWrite;
|
||||||
|
const writePromise = new Promise(resolve => {
|
||||||
|
resolveWrite = resolve;
|
||||||
|
});
|
||||||
|
const ws = recordingWritableStream({
|
||||||
|
write() {
|
||||||
|
return writePromise;
|
||||||
|
}
|
||||||
|
}, new CountQueuingStrategy({ highWaterMark: Infinity }));
|
||||||
|
const pipeToPromise = rs.pipeTo(ws, { signal });
|
||||||
|
return delay(0).then(() => {
|
||||||
|
abortController.abort();
|
||||||
|
readController.close(); // Make sure the test terminates when signal is not implemented.
|
||||||
|
resolveWrite();
|
||||||
|
return promise_rejects(t, 'AbortError', pipeToPromise, 'pipeTo should reject');
|
||||||
|
}).then(() => {
|
||||||
|
assert_equals(ws.events.length, 6, 'chunks "a" and "b" should have been written');
|
||||||
|
assert_array_equals(ws.events.slice(0, 5), ['write', 'a', 'write', 'b', 'abort'], 'events should match');
|
||||||
|
assert_equals(ws.events[5].name, 'AbortError', 'abort reason should be an AbortError');
|
||||||
|
});
|
||||||
|
}, 'all pending writes should complete on abort');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
controller.error('failed to abort');
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
return Promise.reject(error1);
|
||||||
|
}
|
||||||
|
}, hwm0);
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, error1, rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
}, 'a rejection from underlyingSource.cancel() should be returned by pipeTo()');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream(errorOnPull, hwm0);
|
||||||
|
const ws = new WritableStream({
|
||||||
|
abort() {
|
||||||
|
return Promise.reject(error1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, error1, rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
}, 'a rejection from underlyingSink.abort() should be returned by pipeTo()');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const events = [];
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
controller.error('failed to abort');
|
||||||
|
},
|
||||||
|
cancel() {
|
||||||
|
events.push('cancel');
|
||||||
|
return Promise.reject(error1);
|
||||||
|
}
|
||||||
|
}, hwm0);
|
||||||
|
const ws = new WritableStream({
|
||||||
|
abort() {
|
||||||
|
events.push('abort');
|
||||||
|
return Promise.reject(error2);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, error2, rs.pipeTo(ws, { signal }), 'pipeTo should reject')
|
||||||
|
.then(() => assert_array_equals(events, ['abort', 'cancel'], 'abort() should be called before cancel()'));
|
||||||
|
}, 'a rejection from underlyingSink.abort() should be preferred to one from underlyingSource.cancel()');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(controller) {
|
||||||
|
controller.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
}, 'abort signal takes priority over closed readable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(controller) {
|
||||||
|
controller.error(error1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
}, 'abort signal takes priority over errored readable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
controller.error('failed to abort');
|
||||||
|
}
|
||||||
|
}, hwm0);
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
const writer = ws.getWriter();
|
||||||
|
return writer.close().then(() => {
|
||||||
|
writer.releaseLock();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
});
|
||||||
|
}, 'abort signal takes priority over closed writable');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
controller.error('failed to abort');
|
||||||
|
}
|
||||||
|
}, hwm0);
|
||||||
|
const ws = new WritableStream({
|
||||||
|
start(controller) {
|
||||||
|
controller.error(error1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, 'AbortError', rs.pipeTo(ws, { signal }), 'pipeTo should reject');
|
||||||
|
}, 'abort signal takes priority over errored writable');
|
||||||
|
|
||||||
|
promise_test(() => {
|
||||||
|
let readController;
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(c) {
|
||||||
|
readController = c;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
const pipeToPromise = rs.pipeTo(ws, { signal, preventClose: true });
|
||||||
|
readController.close();
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
|
abortController.abort();
|
||||||
|
return pipeToPromise;
|
||||||
|
}).then(() => ws.getWriter().write('this should succeed'));
|
||||||
|
}, 'abort should do nothing after the readable is closed');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let readController;
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(c) {
|
||||||
|
readController = c;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const ws = new WritableStream();
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
const pipeToPromise = rs.pipeTo(ws, { signal, preventAbort: true });
|
||||||
|
readController.error(error1);
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, error1, pipeToPromise, 'pipeTo should reject');
|
||||||
|
}).then(() => ws.getWriter().write('this should succeed'));
|
||||||
|
}, 'abort should do nothing after the readable is errored');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
let readController;
|
||||||
|
const rs = new ReadableStream({
|
||||||
|
start(c) {
|
||||||
|
readController = c;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let resolveWrite;
|
||||||
|
const writePromise = new Promise(resolve => {
|
||||||
|
resolveWrite = resolve;
|
||||||
|
});
|
||||||
|
const ws = new WritableStream({
|
||||||
|
write() {
|
||||||
|
readController.error(error1);
|
||||||
|
return writePromise;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
const pipeToPromise = rs.pipeTo(ws, { signal, preventAbort: true });
|
||||||
|
readController.enqueue('a');
|
||||||
|
return delay(0).then(() => {
|
||||||
|
abortController.abort();
|
||||||
|
resolveWrite();
|
||||||
|
return promise_rejects(t, error1, pipeToPromise, 'pipeTo should reject');
|
||||||
|
}).then(() => ws.getWriter().write('this should succeed'));
|
||||||
|
}, 'abort should do nothing after the readable is errored, even with pending writes');
|
||||||
|
|
||||||
|
promise_test(t => {
|
||||||
|
const rs = recordingReadableStream({
|
||||||
|
pull(controller) {
|
||||||
|
return delay(0).then(() => controller.close());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let writeController;
|
||||||
|
const ws = new WritableStream({
|
||||||
|
start(c) {
|
||||||
|
writeController = c;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const abortController = new AbortController();
|
||||||
|
const signal = abortController.signal;
|
||||||
|
const pipeToPromise = rs.pipeTo(ws, { signal, preventCancel: true });
|
||||||
|
return Promise.resolve().then(() => {
|
||||||
|
writeController.error(error1);
|
||||||
|
return Promise.resolve();
|
||||||
|
}).then(() => {
|
||||||
|
abortController.abort();
|
||||||
|
return promise_rejects(t, error1, pipeToPromise, 'pipeTo should reject');
|
||||||
|
}).then(() => {
|
||||||
|
assert_array_equals(rs.events, ['pull'], 'cancel should not have been called');
|
||||||
|
});
|
||||||
|
}, 'abort should do nothing after the writable is errored');
|
||||||
|
|
||||||
|
done();
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>abort.js service worker wrapper file</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/service-workers/service-worker/resources/test-helpers.sub.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
service_worker_test('abort.js', 'Service worker test setup');
|
||||||
|
</script>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>abort.js shared worker wrapper file</title>
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
fetch_tests_from_worker(new SharedWorker('abort.js'));
|
||||||
|
</script>
|
22
tests/wpt/web-platform-tests/svg/interact/inheritance.svg
Normal file
22
tests/wpt/web-platform-tests/svg/interact/inheritance.svg
Normal 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="8000px">
|
||||||
|
<title>Inheritance of pointer-events</title>
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty"/>
|
||||||
|
<h:meta name="assert" content="pointer-events inherits according to the spec."/>
|
||||||
|
<h:meta name="assert" content="pointer-events has initial value auto."/>
|
||||||
|
</metadata>
|
||||||
|
<g id="container">
|
||||||
|
<g id="target"></g>
|
||||||
|
</g>
|
||||||
|
<h:script src="/resources/testharness.js"/>
|
||||||
|
<h:script src="/resources/testharnessreport.js"/>
|
||||||
|
<h:script src="/css/support/inheritance-testcommon.js"/>
|
||||||
|
<script><![CDATA[
|
||||||
|
|
||||||
|
assert_inherited('pointer-events', 'auto', 'none');
|
||||||
|
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 799 B |
|
@ -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="8000px">
|
||||||
|
<title>SVG Scripting and Interactivity: parsing pointer-events with invalid values</title>
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty"/>
|
||||||
|
<h:meta name="assert" content="pointer-events supports only the grammar 'auto | bounding-box | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | none'."/>
|
||||||
|
</metadata>
|
||||||
|
<g id="target"></g>
|
||||||
|
<h:script src="/resources/testharness.js"/>
|
||||||
|
<h:script src="/resources/testharnessreport.js"/>
|
||||||
|
<h:script src="/css/support/parsing-testcommon.js"/>
|
||||||
|
<script><![CDATA[
|
||||||
|
|
||||||
|
test_invalid_value("pointer-events", "markers");
|
||||||
|
test_invalid_value("pointer-events", "0");
|
||||||
|
test_invalid_value("pointer-events", "visiblePainted visibleFill");
|
||||||
|
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 953 B |
|
@ -0,0 +1,29 @@
|
||||||
|
<?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="8000px">
|
||||||
|
<title>SVG Scripting and Interactivity: parsing pointer-events with valid values</title>
|
||||||
|
<metadata>
|
||||||
|
<h:link rel="help" href="https://svgwg.org/svg2-draft/interact.html#PointerEventsProperty"/>
|
||||||
|
<h:meta name="assert" content="pointer-events supports the full grammar 'auto | bounding-box | visiblePainted | visibleFill | visibleStroke | visible | painted | fill | stroke | all | none'."/>
|
||||||
|
</metadata>
|
||||||
|
<g id="target"></g>
|
||||||
|
<h:script src="/resources/testharness.js"/>
|
||||||
|
<h:script src="/resources/testharnessreport.js"/>
|
||||||
|
<h:script src="/css/support/parsing-testcommon.js"/>
|
||||||
|
<script><![CDATA[
|
||||||
|
|
||||||
|
test_valid_value("pointer-events", "auto");
|
||||||
|
test_valid_value("pointer-events", "bounding-box");
|
||||||
|
test_valid_value("pointer-events", "visiblePainted");
|
||||||
|
test_valid_value("pointer-events", "visibleFill");
|
||||||
|
test_valid_value("pointer-events", "visibleStroke");
|
||||||
|
test_valid_value("pointer-events", "visible");
|
||||||
|
test_valid_value("pointer-events", "painted");
|
||||||
|
test_valid_value("pointer-events", "fill");
|
||||||
|
test_valid_value("pointer-events", "stroke");
|
||||||
|
test_valid_value("pointer-events", "all");
|
||||||
|
test_valid_value("pointer-events", "none");
|
||||||
|
|
||||||
|
]]></script>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
|
@ -89,7 +89,11 @@ def run(*args, **kwargs):
|
||||||
logger.info(path)
|
logger.info(path)
|
||||||
|
|
||||||
|
|
||||||
def __main__():
|
def main():
|
||||||
kwargs = get_parser().parse_args()
|
kwargs = get_parser().parse_args()
|
||||||
|
|
||||||
run(None, vars(kwargs))
|
run(None, vars(kwargs))
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
|
|
|
@ -11,10 +11,14 @@ select = E,W,F,N
|
||||||
# E305: expected 2 blank lines after end of function or class
|
# E305: expected 2 blank lines after end of function or class
|
||||||
# E402: module level import not at top of file
|
# E402: module level import not at top of file
|
||||||
# E731: do not assign a lambda expression, use a def
|
# E731: do not assign a lambda expression, use a def
|
||||||
|
# W504: line break after binary operator
|
||||||
# W601: .has_key() is deprecated, use ‘in’
|
# W601: .has_key() is deprecated, use ‘in’
|
||||||
|
# W605: invalid escape sequence
|
||||||
|
# W606: 'async' and 'await' are reserved keywords starting with Python 3.7
|
||||||
# N801: class names should use CapWords convention
|
# N801: class names should use CapWords convention
|
||||||
# N802: function name should be lowercase
|
# N802: function name should be lowercase
|
||||||
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,W601,N801,N802
|
# N806: variable in function should be lowercase
|
||||||
|
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,W504,W601,W605,W606,N801,N802,N806
|
||||||
exclude =
|
exclude =
|
||||||
.tox,
|
.tox,
|
||||||
pywebsocket,
|
pywebsocket,
|
||||||
|
|
|
@ -11,9 +11,11 @@ select = E,W,F,N
|
||||||
# E305: expected 2 blank lines after end of function or class
|
# E305: expected 2 blank lines after end of function or class
|
||||||
# E402: module level import not at top of file
|
# E402: module level import not at top of file
|
||||||
# E731: do not assign a lambda expression, use a def
|
# E731: do not assign a lambda expression, use a def
|
||||||
|
# W504: line break after binary operator
|
||||||
|
# W605: invalid escape sequence
|
||||||
# N801: class names should use CapWords convention
|
# N801: class names should use CapWords convention
|
||||||
# N802: function name should be lowercase
|
# N802: function name should be lowercase
|
||||||
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,N801,N802
|
ignore = E128,E129,E226,E231,E251,E265,E302,E303,E305,E402,E731,W504,W605,N801,N802
|
||||||
exclude =
|
exclude =
|
||||||
.tox,
|
.tox,
|
||||||
pywebsocket,
|
pywebsocket,
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
flake8==3.5.0
|
flake8==3.6.0
|
||||||
pycodestyle==2.3.1
|
pycodestyle==2.4.0
|
||||||
pyflakes==1.6.0
|
pyflakes==2.0.0
|
||||||
pep8-naming==0.4.1
|
pep8-naming==0.7.0
|
||||||
|
|
|
@ -210,7 +210,7 @@ class FennecBrowser(FirefoxBrowser):
|
||||||
process_class=ProcessHandler,
|
process_class=ProcessHandler,
|
||||||
process_args={"processOutputLine": [self.on_output]})
|
process_args={"processOutputLine": [self.on_output]})
|
||||||
|
|
||||||
self.logger.debug("Starting Fennec")
|
self.logger.debug("Starting %s" % self.package_name)
|
||||||
# connect to a running emulator
|
# connect to a running emulator
|
||||||
self.runner.device.connect()
|
self.runner.device.connect()
|
||||||
|
|
||||||
|
@ -222,7 +222,7 @@ class FennecBrowser(FirefoxBrowser):
|
||||||
local="tcp:{}".format(self.marionette_port),
|
local="tcp:{}".format(self.marionette_port),
|
||||||
remote="tcp:{}".format(self.marionette_port))
|
remote="tcp:{}".format(self.marionette_port))
|
||||||
|
|
||||||
self.logger.debug("Fennec Started")
|
self.logger.debug("%s Started" % self.package_name)
|
||||||
|
|
||||||
def stop(self, force=False):
|
def stop(self, force=False):
|
||||||
if self.runner is not None:
|
if self.runner is not None:
|
||||||
|
|
|
@ -15,7 +15,8 @@ __wptrunner__ = {"product": "webkit",
|
||||||
"wdspec": "WebKitDriverWdspecExecutor"},
|
"wdspec": "WebKitDriverWdspecExecutor"},
|
||||||
"executor_kwargs": "executor_kwargs",
|
"executor_kwargs": "executor_kwargs",
|
||||||
"env_extras": "env_extras",
|
"env_extras": "env_extras",
|
||||||
"env_options": "env_options"}
|
"env_options": "env_options",
|
||||||
|
"run_info_extras": "run_info_extras"}
|
||||||
|
|
||||||
|
|
||||||
def check_args(**kwargs):
|
def check_args(**kwargs):
|
||||||
|
@ -31,22 +32,22 @@ def browser_kwargs(test_type, run_info_data, config, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def capabilities_for_port(server_config, **kwargs):
|
def capabilities_for_port(server_config, **kwargs):
|
||||||
if kwargs["webkit_port"] == "gtk":
|
port_name = kwargs["webkit_port"]
|
||||||
capabilities = {
|
if port_name in ["gtk", "wpe"]:
|
||||||
|
port_key_map = {"gtk": "webkitgtk"}
|
||||||
|
browser_options_port = port_key_map.get(port_name, port_name)
|
||||||
|
browser_options_key = "%s:browserOptions" % browser_options_port
|
||||||
|
|
||||||
|
return {
|
||||||
"browserName": "MiniBrowser",
|
"browserName": "MiniBrowser",
|
||||||
"browserVersion": "2.20",
|
"browserVersion": "2.20",
|
||||||
"platformName": "ANY",
|
"platformName": "ANY",
|
||||||
"webkitgtk:browserOptions": {
|
browser_options_key: {
|
||||||
"binary": kwargs["binary"],
|
"binary": kwargs["binary"],
|
||||||
"args": kwargs.get("binary_args", []),
|
"args": kwargs.get("binary_args", []),
|
||||||
"certificates": [
|
"certificates": [
|
||||||
{"host": server_config["browser_host"],
|
{"host": server_config["browser_host"],
|
||||||
"certificateFile": kwargs["host_cert_path"]}
|
"certificateFile": kwargs["host_cert_path"]}]}}
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return capabilities
|
|
||||||
|
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
@ -69,6 +70,10 @@ def env_options():
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
def run_info_extras(**kwargs):
|
||||||
|
return {"webkit_port": kwargs["webkit_port"]}
|
||||||
|
|
||||||
|
|
||||||
class WebKitBrowser(Browser):
|
class WebKitBrowser(Browser):
|
||||||
"""Generic WebKit browser is backed by WebKit's WebDriver implementation,
|
"""Generic WebKit browser is backed by WebKit's WebDriver implementation,
|
||||||
which is supplied through ``wptrunner.webdriver.WebKitDriverServer``.
|
which is supplied through ``wptrunner.webdriver.WebKitDriverServer``.
|
||||||
|
|
|
@ -1,8 +1,55 @@
|
||||||
import json
|
import json
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
from mozlog.structured.formatters.base import BaseFormatter
|
from mozlog.structured.formatters.base import BaseFormatter
|
||||||
|
|
||||||
|
|
||||||
|
LONE_SURROGATE_RE = re.compile(u"[\uD800-\uDFFF]")
|
||||||
|
|
||||||
|
|
||||||
|
def surrogate_replacement_ucs4(match):
|
||||||
|
return "U+" + hex(ord(match.group()))[2:]
|
||||||
|
|
||||||
|
|
||||||
|
class SurrogateReplacementUcs2(object):
|
||||||
|
def __init__(self):
|
||||||
|
self.skip = False
|
||||||
|
|
||||||
|
def __call__(self, match):
|
||||||
|
char = match.group()
|
||||||
|
|
||||||
|
if self.skip:
|
||||||
|
self.skip = False
|
||||||
|
return char
|
||||||
|
|
||||||
|
is_low = 0xD800 <= ord(char) <= 0xDBFF
|
||||||
|
|
||||||
|
escape = True
|
||||||
|
if is_low:
|
||||||
|
next_idx = match.end()
|
||||||
|
if next_idx < len(match.string):
|
||||||
|
next_char = match.string[next_idx]
|
||||||
|
if 0xDC00 <= ord(next_char) <= 0xDFFF:
|
||||||
|
escape = False
|
||||||
|
|
||||||
|
if not escape:
|
||||||
|
self.skip = True
|
||||||
|
return char
|
||||||
|
|
||||||
|
return "U+" + hex(ord(match.group()))[2:]
|
||||||
|
|
||||||
|
|
||||||
|
if sys.maxunicode == 0x10FFFF:
|
||||||
|
surrogate_replacement = surrogate_replacement_ucs4
|
||||||
|
else:
|
||||||
|
surrogate_replacement = SurrogateReplacementUcs2()
|
||||||
|
|
||||||
|
|
||||||
|
def replace_lone_surrogate(data):
|
||||||
|
return LONE_SURROGATE_RE.subn(surrogate_replacement, data)[0]
|
||||||
|
|
||||||
|
|
||||||
class WptreportFormatter(BaseFormatter):
|
class WptreportFormatter(BaseFormatter):
|
||||||
"""Formatter that produces results in the format that wpreport expects."""
|
"""Formatter that produces results in the format that wpreport expects."""
|
||||||
|
|
||||||
|
@ -40,7 +87,7 @@ class WptreportFormatter(BaseFormatter):
|
||||||
|
|
||||||
def create_subtest(self, data):
|
def create_subtest(self, data):
|
||||||
test = self.find_or_create_test(data)
|
test = self.find_or_create_test(data)
|
||||||
subtest_name = data["subtest"]
|
subtest_name = replace_lone_surrogate(data["subtest"])
|
||||||
|
|
||||||
subtest = {
|
subtest = {
|
||||||
"name": subtest_name,
|
"name": subtest_name,
|
||||||
|
@ -57,7 +104,7 @@ class WptreportFormatter(BaseFormatter):
|
||||||
if "expected" in data:
|
if "expected" in data:
|
||||||
subtest["expected"] = data["expected"]
|
subtest["expected"] = data["expected"]
|
||||||
if "message" in data:
|
if "message" in data:
|
||||||
subtest["message"] = data["message"]
|
subtest["message"] = replace_lone_surrogate(data["message"])
|
||||||
|
|
||||||
def test_end(self, data):
|
def test_end(self, data):
|
||||||
test = self.find_or_create_test(data)
|
test = self.find_or_create_test(data)
|
||||||
|
@ -67,7 +114,7 @@ class WptreportFormatter(BaseFormatter):
|
||||||
if "expected" in data:
|
if "expected" in data:
|
||||||
test["expected"] = data["expected"]
|
test["expected"] = data["expected"]
|
||||||
if "message" in data:
|
if "message" in data:
|
||||||
test["message"] = data["message"]
|
test["message"] = replace_lone_surrogate(data["message"])
|
||||||
|
|
||||||
def assertion_count(self, data):
|
def assertion_count(self, data):
|
||||||
test = self.find_or_create_test(data)
|
test = self.find_or_create_test(data)
|
||||||
|
|
|
@ -4,10 +4,13 @@ import time
|
||||||
from os.path import dirname, join
|
from os.path import dirname, join
|
||||||
from StringIO import StringIO
|
from StringIO import StringIO
|
||||||
|
|
||||||
|
import mock
|
||||||
|
|
||||||
from mozlog import handlers, structuredlog
|
from mozlog import handlers, structuredlog
|
||||||
|
|
||||||
sys.path.insert(0, join(dirname(__file__), "..", ".."))
|
sys.path.insert(0, join(dirname(__file__), "..", ".."))
|
||||||
|
|
||||||
|
from wptrunner import formatters
|
||||||
from wptrunner.formatters import WptreportFormatter
|
from wptrunner.formatters import WptreportFormatter
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,3 +65,73 @@ def test_wptreport_run_info_optional(capfd):
|
||||||
output.seek(0)
|
output.seek(0)
|
||||||
output_obj = json.load(output)
|
output_obj = json.load(output)
|
||||||
assert "run_info" not in output_obj or output_obj["run_info"] == {}
|
assert "run_info" not in output_obj or output_obj["run_info"] == {}
|
||||||
|
|
||||||
|
|
||||||
|
def test_wptreport_lone_surrogate(capfd):
|
||||||
|
output = StringIO()
|
||||||
|
logger = structuredlog.StructuredLogger("test_a")
|
||||||
|
logger.add_handler(handlers.StreamHandler(output, WptreportFormatter()))
|
||||||
|
|
||||||
|
# output a bunch of stuff
|
||||||
|
logger.suite_start(["test-id-1"]) # no run_info arg!
|
||||||
|
logger.test_start("test-id-1")
|
||||||
|
logger.test_status("test-id-1",
|
||||||
|
subtest=u"Name with surrogate\uD800",
|
||||||
|
status="FAIL",
|
||||||
|
message=u"\U0001F601 \uDE0A\uD83D")
|
||||||
|
logger.test_end("test-id-1",
|
||||||
|
status="PASS",
|
||||||
|
message=u"\uDE0A\uD83D \U0001F601")
|
||||||
|
logger.suite_end()
|
||||||
|
|
||||||
|
# check nothing got output to stdout/stderr
|
||||||
|
# (note that mozlog outputs exceptions during handling to stderr!)
|
||||||
|
captured = capfd.readouterr()
|
||||||
|
assert captured.out == ""
|
||||||
|
assert captured.err == ""
|
||||||
|
|
||||||
|
# check the actual output of the formatter
|
||||||
|
output.seek(0)
|
||||||
|
output_obj = json.load(output)
|
||||||
|
test = output_obj["results"][0]
|
||||||
|
assert test["message"] == u"U+de0aU+d83d \U0001F601"
|
||||||
|
subtest = test["subtests"][0]
|
||||||
|
assert subtest["name"] == u"Name with surrogateU+d800"
|
||||||
|
assert subtest["message"] == u"\U0001F601 U+de0aU+d83d"
|
||||||
|
|
||||||
|
|
||||||
|
def test_wptreport_lone_surrogate_ucs2(capfd):
|
||||||
|
# Since UCS4 is a superset of UCS2 we can meaningfully test the UCS2 code on a
|
||||||
|
# UCS4 build, but not the reverse. However UCS2 is harder to handle and UCS4 is
|
||||||
|
# the commonest (and sensible) configuration, so that's OK.
|
||||||
|
output = StringIO()
|
||||||
|
logger = structuredlog.StructuredLogger("test_a")
|
||||||
|
logger.add_handler(handlers.StreamHandler(output, WptreportFormatter()))
|
||||||
|
|
||||||
|
with mock.patch.object(formatters, 'surrogate_replacement', formatters.SurrogateReplacementUcs2()):
|
||||||
|
# output a bunch of stuff
|
||||||
|
logger.suite_start(["test-id-1"]) # no run_info arg!
|
||||||
|
logger.test_start("test-id-1")
|
||||||
|
logger.test_status("test-id-1",
|
||||||
|
subtest=u"Name with surrogate\uD800",
|
||||||
|
status="FAIL",
|
||||||
|
message=u"\U0001F601 \uDE0A\uD83D \uD83D\uDE0A")
|
||||||
|
logger.test_end("test-id-1",
|
||||||
|
status="PASS",
|
||||||
|
message=u"\uDE0A\uD83D \uD83D\uDE0A \U0001F601")
|
||||||
|
logger.suite_end()
|
||||||
|
|
||||||
|
# check nothing got output to stdout/stderr
|
||||||
|
# (note that mozlog outputs exceptions during handling to stderr!)
|
||||||
|
captured = capfd.readouterr()
|
||||||
|
assert captured.out == ""
|
||||||
|
assert captured.err == ""
|
||||||
|
|
||||||
|
# check the actual output of the formatter
|
||||||
|
output.seek(0)
|
||||||
|
output_obj = json.load(output)
|
||||||
|
test = output_obj["results"][0]
|
||||||
|
assert test["message"] == u"U+de0aU+d83d \U0001f60a \U0001F601"
|
||||||
|
subtest = test["subtests"][0]
|
||||||
|
assert subtest["name"] == u"Name with surrogateU+d800"
|
||||||
|
assert subtest["message"] == u"\U0001F601 U+de0aU+d83d \U0001f60a"
|
||||||
|
|
|
@ -7,8 +7,6 @@ import traceback
|
||||||
from six.moves.urllib.parse import parse_qs, quote, unquote, urljoin
|
from six.moves.urllib.parse import parse_qs, quote, unquote, urljoin
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
|
|
||||||
from h2.events import RequestReceived, DataReceived
|
|
||||||
|
|
||||||
from .constants import content_types
|
from .constants import content_types
|
||||||
from .pipes import Pipeline, template
|
from .pipes import Pipeline, template
|
||||||
from .ranges import RangeParser
|
from .ranges import RangeParser
|
||||||
|
@ -79,7 +77,7 @@ class DirectoryHandler(object):
|
||||||
%(items)s
|
%(items)s
|
||||||
</ul>
|
</ul>
|
||||||
""" % {"path": cgi.escape(url_path),
|
""" % {"path": cgi.escape(url_path),
|
||||||
"items": "\n".join(self.list_items(url_path, path))} # flake8: noqa
|
"items": "\n".join(self.list_items(url_path, path))} # noqa: E122
|
||||||
|
|
||||||
def list_items(self, base_path, path):
|
def list_items(self, base_path, path):
|
||||||
assert base_path.endswith("/")
|
assert base_path.endswith("/")
|
||||||
|
|
|
@ -548,7 +548,7 @@ class Http1WebTestRequestHandler(BaseWebTestRequestHandler):
|
||||||
self.close_connection = True
|
self.close_connection = True
|
||||||
return
|
return
|
||||||
|
|
||||||
except Exception as e:
|
except Exception:
|
||||||
err = traceback.format_exc()
|
err = traceback.format_exc()
|
||||||
if response:
|
if response:
|
||||||
response.set_error(500, err)
|
response.set_error(500, err)
|
||||||
|
|
|
@ -196,7 +196,7 @@ const gCSSProperties = {
|
||||||
'border-image-repeat': {
|
'border-image-repeat': {
|
||||||
// https://drafts.csswg.org/css-backgrounds-3/#border-image-repeat
|
// https://drafts.csswg.org/css-backgrounds-3/#border-image-repeat
|
||||||
types: [
|
types: [
|
||||||
{ type: 'discrete', options: [ [ 'stretch stretch', 'repeat repeat' ] ] }
|
{ type: 'discrete', options: [ [ 'stretch repeat', 'round space' ] ] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
'border-image-slice': {
|
'border-image-slice': {
|
||||||
|
|
|
@ -1,10 +1 @@
|
||||||
def retrieve_element_rect(session, element):
|
|
||||||
return session.execute_script("""
|
|
||||||
let rect = arguments[0].getBoundingClientRect();
|
|
||||||
return {
|
|
||||||
x: rect.left + window.pageXOffset,
|
|
||||||
y: rect.top + window.pageYOffset,
|
|
||||||
width: rect.width,
|
|
||||||
height: rect.height,
|
|
||||||
};
|
|
||||||
""", args=(element,))
|
|
||||||
|
|
|
@ -1,8 +1,7 @@
|
||||||
from tests.support.asserts import assert_error, assert_success
|
from tests.support.asserts import assert_error, assert_success
|
||||||
|
from tests.support.helpers import element_rect
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
from . import retrieve_element_rect
|
|
||||||
|
|
||||||
|
|
||||||
def get_element_rect(session, element_id):
|
def get_element_rect(session, element_id):
|
||||||
return session.transport.send(
|
return session.transport.send(
|
||||||
|
@ -38,4 +37,4 @@ def test_basic(session):
|
||||||
element = session.find.css("input", all=False)
|
element = session.find.css("input", all=False)
|
||||||
|
|
||||||
result = get_element_rect(session, element.id)
|
result = get_element_rect(session, element.id)
|
||||||
assert_success(result, retrieve_element_rect(session, element))
|
assert_success(result, element_rect(session, element))
|
||||||
|
|
|
@ -3,10 +3,9 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
|
from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
|
||||||
|
from tests.support.helpers import element_rect
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
from . import retrieve_element_rect
|
|
||||||
|
|
||||||
|
|
||||||
def get_element_rect(session, element_id):
|
def get_element_rect(session, element_id):
|
||||||
return session.transport.send(
|
return session.transport.send(
|
||||||
|
@ -27,7 +26,7 @@ def check_user_prompt_closed_without_exception(session, create_dialog):
|
||||||
create_dialog(dialog_type, text=dialog_type)
|
create_dialog(dialog_type, text=dialog_type)
|
||||||
|
|
||||||
response = get_element_rect(session, element.id)
|
response = get_element_rect(session, element.id)
|
||||||
assert_success(response, retrieve_element_rect(session, element))
|
assert_success(response, element_rect(session, element))
|
||||||
|
|
||||||
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
|
assert_dialog_handled(session, expected_text=dialog_type, expected_retval=retval)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import base64
|
import base64
|
||||||
import imghdr
|
import imghdr
|
||||||
|
import struct
|
||||||
|
|
||||||
from webdriver import Element, NoSuchAlertException, WebDriverException
|
from webdriver import Element, NoSuchAlertException, WebDriverException
|
||||||
|
|
||||||
|
|
|
@ -231,4 +231,3 @@ def closed_window(session, create_window):
|
||||||
yield new_handle
|
yield new_handle
|
||||||
|
|
||||||
session.window_handle = original_handle
|
session.window_handle = original_handle
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,34 @@ def clear_all_cookies(session):
|
||||||
session.transport.send("DELETE", "session/%s/cookie" % session.session_id)
|
session.transport.send("DELETE", "session/%s/cookie" % session.session_id)
|
||||||
|
|
||||||
|
|
||||||
|
def document_dimensions(session):
|
||||||
|
return tuple(session.execute_script("""
|
||||||
|
let {width, height} = document.documentElement.getBoundingClientRect();
|
||||||
|
return [width, height];
|
||||||
|
"""))
|
||||||
|
|
||||||
|
|
||||||
|
def document_hidden(session):
|
||||||
|
"""Polls for the document to become hidden."""
|
||||||
|
def hidden(session):
|
||||||
|
return session.execute_script("return document.hidden")
|
||||||
|
return Poll(session, timeout=3, raises=None).until(hidden)
|
||||||
|
|
||||||
|
|
||||||
|
def element_rect(session, element):
|
||||||
|
return session.execute_script("""
|
||||||
|
let element = arguments[0];
|
||||||
|
let {height, left, top, width} = element.getBoundingClientRect();
|
||||||
|
|
||||||
|
return {
|
||||||
|
x: left + window.pageXOffset,
|
||||||
|
y: top + window.pageYOffset,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
};
|
||||||
|
""", args=(element,))
|
||||||
|
|
||||||
|
|
||||||
def is_element_in_viewport(session, element):
|
def is_element_in_viewport(session, element):
|
||||||
"""Check if element is outside of the viewport"""
|
"""Check if element is outside of the viewport"""
|
||||||
return session.execute_script("""
|
return session.execute_script("""
|
||||||
|
@ -121,13 +149,6 @@ def is_element_in_viewport(session, element):
|
||||||
""", args=(element,))
|
""", args=(element,))
|
||||||
|
|
||||||
|
|
||||||
def document_hidden(session):
|
|
||||||
"""Polls for the document to become hidden."""
|
|
||||||
def hidden(session):
|
|
||||||
return session.execute_script("return document.hidden")
|
|
||||||
return Poll(session, timeout=3, raises=None).until(hidden)
|
|
||||||
|
|
||||||
|
|
||||||
def is_fullscreen(session):
|
def is_fullscreen(session):
|
||||||
# At the time of writing, WebKit does not conform to the
|
# At the time of writing, WebKit does not conform to the
|
||||||
# Fullscreen API specification.
|
# Fullscreen API specification.
|
||||||
|
@ -137,11 +158,3 @@ def is_fullscreen(session):
|
||||||
return session.execute_script("""
|
return session.execute_script("""
|
||||||
return !!(window.fullScreen || document.webkitIsFullScreen)
|
return !!(window.fullScreen || document.webkitIsFullScreen)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
def document_dimensions(session):
|
|
||||||
return tuple(session.execute_script("""
|
|
||||||
let {devicePixelRatio} = window;
|
|
||||||
let {width, height} = document.documentElement.getBoundingClientRect();
|
|
||||||
return [width * devicePixelRatio, height * devicePixelRatio];
|
|
||||||
"""))
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import base64
|
import base64
|
||||||
|
import math
|
||||||
import struct
|
import struct
|
||||||
|
|
||||||
from tests.support.asserts import assert_png
|
from tests.support.asserts import assert_png
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
def element_rect(session, element):
|
||||||
|
return session.execute_script("""
|
||||||
|
let {devicePixelRatio} = window;
|
||||||
|
let rect = arguments[0].getBoundingClientRect();
|
||||||
|
|
||||||
|
return {
|
||||||
|
x: Math.floor((rect.left + window.pageXOffset) * devicePixelRatio),
|
||||||
|
y: Math.floor((rect.top + window.pageYOffset) * devicePixelRatio),
|
||||||
|
width: Math.floor(rect.width * devicePixelRatio),
|
||||||
|
height: Math.floor(rect.height * devicePixelRatio),
|
||||||
|
};
|
||||||
|
""", args=(element,))
|
|
@ -1,9 +1,9 @@
|
||||||
import base64
|
from tests.support.asserts import assert_error, assert_png, assert_success
|
||||||
import imghdr
|
from tests.support.image import png_dimensions
|
||||||
|
|
||||||
from tests.support.asserts import assert_error, assert_success
|
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
|
from . import element_rect
|
||||||
|
|
||||||
|
|
||||||
def take_element_screenshot(session, element_id):
|
def take_element_screenshot(session, element_id):
|
||||||
return session.transport.send(
|
return session.transport.send(
|
||||||
|
@ -20,17 +20,6 @@ def test_no_browsing_context(session, closed_window):
|
||||||
assert_error(response, "no such window")
|
assert_error(response, "no such window")
|
||||||
|
|
||||||
|
|
||||||
def test_screenshot(session):
|
|
||||||
session.url = inline("<input>")
|
|
||||||
element = session.find.css("input", all=False)
|
|
||||||
|
|
||||||
response = take_element_screenshot(session, element.id)
|
|
||||||
value = assert_success(response)
|
|
||||||
|
|
||||||
image = base64.decodestring(value)
|
|
||||||
assert imghdr.what("", image) == "png"
|
|
||||||
|
|
||||||
|
|
||||||
def test_stale(session):
|
def test_stale(session):
|
||||||
session.url = inline("<input>")
|
session.url = inline("<input>")
|
||||||
element = session.find.css("input", all=False)
|
element = session.find.css("input", all=False)
|
||||||
|
@ -38,3 +27,15 @@ def test_stale(session):
|
||||||
|
|
||||||
result = take_element_screenshot(session, element.id)
|
result = take_element_screenshot(session, element.id)
|
||||||
assert_error(result, "stale element reference")
|
assert_error(result, "stale element reference")
|
||||||
|
|
||||||
|
|
||||||
|
def test_format_and_dimensions(session):
|
||||||
|
session.url = inline("<input>")
|
||||||
|
element = session.find.css("input", all=False)
|
||||||
|
rect = element_rect(session, element)
|
||||||
|
|
||||||
|
response = take_element_screenshot(session, element.id)
|
||||||
|
value = assert_success(response)
|
||||||
|
|
||||||
|
assert_png(value)
|
||||||
|
assert png_dimensions(value) == (rect["width"], rect["height"])
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
# META: timeout=long
|
# META: timeout=long
|
||||||
|
|
||||||
import base64
|
|
||||||
import imghdr
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from tests.support.asserts import assert_success
|
from tests.support.asserts import assert_png, assert_success
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
|
|
||||||
|
@ -30,8 +27,7 @@ def check_user_prompt_not_closed_without_exception(session, create_dialog):
|
||||||
response = take_element_screenshot(session, element.id)
|
response = take_element_screenshot(session, element.id)
|
||||||
value = assert_success(response)
|
value = assert_success(response)
|
||||||
|
|
||||||
image = base64.decodestring(value)
|
assert_png(value)
|
||||||
assert imghdr.what("", image) == "png"
|
|
||||||
|
|
||||||
assert session.alert.text == dialog_type
|
assert session.alert.text == dialog_type
|
||||||
session.alert.dismiss()
|
session.alert.dismiss()
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
def document_dimensions(session):
|
||||||
|
return tuple(session.execute_script("""
|
||||||
|
let {devicePixelRatio} = window;
|
||||||
|
let {width, height} = document.documentElement.getBoundingClientRect();
|
||||||
|
return [Math.floor(width * devicePixelRatio), Math.floor(height * devicePixelRatio)];
|
||||||
|
"""))
|
|
@ -1,9 +1,9 @@
|
||||||
import base64
|
from tests.support.asserts import assert_error, assert_png, assert_success
|
||||||
import imghdr
|
from tests.support.image import png_dimensions
|
||||||
|
|
||||||
from tests.support.asserts import assert_error, assert_success
|
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
|
from . import document_dimensions
|
||||||
|
|
||||||
|
|
||||||
def take_screenshot(session):
|
def take_screenshot(session):
|
||||||
return session.transport.send(
|
return session.transport.send(
|
||||||
|
@ -15,11 +15,11 @@ def test_no_browsing_context(session, closed_window):
|
||||||
assert_error(response, "no such window")
|
assert_error(response, "no such window")
|
||||||
|
|
||||||
|
|
||||||
def test_screenshot(session):
|
def test_format_and_dimensions(session):
|
||||||
session.url = inline("<input>")
|
session.url = inline("<input>")
|
||||||
|
|
||||||
response = take_screenshot(session)
|
response = take_screenshot(session)
|
||||||
value = assert_success(response)
|
value = assert_success(response)
|
||||||
|
|
||||||
image = base64.decodestring(value)
|
assert_png(value)
|
||||||
assert imghdr.what("", image) == "png"
|
assert png_dimensions(value) == document_dimensions(session)
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
# META: timeout=long
|
# META: timeout=long
|
||||||
|
|
||||||
import base64
|
|
||||||
import imghdr
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from tests.support.asserts import assert_success
|
from tests.support.asserts import assert_png, assert_success
|
||||||
from tests.support.inline import inline
|
from tests.support.inline import inline
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,8 +21,7 @@ def check_user_prompt_not_closed_without_exception(session, create_dialog):
|
||||||
response = take_screenshot(session)
|
response = take_screenshot(session)
|
||||||
value = assert_success(response)
|
value = assert_success(response)
|
||||||
|
|
||||||
image = base64.decodestring(value)
|
assert_png(value)
|
||||||
assert imghdr.what("", image) == "png"
|
|
||||||
|
|
||||||
assert session.alert.text == dialog_type
|
assert session.alert.text == dialog_type
|
||||||
session.alert.dismiss()
|
session.alert.dismiss()
|
||||||
|
|
|
@ -247,7 +247,7 @@
|
||||||
// tonechange event, to make sure that tonechange is triggered
|
// tonechange event, to make sure that tonechange is triggered
|
||||||
// then stopped
|
// then stopped
|
||||||
if(tone === 'A') {
|
if(tone === 'A') {
|
||||||
transceiver.setDirection('recvonly');
|
transceiver.direction = 'recvonly';
|
||||||
|
|
||||||
pc.createOffer()
|
pc.createOffer()
|
||||||
.then(offer =>
|
.then(offer =>
|
||||||
|
|
|
@ -85,57 +85,27 @@
|
||||||
}));
|
}));
|
||||||
}, 'replaceTrack() rejects when the peer connection is closed.');
|
}, 'replaceTrack() rejects when the peer connection is closed.');
|
||||||
|
|
||||||
async_test(t => {
|
promise_test(async t => {
|
||||||
const expectedException = 'InvalidModificationError';
|
|
||||||
const caller = new RTCPeerConnection();
|
const caller = new RTCPeerConnection();
|
||||||
t.add_cleanup(() => caller.close());
|
t.add_cleanup(() => caller.close());
|
||||||
return getUserMediaTracksAndStreams(2)
|
const [tracks, streams] = await getUserMediaTracksAndStreams(2);
|
||||||
.then(t.step_func(([tracks, streams]) => {
|
const sender = caller.addTrack(tracks[0], streams[0]);
|
||||||
const sender = caller.addTrack(tracks[0], streams[0]);
|
caller.removeTrack(sender);
|
||||||
caller.removeTrack(sender);
|
await sender.replaceTrack(tracks[1]);
|
||||||
// replaceTrack() should fail because the sender should be inactive after
|
assert_equals(sender.track, tracks[1], "Make sure track gets updated");
|
||||||
// removeTrack().
|
}, 'replaceTrack() does not reject when invoked after removeTrack().');
|
||||||
return sender.replaceTrack(tracks[1])
|
|
||||||
.then(t.step_func(() => {
|
|
||||||
assert_unreached('Expected replaceTrack() to be rejected with ' +
|
|
||||||
expectedException + ' but the promise was resolved.');
|
|
||||||
}),
|
|
||||||
t.step_func(e => {
|
|
||||||
assert_equals(e.name, expectedException);
|
|
||||||
t.done();
|
|
||||||
}));
|
|
||||||
}))
|
|
||||||
.catch(t.step_func(reason => {
|
|
||||||
assert_unreached(reason);
|
|
||||||
}));
|
|
||||||
}, 'replaceTrack() rejects when invoked after removeTrack().');
|
|
||||||
|
|
||||||
async_test(t => {
|
|
||||||
const expectedException = 'InvalidModificationError';
|
promise_test(async t => {
|
||||||
const caller = new RTCPeerConnection();
|
const caller = new RTCPeerConnection();
|
||||||
t.add_cleanup(() => caller.close());
|
t.add_cleanup(() => caller.close());
|
||||||
return getUserMediaTracksAndStreams(2)
|
const [tracks, streams] = await getUserMediaTracksAndStreams(2);
|
||||||
.then(t.step_func(([tracks, streams]) => {
|
const sender = caller.addTrack(tracks[0], streams[0]);
|
||||||
const sender = caller.addTrack(tracks[0], streams[0]);
|
let p = sender.replaceTrack(tracks[1])
|
||||||
let p = sender.replaceTrack(tracks[1])
|
caller.removeTrack(sender);
|
||||||
caller.removeTrack(sender);
|
await p;
|
||||||
// replaceTrack() should fail because it executes steps in parallel and
|
assert_equals(sender.track, tracks[1], "Make sure track gets updated");
|
||||||
// queues a task to execute after removeTrack() has occurred. The sender
|
}, 'replaceTrack() does not reject after a subsequent removeTrack().');
|
||||||
// should be inactive. If this can be racy, update or remove the test.
|
|
||||||
// https://github.com/w3c/webrtc-pc/issues/1728
|
|
||||||
return p.then(t.step_func(() => {
|
|
||||||
assert_unreached('Expected replaceTrack() to be rejected with ' +
|
|
||||||
expectedException + ' but the promise was resolved.');
|
|
||||||
}),
|
|
||||||
t.step_func(e => {
|
|
||||||
assert_equals(e.name, expectedException);
|
|
||||||
t.done();
|
|
||||||
}));
|
|
||||||
}))
|
|
||||||
.catch(t.step_func(reason => {
|
|
||||||
assert_unreached(reason);
|
|
||||||
}));
|
|
||||||
}, 'replaceTrack() rejects after a subsequent removeTrack().');
|
|
||||||
|
|
||||||
// TODO(hbos): Verify that replaceTrack() changes what media is received on
|
// TODO(hbos): Verify that replaceTrack() changes what media is received on
|
||||||
// the remote end of two connected peer connections. For video tracks, this
|
// the remote end of two connected peer connections. For video tracks, this
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<meta charset=utf-8>
|
<meta charset=utf-8>
|
||||||
<title>RTCRtpTransceiver.prototype.setDirection</title>
|
<title>RTCRtpTransceiver.prototype.direction</title>
|
||||||
<script src="/resources/testharness.js"></script>
|
<script src="/resources/testharness.js"></script>
|
||||||
<script src="/resources/testharnessreport.js"></script>
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
<script src="RTCPeerConnection-helper.js"></script>
|
<script src="RTCPeerConnection-helper.js"></script>
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
// Test is based on the following editor draft:
|
// Test is based on the following editor draft:
|
||||||
// https://rawgit.com/w3c/webrtc-pc/cc8d80f455b86c8041d63bceb8b457f45c72aa89/webrtc.html
|
// https://rawgit.com/w3c/webrtc-pc/8495678808d126d8bc764bf944996f32981fa6fd/webrtc.html
|
||||||
|
|
||||||
// The following helper functions are called from RTCPeerConnection-helper.js:
|
// The following helper functions are called from RTCPeerConnection-helper.js:
|
||||||
// generateAnswer
|
// generateAnswer
|
||||||
|
@ -16,16 +16,15 @@
|
||||||
/*
|
/*
|
||||||
5.4. RTCRtpTransceiver Interface
|
5.4. RTCRtpTransceiver Interface
|
||||||
interface RTCRtpTransceiver {
|
interface RTCRtpTransceiver {
|
||||||
readonly attribute RTCRtpTransceiverDirection direction;
|
attribute RTCRtpTransceiverDirection direction;
|
||||||
readonly attribute RTCRtpTransceiverDirection? currentDirection;
|
readonly attribute RTCRtpTransceiverDirection? currentDirection;
|
||||||
void setDirection(RTCRtpTransceiverDirection direction);
|
|
||||||
...
|
...
|
||||||
};
|
};
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
5.4. setDirection
|
5.4. direction
|
||||||
4. Set transceiver's [[Direction]] slot to newDirection.
|
7. Set transceiver's [[Direction]] slot to newDirection.
|
||||||
*/
|
*/
|
||||||
test(t => {
|
test(t => {
|
||||||
const pc = new RTCPeerConnection();
|
const pc = new RTCPeerConnection();
|
||||||
|
@ -33,15 +32,15 @@
|
||||||
assert_equals(transceiver.direction, 'sendrecv');
|
assert_equals(transceiver.direction, 'sendrecv');
|
||||||
assert_equals(transceiver.currentDirection, null);
|
assert_equals(transceiver.currentDirection, null);
|
||||||
|
|
||||||
transceiver.setDirection('recvonly');
|
transceiver.direction = 'recvonly';
|
||||||
assert_equals(transceiver.direction, 'recvonly');
|
assert_equals(transceiver.direction, 'recvonly');
|
||||||
assert_equals(transceiver.currentDirection, null,
|
assert_equals(transceiver.currentDirection, null,
|
||||||
'Expect transceiver.currentDirection to not change');
|
'Expect transceiver.currentDirection to not change');
|
||||||
|
|
||||||
}, 'setDirection should change transceiver.direction');
|
}, 'setting direction should change transceiver.direction');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
5.4. setDirection
|
5.4. direction
|
||||||
3. If newDirection is equal to transceiver's [[Direction]] slot, abort
|
3. If newDirection is equal to transceiver's [[Direction]] slot, abort
|
||||||
these steps.
|
these steps.
|
||||||
*/
|
*/
|
||||||
|
@ -49,10 +48,10 @@
|
||||||
const pc = new RTCPeerConnection();
|
const pc = new RTCPeerConnection();
|
||||||
const transceiver = pc.addTransceiver('audio', { direction: 'sendonly' });
|
const transceiver = pc.addTransceiver('audio', { direction: 'sendonly' });
|
||||||
assert_equals(transceiver.direction, 'sendonly');
|
assert_equals(transceiver.direction, 'sendonly');
|
||||||
transceiver.setDirection('sendonly');
|
transceiver.direction = 'sendonly';
|
||||||
assert_equals(transceiver.direction, 'sendonly');
|
assert_equals(transceiver.direction, 'sendonly');
|
||||||
|
|
||||||
}, 'setDirection with same direction should have no effect');
|
}, 'setting direction with same direction should have no effect');
|
||||||
|
|
||||||
promise_test(t => {
|
promise_test(t => {
|
||||||
const pc = new RTCPeerConnection();
|
const pc = new RTCPeerConnection();
|
||||||
|
@ -67,22 +66,22 @@
|
||||||
.then(() => generateAnswer(offer)))
|
.then(() => generateAnswer(offer)))
|
||||||
.then(answer => pc.setRemoteDescription(answer))
|
.then(answer => pc.setRemoteDescription(answer))
|
||||||
.then(() => {
|
.then(() => {
|
||||||
assert_equals(transceiver.currentDirection, 'recvonly');
|
assert_equals(transceiver.currentDirection, 'inactive');
|
||||||
transceiver.setDirection('sendrecv');
|
transceiver.direction = 'sendrecv';
|
||||||
assert_equals(transceiver.direction, 'sendrecv');
|
assert_equals(transceiver.direction, 'sendrecv');
|
||||||
assert_equals(transceiver.currentDirection, 'recvonly');
|
assert_equals(transceiver.currentDirection, 'inactive');
|
||||||
});
|
});
|
||||||
}, 'setDirection should change transceiver.direction independent of transceiver.currentDirection');
|
}, 'setting direction should change transceiver.direction independent of transceiver.currentDirection');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
TODO
|
TODO
|
||||||
Calls to setDirection() do not take effect immediately. Instead, future calls
|
An update of directionality does not take effect immediately. Instead, future calls
|
||||||
to createOffer and createAnswer mark the corresponding media description as
|
to createOffer and createAnswer mark the corresponding media description as
|
||||||
sendrecv, sendonly, recvonly or inactive as defined in [JSEP] (section 5.2.2.
|
sendrecv, sendonly, recvonly or inactive as defined in [JSEP] (section 5.2.2.
|
||||||
and section 5.3.2.).
|
and section 5.3.2.).
|
||||||
|
|
||||||
Tested in RTCPeerConnection-onnegotiationneeded.html
|
Tested in RTCPeerConnection-onnegotiationneeded.html
|
||||||
5.4. setDirection
|
5.4. direction
|
||||||
6. Update the negotiation-needed flag for connection.
|
6. Update the negotiation-needed flag for connection.
|
||||||
|
|
||||||
Coverage Report
|
Coverage Report
|
|
@ -1181,7 +1181,7 @@
|
||||||
"InvalidStateError", "replaceTrack on stopped transceiver");
|
"InvalidStateError", "replaceTrack on stopped transceiver");
|
||||||
|
|
||||||
checkThrows(() => transceiver.direction = "sendrecv",
|
checkThrows(() => transceiver.direction = "sendrecv",
|
||||||
"InvalidStateError", "setDirection on stopped transceiver");
|
"InvalidStateError", "set direction on stopped transceiver");
|
||||||
|
|
||||||
checkThrows(() => transceiver.sender.dtmf.insertDTMF("111"),
|
checkThrows(() => transceiver.sender.dtmf.insertDTMF("111"),
|
||||||
"InvalidStateError", "insertDTMF on stopped transceiver");
|
"InvalidStateError", "insertDTMF on stopped transceiver");
|
||||||
|
@ -1775,7 +1775,7 @@
|
||||||
await pc2.setRemoteDescription({type: "rollback"});
|
await pc2.setRemoteDescription({type: "rollback"});
|
||||||
|
|
||||||
// Transceiver should be _gone_, again. replaceTrack doesn't prevent this,
|
// Transceiver should be _gone_, again. replaceTrack doesn't prevent this,
|
||||||
// nor does setDirection.
|
// nor does setting direction.
|
||||||
hasProps(pc2.getTransceivers(), []);
|
hasProps(pc2.getTransceivers(), []);
|
||||||
|
|
||||||
// Setting the same offer for a _third_ time should do the same thing
|
// Setting the same offer for a _third_ time should do the same thing
|
||||||
|
|
|
@ -24,6 +24,14 @@ test(function() {
|
||||||
}, "RTCPeerConnection member " + name + " should not exist");
|
}, "RTCPeerConnection member " + name + " should not exist");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
[
|
||||||
|
"setDirection",
|
||||||
|
].forEach(function(name) {
|
||||||
|
test(function() {
|
||||||
|
assert_false(name in RTCRtpTransceiver.prototype);
|
||||||
|
}, "RTCRtpTransceiver member " + name + " should not exist");
|
||||||
|
});
|
||||||
|
|
||||||
[
|
[
|
||||||
"DataChannel",
|
"DataChannel",
|
||||||
"mozRTCIceCandidate",
|
"mozRTCIceCandidate",
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/basic.vtt">
|
<track src="support/basic.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/regionanchor_x_50_percent.vtt">
|
<track src="support/regionanchor_x_50_percent.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/regionanchor_y_50_percent.vtt">
|
<track src="support/regionanchor_y_50_percent.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshotDelayed(3000);">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshotDelayed(3000);">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/scroll_up.vtt">
|
<track src="support/scroll_up.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/single_line_top_left.vtt">
|
<track src="support/single_line_top_left.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/viewportanchor_x_50_percent.vtt">
|
<track src="support/viewportanchor_x_50_percent.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
|
@ -12,8 +12,8 @@ body { margin:0 }
|
||||||
</style>
|
</style>
|
||||||
<script src="/common/reftest-wait.js"></script>
|
<script src="/common/reftest-wait.js"></script>
|
||||||
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
<video width="320" height="180" autoplay onplaying="this.onplaying = null; this.pause(); takeScreenshot();">
|
||||||
<source src="../media/white.webm" type="video/webm">
|
<source src="/media/white.webm" type="video/webm">
|
||||||
<source src="../media/white.mp4" type="video/mp4">
|
<source src="/media/white.mp4" type="video/mp4">
|
||||||
<track src="support/viewportanchor_y_50_percent.vtt">
|
<track src="support/viewportanchor_y_50_percent.vtt">
|
||||||
<script>
|
<script>
|
||||||
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
document.getElementsByTagName('track')[0].track.mode = 'showing';
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue