Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: extensions/renderer/resources/event.js

Issue 1083663004: Revert of Move the event attach/detach logic on unload from event.js to (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/object_backed_native_handler.cc ('k') | extensions/renderer/script_context.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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',
« no previous file with comments | « extensions/renderer/object_backed_native_handler.cc ('k') | extensions/renderer/script_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698