| 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
|
|
|