Chromium Code Reviews| Index: extensions/renderer/event_emitter.cc |
| diff --git a/extensions/renderer/event_emitter.cc b/extensions/renderer/event_emitter.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b4d34f4f37874a91506c6f1fb95e0a0292bab1ad |
| --- /dev/null |
| +++ b/extensions/renderer/event_emitter.cc |
| @@ -0,0 +1,54 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "extensions/renderer/event_emitter.h" |
| + |
| +#include <algorithm> |
| + |
| +#include "gin/object_template_builder.h" |
| + |
| +namespace extensions { |
| + |
| +gin::WrapperInfo EventEmitter::kWrapperInfo = {gin::kEmbedderNativeGin}; |
| + |
| +EventEmitter::EventEmitter() {} |
| + |
| +EventEmitter::~EventEmitter() {} |
| + |
| +gin::ObjectTemplateBuilder EventEmitter::GetObjectTemplateBuilder( |
| + v8::Isolate* isolate) { |
| + return Wrappable<EventEmitter>::GetObjectTemplateBuilder(isolate) |
| + .SetMethod("addListener", &EventEmitter::AddListener) |
| + .SetMethod("removeListener", &EventEmitter::RemoveListener) |
| + .SetMethod("hasListener", &EventEmitter::HasListener) |
| + .SetMethod("hasListeners", &EventEmitter::HasListeners); |
| +} |
| + |
| +void EventEmitter::AddListener(gin::Arguments* arguments) { |
| + v8::Local<v8::Function> listener; |
| + if (!arguments->GetNext(&listener)) |
| + return; |
| + |
| + if (!HasListener(listener)) { |
| + listeners_.push_back( |
|
jbroman
2016/11/03 19:28:04
nit: probably safer to also check that the gin::Pe
Devlin
2016/11/04 17:59:30
Done. It's a tiny shame since EventEmitter otherw
jbroman
2016/11/04 18:33:04
Agreed, but that's the cost of relying on the PerC
|
| + v8::Global<v8::Function>(arguments->isolate(), listener)); |
| + } |
| +} |
| + |
| +void EventEmitter::RemoveListener(v8::Local<v8::Function> listener) { |
| + auto iter = std::find(listeners_.begin(), listeners_.end(), listener); |
| + if (iter != listeners_.end()) |
| + listeners_.erase(iter); |
| +} |
| + |
| +bool EventEmitter::HasListener(v8::Local<v8::Function> listener) { |
| + return std::find(listeners_.begin(), listeners_.end(), listener) != |
| + listeners_.end(); |
| +} |
| + |
| +bool EventEmitter::HasListeners() { |
| + return !listeners_.empty(); |
| +} |
| + |
| +} // namespace extensions |