Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(370)

Unified Diff: extensions/renderer/event_emitter.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..5d4d6cbb99e625864b0ec7cbbce201f19f0b2965
--- /dev/null
+++ b/extensions/renderer/event_emitter.cc
@@ -0,0 +1,61 @@
+// 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"
+#include "gin/per_context_data.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;
+
+ v8::Local<v8::Object> holder;
+ CHECK(arguments->GetHolder(&holder));
+ CHECK(!holder.IsEmpty());
+ if (!gin::PerContextData::From(holder->CreationContext()))
+ return;
+
+ if (!HasListener(listener)) {
+ listeners_.push_back(
+ 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
« no previous file with comments | « extensions/renderer/event_emitter.h ('k') | extensions/renderer/guest_view/guest_view_internal_custom_bindings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698