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

Unified Diff: extensions/renderer/api_binding_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698