diff --git a/common/bootstrap.js b/common/bootstrap.js index 774584d0..ccf10076 100755 --- a/common/bootstrap.js +++ b/common/bootstrap.js @@ -29,6 +29,8 @@ const resourceProto = Services.io.getProtocolHandler("resource") const categoryManager = Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager); const manager = Components.manager.QueryInterface(Ci.nsIComponentRegistrar); +const BOOTSTRAP_JSM = "resource://dactyl/bootstrap.jsm"; + const BOOTSTRAP_CONTRACT = "@dactyl.googlecode.com/base/bootstrap"; JSMLoader = JSMLoader || BOOTSTRAP_CONTRACT in Cc && Cc[BOOTSTRAP_CONTRACT].getService().wrappedJSObject.loader; @@ -194,16 +196,23 @@ function init() { reportError(e); } - if (JSMLoader && JSMLoader.bump !== 4) // Temporary hack - Services.scriptloader.loadSubScript("resource://dactyl" + suffix + "/bootstrap.jsm", - Cu.import("resource://dactyl/bootstrap.jsm", global)); + if (JSMLoader) { + if (Cu.unload) { + Cu.unload(BOOTSTRAP_JSM); + for (let [name] in Iterator(JSMLoader.globals)) + Cu.unload(~name.indexOf(":") ? name : "resource://dactyl" + JSMLoader.suffix + "/" + name); + } + else if (JSMLoader.bump != 5) // Temporary hack + Services.scriptloader.loadSubScript("resource://dactyl" + suffix + "/bootstrap.jsm", + Cu.import(BOOTSTRAP_JSM, global)); + } - if (!JSMLoader || JSMLoader.bump !== 4) - Cu.import("resource://dactyl/bootstrap.jsm", global); + if (!JSMLoader || JSMLoader.bump !== 5 || Cu.unload) + Cu.import(BOOTSTRAP_JSM, global); JSMLoader.bootstrap = this; - JSMLoader.load("resource://dactyl/bootstrap.jsm", global); + JSMLoader.load(BOOTSTRAP_JSM, global); JSMLoader.init(suffix); JSMLoader.load("base.jsm", global); diff --git a/common/modules/bootstrap.jsm b/common/modules/bootstrap.jsm index 43810ffe..d51f8696 100644 --- a/common/modules/bootstrap.jsm +++ b/common/modules/bootstrap.jsm @@ -19,11 +19,11 @@ if (!JSMLoader && "@mozilla.org/fuel/application;1" in Components.classes) .getService(Components.interfaces.extIApplication) .storage.get("dactyl.JSMLoader", null); -if (JSMLoader && JSMLoader.bump === 4) +if (JSMLoader && JSMLoader.bump === 5) JSMLoader.global = this; else JSMLoader = { - bump: 4, + bump: 5, builtin: Cu.Sandbox(this), @@ -41,7 +41,7 @@ else manager: Components.manager.QueryInterface(Ci.nsIComponentRegistrar), - modules: JSMLoader ? JSMLoader.modules : {}, + modules: JSMLoader && JSMLoader.modules || {}, stale: JSMLoader ? JSMLoader.stale : {},