Chromium Code Reviews| Index: extensions/renderer/event_emitter.cc |
| diff --git a/extensions/renderer/event_emitter.cc b/extensions/renderer/event_emitter.cc |
| index 96eab80b41dbe84b29b28b8d0c17eed8d1de25c7..a9c44d0ed1feabbe36e351f9969f8c2f692e4614 100644 |
| --- a/extensions/renderer/event_emitter.cc |
| +++ b/extensions/renderer/event_emitter.cc |
| @@ -52,7 +52,15 @@ void EventEmitter::Fire(v8::Local<v8::Context> context, |
| } |
| } |
| +void EventEmitter::Invalidate() { |
| + valid_ = false; |
| + listeners_.clear(); |
| +} |
| + |
| void EventEmitter::AddListener(gin::Arguments* arguments) { |
| + if (!valid_) |
|
jbroman
2017/03/01 17:49:47
This won't catch such objects which don't are crea
Devlin
2017/03/01 19:03:50
Yeah, I still don't have a complete grasp of all t
jbroman
2017/03/01 19:26:34
Well, that's slightly later than WillReleaseScript
Devlin
2017/03/02 17:26:32
Done. Added comments in InvalidateContext() and a
|
| + return; |
| + |
| v8::Local<v8::Function> listener; |
| // TODO(devlin): For some reason, we don't throw an error when someone calls |
| // add/removeListener with no argument. We probably should. For now, keep |
| @@ -78,6 +86,9 @@ void EventEmitter::AddListener(gin::Arguments* arguments) { |
| } |
| void EventEmitter::RemoveListener(gin::Arguments* arguments) { |
| + if (!valid_) |
|
jbroman
2017/03/01 17:49:47
Isn't |listeners_| empty in this case anyhow?
Devlin
2017/03/01 19:03:50
Yep, but this seemed more obvious to readers. If
|
| + return; |
| + |
| v8::Local<v8::Function> listener; |
| // See comment in AddListener(). |
| if (!arguments->GetNext(&listener)) |
| @@ -107,6 +118,8 @@ bool EventEmitter::HasListeners() { |
| } |
| void EventEmitter::Dispatch(gin::Arguments* arguments) { |
| + DCHECK(valid_); |
|
jbroman
2017/03/01 19:26:34
Should this be a DCHECK or an early return? Script
Devlin
2017/03/02 17:26:32
Oh, right, we had to expose this. Forgot about th
|
| + |
| if (listeners_.empty()) |
| return; |
| v8::HandleScope handle_scope(arguments->isolate()); |