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

Unified Diff: extensions/renderer/event_emitter.h

Issue 2722463006: [Extensions Bindings] Notify of event unregistration on invalidation (Closed)
Patch Set: Rebase Created 3 years, 9 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/api_event_handler_unittest.cc ('k') | extensions/renderer/event_emitter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/event_emitter.h
diff --git a/extensions/renderer/event_emitter.h b/extensions/renderer/event_emitter.h
index 6705cca8e01438b48c169e2bf43d5742edc62b5d..f160135f1377a57bdacdfaf03af8dd1cc6d9d89a 100644
--- a/extensions/renderer/event_emitter.h
+++ b/extensions/renderer/event_emitter.h
@@ -40,7 +40,11 @@ class EventEmitter final : public gin::Wrappable<EventEmitter> {
void Fire(v8::Local<v8::Context> context,
std::vector<v8::Local<v8::Value>>* args);
- Listeners* listeners() { return &listeners_; }
+ // Removes all listeners and marks this object as invalid so that no more
+ // are added.
+ void Invalidate();
+
+ const Listeners* listeners() const { return &listeners_; }
private:
// Bound methods for the Event JS object.
@@ -50,6 +54,10 @@ class EventEmitter final : public gin::Wrappable<EventEmitter> {
bool HasListeners();
void Dispatch(gin::Arguments* arguments);
+ // Whether or not this object is still valid; false upon context release.
+ // When invalid, no listeners can be added or removed.
+ bool valid_ = true;
+
Listeners listeners_;
binding::RunJSFunction run_js_;
« no previous file with comments | « extensions/renderer/api_event_handler_unittest.cc ('k') | extensions/renderer/event_emitter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698