browser_fullscreen-navigation-history.js (3424B)
1 /* Any copyright is dedicated to the Public Domain. 2 http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 requestLongerTimeout(2); 7 8 // Import helpers 9 Services.scriptloader.loadSubScript( 10 "chrome://mochitests/content/browser/dom/base/test/fullscreen/fullscreen_helpers.js", 11 this 12 ); 13 14 add_setup(async function () { 15 await pushPrefs( 16 ["test.wait300msAfterTabSwitch", true], 17 ["full-screen-api.transition-duration.enter", "0 0"], 18 ["full-screen-api.transition-duration.leave", "0 0"], 19 ["full-screen-api.allow-trusted-requests-only", false] 20 ); 21 }); 22 23 function preventBFCache(aBrowsingContext, aPrevent) { 24 return SpecialPowers.spawn(aBrowsingContext, [aPrevent], prevent => { 25 if (prevent) { 26 // Using a dummy onunload listener to disable the bfcache. 27 content.window.addEventListener("unload", () => {}); 28 } 29 content.window.addEventListener( 30 "pagehide", 31 e => { 32 // XXX checking persisted property causes intermittent failures, so we 33 // dump the value instead, bug 1822263. 34 // is(e.persisted, !prevent, `Check BFCache state`); 35 info(`Check BFCache state: e.persisted is ${e.persisted}`); 36 }, 37 { once: true } 38 ); 39 }); 40 } 41 42 [true, false].forEach(crossOrigin => { 43 [true, false].forEach(initialPagePreventsBFCache => { 44 [true, false].forEach(fullscreenPagePreventsBFCache => { 45 add_task(async function navigation_history() { 46 info( 47 `crossOrigin: ${crossOrigin}, initialPagePreventsBFCache: ${initialPagePreventsBFCache}, fullscreenPagePreventsBFCache: ${fullscreenPagePreventsBFCache}` 48 ); 49 await BrowserTestUtils.withNewTab( 50 { 51 gBrowser, 52 url: "https://example.com/browser/dom/base/test/fullscreen/dummy_page.html", 53 }, 54 async function (browser) { 55 // Maybe prevent BFCache on initial page. 56 await preventBFCache( 57 browser.browsingContext, 58 initialPagePreventsBFCache 59 ); 60 61 // Navigate to fullscreen page. 62 const url = crossOrigin 63 ? "https://example.org/browser/dom/base/test/fullscreen/file_fullscreen-iframe-inner.html" 64 : "https://example.com/browser/dom/base/test/fullscreen/file_fullscreen-iframe-inner.html"; 65 const loaded = BrowserTestUtils.browserLoaded(browser, false, url); 66 BrowserTestUtils.startLoadingURIString(browser, url); 67 await loaded; 68 69 // Maybe prevent BFCache on fullscreen test page. 70 await preventBFCache( 71 browser.browsingContext, 72 fullscreenPagePreventsBFCache 73 ); 74 75 // Trigger click event to enter fullscreen. 76 let promiseFsState = waitForFullscreenState(document, true); 77 SpecialPowers.spawn(browser.browsingContext, [], () => { 78 content.setTimeout(() => { 79 content.document.getElementById("div").click(); 80 }, 0); 81 }); 82 await promiseFsState; 83 84 // Navigate back to the previous page should exit fullscreen. 85 promiseFsState = waitForFullscreenState(document, false); 86 await SpecialPowers.spawn(browser.browsingContext, [], () => { 87 content.window.history.back(); 88 }); 89 await promiseFsState; 90 } 91 ); 92 }); 93 }); 94 }); 95 });