Bug 1460910 - Allow sidebar to be closed at install. r?mixedpuppy
MozReview-Commit-ID: 5UWW7DNQKzr
--- a/browser/components/extensions/parent/ext-sidebarAction.js
+++ b/browser/components/extensions/parent/ext-sidebarAction.js
@@ -103,16 +103,20 @@ this.sidebarAction = class extends Exten
return;
}
for (let window of windowTracker.browserWindows()) {
let {document, SidebarUI} = window;
if (SidebarUI.currentID === this.id) {
SidebarUI.hide();
}
+ if (SidebarUI.lastOpenedId === this.id &&
+ reason === "ADDON_UNINSTALL") {
+ SidebarUI.lastOpenedId = null;
+ }
let menu = document.getElementById(this.menuId);
if (menu) {
menu.remove();
}
let button = document.getElementById(this.buttonId);
if (button) {
button.remove();
}
@@ -130,17 +134,18 @@ this.sidebarAction = class extends Exten
build() {
this.tabContext.on("tab-select", // eslint-disable-line mozilla/balanced-listeners
(evt, tab) => { this.updateWindow(tab.ownerGlobal); });
let install = this.extension.startupReason === "ADDON_INSTALL";
for (let window of windowTracker.browserWindows()) {
this.updateWindow(window);
let {SidebarUI} = window;
- if (install || SidebarUI.lastOpenedId == this.id) {
+ if ((install && this.extension.manifest.sidebar_action.open_at_install) ||
+ SidebarUI.lastOpenedId == this.id) {
SidebarUI.show(this.id);
}
}
}
createMenuItem(window, details) {
let {document, SidebarUI} = window;
--- a/browser/components/extensions/schemas/sidebar_action.json
+++ b/browser/components/extensions/schemas/sidebar_action.json
@@ -25,16 +25,22 @@
"browser_style": {
"type": "boolean",
"optional": true
},
"default_panel": {
"type": "string",
"format": "strictRelativeUrl",
"preprocess": "localize"
+ },
+ "open_at_install": {
+ "type": "boolean",
+ "optional": true,
+ "default": true,
+ "description": "Whether or not the sidebar is opened at install. Default is <code>true</code>."
}
},
"optional": true
}
}
}
]
},
--- a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
+++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
@@ -65,25 +65,39 @@ async function sendMessage(ext, msg, dat
ext.sendMessage({msg, data});
await ext.awaitMessage("done");
}
add_task(async function sidebar_initial_install() {
ok(document.getElementById("sidebar-box").hidden, "sidebar box is not visible");
let extension = ExtensionTestUtils.loadExtension(getExtData());
await extension.startup();
+
// Test sidebar is opened on install
- await extension.awaitMessage("sidebar");
ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible");
await extension.unload();
// Test that the sidebar was closed on unload.
ok(document.getElementById("sidebar-box").hidden, "sidebar box is not visible");
});
+add_task(async function sidebar__install_closed() {
+ ok(document.getElementById("sidebar-box").hidden, "sidebar box is not visible");
+ let tempExtData = getExtData();
+ tempExtData.manifest.sidebar_action.open_at_install = false;
+ let extension = ExtensionTestUtils.loadExtension(tempExtData);
+ await extension.startup();
+
+ // Test sidebar is closed on install
+ ok(document.getElementById("sidebar-box").hidden, "sidebar box is hidden");
+
+ await extension.unload();
+ // This is the default value
+ tempExtData.manifest.sidebar_action.open_at_install = true;
+});
add_task(async function sidebar_two_sidebar_addons() {
let extension2 = ExtensionTestUtils.loadExtension(getExtData());
await extension2.startup();
// Test sidebar is opened on install
await extension2.awaitMessage("sidebar");
ok(!document.getElementById("sidebar-box").hidden, "sidebar box is visible");