Bug 1921836 - Consolidate the restoreSidebar implementations, and ensure the sidebar launcher gets un-hidden when a sidebar is shown. r=sidebar-reviewers,sessionstore-reviewers,jsudiaman,sclements

Differential Revision: https://phabricator.services.mozilla.com/D227420
This commit is contained in:
Sam Foster
2024-11-05 23:34:25 +00:00
parent d6635a4c64
commit a712bf3840
5 changed files with 100 additions and 32 deletions

View File

@@ -5646,32 +5646,10 @@ var SessionStoreInternal = {
* Object containing command (sidebarcommand/category) and styles * Object containing command (sidebarcommand/category) and styles
*/ */
restoreSidebar(aWindow, aSidebar, isPopup) { restoreSidebar(aWindow, aSidebar, isPopup) {
if (!aSidebar) { if (!aSidebar || isPopup) {
return; return;
} }
if (!isPopup) { aWindow.SidebarController.setUIState(aSidebar);
let sidebarBox = aWindow.document.getElementById("sidebar-box");
// Always restore sidebar width
if (aSidebar.width) {
sidebarBox.style.width = aSidebar.width;
}
if (
aSidebar.command &&
(sidebarBox.getAttribute("sidebarcommand") != aSidebar.command ||
!sidebarBox.getAttribute("checked"))
) {
aWindow.SidebarController.showInitially(aSidebar.command);
}
aWindow.SidebarController.uiStateInitialized = true;
}
if (aWindow.SidebarController.sidebarRevampEnabled) {
const { SidebarController } = aWindow;
SidebarController.promiseInitialized.then(() => {
SidebarController.toggleExpanded(aSidebar.expanded);
SidebarController.sidebarContainer.hidden = aSidebar.hidden;
SidebarController.updateToolbarButton();
});
}
}, },
/** /**

View File

@@ -484,10 +484,18 @@ var SidebarController = {
if (!state) { if (!state) {
return; return;
} }
const shouldOpenSidebar =
state.command &&
this.sidebars.has(state.command) &&
this.currentID !== state.command;
if (shouldOpenSidebar) {
// there's a sidebar to show, so ignore the contradictory hidden property
delete state.hidden;
}
if (state.width) { if (state.width) {
this._box.style.width = state.width; this._box.style.width = state.width;
} }
if (state.command && this.currentID != state.command && !this.isOpen) { if (shouldOpenSidebar && !this.isOpen) {
await this.showInitially(state.command); await this.showInitially(state.command);
} }
if (this.sidebarRevampEnabled) { if (this.sidebarRevampEnabled) {
@@ -1480,6 +1488,7 @@ var SidebarController = {
_show(commandID) { _show(commandID) {
return new Promise(resolve => { return new Promise(resolve => {
if (this.sidebarRevampEnabled) { if (this.sidebarRevampEnabled) {
this.sidebarContainer.hidden = false;
this._box.dispatchEvent( this._box.dispatchEvent(
new CustomEvent("sidebar-show", { detail: { viewId: commandID } }) new CustomEvent("sidebar-show", { detail: { viewId: commandID } })
); );

View File

@@ -28,6 +28,8 @@ run-if = ["os == 'mac'"] # Mac only feature
["browser_sidebar_max_width.js"] ["browser_sidebar_max_width.js"]
["browser_sidebar_menubar_item_commands.js"]
["browser_sidebar_nimbus.js"] ["browser_sidebar_nimbus.js"]
["browser_sidebar_panel_header.js"] ["browser_sidebar_panel_header.js"]

View File

@@ -0,0 +1,61 @@
/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const SIDEBAR_VISIBILITY_PREF = "sidebar.visibility";
add_setup(async () => {
await SpecialPowers.pushPrefEnv({
set: [[SIDEBAR_VISIBILITY_PREF, "hide-sidebar"]],
});
// make sure the sidebar is reset after we're done
registerCleanupFunction(async () => {
await SidebarController.toggleExpanded(false);
await SidebarController.sidebarMain.updateComplete;
SidebarController.sidebarContainer.hidden = false;
});
});
add_task(async function test_sidebar_view_commands() {
const sidebar = document.querySelector("sidebar-main");
const sidebarBox = document.querySelector("#sidebar-box");
await sidebar.updateComplete;
ok(sidebar && BrowserTestUtils.isVisible(sidebar), "Sidebar is shown.");
// turn off animations for this bit
await SpecialPowers.pushPrefEnv({
set: [["sidebar.animation.enabled", false]],
});
document.getElementById("sidebar-button").doCommand();
await sidebar.updateComplete;
ok(BrowserTestUtils.isHidden(sidebar), "Sidebar is hidden.");
const bookmarkMenuItem = document.getElementById("menu_bookmarksSidebar");
bookmarkMenuItem.doCommand();
await sidebar.updateComplete;
ok(BrowserTestUtils.isVisible(sidebar), "Sidebar is visible");
ok(BrowserTestUtils.isVisible(sidebarBox), "Sidebar box is visible");
is(
SidebarController.currentID,
"viewBookmarksSidebar",
"Sidebar controller has the correct currentID"
);
SidebarController.toggle(SidebarController.currentID);
await sidebar.updateComplete;
ok(BrowserTestUtils.isVisible(sidebar), "Sidebar is visible");
ok(sidebar.expanded, "Sidebar is expanded when the view is closed");
ok(BrowserTestUtils.isHidden(sidebarBox), "Sidebar box is hidden");
document.getElementById("sidebar-button").doCommand();
await sidebar.updateComplete;
ok(BrowserTestUtils.isHidden(sidebar), "Sidebar is hidden.");
ok(BrowserTestUtils.isHidden(sidebarBox), "Sidebar box is hidden.");
// restore the animation pref
SpecialPowers.popPrefEnv();
});

View File

@@ -40,6 +40,15 @@ add_setup(async () => {
0, 0,
"sidebar-button" "sidebar-button"
); );
if (window.SidebarController.sidebarMain?.expanded) {
info("In setup, the sidebar is currently expanded. Collapsing it");
window.SidebarController.toggleExpanded(false);
await window.SidebarController.sidebarMain.updateComplete;
}
ok(
BrowserTestUtils.isVisible(window.SidebarController.sidebarMain),
"Sidebar launcher is visible at setup"
);
}); });
add_task(async function test_toolbar_sidebar_button() { add_task(async function test_toolbar_sidebar_button() {
@@ -66,14 +75,19 @@ add_task(async function test_toolbar_sidebar_button() {
}); });
add_task(async function test_expanded_state_for_always_show() { add_task(async function test_expanded_state_for_always_show() {
info(
`Current window's sidebarMain.expanded: ${window.SidebarController.sidebarMain?.expanded}`
);
await SpecialPowers.pushPrefEnv({ await SpecialPowers.pushPrefEnv({
set: [[SIDEBAR_VISIBILITY_PREF, "always-show"]], set: [[SIDEBAR_VISIBILITY_PREF, "always-show"]],
}); });
const win = await BrowserTestUtils.openNewBrowserWindow(); const win = await BrowserTestUtils.openNewBrowserWindow();
const {
SidebarController: { sidebarMain, toolbarButton }, const { SidebarController, document } = win;
document, const { sidebarMain, toolbarButton } = SidebarController;
} = win;
await SidebarController.promiseInitialized;
info(`New window's sidebarMain.expanded: ${sidebarMain?.expanded}`);
const checkExpandedState = async ( const checkExpandedState = async (
expanded, expanded,
@@ -110,6 +124,10 @@ add_task(async function test_expanded_state_for_always_show() {
info("Check default expanded state."); info("Check default expanded state.");
await checkExpandedState(false); await checkExpandedState(false);
ok(
BrowserTestUtils.isVisible(sidebarMain),
"The sidebar launcher is visible"
);
ok( ok(
!toolbarButton.hasAttribute("checked"), !toolbarButton.hasAttribute("checked"),
"The toolbar button is not checked." "The toolbar button is not checked."
@@ -122,7 +140,7 @@ add_task(async function test_expanded_state_for_always_show() {
await checkExpandedState(false); await checkExpandedState(false);
info("Collapse the sidebar by loading a tool."); info("Collapse the sidebar by loading a tool.");
sidebarMain.expanded = true; SidebarController.toggleExpanded(true);
await sidebarMain.updateComplete; await sidebarMain.updateComplete;
const toolButton = sidebarMain.toolButtons[0]; const toolButton = sidebarMain.toolButtons[0];
EventUtils.synthesizeMouseAtCenter(toolButton, {}, win); EventUtils.synthesizeMouseAtCenter(toolButton, {}, win);
@@ -133,7 +151,7 @@ add_task(async function test_expanded_state_for_always_show() {
await checkExpandedState(true); await checkExpandedState(true);
info("Load and unload a tool with the sidebar collapsed to begin with."); info("Load and unload a tool with the sidebar collapsed to begin with.");
sidebarMain.expanded = false; SidebarController.toggleExpanded(false);
await sidebarMain.updateComplete; await sidebarMain.updateComplete;
EventUtils.synthesizeMouseAtCenter(toolButton, {}, win); EventUtils.synthesizeMouseAtCenter(toolButton, {}, win);
await checkExpandedState(false); await checkExpandedState(false);
@@ -141,7 +159,7 @@ add_task(async function test_expanded_state_for_always_show() {
await checkExpandedState(false); await checkExpandedState(false);
info("Check expanded state on a new window."); info("Check expanded state on a new window.");
sidebarMain.expanded = true; SidebarController.toggleExpanded(true);
await sidebarMain.updateComplete; await sidebarMain.updateComplete;
const newWin = await BrowserTestUtils.openNewBrowserWindow(); const newWin = await BrowserTestUtils.openNewBrowserWindow();
await checkExpandedState( await checkExpandedState(