Bug 1926396 - when unloading current tab, don't switch to an unloaded tab r=tabbrowser-reviewers,dao
Differential Revision: https://phabricator.services.mozilla.com/D234569
This commit is contained in:
@@ -4946,12 +4946,17 @@
|
||||
if (tabs.some(tab => tab.selected)) {
|
||||
// Unloading the currently selected tab.
|
||||
// Need to select a different one before unloading.
|
||||
// Avoid selecting any tab we're unloading now or
|
||||
// any tab that is already unloaded.
|
||||
unloadSelectedTab = true;
|
||||
let newTab = this._findTabToBlurTo(this.selectedTab, tabs);
|
||||
const tabsToExclude = tabs.concat(
|
||||
this.tabContainer.allTabs.filter(tab => !tab.linkedPanel)
|
||||
);
|
||||
let newTab = this._findTabToBlurTo(this.selectedTab, tabsToExclude);
|
||||
if (newTab) {
|
||||
this.selectedTab = newTab;
|
||||
} else if (FirefoxViewHandler.tab) {
|
||||
// probably unloading all tabs - show Firefox View
|
||||
} else {
|
||||
// all tabs are unloaded - show Firefox View
|
||||
FirefoxViewHandler.openTab("opentabs");
|
||||
allTabsUnloaded = true;
|
||||
}
|
||||
|
||||
@@ -164,6 +164,105 @@ add_task(async function test_unload_selected_tab() {
|
||||
await BrowserTestUtils.removeTab(tab1);
|
||||
});
|
||||
|
||||
add_task(async function test_unload_selected_tab_switches_to_loaded_tab() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["browser.tabs.unloadTabInContextMenu", true]],
|
||||
});
|
||||
|
||||
let [tab1, tab2, tab3] = await addBrowserTabs(3);
|
||||
|
||||
let menuItemUnload = document.getElementById("context_unloadTab");
|
||||
|
||||
await BrowserTestUtils.switchTab(gBrowser, tab1);
|
||||
updateTabContextMenu(tab2);
|
||||
ok(!menuItemUnload.hidden, "Unload Tab is visible");
|
||||
{
|
||||
let menu = await openTabMenuFor(tab2);
|
||||
let menuHiddenPromise = BrowserTestUtils.waitForPopupEvent(menu, "hidden");
|
||||
menu.activateItem(menuItemUnload);
|
||||
await menuHiddenPromise;
|
||||
}
|
||||
await TestUtils.waitForCondition(
|
||||
() => !tab2.linkedPanel,
|
||||
"Wait for Tab2 to be unloaded"
|
||||
);
|
||||
|
||||
updateTabContextMenu(tab1);
|
||||
ok(!menuItemUnload.hidden, "Unload Tab is visible");
|
||||
{
|
||||
let menu = await openTabMenuFor(tab1);
|
||||
let menuHiddenPromise = BrowserTestUtils.waitForPopupEvent(menu, "hidden");
|
||||
menu.activateItem(menuItemUnload);
|
||||
await menuHiddenPromise;
|
||||
}
|
||||
await TestUtils.waitForCondition(
|
||||
() => !tab1.linkedPanel,
|
||||
"Wait for Tab1 to be unloaded"
|
||||
);
|
||||
|
||||
is(gBrowser.selectedTab, tab3, "Should select another loaded tab");
|
||||
|
||||
await BrowserTestUtils.removeTab(tab3);
|
||||
await BrowserTestUtils.removeTab(tab2);
|
||||
await BrowserTestUtils.removeTab(tab1);
|
||||
});
|
||||
|
||||
add_task(
|
||||
async function test_unload_selected_tab_with_no_others_loaded_switches_to_firefoxview() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["browser.tabs.unloadTabInContextMenu", true]],
|
||||
});
|
||||
|
||||
let originalTab = gBrowser.selectedTab;
|
||||
let [tab1] = await addBrowserTabs(1);
|
||||
|
||||
let menuItemUnload = document.getElementById("context_unloadTab");
|
||||
|
||||
await BrowserTestUtils.switchTab(gBrowser, tab1);
|
||||
updateTabContextMenu(originalTab);
|
||||
ok(!menuItemUnload.hidden, "Unload Tab is visible");
|
||||
{
|
||||
let menu = await openTabMenuFor(originalTab);
|
||||
let menuHiddenPromise = BrowserTestUtils.waitForPopupEvent(
|
||||
menu,
|
||||
"hidden"
|
||||
);
|
||||
menu.activateItem(menuItemUnload);
|
||||
await menuHiddenPromise;
|
||||
}
|
||||
await TestUtils.waitForCondition(
|
||||
() => !originalTab.linkedPanel,
|
||||
"Wait for original tab to be unloaded"
|
||||
);
|
||||
|
||||
updateTabContextMenu(tab1);
|
||||
ok(!menuItemUnload.hidden, "Unload Tab is visible");
|
||||
{
|
||||
let menu = await openTabMenuFor(tab1);
|
||||
let menuHiddenPromise = BrowserTestUtils.waitForPopupEvent(
|
||||
menu,
|
||||
"hidden"
|
||||
);
|
||||
menu.activateItem(menuItemUnload);
|
||||
await menuHiddenPromise;
|
||||
}
|
||||
await TestUtils.waitForCondition(
|
||||
() => !tab1.linkedPanel,
|
||||
"Wait for Tab1 to be unloaded"
|
||||
);
|
||||
|
||||
is(
|
||||
gBrowser.selectedTab,
|
||||
FirefoxViewHandler.tab,
|
||||
"Should select Firefox View"
|
||||
);
|
||||
|
||||
await BrowserTestUtils.removeTab(tab1);
|
||||
// Switch back to the original tab so as not to mess up subsequent tests
|
||||
await BrowserTestUtils.switchTab(gBrowser, originalTab);
|
||||
}
|
||||
);
|
||||
|
||||
add_task(async function test_unload_all_tabs() {
|
||||
await SpecialPowers.pushPrefEnv({
|
||||
set: [["browser.tabs.unloadTabInContextMenu", true]],
|
||||
|
||||
Reference in New Issue
Block a user