Bug 1460910 - Allow sidebar to be closed at install. r?mixedpuppy draft
authorMichael Kaply <mozilla@kaply.com>
Fri, 18 May 2018 10:30:04 -0500
changeset 798300 944285d8755c8e5d22de63f8652fea22ea06fad2
parent 797928 03487dd40d9bcc69a4df2ddc2a658c84f1c0e157
push id110702
push usermozilla@kaply.com
push dateTue, 22 May 2018 15:56:27 +0000
reviewersmixedpuppy
bugs1460910
milestone62.0a1
Bug 1460910 - Allow sidebar to be closed at install. r?mixedpuppy MozReview-Commit-ID: 5UWW7DNQKzr
browser/components/extensions/parent/ext-sidebarAction.js
browser/components/extensions/schemas/sidebar_action.json
browser/components/extensions/test/browser/browser_ext_sidebarAction.js
--- 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");