browser_fullscreen-newtab.js (2829B)
1 "use strict"; 2 3 const kPage = 4 "https://example.org/browser/" + 5 "dom/base/test/fullscreen/file_fullscreen-newtab.html"; 6 7 function getSizeMode() { 8 return document.documentElement.getAttribute("sizemode"); 9 } 10 11 async function runTest() { 12 await BrowserTestUtils.withNewTab( 13 { 14 gBrowser, 15 url: kPage, 16 }, 17 async function (browser) { 18 let promiseFsEvents = SpecialPowers.spawn(browser, [], function () { 19 return new Promise(resolve => { 20 let countFsChange = 0; 21 let countFsError = 0; 22 function checkAndResolve() { 23 if (countFsChange > 0 && countFsError > 0) { 24 Assert.ok( 25 false, 26 "Got both fullscreenchange and fullscreenerror events" 27 ); 28 } else if (countFsChange > 2) { 29 Assert.ok(false, "Got too many fullscreenchange events"); 30 } else if (countFsError > 1) { 31 Assert.ok(false, "Got too many fullscreenerror events"); 32 } else if (countFsChange == 2 || countFsError == 1) { 33 resolve(); 34 } 35 } 36 37 content.document.addEventListener("fullscreenchange", () => { 38 ++countFsChange; 39 checkAndResolve(); 40 }); 41 content.document.addEventListener("fullscreenerror", () => { 42 ++countFsError; 43 checkAndResolve(); 44 }); 45 }); 46 }); 47 let promiseNewTab = BrowserTestUtils.waitForNewTab( 48 gBrowser, 49 "about:blank" 50 ); 51 await BrowserTestUtils.synthesizeMouseAtCenter("#link", {}, browser); 52 let [newtab] = await Promise.all([promiseNewTab, promiseFsEvents]); 53 await BrowserTestUtils.removeTab(newtab); 54 55 if (document.fullscreen) { 56 info( 57 "The chrome document is still in fullscreen, waiting for it to exit." 58 ); 59 // Ensure the browser exits fullscreen state in reasonable time. 60 await Promise.race([ 61 BrowserTestUtils.waitForEvent(document, "fullscreenchange"), 62 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 63 new Promise(resolve => setTimeout(resolve, 5000)), 64 ]); 65 } 66 67 ok(!window.fullScreen, "The chrome window should not be in fullscreen"); 68 ok( 69 !document.fullscreen, 70 "The chrome document should not be in fullscreen" 71 ); 72 } 73 ); 74 } 75 76 add_task(async function () { 77 await pushPrefs( 78 ["test.wait300msAfterTabSwitch", true], 79 ["full-screen-api.transition-duration.enter", "0 0"], 80 ["full-screen-api.transition-duration.leave", "0 0"] 81 ); 82 await runTest(); 83 }); 84 85 add_task(async function () { 86 await pushPrefs( 87 ["full-screen-api.transition-duration.enter", "200 200"], 88 ["full-screen-api.transition-duration.leave", "200 200"] 89 ); 90 await runTest(); 91 });