/* 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" ); } });