Loading dom/media/test/AutoplayTestUtils.js +12 −0 Original line number Diff line number Diff line Loading @@ -25,3 +25,15 @@ function log(msg) { log_pane.appendChild(document.createTextNode(msg)); log_pane.appendChild(document.createElement("br")); } const autoplayPermission = "autoplay-media"; async function pushAutoplayAllowedPermission() { return new Promise((resolve, reject) => { SpecialPowers.pushPermissions([{ 'type': autoplayPermission, 'allow': true, 'context': document }], resolve); }); } dom/media/test/file_autoplay_policy_permission.html 0 → 100644 +54 −0 Original line number Diff line number Diff line <!DOCTYPE HTML> <html> <head> <title>Autoplay policy window</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <script type="text/javascript" src="manifest.js"></script> <script type="text/javascript" src="AutoplayTestUtils.js"></script> </head> <body> <pre id="test"> <script> window.ok = window.opener.ok; window.is = window.opener.is; window.info = window.opener.info; async function testAutoplayPermission(testCase, parentWindow) { info("trying to play origin=" + testCase.origin + " shouldPlay=" + testCase.shouldPlay); const url = testCase.origin + "/tests/dom/media/test/file_autoplay_policy_activation_frame.html" info("canPlayIn " + url); // Create a child iframe... var frame = document.createElement("iframe"); frame.src = url; // Wait for it to load... document.body.appendChild(frame); info("awaiting loaded"); await once(frame, "load"); // Ask the child iframe to try to play video. info("loaded, trying to play"); frame.contentWindow.postMessage("play-audible", "*"); // Wait for the iframe to tell us whether it could play video. let result = await nextWindowMessage(); is(result.data.played, testCase.shouldPlay, testCase.message); } nextWindowMessage().then( async (event) => { try { await testAutoplayPermission(event.data, event.source); } catch (e) { ok(false, "Caught exception " + e + " " + e.message + " " + e.stackTrace); } event.source.postMessage("done", "*"); }); </script> </pre> </body> </html> dom/media/test/mochitest.ini +3 −0 Original line number Diff line number Diff line Loading @@ -442,6 +442,7 @@ support-files = file_autoplay_policy_unmute_pauses.html file_autoplay_policy_activation_window.html file_autoplay_policy_activation_frame.html file_autoplay_policy_permission.html file_autoplay_policy_play_before_loadedmetadata.html flac-s24.flac flac-s24.flac^headers^ Loading Loading @@ -704,6 +705,8 @@ skip-if = android_version == '23' # bug 1424903 skip-if = android_version == '23' # bug 1424903 [test_autoplay_policy_play_before_loadedmetadata.html] skip-if = android_version == '23' # bug 1424903 [test_autoplay_policy_permission.html] skip-if = android_version == '23' # bug 1424903 [test_buffered.html] skip-if = android_version == '15' || android_version == '22' # bug 1308388, android(bug 1232305) [test_bug448534.html] Loading dom/media/test/test_autoplay_policy_permission.html 0 → 100644 +77 −0 Original line number Diff line number Diff line <!DOCTYPE HTML> <html> <head> <title>Autoplay policy test</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> <script type="text/javascript" src="manifest.js"></script> <script type="text/javascript" src="AutoplayTestUtils.js"></script> </head> <body> <pre id="test"> <script> // Tests that origins with "autoplay-media" permission can autoplay. gTestPrefs.push(["media.autoplay.enabled", false], ["media.autoplay.enabled.user-gestures-needed", true]); SpecialPowers.pushPrefEnv({ 'set': gTestPrefs }, () => { runTest(); }); async function canPlayIn(testCase) { // Run test in a new window, to ensure its user gesture // activation state isn't tainted by preceeding tests. let child = window.open("file_autoplay_policy_permission.html", "", "width=500,height=500"); await once(child, "load"); child.postMessage(testCase, "*"); let result = await nextWindowMessage(); child.close(); return result.played == true; } async function runTest() { // First verify that we can't play in a document unwhitelisted. is(window.origin, "http://mochi.test:8888", "Origin should be as we assume, otherwise the rest of the test is bogus!"); await canPlayIn({ origin: "http://mochi.test:8888", shouldPlay: false, message: "Should not be able to play unwhitelisted." }); // Add our origin to the whitelist. await pushAutoplayAllowedPermission(); // Now we should be able to play... await canPlayIn({ origin: "http://mochi.test:8888", shouldPlay: true, message: "Should be able to play since whitelisted." }); // But sub-origins should not. await canPlayIn({ origin: "http://test1.mochi.test:8888", shouldPlay: false, message: "Sub origin should not count as whitelisted." }); await canPlayIn({ origin: "http://sub1.test1.mochi.test:8888", shouldPlay: false, message: "Sub-sub-origins should not count as whitelisted." }); SimpleTest.finish(); } SimpleTest.waitForExplicitFinish(); </script> </pre> </body> </html> No newline at end of file Loading
dom/media/test/AutoplayTestUtils.js +12 −0 Original line number Diff line number Diff line Loading @@ -25,3 +25,15 @@ function log(msg) { log_pane.appendChild(document.createTextNode(msg)); log_pane.appendChild(document.createElement("br")); } const autoplayPermission = "autoplay-media"; async function pushAutoplayAllowedPermission() { return new Promise((resolve, reject) => { SpecialPowers.pushPermissions([{ 'type': autoplayPermission, 'allow': true, 'context': document }], resolve); }); }
dom/media/test/file_autoplay_policy_permission.html 0 → 100644 +54 −0 Original line number Diff line number Diff line <!DOCTYPE HTML> <html> <head> <title>Autoplay policy window</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script> <script type="text/javascript" src="manifest.js"></script> <script type="text/javascript" src="AutoplayTestUtils.js"></script> </head> <body> <pre id="test"> <script> window.ok = window.opener.ok; window.is = window.opener.is; window.info = window.opener.info; async function testAutoplayPermission(testCase, parentWindow) { info("trying to play origin=" + testCase.origin + " shouldPlay=" + testCase.shouldPlay); const url = testCase.origin + "/tests/dom/media/test/file_autoplay_policy_activation_frame.html" info("canPlayIn " + url); // Create a child iframe... var frame = document.createElement("iframe"); frame.src = url; // Wait for it to load... document.body.appendChild(frame); info("awaiting loaded"); await once(frame, "load"); // Ask the child iframe to try to play video. info("loaded, trying to play"); frame.contentWindow.postMessage("play-audible", "*"); // Wait for the iframe to tell us whether it could play video. let result = await nextWindowMessage(); is(result.data.played, testCase.shouldPlay, testCase.message); } nextWindowMessage().then( async (event) => { try { await testAutoplayPermission(event.data, event.source); } catch (e) { ok(false, "Caught exception " + e + " " + e.message + " " + e.stackTrace); } event.source.postMessage("done", "*"); }); </script> </pre> </body> </html>
dom/media/test/mochitest.ini +3 −0 Original line number Diff line number Diff line Loading @@ -442,6 +442,7 @@ support-files = file_autoplay_policy_unmute_pauses.html file_autoplay_policy_activation_window.html file_autoplay_policy_activation_frame.html file_autoplay_policy_permission.html file_autoplay_policy_play_before_loadedmetadata.html flac-s24.flac flac-s24.flac^headers^ Loading Loading @@ -704,6 +705,8 @@ skip-if = android_version == '23' # bug 1424903 skip-if = android_version == '23' # bug 1424903 [test_autoplay_policy_play_before_loadedmetadata.html] skip-if = android_version == '23' # bug 1424903 [test_autoplay_policy_permission.html] skip-if = android_version == '23' # bug 1424903 [test_buffered.html] skip-if = android_version == '15' || android_version == '22' # bug 1308388, android(bug 1232305) [test_bug448534.html] Loading
dom/media/test/test_autoplay_policy_permission.html 0 → 100644 +77 −0 Original line number Diff line number Diff line <!DOCTYPE HTML> <html> <head> <title>Autoplay policy test</title> <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> <script type="text/javascript" src="manifest.js"></script> <script type="text/javascript" src="AutoplayTestUtils.js"></script> </head> <body> <pre id="test"> <script> // Tests that origins with "autoplay-media" permission can autoplay. gTestPrefs.push(["media.autoplay.enabled", false], ["media.autoplay.enabled.user-gestures-needed", true]); SpecialPowers.pushPrefEnv({ 'set': gTestPrefs }, () => { runTest(); }); async function canPlayIn(testCase) { // Run test in a new window, to ensure its user gesture // activation state isn't tainted by preceeding tests. let child = window.open("file_autoplay_policy_permission.html", "", "width=500,height=500"); await once(child, "load"); child.postMessage(testCase, "*"); let result = await nextWindowMessage(); child.close(); return result.played == true; } async function runTest() { // First verify that we can't play in a document unwhitelisted. is(window.origin, "http://mochi.test:8888", "Origin should be as we assume, otherwise the rest of the test is bogus!"); await canPlayIn({ origin: "http://mochi.test:8888", shouldPlay: false, message: "Should not be able to play unwhitelisted." }); // Add our origin to the whitelist. await pushAutoplayAllowedPermission(); // Now we should be able to play... await canPlayIn({ origin: "http://mochi.test:8888", shouldPlay: true, message: "Should be able to play since whitelisted." }); // But sub-origins should not. await canPlayIn({ origin: "http://test1.mochi.test:8888", shouldPlay: false, message: "Sub origin should not count as whitelisted." }); await canPlayIn({ origin: "http://sub1.test1.mochi.test:8888", shouldPlay: false, message: "Sub-sub-origins should not count as whitelisted." }); SimpleTest.finish(); } SimpleTest.waitForExplicitFinish(); </script> </pre> </body> </html> No newline at end of file