Index: extensions/renderer/api_binding_unittest.cc |
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc |
index e231d8864b9f5ccd5cbbc1b1c585e36266ac8305..9a325c93e1b53f7658659d01af9764a104013e6a 100644 |
--- a/extensions/renderer/api_binding_unittest.cc |
+++ b/extensions/renderer/api_binding_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "content/public/child/v8_value_converter.h" |
#include "extensions/renderer/api_binding.h" |
#include "extensions/renderer/api_binding_test_util.h" |
+#include "extensions/renderer/api_event_handler.h" |
#include "extensions/renderer/api_request_handler.h" |
#include "gin/converter.h" |
#include "gin/public/context_holder.h" |
@@ -202,7 +203,7 @@ TEST_F(APIBindingTest, Test) { |
ASSERT_TRUE(functions); |
ArgumentSpec::RefMap refs; |
APIBinding binding( |
- "test", *functions, nullptr, |
+ "test", *functions, nullptr, nullptr, |
base::Bind(&APIBindingTest::OnFunctionCall, base::Unretained(this)), |
&refs); |
EXPECT_TRUE(refs.empty()); |
@@ -213,8 +214,11 @@ TEST_F(APIBindingTest, Test) { |
v8::Local<v8::Context> context = |
v8::Local<v8::Context>::New(isolate, context_); |
+ APIEventHandler event_handler( |
+ base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); |
v8::Local<v8::Object> binding_object = |
- binding.CreateInstance(context, isolate, base::Bind(&AllowAllAPIs)); |
+ binding.CreateInstance(context, isolate, &event_handler, |
+ base::Bind(&AllowAllAPIs)); |
ExpectPass(binding_object, "obj.oneString('foo');", "['foo']"); |
ExpectPass(binding_object, "obj.oneString('');", "['']"); |
@@ -304,7 +308,7 @@ TEST_F(APIBindingTest, TypeRefsTest) { |
ASSERT_TRUE(types); |
ArgumentSpec::RefMap refs; |
APIBinding binding( |
- "test", *functions, types.get(), |
+ "test", *functions, types.get(), nullptr, |
base::Bind(&APIBindingTest::OnFunctionCall, base::Unretained(this)), |
&refs); |
EXPECT_EQ(2u, refs.size()); |
@@ -317,8 +321,11 @@ TEST_F(APIBindingTest, TypeRefsTest) { |
v8::Local<v8::Context> context = |
v8::Local<v8::Context>::New(isolate, context_); |
+ APIEventHandler event_handler( |
+ base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); |
v8::Local<v8::Object> binding_object = |
- binding.CreateInstance(context, isolate, base::Bind(&AllowAllAPIs)); |
+ binding.CreateInstance(context, isolate, &event_handler, |
+ base::Bind(&AllowAllAPIs)); |
ExpectPass(binding_object, "obj.takesRefObj({prop1: 'foo'})", |
"[{'prop1':'foo'}]"); |
@@ -351,7 +358,7 @@ TEST_F(APIBindingTest, RestrictedAPIs) { |
ASSERT_TRUE(functions); |
ArgumentSpec::RefMap refs; |
APIBinding binding( |
- "test", *functions, nullptr, |
+ "test", *functions, nullptr, nullptr, |
base::Bind(&APIBindingTest::OnFunctionCall, base::Unretained(this)), |
&refs); |
@@ -368,8 +375,11 @@ TEST_F(APIBindingTest, RestrictedAPIs) { |
return name == "test.allowedOne" || name == "test.allowedTwo"; |
}; |
+ APIEventHandler event_handler( |
+ base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); |
v8::Local<v8::Object> binding_object = |
- binding.CreateInstance(context, isolate, base::Bind(is_available)); |
+ binding.CreateInstance(context, isolate, &event_handler, |
+ base::Bind(is_available)); |
auto is_defined = [&binding_object, context](const std::string& name) { |
v8::Local<v8::Value> val = |
@@ -384,4 +394,48 @@ TEST_F(APIBindingTest, RestrictedAPIs) { |
EXPECT_FALSE(is_defined("restrictedTwo")); |
} |
+// Tests that events specified in the API are created as properties of the API |
+// object. |
+TEST_F(APIBindingTest, TestEventCreation) { |
+ const char kEvents[] = "[{'name': 'onFoo'}, {'name': 'onBar'}]"; |
+ std::unique_ptr<base::ListValue> events = ListValueFromString(kEvents); |
+ ASSERT_TRUE(events); |
+ std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions); |
+ ASSERT_TRUE(functions); |
+ ArgumentSpec::RefMap refs; |
+ APIBinding binding( |
+ "test", *functions, nullptr, events.get(), |
+ base::Bind(&APIBindingTest::OnFunctionCall, base::Unretained(this)), |
+ &refs); |
+ |
+ v8::Isolate* isolate = instance_->isolate(); |
+ v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> context = |
+ v8::Local<v8::Context>::New(isolate, context_); |
+ |
+ APIEventHandler event_handler( |
+ base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); |
+ v8::Local<v8::Object> binding_object = |
+ binding.CreateInstance(context, isolate, &event_handler, |
+ base::Bind(&AllowAllAPIs)); |
+ |
+ // Event behavior is tested in the APIEventHandler unittests as well as the |
+ // APIBindingsSystem tests, so we really only need to check that the events |
+ // are being initialized on the object. |
+ v8::Maybe<bool> has_on_foo = |
+ binding_object->Has(context, gin::StringToV8(isolate, "onFoo")); |
+ EXPECT_TRUE(has_on_foo.IsJust()); |
+ EXPECT_TRUE(has_on_foo.FromJust()); |
+ |
+ v8::Maybe<bool> has_on_bar = |
+ binding_object->Has(context, gin::StringToV8(isolate, "onBar")); |
+ EXPECT_TRUE(has_on_bar.IsJust()); |
+ EXPECT_TRUE(has_on_bar.FromJust()); |
+ |
+ v8::Maybe<bool> has_on_baz = |
+ binding_object->Has(context, gin::StringToV8(isolate, "onBaz")); |
+ EXPECT_TRUE(has_on_baz.IsJust()); |
+ EXPECT_FALSE(has_on_baz.FromJust()); |
+} |
+ |
} // namespace extensions |