Bug 1269454 Make options_ui work with temporary addons draft
authorAndrew Swan <aswan@mozilla.com>
Fri, 29 Jul 2016 10:45:10 -0700
changeset 394326 e18ef63effddd49ad944a58f5cf35a74d468cb20
parent 394256 2ea3d51ba1bb9f5c3b6921c43ea63f70b4fdf5d2
child 526798 70bc4ef5c5c84aa335faa423aff77379ae4ba677
push id24558
push useraswan@mozilla.com
push dateFri, 29 Jul 2016 17:45:33 +0000
bugs1269454
milestone50.0a1
Bug 1269454 Make options_ui work with temporary addons MozReview-Commit-ID: KyPY2SnGzTO
toolkit/components/extensions/Extension.jsm
toolkit/mozapps/extensions/internal/XPIProvider.jsm
--- 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);