Bug 1371752 Don't show unsigned extensions in legacy pane if signatures are disabled draft
authorAndrew Swan <aswan@mozilla.com>
Tue, 13 Jun 2017 14:43:57 -0700
changeset 593580 c6c3243c170584d2c6557b8f8a29bb709bd14314
parent 593303 a8f8e440d627d686fa8898483aa9c5da928a8fa4
child 633154 7ac6f9b16dad6f4815d6a67d1cc51761ffa0cd79
push id63743
push useraswan@mozilla.com
push dateTue, 13 Jun 2017 21:44:57 +0000
bugs1371752
milestone56.0a1
Bug 1371752 Don't show unsigned extensions in legacy pane if signatures are disabled MozReview-Commit-ID: GeNiBuOrRXF
toolkit/mozapps/extensions/content/extensions.js
toolkit/mozapps/extensions/test/browser/browser_legacy.js
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -312,16 +312,20 @@ function loadView(aViewId) {
 }
 
 function isCorrectlySigned(aAddon) {
   // Add-ons without an "isCorrectlySigned" property are correctly signed as
   // they aren't the correct type for signing.
   return aAddon.isCorrectlySigned !== false;
 }
 
+function isDisabledUnsigned(addon) {
+  return AddonSettings.REQUIRE_SIGNING && !isCorrectlySigned(addon);
+}
+
 function isLegacyExtension(addon) {
   let legacy = false;
   if (addon.type == "extension" && !addon.isWebExtension) {
     legacy = true;
   }
   if (addon.type == "theme") {
     // The logic here is kind of clunky but we want to mark complete
     // themes as legacy.  There's no explicit flag for complete
@@ -2845,17 +2849,17 @@ var gLegacyView = {
     document.getElementById("legacy-learnmore").href = SUPPORT_URL + "webextensions";
 
     this.refresh();
   },
 
   async show(type, request) {
     let addons = await AddonManager.getAddonsByTypes(["extension"]);
     addons = addons.filter(a => !a.hidden &&
-                              (isLegacyExtension(a) || !isCorrectlySigned(a)));
+                              (isLegacyExtension(a) || isDisabledUnsigned(a)));
 
     while (this._listBox.itemCount > 0)
       this._listBox.removeItemAt(0);
 
     let elements = addons.map(a => createItem(a));
     sortElements(elements, ["uiState", "name"], true);
     for (let element of elements) {
       this._listBox.appendChild(element);
@@ -2879,17 +2883,17 @@ var gLegacyView = {
       return;
     }
 
     let extensions = await AddonManager.getAddonsByTypes(["extension"]);
 
     let haveUnsigned = false;
     let haveLegacy = false;
     for (let extension of extensions) {
-      if (AddonSettings.REQUIRE_SIGNING && !isCorrectlySigned(extension)) {
+      if (isDisabledUnsigned(extension)) {
         haveUnsigned = true;
       }
       if (isLegacyExtension(extension)) {
         haveLegacy = true;
       }
     }
 
     if (haveLegacy || haveUnsigned) {
@@ -2981,18 +2985,17 @@ var gListView = {
     getAddonsAndInstalls(aType, (aAddonsList, aInstallsList) => {
       if (gViewController && aRequest != gViewController.currentViewRequest)
         return;
 
       let showLegacyInfo = false;
       if (!legacyExtensionsEnabled) {
         let preLen = aAddonsList.length;
         aAddonsList = aAddonsList.filter(addon => !isLegacyExtension(addon) &&
-                                                  (isCorrectlySigned(addon) ||
-                                                   !AddonSettings.REQUIRE_SIGNING));
+                                                  !isDisabledUnsigned(addon));
         if (aAddonsList.length != preLen) {
           showLegacyInfo = true;
         }
       }
 
       var elements = [];
 
       for (let addonItem of aAddonsList)
@@ -3500,17 +3503,17 @@ var gDetailView = {
         document.getElementById("detail-error").textContent = gStrings.ext.formatStringFromName(
           "details.notification.blocked",
           [this._addon.name], 1
         );
         var errorLink = document.getElementById("detail-error-link");
         errorLink.value = gStrings.ext.GetStringFromName("details.notification.blocked.link");
         errorLink.href = this._addon.blocklistURL;
         errorLink.hidden = false;
-      } else if (!isCorrectlySigned(this._addon) && AddonSettings.REQUIRE_SIGNING) {
+      } else if (isDisabledUnsigned(this._addon)) {
         this.node.setAttribute("notification", "error");
         document.getElementById("detail-error").textContent = gStrings.ext.formatStringFromName(
           "details.notification.unsignedAndDisabled", [this._addon.name, gStrings.brandShortName], 2
         );
         let errorLink = document.getElementById("detail-error-link");
         errorLink.value = gStrings.ext.GetStringFromName("details.notification.unsigned.link");
         errorLink.href = SUPPORT_URL + "unsigned-addons";
         errorLink.hidden = false;
--- a/toolkit/mozapps/extensions/test/browser/browser_legacy.js
+++ b/toolkit/mozapps/extensions/test/browser/browser_legacy.js
@@ -173,10 +173,38 @@ add_task(async function() {
   // And the legacy pane should show both legacy and unsigned extensions
   await catUtils.openType("legacy");
   checkList("legacy-list", [
     "legacy@tests.mozilla.org",
     "unsigned_webext@tests.mozilla.org",
     "unsigned_legacy@tests.mozilla.org",
   ]);
 
+  // Disable unsigned extensions
+  SpecialPowers.pushPrefEnv({
+    set: [
+      ["xpinstall.signatures.required", false],
+    ],
+  });
+
+  // The name of the pane should go back to "Legacy Extensions"
+  await mgrWin.gLegacyView.refresh();
+  is(catItem.disabled, false, "Legacy category is visible");
+  is(catItem.getAttribute("name"), get_string("type.legacy.name"),
+     "Category label with no unsigned extensions is correct");
+
+  // The unsigned extension should be present in the main extensions pane
+  await catUtils.openType("extension");
+  checkList("addon-list", [
+    "webextension@tests.mozilla.org",
+    "mozilla@tests.mozilla.org",
+    "unsigned_webext@tests.mozilla.org",
+  ]);
+
+  // And it should not be present in the legacy pane
+  await catUtils.openType("legacy");
+  checkList("legacy-list", [
+    "legacy@tests.mozilla.org",
+    "unsigned_legacy@tests.mozilla.org",
+  ]);
+
   await close_manager(mgrWin);
 });