Bug 1371752 Don't show unsigned extensions in legacy pane if signatures are disabled
MozReview-Commit-ID: GeNiBuOrRXF
--- 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);
});