summaryrefslogtreecommitdiffstats
path: root/browser/components/sessionstore/test/browser_490040.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/sessionstore/test/browser_490040.js')
-rw-r--r--browser/components/sessionstore/test/browser_490040.js105
1 files changed, 105 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_490040.js b/browser/components/sessionstore/test/browser_490040.js
new file mode 100644
index 0000000000..623a9ea0ab
--- /dev/null
+++ b/browser/components/sessionstore/test/browser_490040.js
@@ -0,0 +1,105 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// Only windows with open tabs are restorable. Windows where a lone tab is
+// detached may have _closedTabs, but is left with just an empty tab.
+const STATES = [
+ {
+ shouldBeAdded: true,
+ windowState: {
+ windows: [
+ {
+ tabs: [
+ {
+ entries: [
+ {
+ url: "http://example.com",
+ triggeringPrincipal_base64,
+ title: "example.com",
+ },
+ ],
+ },
+ ],
+ selected: 1,
+ _closedTabs: [],
+ },
+ ],
+ },
+ },
+ {
+ shouldBeAdded: false,
+ windowState: {
+ windows: [
+ {
+ tabs: [{ entries: [] }],
+ _closedTabs: [],
+ },
+ ],
+ },
+ },
+ {
+ shouldBeAdded: false,
+ windowState: {
+ windows: [
+ {
+ tabs: [{ entries: [] }],
+ _closedTabs: [
+ {
+ state: {
+ entries: [
+ {
+ url: "http://example.com",
+ triggeringPrincipal_base64,
+ index: 1,
+ },
+ ],
+ },
+ },
+ ],
+ },
+ ],
+ },
+ },
+ {
+ shouldBeAdded: false,
+ windowState: {
+ windows: [
+ {
+ tabs: [{ entries: [] }],
+ _closedTabs: [],
+ extData: { keyname: "pi != " + Math.random() },
+ },
+ ],
+ },
+ },
+];
+
+add_task(async function test_bug_490040() {
+ for (let state of STATES) {
+ // Ensure we can store the window if needed.
+ let startingClosedWindowCount = ss.getClosedWindowCount();
+ await pushPrefs([
+ "browser.sessionstore.max_windows_undo",
+ startingClosedWindowCount + 1,
+ ]);
+
+ let curClosedWindowCount = ss.getClosedWindowCount();
+ let win = await BrowserTestUtils.openNewBrowserWindow();
+
+ await setWindowState(win, state.windowState, true);
+ if (state.windowState.windows[0].tabs.length) {
+ await BrowserTestUtils.browserLoaded(win.gBrowser.selectedBrowser);
+ }
+
+ await BrowserTestUtils.closeWindow(win);
+
+ is(
+ ss.getClosedWindowCount(),
+ curClosedWindowCount + (state.shouldBeAdded ? 1 : 0),
+ "That window should " +
+ (state.shouldBeAdded ? "" : "not ") +
+ "be restorable"
+ );
+ }
+});