Index: extensions/renderer/api_binding_unittest.cc |
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc |
index 1a47125a539690405f31880483351512ec7b2846..c4002d661e6c415303d2a2da232b57ef904bca10 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" |
@@ -198,7 +199,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()); |
@@ -209,8 +210,10 @@ 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); |
+ binding.CreateInstance(context, isolate, &event_handler); |
ExpectPass(binding_object, "obj.oneString('foo');", "['foo']"); |
ExpectPass(binding_object, "obj.oneString('');", "['']"); |
@@ -300,7 +303,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()); |
@@ -313,8 +316,10 @@ 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); |
+ binding.CreateInstance(context, isolate, &event_handler); |
ExpectPass(binding_object, "obj.takesRefObj({prop1: 'foo'})", |
"[{'prop1':'foo'}]"); |
@@ -327,4 +332,48 @@ TEST_F(APIBindingTest, TypeRefsTest) { |
ExpectFailure(binding_object, "obj.takesRefEnum('gamma')", kError); |
} |
+// 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); |
+ |
+ // 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 |