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

Side by Side Diff: extensions/renderer/api_binding_unittest.cc

Issue 2610743002: [Extensions Bindings] Make function definitions optional for an API. (Closed)
Patch Set: api_binding_unittest Created 3 years, 11 months 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/memory/ptr_util.h" 6 #include "base/memory/ptr_util.h"
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "extensions/renderer/api_binding.h" 10 #include "extensions/renderer/api_binding.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 } 187 }
188 188
189 arguments_.reset(); 189 arguments_.reset();
190 } 190 }
191 191
192 TEST_F(APIBindingUnittest, Test) { 192 TEST_F(APIBindingUnittest, Test) {
193 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions); 193 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
194 ASSERT_TRUE(functions); 194 ASSERT_TRUE(functions);
195 ArgumentSpec::RefMap refs; 195 ArgumentSpec::RefMap refs;
196 APIBinding binding( 196 APIBinding binding(
197 "test", *functions, nullptr, nullptr, 197 "test", functions.get(), nullptr, nullptr,
198 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 198 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
199 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs); 199 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
200 EXPECT_TRUE(refs.empty()); 200 EXPECT_TRUE(refs.empty());
201 201
202 v8::HandleScope handle_scope(isolate()); 202 v8::HandleScope handle_scope(isolate());
203 v8::Local<v8::Context> context = ContextLocal(); 203 v8::Local<v8::Context> context = ContextLocal();
204 204
205 APIEventHandler event_handler( 205 APIEventHandler event_handler(
206 base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); 206 base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
207 v8::Local<v8::Object> binding_object = binding.CreateInstance( 207 v8::Local<v8::Object> binding_object = binding.CreateInstance(
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 " }]" 288 " }]"
289 "}]"; 289 "}]";
290 290
291 std::unique_ptr<base::ListValue> functions = 291 std::unique_ptr<base::ListValue> functions =
292 ListValueFromString(kRefFunctions); 292 ListValueFromString(kRefFunctions);
293 ASSERT_TRUE(functions); 293 ASSERT_TRUE(functions);
294 std::unique_ptr<base::ListValue> types = ListValueFromString(kTypes); 294 std::unique_ptr<base::ListValue> types = ListValueFromString(kTypes);
295 ASSERT_TRUE(types); 295 ASSERT_TRUE(types);
296 ArgumentSpec::RefMap refs; 296 ArgumentSpec::RefMap refs;
297 APIBinding binding( 297 APIBinding binding(
298 "test", *functions, types.get(), nullptr, 298 "test", functions.get(), types.get(), nullptr,
299 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 299 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
300 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs); 300 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
301 EXPECT_EQ(2u, refs.size()); 301 EXPECT_EQ(2u, refs.size());
302 EXPECT_TRUE(base::ContainsKey(refs, "refObj")); 302 EXPECT_TRUE(base::ContainsKey(refs, "refObj"));
303 EXPECT_TRUE(base::ContainsKey(refs, "refEnum")); 303 EXPECT_TRUE(base::ContainsKey(refs, "refEnum"));
304 304
305 v8::HandleScope handle_scope(isolate()); 305 v8::HandleScope handle_scope(isolate());
306 v8::Local<v8::Context> context = ContextLocal(); 306 v8::Local<v8::Context> context = ContextLocal();
307 307
308 APIEventHandler event_handler( 308 APIEventHandler event_handler(
(...skipping 25 matching lines...) Expand all
334 " 'parameters': []" 334 " 'parameters': []"
335 "}, {" 335 "}, {"
336 " 'name': 'restrictedTwo'," 336 " 'name': 'restrictedTwo',"
337 " 'parameters': []" 337 " 'parameters': []"
338 "}]"; 338 "}]";
339 std::unique_ptr<base::ListValue> functions = 339 std::unique_ptr<base::ListValue> functions =
340 ListValueFromString(kRestrictedFunctions); 340 ListValueFromString(kRestrictedFunctions);
341 ASSERT_TRUE(functions); 341 ASSERT_TRUE(functions);
342 ArgumentSpec::RefMap refs; 342 ArgumentSpec::RefMap refs;
343 APIBinding binding( 343 APIBinding binding(
344 "test", *functions, nullptr, nullptr, 344 "test", functions.get(), nullptr, nullptr,
345 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 345 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
346 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs); 346 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
347 347
348 v8::HandleScope handle_scope(isolate()); 348 v8::HandleScope handle_scope(isolate());
349 v8::Local<v8::Context> context = ContextLocal(); 349 v8::Local<v8::Context> context = ContextLocal();
350 350
351 auto is_available = [](const std::string& name) { 351 auto is_available = [](const std::string& name) {
352 std::set<std::string> functions = {"test.allowedOne", "test.allowedTwo", 352 std::set<std::string> functions = {"test.allowedOne", "test.allowedTwo",
353 "test.restrictedOne", 353 "test.restrictedOne",
354 "test.restrictedTwo"}; 354 "test.restrictedTwo"};
(...skipping 22 matching lines...) Expand all
377 // Tests that events specified in the API are created as properties of the API 377 // Tests that events specified in the API are created as properties of the API
378 // object. 378 // object.
379 TEST_F(APIBindingUnittest, TestEventCreation) { 379 TEST_F(APIBindingUnittest, TestEventCreation) {
380 const char kEvents[] = "[{'name': 'onFoo'}, {'name': 'onBar'}]"; 380 const char kEvents[] = "[{'name': 'onFoo'}, {'name': 'onBar'}]";
381 std::unique_ptr<base::ListValue> events = ListValueFromString(kEvents); 381 std::unique_ptr<base::ListValue> events = ListValueFromString(kEvents);
382 ASSERT_TRUE(events); 382 ASSERT_TRUE(events);
383 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions); 383 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
384 ASSERT_TRUE(functions); 384 ASSERT_TRUE(functions);
385 ArgumentSpec::RefMap refs; 385 ArgumentSpec::RefMap refs;
386 APIBinding binding( 386 APIBinding binding(
387 "test", *functions, nullptr, events.get(), 387 "test", functions.get(), nullptr, events.get(),
388 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 388 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
389 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs); 389 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
390 390
391 v8::HandleScope handle_scope(isolate()); 391 v8::HandleScope handle_scope(isolate());
392 v8::Local<v8::Context> context = ContextLocal(); 392 v8::Local<v8::Context> context = ContextLocal();
393 393
394 APIEventHandler event_handler( 394 APIEventHandler event_handler(
395 base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); 395 base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
396 v8::Local<v8::Object> binding_object = binding.CreateInstance( 396 v8::Local<v8::Object> binding_object = binding.CreateInstance(
397 context, isolate(), &event_handler, base::Bind(&AllowAllAPIs)); 397 context, isolate(), &event_handler, base::Bind(&AllowAllAPIs));
(...skipping 15 matching lines...) Expand all
413 binding_object->Has(context, gin::StringToV8(isolate(), "onBaz")); 413 binding_object->Has(context, gin::StringToV8(isolate(), "onBaz"));
414 EXPECT_TRUE(has_on_baz.IsJust()); 414 EXPECT_TRUE(has_on_baz.IsJust());
415 EXPECT_FALSE(has_on_baz.FromJust()); 415 EXPECT_FALSE(has_on_baz.FromJust());
416 } 416 }
417 417
418 TEST_F(APIBindingUnittest, TestDisposedContext) { 418 TEST_F(APIBindingUnittest, TestDisposedContext) {
419 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions); 419 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
420 ASSERT_TRUE(functions); 420 ASSERT_TRUE(functions);
421 ArgumentSpec::RefMap refs; 421 ArgumentSpec::RefMap refs;
422 APIBinding binding( 422 APIBinding binding(
423 "test", *functions, nullptr, nullptr, 423 "test", functions.get(), nullptr, nullptr,
424 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 424 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
425 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs); 425 base::MakeUnique<APIBindingHooks>(binding::RunJSFunction()), &refs);
426 EXPECT_TRUE(refs.empty()); 426 EXPECT_TRUE(refs.empty());
427 427
428 v8::HandleScope handle_scope(isolate()); 428 v8::HandleScope handle_scope(isolate());
429 v8::Local<v8::Context> context = ContextLocal(); 429 v8::Local<v8::Context> context = ContextLocal();
430 430
431 APIEventHandler event_handler( 431 APIEventHandler event_handler(
432 base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); 432 base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
433 v8::Local<v8::Object> binding_object = binding.CreateInstance( 433 v8::Local<v8::Object> binding_object = binding.CreateInstance(
(...skipping 25 matching lines...) Expand all
459 *did_call = true; 459 *did_call = true;
460 EXPECT_EQ(1, arguments->Length()); 460 EXPECT_EQ(1, arguments->Length());
461 std::string argument; 461 std::string argument;
462 EXPECT_TRUE(arguments->GetNext(&argument)); 462 EXPECT_TRUE(arguments->GetNext(&argument));
463 EXPECT_EQ("foo", argument); 463 EXPECT_EQ("foo", argument);
464 return APIBindingHooks::RequestResult::HANDLED; 464 return APIBindingHooks::RequestResult::HANDLED;
465 }; 465 };
466 hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call)); 466 hooks->RegisterHandleRequest("test.oneString", base::Bind(hook, &did_call));
467 467
468 APIBinding binding( 468 APIBinding binding(
469 "test", *functions, nullptr, nullptr, 469 "test", functions.get(), nullptr, nullptr,
470 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 470 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
471 std::move(hooks), &refs); 471 std::move(hooks), &refs);
472 EXPECT_TRUE(refs.empty()); 472 EXPECT_TRUE(refs.empty());
473 473
474 v8::HandleScope handle_scope(isolate()); 474 v8::HandleScope handle_scope(isolate());
475 v8::Local<v8::Context> context = ContextLocal(); 475 v8::Local<v8::Context> context = ContextLocal();
476 476
477 APIEventHandler event_handler( 477 APIEventHandler event_handler(
478 base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); 478 base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
479 v8::Local<v8::Object> binding_object = binding.CreateInstance( 479 v8::Local<v8::Object> binding_object = binding.CreateInstance(
(...skipping 30 matching lines...) Expand all
510 gin::StringToV8(isolate(), "custom_hook"); 510 gin::StringToV8(isolate(), "custom_hook");
511 hooks->RegisterJsSource( 511 hooks->RegisterJsSource(
512 v8::Global<v8::String>(isolate(), source_string), 512 v8::Global<v8::String>(isolate(), source_string),
513 v8::Global<v8::String>(isolate(), source_name)); 513 v8::Global<v8::String>(isolate(), source_name));
514 514
515 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions); 515 std::unique_ptr<base::ListValue> functions = ListValueFromString(kFunctions);
516 ASSERT_TRUE(functions); 516 ASSERT_TRUE(functions);
517 ArgumentSpec::RefMap refs; 517 ArgumentSpec::RefMap refs;
518 518
519 APIBinding binding( 519 APIBinding binding(
520 "test", *functions, nullptr, nullptr, 520 "test", functions.get(), nullptr, nullptr,
521 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)), 521 base::Bind(&APIBindingUnittest::OnFunctionCall, base::Unretained(this)),
522 std::move(hooks), &refs); 522 std::move(hooks), &refs);
523 EXPECT_TRUE(refs.empty()); 523 EXPECT_TRUE(refs.empty());
524 524
525 APIEventHandler event_handler( 525 APIEventHandler event_handler(
526 base::Bind(&RunFunctionOnGlobalAndIgnoreResult)); 526 base::Bind(&RunFunctionOnGlobalAndIgnoreResult));
527 v8::Local<v8::Object> binding_object = binding.CreateInstance( 527 v8::Local<v8::Object> binding_object = binding.CreateInstance(
528 context, isolate(), &event_handler, base::Bind(&AllowAllAPIs)); 528 context, isolate(), &event_handler, base::Bind(&AllowAllAPIs));
529 529
530 // First try calling with an invalid invocation. An error should be raised and 530 // First try calling with an invalid invocation. An error should be raised and
(...skipping 13 matching lines...) Expand all
544 544
545 std::unique_ptr<base::Value> response_args = 545 std::unique_ptr<base::Value> response_args =
546 GetBaseValuePropertyFromObject(context->Global(), context, 546 GetBaseValuePropertyFromObject(context->Global(), context,
547 "requestArguments"); 547 "requestArguments");
548 ASSERT_TRUE(response_args); 548 ASSERT_TRUE(response_args);
549 EXPECT_EQ("[\"foo\"]", ValueToString(*response_args)); 549 EXPECT_EQ("[\"foo\"]", ValueToString(*response_args));
550 550
551 // Other methods, like stringAndInt(), should behave normally. 551 // Other methods, like stringAndInt(), should behave normally.
552 ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]"); 552 ExpectPass(binding_object, "obj.stringAndInt('foo', 42);", "['foo',42]");
553 } 553 }
554 554
Devlin 2017/01/04 15:49:14 Let's add a new unittest for this. It's a pretty
jbroman 2017/01/04 19:55:43 Done. I added a unit test which passes in null fo
555 } // namespace extensions 555 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698