Commit 15a5eb56 authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

Feature Policy: Add WPT tests for autoplay

Add web platform tests for the new autoplay feature.

BUG=788390

Change-Id: I621ddd4f70b6882d837397b3f2f464c99253af13
Reviewed-on: https://chromium-review.googlesource.com/806535Reviewed-by: default avatarJochen Eisinger <jochen@chromium.org>
Reviewed-by: default avatarMounir Lamouri <mlamouri@chromium.org>
Reviewed-by: default avatarIan Clelland <iclelland@chromium.org>
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Cr-Commit-Position: refs/heads/master@{#523746}
parent 45750435
...@@ -197,9 +197,11 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit_code) { ...@@ -197,9 +197,11 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit_code) {
if (!command_line.HasSwitch(switches::kForceDeviceScaleFactor)) if (!command_line.HasSwitch(switches::kForceDeviceScaleFactor))
command_line.AppendSwitchASCII(switches::kForceDeviceScaleFactor, "1.0"); command_line.AppendSwitchASCII(switches::kForceDeviceScaleFactor, "1.0");
command_line.AppendSwitchASCII( if (!command_line.HasSwitch(switches::kAutoplayPolicy)) {
switches::kAutoplayPolicy, command_line.AppendSwitchASCII(
switches::autoplay::kNoUserGestureRequiredPolicy); switches::kAutoplayPolicy,
switches::autoplay::kNoUserGestureRequiredPolicy);
}
if (!command_line.HasSwitch(switches::kStableReleaseMode)) { if (!command_line.HasSwitch(switches::kStableReleaseMode)) {
command_line.AppendSwitch( command_line.AppendSwitch(
......
...@@ -3695,3 +3695,8 @@ crbug.com/783154 [ Mac ] virtual/modern-media-controls/media/controls/modern/dou ...@@ -3695,3 +3695,8 @@ crbug.com/783154 [ Mac ] virtual/modern-media-controls/media/controls/modern/dou
# Sheriff faulures 2017-12-12 # Sheriff faulures 2017-12-12
crbug.com/794180 http/tests/devtools/layers/layer-compositing-reasons.js [ Failure Pass ] crbug.com/794180 http/tests/devtools/layers/layer-compositing-reasons.js [ Failure Pass ]
# These tests require Unified Autoplay.
crbug.com/779087 external/wpt/feature-policy/autoplay-allowed-by-feature-policy-attribute-redirect-on-load.https.sub.html [ Skip ]
crbug.com/779087 external/wpt/feature-policy/autoplay-default-feature-policy.https.sub.html [ Skip ]
crbug.com/779087 external/wpt/feature-policy/autoplay-disabled-by-feature-policy.https.sub.html [ Skip ]
...@@ -613,5 +613,10 @@ ...@@ -613,5 +613,10 @@
"prefix": "modern-media-controls", "prefix": "modern-media-controls",
"base": "media/controls/modern", "base": "media/controls/modern",
"args": ["--enable-features=UseModernMediaControls"] "args": ["--enable-features=UseModernMediaControls"]
},
{
"prefix": "unified-autoplay",
"base": "external/wpt/feature-policy",
"args": ["--autoplay-policy=document-user-activation-required"]
} }
] ]
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=/common/media.js></script>
<script src=/feature-policy/resources/featurepolicy.js></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
const relative_path = '/feature-policy/resources/feature-policy-autoplay.html';
const base_src = '/feature-policy/resources/redirect-on-load.html#';
const same_origin_src = base_src + relative_path;
const cross_origin_src = base_src + 'https://{{domains[www]}}:{{ports[https][0]}}' +
relative_path;
const header = 'Feature-Policy allow="autoplay"';
async_test(t => {
simulateGesture(t, () => {
test_feature_availability(
'autoplay', t, same_origin_src,
expect_feature_available_default, 'autoplay');
});
}, header + ' allows same-origin navigation in an iframe.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability(
'autoplay', t, cross_origin_src,
expect_feature_unavailable_default, 'autoplay');
});
}, header + ' disallows cross-origin navigation in an iframe.');
</script>
</body>
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=/common/media.js></script>
<script src=/feature-policy/resources/featurepolicy.js></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html';
const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
same_origin_src;
const feature_name = 'Feature policy "autoplay"';
const header = 'allow="autoplay" attribute';
async_test(t => {
simulateGesture(t, () => {
test_feature_availability(
'autoplay', t, same_origin_src,
expect_feature_available_default, 'autoplay');
});
}, feature_name + ' can be enabled in same-origin iframe using ' + header);
async_test(t => {
simulateGesture(t, () => {
test_feature_availability(
'autoplay', t, cross_origin_src,
expect_feature_available_default, 'autoplay');
});
}, feature_name + ' can be enabled in cross-origin iframe using ' + header);
</script>
</body>
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=/common/media.js></script>
<script src=/feature-policy/resources/featurepolicy.js></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html';
const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
same_origin_src;
const header = 'Feature-Policy header: autoplay *';
async_test(t => {
simulateGesture(t, () => {
isAutoplayAllowed().then(t.step_func_done((result) => {
assert_true(result);
}));
});
}, header + ' allows the top-level document.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, same_origin_src,
expect_feature_available_default);
});
}, header + ' allows same-origin iframes.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, cross_origin_src,
expect_feature_available_default);
});
}, header + ' allows cross-origin iframes.');
</script>
</body>
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=/common/media.js></script>
<script src=/feature-policy/resources/featurepolicy.js></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html';
const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
same_origin_src;
const header = 'Default "autoplay" feature policy ["self"]';
async_test(t => {
simulateGesture(t, () => {
isAutoplayAllowed().then(t.step_func_done((result) => {
assert_true(result);
}));
});
}, header + ' allows the top-level document.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, same_origin_src,
expect_feature_available_default);
});
}, header + ' allows same-origin iframes.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, cross_origin_src,
expect_feature_unavailable_default,);
});
}, header + ' disallows cross-origin iframes.');
</script>
</body>
<!DOCTYPE html>
<body>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<script src=/resources/testdriver.js></script>
<script src=/resources/testdriver-vendor.js></script>
<script src=/common/media.js></script>
<script src=/feature-policy/resources/featurepolicy.js></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
const same_origin_src = '/feature-policy/resources/feature-policy-autoplay.html';
const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
same_origin_src;
const header = 'Feature-Policy header: autoplay "none"';
async_test(t => {
simulateGesture(t, () => {
isAutoplayAllowed().then(t.step_func_done((result) => {
assert_false(result);
}));
});
}, header + ' disallows the top-level document.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, same_origin_src,
expect_feature_unavailable_default);
});
}, header + ' disallows same-origin iframes.');
async_test(t => {
simulateGesture(t, () => {
test_feature_availability('autoplay', t, cross_origin_src,
expect_feature_unavailable_default,);
});
}, header + ' disallows cross-origin iframes.');
</script>
</body>
...@@ -16,24 +16,24 @@ ...@@ -16,24 +16,24 @@
test_feature_availability( test_feature_availability(
'PaymentRequest()', t, same_origin_src, 'PaymentRequest()', t, same_origin_src,
expect_feature_available_default, 'payment'); expect_feature_available_default, 'payment');
}, header + ' allows same-origin relocation.'); }, header + ' allows same-origin navigation in an iframe.');
async_test(t => { async_test(t => {
test_feature_availability( test_feature_availability(
'PaymentRequest()', t, cross_origin_src, 'PaymentRequest()', t, cross_origin_src,
expect_feature_unavailable_default, 'payment'); expect_feature_unavailable_default, 'payment');
}, header + ' disallows cross-origin relocation.'); }, header + ' disallows cross-origin navigation in an iframe.');
async_test(t => { async_test(t => {
test_feature_availability( test_feature_availability(
'PaymentRequest()', t, same_origin_src, 'PaymentRequest()', t, same_origin_src,
expect_feature_available_default, 'payment', 'allowpaymentrequest'); expect_feature_available_default, 'payment', 'allowpaymentrequest');
}, header + ' allowpaymentrequest=true allows same-origin relocation.'); }, header + ' allowpaymentrequest=true allows same-origin navigation in an iframe.');
async_test(t => { async_test(t => {
test_feature_availability( test_feature_availability(
'PaymentRequest()', t, cross_origin_src, 'PaymentRequest()', t, cross_origin_src,
expect_feature_unavailable_default, 'payment', 'allowpaymentrequest'); expect_feature_unavailable_default, 'payment', 'allowpaymentrequest');
}, header + ' allowpaymentrequest=true disallows cross-origin relocation.'); }, header + ' allowpaymentrequest=true disallows cross-origin navigation in an iframe.');
</script> </script>
</body> </body>
function simulateGesture(t, callback) {
// Get or create the target element.
let target = document.getElementById('target');
if (!target) {
target = document.createElement('button');
target.setAttribute('id', 'target');
document.body.appendChild(target);
}
// Simulate a gesture in the top frame to remove any gesture based autoplay
// restrictions.
test_driver.click(target).then(callback, t.unreached_func('click failed'));
}
function isAutoplayAllowed() {
return new Promise((resolve, reject) => {
const video = document.createElement('video');
video.src = getVideoURI('/media/A4');
video.play().then(() => resolve(true), (e) => {
if (e.name == 'NotAllowedError')
resolve(false);
else
resolve(true);
});
});
}
<script src="/common/media.js"></script>
<script src=/feature-policy/resources/autoplay.js></script>
<script>
'use strict';
window.addEventListener('load', () => {
isAutoplayAllowed().then((result) => {
window.parent.postMessage({ enabled: result }, '*');
});
}, { once: true });
</script>
This suite runs feature policy tests with Unified Autoplay enabled.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment