forked from mirrors/gecko-dev
337 lines
9.3 KiB
JavaScript
337 lines
9.3 KiB
JavaScript
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);
|
|
});
|