From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser_revive_crashed_bg_tabs.js | 59 ++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js (limited to 'browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js') diff --git a/browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js b/browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js new file mode 100644 index 0000000000..86f85503d3 --- /dev/null +++ b/browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js @@ -0,0 +1,59 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests that even if the user has set their tabs to restore + * immediately on session start, that background tabs after a + * content process crash restore on demand. + */ + +"use strict"; + +const PAGE_1 = + "data:text/html,A%20regular,%20everyday,%20normal%20page."; +const PAGE_2 = + "data:text/html,Another%20regular,%20everyday,%20normal%20page."; + +add_setup(async function () { + await pushPrefs( + ["dom.ipc.processCount", 1], + ["browser.sessionstore.restore_on_demand", false] + ); +}); + +add_task(async function test_revive_bg_tabs_on_demand() { + let newTab1 = BrowserTestUtils.addTab(gBrowser, PAGE_1); + let browser1 = newTab1.linkedBrowser; + await BrowserTestUtils.browserLoaded(browser1); + + gBrowser.selectedTab = newTab1; + + let newTab2 = BrowserTestUtils.addTab(gBrowser, PAGE_2); + let browser2 = newTab2.linkedBrowser; + await BrowserTestUtils.browserLoaded(browser2); + + await TabStateFlusher.flush(browser2); + + // Now crash the selected tab + let windowReady = BrowserTestUtils.waitForEvent(window, "SSWindowStateReady"); + await BrowserTestUtils.crashFrame(browser1); + + ok(newTab1.hasAttribute("crashed"), "Selected tab should be crashed"); + ok(!newTab2.hasAttribute("crashed"), "Background tab should not be crashed"); + + // Wait until we've had a chance to restore all tabs immediately + await windowReady; + + // But we should not have restored the background tab + ok(newTab2.hasAttribute("pending"), "Background tab should be pending"); + + // Now select newTab2 to make sure it restores. + let newTab2Restored = promiseTabRestored(newTab2); + gBrowser.selectedTab = newTab2; + await newTab2Restored; + + ok(browser2.isRemoteBrowser, "Restored browser should be remote"); + + BrowserTestUtils.removeTab(newTab1); + BrowserTestUtils.removeTab(newTab2); +}); -- cgit v1.2.3