| Index: extensions/renderer/resources/event.js
|
| diff --git a/extensions/renderer/resources/event.js b/extensions/renderer/resources/event.js
|
| index bb71297fb01188cd6d808190ce4bb98511ece7e2..f62ab0ff21752e49a378396905b48c2d51bf2d98 100644
|
| --- a/extensions/renderer/resources/event.js
|
| +++ b/extensions/renderer/resources/event.js
|
| @@ -9,6 +9,7 @@
|
| var sendRequest = require('sendRequest').sendRequest;
|
| var utils = require('utils');
|
| var validate = require('schemaUtils').validate;
|
| + var unloadEvent = require('unload_event');
|
|
|
| // Schemas for the rule-style functions on the events API that
|
| // only need to be generated occasionally, so populate them lazily.
|
| @@ -36,6 +37,9 @@
|
|
|
| // A map of event names to the event object that is registered to that name.
|
| var attachedNamedEvents = {};
|
| +
|
| + // An array of all attached event objects, used for detaching on unload.
|
| + var allAttachedEvents = [];
|
|
|
| // A map of functions that massage event arguments before they are dispatched.
|
| // Key is event name, value is function.
|
| @@ -279,6 +283,7 @@
|
| this.attachmentStrategy.onAddedListener(listener);
|
|
|
| if (this.listeners.length == 0) {
|
| + allAttachedEvents[allAttachedEvents.length] = this;
|
| if (this.eventName) {
|
| if (attachedNamedEvents[this.eventName]) {
|
| throw new Error("Event '" + this.eventName +
|
| @@ -302,6 +307,9 @@
|
| this.attachmentStrategy.onRemovedListener(removedListener);
|
|
|
| if (this.listeners.length == 0) {
|
| + var i = $Array.indexOf(allAttachedEvents, this);
|
| + if (i >= 0)
|
| + delete allAttachedEvents[i];
|
| if (this.eventName) {
|
| if (!attachedNamedEvents[this.eventName]) {
|
| throw new Error(
|
| @@ -490,6 +498,14 @@
|
| ruleFunctionSchemas.getRules.parameters);
|
| }
|
|
|
| + unloadEvent.addListener(function() {
|
| + for (var i = 0; i < allAttachedEvents.length; ++i) {
|
| + var event = allAttachedEvents[i];
|
| + if (event)
|
| + event.detach_();
|
| + }
|
| + });
|
| +
|
| var Event = utils.expose('Event', EventImpl, { functions: [
|
| 'addListener',
|
| 'removeListener',
|
|
|