Do not leak event listeners on navigation

This patch:
- introduces helper.addEventListener/helper.removeEventListeners
  to simplify event management
- moves NavigatorWatchdog over to the helper.addEventListener to
  stop leaking event listeners
This commit is contained in:
Andrey Lushnikov
2017-07-22 17:03:58 -07:00
parent 5757bc18f2
commit c4904b4e10
3 changed files with 56 additions and 27 deletions

View File

@@ -115,6 +115,26 @@ class Helper {
return `"${text}"`;
}
}
/**
* @param {!EventEmitter} emitter
* @param {string} eventName
* @param {function(?)} handler
* @return {{emitter: !EventEmitter, eventName: string, handler: function(?)}}
*/
static addEventListener(emitter, eventName, handler) {
emitter.on(eventName, handler);
return { emitter, eventName, handler };
}
/**
* @param {!Array<{emitter: !EventEmitter, eventName: string, handler: function(?)}>}
*/
static removeEventListeners(listeners) {
for (let listener of listeners)
listener.emitter.removeListener(listener.eventName, listener.handler);
listeners.splice(0, listeners.length);
}
}
module.exports = Helper;