OLD | NEW |
(Empty) | |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "extensions/renderer/event_emitter.h" |
| 6 |
| 7 #include <algorithm> |
| 8 |
| 9 #include "gin/object_template_builder.h" |
| 10 #include "gin/per_context_data.h" |
| 11 |
| 12 namespace extensions { |
| 13 |
| 14 gin::WrapperInfo EventEmitter::kWrapperInfo = {gin::kEmbedderNativeGin}; |
| 15 |
| 16 EventEmitter::EventEmitter() {} |
| 17 |
| 18 EventEmitter::~EventEmitter() {} |
| 19 |
| 20 gin::ObjectTemplateBuilder EventEmitter::GetObjectTemplateBuilder( |
| 21 v8::Isolate* isolate) { |
| 22 return Wrappable<EventEmitter>::GetObjectTemplateBuilder(isolate) |
| 23 .SetMethod("addListener", &EventEmitter::AddListener) |
| 24 .SetMethod("removeListener", &EventEmitter::RemoveListener) |
| 25 .SetMethod("hasListener", &EventEmitter::HasListener) |
| 26 .SetMethod("hasListeners", &EventEmitter::HasListeners); |
| 27 } |
| 28 |
| 29 void EventEmitter::AddListener(gin::Arguments* arguments) { |
| 30 v8::Local<v8::Function> listener; |
| 31 if (!arguments->GetNext(&listener)) |
| 32 return; |
| 33 |
| 34 v8::Local<v8::Object> holder; |
| 35 CHECK(arguments->GetHolder(&holder)); |
| 36 CHECK(!holder.IsEmpty()); |
| 37 if (!gin::PerContextData::From(holder->CreationContext())) |
| 38 return; |
| 39 |
| 40 if (!HasListener(listener)) { |
| 41 listeners_.push_back( |
| 42 v8::Global<v8::Function>(arguments->isolate(), listener)); |
| 43 } |
| 44 } |
| 45 |
| 46 void EventEmitter::RemoveListener(v8::Local<v8::Function> listener) { |
| 47 auto iter = std::find(listeners_.begin(), listeners_.end(), listener); |
| 48 if (iter != listeners_.end()) |
| 49 listeners_.erase(iter); |
| 50 } |
| 51 |
| 52 bool EventEmitter::HasListener(v8::Local<v8::Function> listener) { |
| 53 return std::find(listeners_.begin(), listeners_.end(), listener) != |
| 54 listeners_.end(); |
| 55 } |
| 56 |
| 57 bool EventEmitter::HasListeners() { |
| 58 return !listeners_.empty(); |
| 59 } |
| 60 |
| 61 } // namespace extensions |
OLD | NEW |