Bug 1298939: Don't register cleanup functions for listeners until the first time they're added. r?rpl
MozReview-Commit-ID: Ai8MxlB2qSb
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -971,31 +971,31 @@ EventManager.prototype = {
// Similar to EventManager, but it doesn't try to consolidate event
// notifications. Each addListener call causes us to register once. It
// allows extra arguments to be passed to addListener.
function SingletonEventManager(context, name, register) {
this.context = context;
this.name = name;
this.register = register;
this.unregister = new Map();
- context.callOnClose(this);
}
SingletonEventManager.prototype = {
addListener(callback, ...args) {
let wrappedCallback = (...args) => {
if (this.context.unloaded) {
dump(`${this.name} event fired after context unloaded.\n`);
} else if (this.unregister.has(callback)) {
return callback(...args);
}
};
let unregister = this.register(wrappedCallback, ...args);
this.unregister.set(callback, unregister);
+ this.context.callOnClose(this);
},
removeListener(callback) {
if (!this.unregister.has(callback)) {
return;
}
let unregister = this.unregister.get(callback);