Bug 1269294 - Prevent add-on install from add-ons manager if xpinstall disabled and locked. r?aswan
MozReview-Commit-ID: 7Mtk5eFdyP
--- a/toolkit/mozapps/extensions/content/extensions.js
+++ b/toolkit/mozapps/extensions/content/extensions.js
@@ -33,23 +33,24 @@ ChromeUtils.defineModuleGetter(this, "Pr
ChromeUtils.defineModuleGetter(this, "Experiments",
"resource:///modules/experiments/Experiments.jsm");
XPCOMUtils.defineLazyPreferenceGetter(this, "WEBEXT_PERMISSION_PROMPTS",
"extensions.webextPermissionPrompts", false);
XPCOMUtils.defineLazyPreferenceGetter(this, "ALLOW_NON_MPC",
"extensions.allow-non-mpc-extensions", true);
+XPCOMUtils.defineLazyPreferenceGetter(this, "XPINSTALL_ENABLED",
+ "xpinstall.enabled", true);
XPCOMUtils.defineLazyPreferenceGetter(this, "SUPPORT_URL", "app.support.baseURL",
"", null, val => Services.urlFormatter.formatURL(val));
const PREF_DISCOVERURL = "extensions.webservice.discoverURL";
const PREF_DISCOVER_ENABLED = "extensions.getAddons.showPane";
-const PREF_XPI_ENABLED = "xpinstall.enabled";
const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled";
const PREF_UI_TYPE_HIDDEN = "extensions.ui.%TYPE%.hidden";
const PREF_UI_LASTCATEGORY = "extensions.ui.lastCategory";
const PREF_LEGACY_EXCEPTIONS = "extensions.legacy.exceptions";
const PREF_LEGACY_ENABLED = "extensions.legacy.enabled";
const LOADING_MSG_DELAY = 100;
@@ -159,16 +160,20 @@ function initialize(event) {
gViewController.initialize();
gCategories.initialize();
gHeader.initialize();
gEventManager.initialize();
Services.obs.addObserver(sendEMPong, "EM-ping");
Services.obs.notifyObservers(window, "EM-loaded");
+ if (!XPINSTALL_ENABLED) {
+ document.getElementById("cmd_installFromFile").hidden = true;
+ }
+
// If the initial view has already been selected (by a call to loadView from
// the above notifications) then bail out now
if (gViewController.initialViewSelected)
return;
// If there is a history state to restore then use that
if (window.history.state) {
gViewController.updateState(window.history.state);
@@ -265,20 +270,19 @@ function isDiscoverEnabled() {
if (Services.prefs.getPrefType(PREF_DISCOVERURL) == Services.prefs.PREF_INVALID)
return false;
try {
if (!Services.prefs.getBoolPref(PREF_DISCOVER_ENABLED))
return false;
} catch (e) {}
- try {
- if (!Services.prefs.getBoolPref(PREF_XPI_ENABLED))
- return false;
- } catch (e) {}
+ if (!XPINSTALL_ENABLED) {
+ return false;
+ }
return true;
}
function getExperimentEndDate(aAddon) {
if (!("@mozilla.org/browser/experiments-service;1" in Cc)) {
return 0;
}
@@ -1310,17 +1314,17 @@ var gViewController = {
},
doCommand(aAddon) {
aAddon.cancelUninstall();
}
},
cmd_installFromFile: {
isEnabled() {
- return true;
+ return XPINSTALL_ENABLED;
},
doCommand() {
const nsIFilePicker = Ci.nsIFilePicker;
var fp = Cc["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window,
gStrings.ext.GetStringFromName("installFromFile.dialogTitle"),
nsIFilePicker.modeOpenMultiple);
@@ -3615,16 +3619,20 @@ var gUpdatesView = {
onPropertyChanged(aAddon, aProperties) {
if (aProperties.includes("applyBackgroundUpdates"))
this.updateAvailableCount();
}
};
var gDragDrop = {
onDragOver(aEvent) {
+ if (!XPINSTALL_ENABLED) {
+ aEvent.dataTransfer.effectAllowed = "none";
+ return;
+ }
var types = aEvent.dataTransfer.types;
if (types.includes("text/uri-list") ||
types.includes("text/x-moz-url") ||
types.includes("application/x-moz-file"))
aEvent.preventDefault();
},
onDrop(aEvent) {