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

Unified Diff: extensions/renderer/api_binding_unittest.cc

Issue 2552343006: [Extensions Binding] Allow for registering custom hooks (Closed)
Patch Set: . Created 4 years 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
« no previous file with comments | « extensions/renderer/api_binding_types.h ('k') | extensions/renderer/api_bindings_system.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/api_binding_unittest.cc
diff --git a/extensions/renderer/api_binding_unittest.cc b/extensions/renderer/api_binding_unittest.cc
index 909f2ab907661f3306b4e9d5e864ad01cc18ed28..aed169bce38bcd51b9b2b7f948a2cff8aef4612e 100644
--- a/extensions/renderer/api_binding_unittest.cc
+++ b/extensions/renderer/api_binding_unittest.cc
@@ -8,10 +8,12 @@
#include "base/strings/stringprintf.h"
#include "base/values.h"
#include "extensions/renderer/api_binding.h"
+#include "extensions/renderer/api_binding_hooks.h"
#include "extensions/renderer/api_binding_test.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/arguments.h"
#include "gin/converter.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "v8/include/v8.h"
@@ -194,7 +196,7 @@ TEST_F(APIBindingUnittest, Test) {
APIBinding binding(
"test", *functions, nullptr, nullptr,
base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
- &refs);
+ nullptr, &refs);
EXPECT_TRUE(refs.empty());
v8::HandleScope handle_scope(isolate());
@@ -295,7 +297,7 @@ TEST_F(APIBindingUnittest, TypeRefsTest) {
APIBinding binding(
"test", *functions, types.get(), nullptr,
base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
- &refs);
+ nullptr, &refs);
EXPECT_EQ(2u, refs.size());
EXPECT_TRUE(base::ContainsKey(refs, "refObj"));
EXPECT_TRUE(base::ContainsKey(refs, "refEnum"));
@@ -341,7 +343,7 @@ TEST_F(APIBindingUnittest, RestrictedAPIs) {
APIBinding binding(
"test", *functions, nullptr, nullptr,
base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
- &refs);
+ nullptr, &refs);
v8::HandleScope handle_scope(isolate());
v8::Local<v8::Context> context = ContextLocal();
@@ -384,7 +386,7 @@ TEST_F(APIBindingUnittest, TestEventCreation) {
APIBinding binding(
"test", *functions, nullptr, events.get(),
base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
- &refs);
+ nullptr, &refs);
v8::HandleScope handle_scope(isolate());
v8::Local<v8::Context> context = ContextLocal();
@@ -420,7 +422,7 @@ TEST_F(APIBindingUnittest, TestDisposedContext) {
APIBinding binding(
"test", *functions, nullptr, nullptr,
base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
- &refs);
+ nullptr, &refs);
EXPECT_TRUE(refs.empty());
v8::HandleScope handle_scope(isolate());
@@ -441,4 +443,49 @@ TEST_F(APIBindingUnittest, TestDisposedContext) {
// builds.
}
+// Tests adding custom hooks for an API method.
+TEST_F(APIBindingUnittest, TestCustomHooks) {
+ std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
+ ASSERT_TRUE(functions);
+ ArgumentSpec::RefMap refs;
+
+ // Register a hook for the test.oneString method.
+ auto hooks = base::MakeUnique<APIBindingHooks>();
+ bool did_call = false;
+ auto hook = [](bool* did_call, const binding::APISignature* signature,
+ gin::Arguments* arguments) {
+ *did_call = true;
+ EXPECT_EQ(1, arguments->Length());
+ std::string argument;
+ EXPECT_TRUE(arguments->GetNext(&argument));
+ EXPECT_EQ("foo", argument);
+ };
+ hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call));
+
+ APIBinding binding(
+ "test", *functions, nullptr, nullptr,
+ base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
+ std::move(hooks), &refs);
+ EXPECT_TRUE(refs.empty());
+
+ v8::HandleScope handle_scope(isolate());
+ v8::Local<v8::Context> context = ContextLocal();
+
+ APIEventHandler event_handler(
+ base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
+ v8::Local<v8::Object> binding_object = binding.CreateInstance(
+ context, isolate(), &event_handler, base::Bind(&AllowAllAPIs));
+
+ // First try calling the oneString() method, which has a custom hook
+ // installed.
+ v8::Local<v8::Function> func =
+ FunctionFromString(context, "(function(obj) { obj.oneString('foo'); })");
+ v8::Local<v8::Value> args[] = {binding_object};
+ RunFunction(func, context, 1, args);
+ EXPECT_TRUE(did_call);
+
+ // Other methods, like stringAndInt(), should behave normally.
+ ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]");
+}
+
} // namespace extensions
« no previous file with comments | « extensions/renderer/api_binding_types.h ('k') | extensions/renderer/api_bindings_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698