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

Unified Diff: extensions/renderer/api_binding.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
« no previous file with comments | « extensions/renderer/api_binding.h ('k') | extensions/renderer/api_binding_types.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/api_binding.cc
diff --git a/extensions/renderer/api_binding.cc b/extensions/renderer/api_binding.cc
index fa54becf4b2d77e4ba761c85de11810da3c4af46..02c0102058b87b7975190472e3aa9066947de31a 100644
--- a/extensions/renderer/api_binding.cc
+++ b/extensions/renderer/api_binding.cc
@@ -10,6 +10,7 @@
#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "extensions/common/extension_api.h"
+#include "extensions/renderer/api_event_handler.h"
#include "extensions/renderer/v8_helpers.h"
#include "gin/arguments.h"
#include "gin/per_context_data.h"
@@ -163,6 +164,7 @@ APIBinding::APIPerContextData::~APIPerContextData() {}
APIBinding::APIBinding(const std::string& api_name,
const base::ListValue& function_definitions,
const base::ListValue* type_definitions,
+ const base::ListValue* event_definitions,
const APIMethodCallback& callback,
ArgumentSpec::RefMap* type_refs)
: api_name_(api_name),
@@ -190,6 +192,16 @@ APIBinding::APIBinding(const std::string& api_name,
(*type_refs)[id] = base::MakeUnique<ArgumentSpec>(*type_dict);
}
}
+ if (event_definitions) {
+ event_names_.reserve(event_definitions->GetSize());
+ for (const auto& event : *event_definitions) {
+ const base::DictionaryValue* event_dict = nullptr;
+ CHECK(event->GetAsDictionary(&event_dict));
+ std::string name;
+ CHECK(event_dict->GetString("name", &name));
+ event_names_.push_back(std::move(name));
+ }
+ }
}
APIBinding::~APIBinding() {}
@@ -197,6 +209,7 @@ APIBinding::~APIBinding() {}
v8::Local<v8::Object> APIBinding::CreateInstance(
v8::Local<v8::Context> context,
v8::Isolate* isolate,
+ APIEventHandler* event_handler,
const AvailabilityCallback& is_available) {
// TODO(devlin): APIs may change depending on which features are available,
// but we should be able to cache the unconditional methods on an object
@@ -236,6 +249,18 @@ v8::Local<v8::Object> APIBinding::CreateInstance(
DCHECK(success.FromJust());
}
+ for (const std::string& event_name : event_names_) {
+ std::string full_event_name =
+ base::StringPrintf("%s.%s", api_name_.c_str(), event_name.c_str());
+ v8::Local<v8::Object> event =
+ event_handler->CreateEventInstance(full_event_name, context);
+ DCHECK(!event.IsEmpty());
+ v8::Maybe<bool> success = object->CreateDataProperty(
+ context, gin::StringToSymbol(isolate, event_name), event);
+ DCHECK(success.IsJust());
+ DCHECK(success.FromJust());
+ }
+
return object;
}
« no previous file with comments | « extensions/renderer/api_binding.h ('k') | extensions/renderer/api_binding_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698