diff --git a/common/bootstrap.js b/common/bootstrap.js index 30637ee9..f149183a 100755 --- a/common/bootstrap.js +++ b/common/bootstrap.js @@ -79,7 +79,9 @@ function startup(data, reason) { addonData = data; addon = data; + dump("dactyl: bootstrap: pre-getAddonByID\n"); AddonManager.getAddonByID(addon.id, function (a) { + dump("dactyl: bootstrap: getAddonByID: " + a + "\n"); addon = a; updateVersion(); }); diff --git a/common/modules/addons.jsm b/common/modules/addons.jsm index 764564cb..a22d3147 100644 --- a/common/modules/addons.jsm +++ b/common/modules/addons.jsm @@ -232,6 +232,24 @@ var Addon = Class("Addon", { } }); +["cancelUninstall", "findUpdates", "getResourceURI", "hasResource", "isCompatibleWith", + "uninstall"].forEach(function (prop) { + Addon.prototype[prop] = function proxy() this.addon[prop].apply(this.addon, arguments); +}); + +["aboutURL", "appDisabled", "applyBackgroundUpdates", "blocklistState", "contributors", "creator", + "description", "developers", "homepageURL", "iconURL", "id", "install", "installDate", "isActive", + "isCompatible", "isPlatformCompatible", "name", "operationsRequiringRestart", "optionsURL", + "pendingOperations", "pendingUpgrade", "permissions", "providesUpdatesSecurely", "releaseNotesURI", + "scope", "screenshots", "size", "sourceURI", "translators", "type", "updateDate", "userDisabled", + "version"].forEach(function (prop) { + Object.defineProperty(Addon.prototype, prop, { + get: function get_proxy() this.addon[prop], + set: function set_proxy(val) this.addon[prop] = val + }); +}); + + var AddonList = Class("AddonList", { init: function init(modules, types, filter) { this.modules = modules; @@ -561,24 +579,6 @@ var addonErrors = array.toObject([ endModule(); -let iterator = properties(config.addon); -if ("nsIUpdateItem" in Ci) - iterator = iter(iterator, properties(config.addon.__proto__)); - -iter.forEach(iterator, function (prop) { - let desc = Object.getOwnPropertyDescriptor(config.addon, prop) || - Object.getOwnPropertyDescriptor(config.addon.__proto__, prop); - - if (!set.has(Addon.prototype, prop)) - if (callable(desc.value)) - Addon.prototype[prop] = function proxy() this.addon[prop].apply(this.addon, arguments); - else - Object.defineProperty(Addon.prototype, prop, { - get: function get_proxy() this.addon[prop], - set: function set_proxy(val) this.addon[prop] = val - }); -}); - } catch(e){ if (isString(e)) e = Error(e); dump(e.fileName+":"+e.lineNumber+": "+e+"\n" + e.stack); } // vim: set fdm=marker sw=4 ts=4 et ft=javascript: diff --git a/common/modules/config.jsm b/common/modules/config.jsm index e75186bf..f0db5d5e 100644 --- a/common/modules/config.jsm +++ b/common/modules/config.jsm @@ -53,7 +53,15 @@ var ConfigBase = Class("ConfigBase", { get addonID() this.name + "@dactyl.googlecode.com", addon: Class.memoize(function () { - let addon = services.fuel.storage.get("dactyl.bootstrap", {}).addon; + let addon; + util.waitFor(function () { + addon = services.fuel.storage.get("dactyl.bootstrap", {}).addon; + if (addon && !addon.getResourceURI) + util.reportError(Error("Don't have add-on yet")); + + return !addon || addon.getResourceURI(); + }); + if (!addon) addon = require("addons").AddonManager.getAddonByID(this.addonID); return addon;