Bug 1323845: Part 4 - Add Extension.isPrivileged property. r?aswan
MozReview-Commit-ID: 1ZLVdu4ccWk
--- a/toolkit/components/extensions/Extension.jsm
+++ b/toolkit/components/extensions/Extension.jsm
@@ -38,16 +38,17 @@ const Cu = Components.utils;
const Cr = Components.results;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
XPCOMUtils.defineLazyModuleGetters(this, {
AddonManager: "resource://gre/modules/AddonManager.jsm",
AddonManagerPrivate: "resource://gre/modules/AddonManager.jsm",
+ AddonSettings: "resource://gre/modules/addons/AddonSettings.jsm",
AppConstants: "resource://gre/modules/AppConstants.jsm",
AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm",
ExtensionCommon: "resource://gre/modules/ExtensionCommon.jsm",
ExtensionPermissions: "resource://gre/modules/ExtensionPermissions.jsm",
ExtensionStorage: "resource://gre/modules/ExtensionStorage.jsm",
ExtensionTestCommon: "resource://testing-common/ExtensionTestCommon.jsm",
FileSource: "resource://gre/modules/L10nRegistry.jsm",
L10nRegistry: "resource://gre/modules/L10nRegistry.jsm",
@@ -563,17 +564,17 @@ this.ExtensionData = class {
let webAccessibleResources = [];
if (this.type === "extension") {
if (this.manifest.devtools_page) {
permissions.add("devtools");
}
for (let perm of manifest.permissions) {
- if (perm === "geckoProfiler") {
+ if (perm === "geckoProfiler" && !this.isPrivileged) {
const acceptedExtensions = Services.prefs.getStringPref("extensions.geckoProfiler.acceptedExtensionIds", "");
if (!acceptedExtensions.split(",").includes(id)) {
this.manifestError("Only whitelisted extensions are allowed to access the geckoProfiler.");
continue;
}
}
let type = classifyPermission(perm);
@@ -1211,20 +1212,31 @@ this.Extension = class extends Extension
this.localeData.messages.set(locale, result);
});
}
get manifestCacheKey() {
return [this.id, this.version, Services.locale.getAppLocaleAsLangTag()];
}
+ get isPrivileged() {
+ return (this.addonData.signedState === AddonManager.SIGNEDSTATE_PRIVILEGED ||
+ (AppConstants.MOZ_ALLOW_LEGACY_EXTENSIONS &&
+ this.addonData.temporarilyInstalled));
+ }
+
+ get experimentsAllowed() {
+ return (AddonSettings.ALLOW_LEGACY_EXTENSIONS ||
+ this.isPrivileged);
+ }
+
async _parseManifest() {
let manifest = await super.parseManifest();
if (manifest && manifest.permissions.has("mozillaAddons") &&
- this.addonData.signedState !== AddonManager.SIGNEDSTATE_PRIVILEGED) {
+ !this.isPrivileged) {
Cu.reportError(`Stripping mozillaAddons permission from ${this.id}`);
manifest.permissions.delete("mozillaAddons");
let i = manifest.manifest.permissions.indexOf("mozillaAddons");
if (i >= 0) {
manifest.manifest.permissions.splice(i, 1);
} else {
throw new Error("Could not find mozilaAddons in original permissions array");
}
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -4378,16 +4378,17 @@ this.XPIProvider = {
}
let params = {
id: aAddon.id,
version: aAddon.version,
installPath: aFile.clone(),
resourceURI: getURIForResourceInFile(aFile, ""),
signedState: aAddon.signedState,
+ temporarilyInstalled: aAddon._installLocation == TemporaryInstallLocation,
};
if (aMethod == "startup" && aAddon.startupData) {
params.startupData = aAddon.startupData;
}
if (aExtraParams) {
for (let key in aExtraParams) {