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

Unified Diff: extensions/renderer/api_binding_unittest.cc

Issue 2469593002: [Extensions Bindings] Add Events support (Closed)
Patch Set: . 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
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

Powered by Google App Engine
This is Rietveld 408576698