Bug 1269454 Make options_ui work with temporary addons
MozReview-Commit-ID: KyPY2SnGzTO
--- a/toolkit/components/extensions/Extension.jsm
+++ b/toolkit/components/extensions/Extension.jsm
@@ -1526,9 +1526,15 @@ Extension.prototype = extend(Object.crea
hasPermission(perm) {
return this.permissions.has(perm);
},
get name() {
return this.localize(this.manifest.name);
},
+
+ get optionsURL() {
+ if (this.manifest.options_ui && this.manifest.options_ui.page) {
+ return this.getURL(this.manifest.options_ui.page);
+ }
+ },
});
--- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm
+++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm
@@ -935,17 +935,16 @@ var loadManifestFromWebManifest = Task.a
addon.internalName = null;
addon.updateURL = bss.update_url;
addon.updateKey = null;
addon.optionsURL = null;
addon.optionsType = null;
addon.aboutURL = null;
if (manifest.options_ui) {
- addon.optionsURL = extension.getURL(manifest.options_ui.page);
if (manifest.options_ui.open_in_tab)
addon.optionsType = AddonManager.OPTIONS_TYPE_TAB;
else
addon.optionsType = AddonManager.OPTIONS_TYPE_INLINE_BROWSER;
}
// WebExtensions don't use iconURLs
addon.iconURL = null;
@@ -3990,18 +3989,22 @@ this.XPIProvider = {
addon = XPIDatabase.addAddonMetadata(addon, file.persistentDescriptor);
XPIStates.addAddon(addon);
XPIDatabase.saveChanges();
AddonManagerPrivate.callAddonListeners("onInstalling", addon.wrapper,
false);
- XPIProvider.callBootstrapMethod(addon, file, "startup",
- BOOTSTRAP_REASONS.ADDON_ENABLE);
+ let startupResult = XPIProvider.callBootstrapMethod(addon, file, "startup",
+ BOOTSTRAP_REASONS.ADDON_ENABLE);
+ if (addon.type == "webextension") {
+ addon.optionsURL = startupResult.optionsURL;
+ }
+
AddonManagerPrivate.callInstallListeners("onExternalInstall",
null, addon.wrapper,
oldAddon ? oldAddon.wrapper : null,
false);
AddonManagerPrivate.callAddonListeners("onInstalled", addon.wrapper);
return addon.wrapper;
}),
@@ -4797,17 +4800,17 @@ this.XPIProvider = {
for (let key in aExtraParams) {
params[key] = aExtraParams[key];
}
}
logger.debug("Calling bootstrap method " + aMethod + " on " + aAddon.id + " version " +
aAddon.version);
try {
- method(params, aReason);
+ return method(params, aReason);
}
catch (e) {
logger.warn("Exception running bootstrap method " + aMethod + " on " + aAddon.id, e);
}
}
finally {
if (CHROME_TYPES.has(aAddon.type) && aMethod == "shutdown" && aReason != BOOTSTRAP_REASONS.APP_SHUTDOWN) {
logger.debug("Removing manifest for " + aFile.path);