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

Unified Diff: extensions/renderer/api_binding_unittest.cc

Issue 2704823002: [Extensions Bindings] Add support for custom property types (Closed)
Patch Set: . Created 3 years, 10 months 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/api_binding_unittest.cc
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc
index 210af2b7371f8dc013ba159bd9e4821b75da9074..ddf966381ac697cca465400142b7288b80be7575 100644
--- a/extensions/renderer/api_binding_unittest.cc
+++ b/extensions/renderer/api_binding_unittest.cc
@@ -174,6 +174,10 @@ class APIBindingUnittest : public APIBindingTest {
ASSERT_TRUE(binding_hooks_);
}
+ void SetCreateCustomType(const APIBinding::CreateCustomType& callback) {
+ create_custom_type_ = callback;
+ }
+
void InitializeBinding() {
if (!binding_hooks_) {
binding_hooks_ =
@@ -184,7 +188,7 @@ class APIBindingUnittest : public APIBindingTest {
base::Bind(&OnEventListenersChanged));
binding_ = base::MakeUnique<APIBinding>(
"test", binding_functions_.get(), binding_types_.get(),
- binding_events_.get(), binding_properties_.get(),
+ binding_events_.get(), binding_properties_.get(), create_custom_type_,
std::move(binding_hooks_), &type_refs_, request_handler_.get(),
event_handler_.get());
EXPECT_EQ(!binding_types_.get(), type_refs_.empty());
@@ -245,6 +249,7 @@ class APIBindingUnittest : public APIBindingTest {
std::unique_ptr<base::ListValue> binding_types_;
std::unique_ptr<base::DictionaryValue> binding_properties_;
std::unique_ptr<APIBindingHooks> binding_hooks_;
+ APIBinding::CreateCustomType create_custom_type_;
DISALLOW_COPY_AND_ASSIGN(APIBindingUnittest);
};
@@ -564,6 +569,53 @@ TEST_F(APIBindingUnittest, TestProperties) {
GetStringPropertyFromObject(binding_object, context, "prop2"));
}
+TEST_F(APIBindingUnittest, TestRefProperties) {
+ SetProperties(
+ "{"
+ " 'alpha': {"
+ " '$ref': 'AlphaRef'"
+ " },"
+ " 'beta': {"
+ " '$ref': 'BetaRef'"
+ " }"
+ "}");
+ auto create_custom_type = [](v8::Local<v8::Context> context,
+ const std::string& type_name,
+ const std::string& property_name) {
+ v8::Isolate* isolate = context->GetIsolate();
+ v8::Local<v8::Object> result = v8::Object::New(isolate);
+ EXPECT_TRUE(type_name == "AlphaRef" || type_name == "BetaRef") << type_name;
jbroman 2017/02/21 16:47:37 nit: might as well just put this in the else branc
Devlin 2017/02/21 18:05:40 Done.
+ if (type_name == "AlphaRef") {
+ EXPECT_EQ("alpha", property_name);
+ result
+ ->Set(context, gin::StringToV8(isolate, "alphaProp"),
jbroman 2017/02/21 16:47:37 super-nit: it'll be internalized by V8 when you tr
Devlin 2017/02/21 18:05:40 Done.
+ gin::StringToV8(isolate, "alphaVal"))
+ .ToChecked();
+ } else if (type_name == "BetaRef") {
+ EXPECT_EQ("beta", property_name);
+ result
+ ->Set(context, gin::StringToV8(isolate, "betaProp"),
+ gin::StringToV8(isolate, "betaVal"))
+ .ToChecked();
+ }
+ return result;
+ };
+
+ SetCreateCustomType(base::Bind(create_custom_type));
+
+ InitializeBinding();
+
+ v8::HandleScope handle_scope(isolate());
+ v8::Local<v8::Context> context = ContextLocal();
+ v8::Local<v8::Object> binding_object =
+ binding()->CreateInstance(context, isolate(), base::Bind(&AllowAllAPIs));
+ EXPECT_EQ(R"({"alphaProp":"alphaVal"})",
+ GetStringPropertyFromObject(binding_object, context, "alpha"));
+ EXPECT_EQ(
+ R"({"betaProp":"betaVal"})",
+ GetStringPropertyFromObject(binding_object, context, "beta"));
+}
+
TEST_F(APIBindingUnittest, TestDisposedContext) {
SetFunctions(kFunctions);
InitializeBinding();

Powered by Google App Engine
This is Rietveld 408576698