diff options
Diffstat (limited to 'browser/components/sessionstore/test/browser_closed_tabs_windows.js')
-rw-r--r-- | browser/components/sessionstore/test/browser_closed_tabs_windows.js | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/browser/components/sessionstore/test/browser_closed_tabs_windows.js b/browser/components/sessionstore/test/browser_closed_tabs_windows.js new file mode 100644 index 0000000000..203c8c8d96 --- /dev/null +++ b/browser/components/sessionstore/test/browser_closed_tabs_windows.js @@ -0,0 +1,337 @@ +const ORIG_STATE = ss.getBrowserState(); + +const multiWindowState = { + windows: [ + { + tabs: [ + { + entries: [ + { + url: "https://example.com#win-0-tab-0", + triggeringPrincipal_base64, + }, + ], + }, + ], + _closedTabs: [ + { + state: { + entries: [ + { + url: "https://example.com#win-0-closed-0", + triggeringPrincipal_base64, + }, + ], + }, + }, + { + state: { + entries: [ + { + url: "https://example.com#win-0-closed-1", + triggeringPrincipal_base64, + }, + ], + }, + }, + ], + selected: 1, + }, + { + tabs: [ + { + entries: [ + { + url: "https://example.org#win-1-tab-0", + triggeringPrincipal_base64, + }, + ], + }, + { + entries: [ + { + url: "https://example.org#win-1-tab-1", + triggeringPrincipal_base64, + }, + ], + }, + ], + _closedTabs: [ + { + state: { + entries: [ + { + url: "https://example.org#win-1-closed-0", + triggeringPrincipal_base64, + }, + ], + }, + }, + ], + selected: 1, + }, + ], + _closedWindows: [ + { + tabs: [ + { + entries: [ + { + url: "https://example.org#closedWin-0-tab-0", + triggeringPrincipal_base64, + }, + ], + }, + ], + _closedTabs: [ + { + state: { + entries: [ + { + url: "https://example.org##closedWin-0-closed-0", + triggeringPrincipal_base64, + }, + ], + }, + }, + ], + }, + ], +}; + +add_setup(async function testSetup() { + await SessionStoreTestUtils.promiseBrowserState(multiWindowState); +}); + +add_task(async function test_ClosedTabMethods() { + let sessionStoreUpdated; + const browserWindows = BrowserWindowTracker.orderedWindows; + Assert.equal( + browserWindows.length, + multiWindowState.windows.length, + `We expect ${multiWindowState.windows} open browser windows` + ); + info( + `After setup, current tab URI: ${browserWindows[0].gBrowser.currentURI.spec}` + ); + Assert.equal( + browserWindows[0].gBrowser.currentURI.spec, + "https://example.com/#win-0-tab-0", + "The first tab of the first window we restored is current" + ); + + for (let idx = 0; idx < browserWindows.length; idx++) { + const win = browserWindows[idx]; + const winData = multiWindowState.windows[idx]; + info(`window ${idx}: ${win.gBrowser.selectedBrowser.currentURI.spec}`); + Assert.equal( + winData._closedTabs.length, + SessionStore.getClosedTabDataForWindow(win).length, + `getClosedTabDataForWindow() for open window ${idx} returned the expected number of objects` + ); + } + + let closedCount; + closedCount = SessionStore.getClosedTabCountForWindow(browserWindows[0]); + Assert.equal(2, closedCount, "2 closed tab for this window"); + + closedCount = SessionStore.getClosedTabCountForWindow(browserWindows[1]); + Assert.equal(1, closedCount, "1 closed tab for this window"); + + closedCount = SessionStore.getClosedTabCount(); + // 3 closed tabs from open windows, 1 closed tab from the closed window + Assert.equal(4, closedCount, "4 closed tab for all windows"); + + let allWindowsClosedTabs = SessionStore.getClosedTabData(); + Assert.equal( + SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: false }), + allWindowsClosedTabs.length, + "getClosedTabData returned the correct number of entries" + ); + for (let tabData of allWindowsClosedTabs) { + Assert.ok(tabData.sourceWindowId, "each tab has a sourceWindowId property"); + } + + closedCount = SessionStore.getClosedTabCountFromClosedWindows(); + Assert.equal(1, closedCount, "1 closed tabs from closed windows"); + + // *********************************** + info("check with the all-windows pref off"); + await SpecialPowers.pushPrefEnv({ + set: [["browser.sessionstore.closedTabsFromAllWindows", false]], + }); + + info("With this pref off, the closed tab count is that of the top window"); + closedCount = SessionStore.getClosedTabCount({ + closedTabsFromClosedWindows: false, + }); // Equivalent to SS.getClosedTabCountForWindow(browserWindows[0]), + Assert.equal(closedCount, 2, `2 closed tabs from the top (first) window`); + Assert.equal( + SessionStore.getClosedTabCount(), // includes closed tabs from closed windows, but only the top open window + 3, + `3 closed tabs when counting the top window and the closed window` + ); + + allWindowsClosedTabs = SessionStore.getClosedTabData(); // Equivalent to SS.getClosedTabDataForWindow(browserWindows[0]), + Assert.equal( + allWindowsClosedTabs.length, + 2, + "getClosedTabData returned the number of entries for the top window" + ); + SpecialPowers.popPrefEnv(); + await TestUtils.waitForTick(); + // + // *********************************** + + closedCount = SessionStore.getClosedTabCount(); + Assert.equal( + 4, + closedCount, + "Sanity-check, with the pref on, we're back to 4 closed tabs" + ); + + // *********************************** + info("check with the closed-tabs-from-closed-windows pref off"); + await SpecialPowers.pushPrefEnv({ + set: [["browser.sessionstore.closedTabsFromClosedWindows", false]], + }); + + info( + "With this pref off, the closed tab count is that of only the only windows" + ); + closedCount = SessionStore.getClosedTabCount(); // Equivalent to SS.getClosedTabCountForWindow(browserWindows[0]), + Assert.equal(3, closedCount, `3 closed tabs from the open windows`); + + allWindowsClosedTabs = SessionStore.getClosedTabData(); + Assert.equal( + allWindowsClosedTabs.length, + 3, + "getClosedTabData returned the number of entries for the top window" + ); + SpecialPowers.popPrefEnv(); + await TestUtils.waitForTick(); + // + // *********************************** + + info("forget the closed tab from the closed window"); + sessionStoreUpdated = TestUtils.topicObserved( + "sessionstore-closed-objects-changed" + ); + SessionStore.forgetClosedTab( + { sourceClosedId: SessionStore.getClosedWindowData()[0].closedId }, + 0 + ); + await sessionStoreUpdated; + + closedCount = SessionStore.getClosedTabCountFromClosedWindows(); + Assert.equal( + 0, + closedCount, + "0 closed tabs from closed windows after forgetting them" + ); + closedCount = SessionStore.getClosedTabCount(); + Assert.equal( + 3, + closedCount, + "3 closed tabs now that the closed tab from the closed window is forgotten" + ); + + info("restore one of the closed tabs from an open window"); + sessionStoreUpdated = TestUtils.topicObserved( + "sessionstore-closed-objects-changed" + ); + + SessionStore.undoCloseTab(browserWindows[0], 0); + await sessionStoreUpdated; + + Assert.equal( + 1, + SessionStore.getClosedTabCountForWindow(browserWindows[0]), + "Now theres one closed tab in the first window" + ); + Assert.equal( + 1, + SessionStore.getClosedTabCountForWindow(browserWindows[1]), + "Theres still one closed tab in the 2nd window" + ); + + Assert.equal( + 2, + SessionStore.getClosedTabCount(), + "Theres a total for 2 closed tabs" + ); + + // Bug 1836198 - sometimes this reports 1 not 2. + Assert.equal( + 2, + SessionStore.getClosedTabData().length, + "We get the right number of tab entries from getClosedTabData()" + ); + + info("forget the last closed tab in the first window"); + sessionStoreUpdated = TestUtils.topicObserved( + "sessionstore-closed-objects-changed" + ); + SessionStore.forgetClosedTab(browserWindows[0], 0); + await sessionStoreUpdated; + + Assert.equal( + 0, + SessionStore.getClosedTabCountForWindow(browserWindows[0]), + "The first window has 0 closed tabs after forgetting the last tab" + ); + Assert.equal( + 1, + SessionStore.getClosedTabCountForWindow(browserWindows[1]), + "Theres still one closed tab in the 2nd window" + ); + + Assert.equal( + 1, + SessionStore.getClosedTabCount(), + "Theres a total of one closed tabs" + ); + Assert.equal( + 1, + SessionStore.getClosedTabData().length, + "We get the right number of tab entries from getClosedTabData()" + ); + + info( + "Close the 2nd window. This makes its 1 closed tab a 'closed tab from closed window'" + ); + await promiseAllButPrimaryWindowClosed(); + + Assert.equal( + 0, + SessionStore.getClosedTabCountForWindow(browserWindows[0]), + "Closed tab count is unchanged after closing the other browser window" + ); + + Assert.equal( + 0, + SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: false }), + "Theres now 0 closed tabs from open windows after closing the other browser window which had the last one" + ); + + Assert.equal( + 1, + SessionStore.getClosedTabCount({ closedTabsFromClosedWindows: true }), + "Theres now 1 closed tabs including closed windows after closing the other browser window which had the last one" + ); + + Assert.equal( + 0, + SessionStore.getClosedTabData().length, + "We get the right number of tab entries from getClosedTabData()" + ); + + Assert.equal( + 1, + SessionStore.getClosedTabCountFromClosedWindows(), + "There's 1 closed tabs from closed windows" + ); + + // Cleanup. + await promiseBrowserState(ORIG_STATE); +}); |