diff --git a/common/bootstrap.js b/common/bootstrap.js index 636fa686..795e9fe5 100755 --- a/common/bootstrap.js +++ b/common/bootstrap.js @@ -113,7 +113,7 @@ let JSMLoader = { atexit: function atexit(arg, self) { if (typeof arg !== "string") - this._atexit.push(arguments); + this._atexit.push([arg, self]); else for (let [fn, self] of this._atexit) try { diff --git a/common/modules/main.jsm b/common/modules/main.jsm index 73b1b624..cbfafec2 100644 --- a/common/modules/main.jsm +++ b/common/modules/main.jsm @@ -125,8 +125,16 @@ var Modules = function Modules(window) { return p; }, - set: function window_set(target, prop, val) { - return target[prop] = val; + set: function window_set(target, prop, val, receiver) { + if (receiver !== target) + Object.defineProperty(receiver, prop, { + value: val, + enumerable: true, configurable: true, writable: true + }); + else + target[prop] = val; + + return true; } }); @@ -249,7 +257,9 @@ overlay.overlayWindow(Object.keys(config.overlays), cleanup: function cleanup(window) { overlay.windows.delete(window); - Cu.nukeSandbox(this.jsmodules); + JSMLoader.atexit(() => { + Cu.nukeSandbox(this.jsmodules); + }); }, unload: function unload(window) { diff --git a/common/modules/overlay.jsm b/common/modules/overlay.jsm index cb054ced..86a59661 100644 --- a/common/modules/overlay.jsm +++ b/common/modules/overlay.jsm @@ -102,7 +102,7 @@ var Overlay = Module("Overlay", XPCOM([Ci.nsIObserver, Ci.nsISupportsWeakReferen if (event === true) target = null; - this.setData(doc, "listeners", listeners.filter(function (args) { + this.setData(doc, "listeners", listeners.filter(args => { let elem = args[0].get(); if (target == null || elem == target && args[1] == event && args[2].wrapped == callback && args[3] == capture) { apply(elem, "removeEventListener", args.slice(1));