browser_autoplay_policy_play_twice.js (1690B)
1 const VIDEO_PAGE = GetTestWebBasedURL("file_video.html"); 2 3 add_setup(async function () { 4 await SpecialPowers.pushPrefEnv({ 5 set: [["test.wait300msAfterTabSwitch", true]], 6 }); 7 }); 8 9 function setup_test_preference(enableUserGesture) { 10 let state = enableUserGesture ? "enable" : "disable"; 11 info(`- set pref : ${state} user gesture -`); 12 return SpecialPowers.pushPrefEnv({ 13 set: [ 14 ["media.autoplay.default", SpecialPowers.Ci.nsIAutoplay.BLOCKED], 15 ["media.autoplay.blocking_policy", enableUserGesture ? 0 : 1], 16 ], 17 }); 18 } 19 20 async function allow_play_for_played_video() { 21 info("- open new tab -"); 22 let tab = await BrowserTestUtils.openNewForegroundTab( 23 window.gBrowser, 24 "about:blank" 25 ); 26 BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, VIDEO_PAGE); 27 await BrowserTestUtils.browserLoaded(tab.linkedBrowser); 28 29 info("- simulate user-click to start video -"); 30 await BrowserTestUtils.synthesizeMouseAtCenter( 31 "#v", 32 { button: 0 }, 33 tab.linkedBrowser 34 ); 35 36 async function play_video_again() { 37 let video = content.document.getElementById("v"); 38 ok(!video.paused, "video is playing"); 39 40 info("- call video play() again -"); 41 try { 42 await video.play(); 43 ok(true, "success to resolve play promise"); 44 } catch (e) { 45 ok(false, "promise should not be rejected"); 46 } 47 } 48 await SpecialPowers.spawn(tab.linkedBrowser, [], play_video_again); 49 50 info("- remove tab -"); 51 BrowserTestUtils.removeTab(tab); 52 } 53 54 add_task(async function start_test() { 55 await setup_test_preference(true); 56 await allow_play_for_played_video(); 57 58 await setup_test_preference(false); 59 await allow_play_for_played_video(); 60 });