browser_bug1328501.js (2606B)
1 const HTML_URL = 2 "http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501.html"; 3 const FRAME_URL = 4 "http://mochi.test:8888/browser/docshell/test/browser/file_bug1328501_frame.html"; 5 const FRAME_SCRIPT_URL = 6 "chrome://mochitests/content/browser/docshell/test/browser/file_bug1328501_framescript.js"; 7 add_task(async function testMultiFrameRestore() { 8 await SpecialPowers.pushPrefEnv({ 9 set: [ 10 ["browser.navigation.requireUserInteraction", false], 11 // Disable bfcache so that dummy_page.html doesn't enter there. 12 // The actual test page does already prevent bfcache and the test 13 // is just for http-on-opening-request handling in the child process. 14 ["browser.sessionhistory.max_total_viewers", 0], 15 ], 16 }); 17 await BrowserTestUtils.withNewTab( 18 { gBrowser, url: HTML_URL }, 19 async function (browser) { 20 // Navigate 2 subframes and load about:blank. 21 let browserLoaded = BrowserTestUtils.browserLoaded(browser); 22 await SpecialPowers.spawn( 23 browser, 24 [FRAME_URL], 25 async function (FRAME_URL) { 26 function frameLoaded(frame) { 27 frame.contentWindow.location = FRAME_URL; 28 return new Promise(r => (frame.onload = r)); 29 } 30 let frame1 = content.document.querySelector("#testFrame1"); 31 let frame2 = content.document.querySelector("#testFrame2"); 32 ok(frame1, "check found testFrame1"); 33 ok(frame2, "check found testFrame2"); 34 await frameLoaded(frame1); 35 await frameLoaded(frame2); 36 content.location = "dummy_page.html"; 37 } 38 ); 39 await browserLoaded; 40 41 // Load a frame script to query nsIDOMWindow on "http-on-opening-request", 42 // which will force about:blank content viewers being created. 43 browser.messageManager.loadFrameScript(FRAME_SCRIPT_URL, false); 44 45 // The frame script also forwards frames-loaded. 46 let framesLoaded = BrowserTestUtils.waitForMessage( 47 browser.messageManager, 48 "test:frames-loaded" 49 ); 50 51 browser.goBack(); 52 await framesLoaded; 53 // eslint-disable-next-line mozilla/no-arbitrary-setTimeout 54 await new Promise(r => setTimeout(r, 1000)); 55 await SpecialPowers.spawn(browser, [FRAME_URL], FRAME_URL => { 56 is( 57 content.document.querySelector("#testFrame1").contentWindow.location 58 .href, 59 FRAME_URL 60 ); 61 is( 62 content.document.querySelector("#testFrame2").contentWindow.location 63 .href, 64 FRAME_URL 65 ); 66 }); 67 } 68 ); 69 });