summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js')
-rw-r--r--browser/components/sessionstore/test/browser_revive_crashed_bg_tabs.js59
1 files changed, 59 insertions, 0 deletions
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,<html><body>A%20regular,%20everyday,%20normal%20page.";
+const PAGE_2 =
+ "data:text/html,<html><body>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);
+});