fune/browser/components/sessionstore/test/browser_merge_closed_tabs.js
Sam Foster a3004a21be Bug 1819675 - rename SessionStore.getClosedTabCount and getClosedTabData to getClosedTabCountForWindow and getClosedTabDataForWindow. r=dao,fxview-reviewers,kcochrane
- As closed tabs will change to mean closed tabs from all windows, rename these functions to make
  changes in later patches clearer when we mean closed tabs from this window specifically, or closed
  tabs for all private/non-private windows

Differential Revision: https://phabricator.services.mozilla.com/D177849
2023-05-30 18:54:12 +00:00

116 lines
3 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/**
* This test ensures that closed tabs are merged when restoring
* a window state without overwriting tabs.
*/
add_task(async function () {
const initialState = {
windows: [
{
tabs: [
{ entries: [{ url: "about:blank", triggeringPrincipal_base64 }] },
],
_closedTabs: [
{
state: {
entries: [
{ ID: 1000, url: "about:blank", triggeringPrincipal_base64 },
],
},
},
{
state: {
entries: [
{ ID: 1001, url: "about:blank", triggeringPrincipal_base64 },
],
},
},
],
},
],
};
const restoreState = {
windows: [
{
tabs: [
{ entries: [{ url: "about:robots", triggeringPrincipal_base64 }] },
],
_closedTabs: [
{
state: {
entries: [
{ ID: 1002, url: "about:robots", triggeringPrincipal_base64 },
],
},
},
{
state: {
entries: [
{ ID: 1003, url: "about:robots", triggeringPrincipal_base64 },
],
},
},
{
state: {
entries: [
{ ID: 1004, url: "about:robots", triggeringPrincipal_base64 },
],
},
},
],
},
],
};
const maxTabsUndo = 4;
Services.prefs.setIntPref("browser.sessionstore.max_tabs_undo", maxTabsUndo);
// Open a new window and restore it to an initial state.
let win = await promiseNewWindowLoaded({ private: false });
await setWindowState(win, initialState, true);
is(
SessionStore.getClosedTabCountForWindow(win),
2,
"2 closed tabs after restoring initial state"
);
// Restore the new state but do not overwrite existing tabs (this should
// cause the closed tabs to be merged).
await setWindowState(win, restoreState);
// Verify the windows closed tab data is correct.
let iClosed = initialState.windows[0]._closedTabs;
let rClosed = restoreState.windows[0]._closedTabs;
let cData = SessionStore.getClosedTabDataForWindow(win);
is(
cData.length,
Math.min(iClosed.length + rClosed.length, maxTabsUndo),
"Number of closed tabs is correct"
);
// When the closed tabs are merged the restored tabs are considered to be
// closed more recently.
for (let i = 0; i < cData.length; i++) {
if (i < rClosed.length) {
is(
cData[i].state.entries[0].ID,
rClosed[i].state.entries[0].ID,
"Closed tab entry matches"
);
} else {
is(
cData[i].state.entries[0].ID,
iClosed[i - rClosed.length].state.entries[0].ID,
"Closed tab entry matches"
);
}
}
// Clean up.
Services.prefs.clearUserPref("browser.sessionstore.max_tabs_undo");
await BrowserTestUtils.closeWindow(win);
});