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_; |