| Index: extensions/renderer/event_emitter.cc
|
| diff --git a/extensions/renderer/event_emitter.cc b/extensions/renderer/event_emitter.cc
|
| index 8a8d908bbefbb02feca4755633d22f222658f4e1..441517446b08b858682958799fec991e074f9500 100644
|
| --- a/extensions/renderer/event_emitter.cc
|
| +++ b/extensions/renderer/event_emitter.cc
|
| @@ -34,10 +34,15 @@ gin::ObjectTemplateBuilder EventEmitter::GetObjectTemplateBuilder(
|
|
|
| void EventEmitter::Fire(v8::Local<v8::Context> context,
|
| std::vector<v8::Local<v8::Value>>* args) {
|
| - for (const auto& listener : listeners_) {
|
| - run_js_.Run(listener.Get(context->GetIsolate()), context, args->size(),
|
| - args->data());
|
| - }
|
| + // We create a local copy of listeners_ since the array can be modified during
|
| + // handling.
|
| + std::vector<v8::Local<v8::Function>> listeners;
|
| + listeners.reserve(listeners_.size());
|
| + for (const auto& listener : listeners_)
|
| + listeners.push_back(listener.Get(context->GetIsolate()));
|
| +
|
| + for (const auto& listener : listeners)
|
| + run_js_.Run(listener, context, args->size(), args->data());
|
| }
|
|
|
| void EventEmitter::AddListener(gin::Arguments* arguments) {
|
|
|