forked from mirrors/gecko-dev
- 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
171 lines
5.2 KiB
JavaScript
171 lines
5.2 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const PREF_WARN_ON_CLOSE = "browser.tabs.warnOnCloseOtherTabs";
|
|
|
|
add_task(async function setPref() {
|
|
await SpecialPowers.pushPrefEnv({
|
|
set: [[PREF_WARN_ON_CLOSE, false]],
|
|
});
|
|
});
|
|
|
|
add_task(async function withMultiSelectedTabs() {
|
|
let initialTab = gBrowser.selectedTab;
|
|
let tab1 = await addTab("https://example.com/1");
|
|
let tab2 = await addTab("https://example.com/2");
|
|
let tab3 = await addTab("https://example.com/3");
|
|
let tab4 = await addTab("https://example.com/4");
|
|
|
|
is(gBrowser.multiSelectedTabsCount, 0, "Zero multiselected tabs");
|
|
|
|
gBrowser.selectedTab = tab2;
|
|
await triggerClickOn(tab4, { shiftKey: true });
|
|
|
|
ok(!initialTab.multiselected, "InitialTab is not multiselected");
|
|
ok(!tab1.multiselected, "Tab1 is not multiselected");
|
|
ok(tab2.multiselected, "Tab2 is multiselected");
|
|
ok(tab3.multiselected, "Tab3 is multiselected");
|
|
ok(tab4.multiselected, "Tab4 is multiselected");
|
|
is(gBrowser.multiSelectedTabsCount, 3, "Three multiselected tabs");
|
|
|
|
gBrowser.removeMultiSelectedTabs();
|
|
await TestUtils.waitForCondition(
|
|
() => SessionStore.getLastClosedTabCount(window) == 3,
|
|
"wait for the multi selected tabs to close in SessionStore"
|
|
);
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
3,
|
|
"SessionStore should know how many tabs were just closed"
|
|
);
|
|
|
|
undoCloseTab();
|
|
await TestUtils.waitForCondition(
|
|
() => gBrowser.tabs.length == 5,
|
|
"wait for the tabs to reopen"
|
|
);
|
|
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
SessionStore.getClosedTabCountForWindow(window) ? 1 : 0,
|
|
"LastClosedTabCount should be reset"
|
|
);
|
|
|
|
info("waiting for the browsers to finish loading");
|
|
// Check that the tabs are restored in the correct order
|
|
for (let tabId of [2, 3, 4]) {
|
|
let browser = gBrowser.tabs[tabId].linkedBrowser;
|
|
await ContentTask.spawn(browser, tabId, async aTabId => {
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
return (
|
|
content?.document?.readyState == "complete" &&
|
|
content?.document?.location.href == "https://example.com/" + aTabId
|
|
);
|
|
}, "waiting for tab " + aTabId + " to load");
|
|
});
|
|
}
|
|
|
|
gBrowser.removeAllTabsBut(initialTab);
|
|
});
|
|
|
|
add_task(async function withBothGroupsAndTab() {
|
|
let initialTab = gBrowser.selectedTab;
|
|
let tab1 = await addTab("https://example.com/1");
|
|
let tab2 = await addTab("https://example.com/2");
|
|
let tab3 = await addTab("https://example.com/3");
|
|
|
|
gBrowser.selectedTab = tab2;
|
|
await triggerClickOn(tab3, { shiftKey: true });
|
|
|
|
ok(!initialTab.multiselected, "InitialTab is not multiselected");
|
|
ok(!tab1.multiselected, "Tab1 is not multiselected");
|
|
ok(tab2.multiselected, "Tab2 is multiselected");
|
|
ok(tab3.multiselected, "Tab3 is multiselected");
|
|
is(gBrowser.multiSelectedTabsCount, 2, "Two multiselected tabs");
|
|
|
|
gBrowser.removeMultiSelectedTabs();
|
|
await TestUtils.waitForCondition(
|
|
() => gBrowser.tabs.length == 2,
|
|
"wait for the multiselected tabs to close"
|
|
);
|
|
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
2,
|
|
"SessionStore should know how many tabs were just closed"
|
|
);
|
|
|
|
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
|
|
let tab4 = await addTab("http://example.com/4");
|
|
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
2,
|
|
"LastClosedTabCount should be the same"
|
|
);
|
|
|
|
gBrowser.removeTab(tab4);
|
|
|
|
await TestUtils.waitForCondition(
|
|
() => SessionStore.getLastClosedTabCount(window) == 1,
|
|
"wait for the tab to close in SessionStore"
|
|
);
|
|
|
|
let count = 3;
|
|
for (let i = 0; i < 3; i++) {
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
1,
|
|
"LastClosedTabCount should be one"
|
|
);
|
|
undoCloseTab();
|
|
|
|
await TestUtils.waitForCondition(
|
|
() => gBrowser.tabs.length == count,
|
|
"wait for the tabs to reopen"
|
|
);
|
|
count++;
|
|
}
|
|
|
|
gBrowser.removeAllTabsBut(initialTab);
|
|
});
|
|
|
|
add_task(async function withCloseTabsToTheRight() {
|
|
let initialTab = gBrowser.selectedTab;
|
|
let tab1 = await addTab("https://example.com/1");
|
|
await addTab("https://example.com/2");
|
|
await addTab("https://example.com/3");
|
|
await addTab("https://example.com/4");
|
|
|
|
gBrowser.removeTabsToTheEndFrom(tab1);
|
|
await TestUtils.waitForCondition(
|
|
() => gBrowser.tabs.length == 2,
|
|
"wait for the multiselected tabs to close"
|
|
);
|
|
is(
|
|
SessionStore.getLastClosedTabCount(window),
|
|
3,
|
|
"SessionStore should know how many tabs were just closed"
|
|
);
|
|
|
|
undoCloseTab();
|
|
await TestUtils.waitForCondition(
|
|
() => gBrowser.tabs.length == 5,
|
|
"wait for the tabs to reopen"
|
|
);
|
|
info("waiting for the browsers to finish loading");
|
|
// Check that the tabs are restored in the correct order
|
|
for (let tabId of [2, 3, 4]) {
|
|
let browser = gBrowser.tabs[tabId].linkedBrowser;
|
|
ContentTask.spawn(browser, tabId, async aTabId => {
|
|
await ContentTaskUtils.waitForCondition(() => {
|
|
return (
|
|
content?.document?.readyState == "complete" &&
|
|
content?.document?.location.href == "https://example.com/" + aTabId
|
|
);
|
|
}, "waiting for tab " + aTabId + " to load");
|
|
});
|
|
}
|
|
|
|
gBrowser.removeAllTabsBut(initialTab);
|
|
});
|