browser_revive_crashed_bg_tabs.js (1917B)
1 /* Any copyright is dedicated to the Public Domain. 2 * http://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 /** 5 * Tests that even if the user has set their tabs to restore 6 * immediately on session start, that background tabs after a 7 * content process crash restore on demand. 8 */ 9 10 "use strict"; 11 12 const PAGE_1 = 13 "data:text/html,<html><body>A%20regular,%20everyday,%20normal%20page."; 14 const PAGE_2 = 15 "data:text/html,<html><body>Another%20regular,%20everyday,%20normal%20page."; 16 17 add_setup(async function () { 18 await pushPrefs( 19 ["dom.ipc.processCount", 1], 20 ["browser.sessionstore.restore_on_demand", false] 21 ); 22 }); 23 24 add_task(async function test_revive_bg_tabs_on_demand() { 25 let newTab1 = BrowserTestUtils.addTab(gBrowser, PAGE_1); 26 let browser1 = newTab1.linkedBrowser; 27 await BrowserTestUtils.browserLoaded(browser1); 28 29 gBrowser.selectedTab = newTab1; 30 31 let newTab2 = BrowserTestUtils.addTab(gBrowser, PAGE_2); 32 let browser2 = newTab2.linkedBrowser; 33 await BrowserTestUtils.browserLoaded(browser2); 34 35 await TabStateFlusher.flush(browser2); 36 37 // Now crash the selected tab 38 let windowReady = BrowserTestUtils.waitForEvent(window, "SSWindowStateReady"); 39 await BrowserTestUtils.crashFrame(browser1); 40 41 ok(newTab1.hasAttribute("crashed"), "Selected tab should be crashed"); 42 ok(!newTab2.hasAttribute("crashed"), "Background tab should not be crashed"); 43 44 // Wait until we've had a chance to restore all tabs immediately 45 await windowReady; 46 47 // But we should not have restored the background tab 48 ok(newTab2.hasAttribute("pending"), "Background tab should be pending"); 49 50 // Now select newTab2 to make sure it restores. 51 let newTab2Restored = promiseTabRestored(newTab2); 52 gBrowser.selectedTab = newTab2; 53 await newTab2Restored; 54 55 ok(browser2.isRemoteBrowser, "Restored browser should be remote"); 56 57 BrowserTestUtils.removeTab(newTab1); 58 BrowserTestUtils.removeTab(newTab2); 59 });