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

Unified Diff: extensions/renderer/event_bindings.h

Issue 1074273002: 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: fix memory leak 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
Index: extensions/renderer/event_bindings.h
diff --git a/extensions/renderer/event_bindings.h b/extensions/renderer/event_bindings.h
index 0f69cd36edf4f6af562c102a3660d16b21e9a154..3575b649b1787536e5b885ff84a4bd73e629d2d6 100644
--- a/extensions/renderer/event_bindings.h
+++ b/extensions/renderer/event_bindings.h
@@ -5,6 +5,9 @@
#ifndef EXTENSIONS_RENDERER_EVENT_BINDINGS_H_
#define EXTENSIONS_RENDERER_EVENT_BINDINGS_H_
+#include <set>
+
+#include "base/macros.h"
#include "extensions/renderer/object_backed_native_handler.h"
#include "v8/include/v8.h"
@@ -14,7 +17,6 @@ class DictionaryValue;
namespace extensions {
class Dispatcher;
-class EventFilter;
class EventFilteringInfo;
class EventMatcher;
@@ -25,16 +27,25 @@ class EventBindings : public ObjectBackedNativeHandler {
~EventBindings() override;
private:
+ // JavaScript handler which forwards to AttachEvent().
+ // args[0] forwards to |event_name|.
+ void AttachEventHandler(const v8::FunctionCallbackInfo<v8::Value>& args);
+
// Attach an event name to an object.
// |event_name| The name of the event to attach.
- void AttachEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+ void AttachEvent(const std::string& event_name);
+
+ // JavaScript handler which forwards to DetachEvent().
+ // args[0] forwards to |event_name|.
+ // args[1] forwards to |is_manual|.
+ void DetachEventHandler(const v8::FunctionCallbackInfo<v8::Value>& args);
- // Detach an event name from an object.
+ // Detaches an event name from an object.
// |event_name| The name of the event to stop listening to.
// |is_manual| True if this detach was done by the user via removeListener()
// as opposed to automatically during shutdown, in which case we should inform
// the browser we are no longer interested in that event.
- void DetachEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
+ void DetachEvent(const std::string& event_name, bool is_manual);
// MatcherID AttachFilteredEvent(string event_name, object filter)
// |event_name| Name of the event to attach.
@@ -51,9 +62,19 @@ class EventBindings : public ObjectBackedNativeHandler {
void MatchAgainstEventFilter(const v8::FunctionCallbackInfo<v8::Value>& args);
- Dispatcher* dispatcher_;
scoped_ptr<EventMatcher> ParseEventMatcher(
base::DictionaryValue* filter_dict);
+
+ // Called when our context, and therefore us, is invalidated. Run any cleanup.
+ void OnInvalidated();
+
+ // The set of attached events. Maintain this so that we can detch them on
+ // unload.
+ std::set<std::string> attached_event_names_;
+
+ Dispatcher* dispatcher_;
+
+ DISALLOW_COPY_AND_ASSIGN(EventBindings);
};
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698