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

Side by Side Diff: chrome/common/extensions/api/common_extension_api_unittest.cc

Issue 2494653005: Support API aliases (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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "extensions/common/extension_api.h" 5 #include "extensions/common/extension_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 21 matching lines...) Expand all
32 32
33 namespace extensions { 33 namespace extensions {
34 34
35 namespace { 35 namespace {
36 36
37 const char* const kTestFeatures[] = { 37 const char* const kTestFeatures[] = {
38 "test1", "test2", "test3", "test4", "test5", 38 "test1", "test2", "test3", "test4", "test5",
39 "test6", "test7", "parent1", "parent2", "parent3", 39 "test6", "test7", "parent1", "parent2", "parent3",
40 }; 40 };
41 41
42 const char* const kAliasTestApis[] = {"alias_api_source"};
43
42 const char* const kSessionTypeTestFeatures[] = { 44 const char* const kSessionTypeTestFeatures[] = {
43 "test1", "kiosk_only", "non_kiosk", "multiple_session_types"}; 45 "test1", "kiosk_only", "non_kiosk", "multiple_session_types"};
44 46
45 struct FeatureSessionTypesTestData { 47 struct FeatureSessionTypesTestData {
46 std::string api_name; 48 std::string api_name;
47 bool expect_available; 49 bool expect_available;
48 FeatureSessionType current_session_type; 50 FeatureSessionType current_session_type;
49 }; 51 };
50 52
51 class TestExtensionAPI : public ExtensionAPI { 53 class TestExtensionAPI : public ExtensionAPI {
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 198
197 for (size_t i = 0; i < arraysize(test_data); ++i) { 199 for (size_t i = 0; i < arraysize(test_data); ++i) {
198 TestExtensionAPI api; 200 TestExtensionAPI api;
199 api.RegisterDependencyProvider("api", &api_feature_provider); 201 api.RegisterDependencyProvider("api", &api_feature_provider);
200 for (const auto& key : kTestFeatures) 202 for (const auto& key : kTestFeatures)
201 api.add_fake_schema(key); 203 api.add_fake_schema(key);
202 ExtensionAPI::OverrideSharedInstanceForTest scope(&api); 204 ExtensionAPI::OverrideSharedInstanceForTest scope(&api);
203 205
204 bool expected = test_data[i].expect_is_available; 206 bool expected = test_data[i].expect_is_available;
205 Feature::Availability availability = 207 Feature::Availability availability =
206 api.IsAvailable(test_data[i].api_full_name, 208 api.IsAvailable(test_data[i].api_full_name, NULL, test_data[i].context,
207 NULL, 209 test_data[i].url, false);
208 test_data[i].context,
209 test_data[i].url);
210 EXPECT_EQ(expected, availability.is_available()) 210 EXPECT_EQ(expected, availability.is_available())
211 << base::StringPrintf("Test %d: Feature '%s' was %s: %s", 211 << base::StringPrintf("Test %d: Feature '%s' was %s: %s",
212 static_cast<int>(i), 212 static_cast<int>(i),
213 test_data[i].api_full_name.c_str(), 213 test_data[i].api_full_name.c_str(),
214 expected ? "not available" : "available", 214 expected ? "not available" : "available",
215 availability.message().c_str()); 215 availability.message().c_str());
216 } 216 }
217 } 217 }
218 218
219 TEST(ExtensionAPITest, APIFeaturesAlias) {
220 UnittestFeatureProvider api_feature_provider;
221
222 TestExtensionAPI api;
223 api.RegisterDependencyProvider("api", &api_feature_provider);
224 for (const auto& key : kAliasTestApis)
225 api.add_fake_schema(key);
226 ExtensionAPI::OverrideSharedInstanceForTest scope(&api);
227
228 ASSERT_FALSE(api.IsAvailable("alias_api_source", NULL,
229 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
230 false /* allow_alias */)
231 .is_available());
232 ASSERT_TRUE(api.IsAvailable("alias_api_source", NULL,
233 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
234 true /* allow_alias */)
235 .is_available());
236 ASSERT_TRUE(api.IsAvailable("alias_api_source.bar", NULL,
237 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
238 true /* allow_alias */)
239 .is_available());
240 ASSERT_FALSE(api.IsAvailable("alias_api_source.foo", NULL,
241 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
242 true /* allow_alias */)
243 .is_available());
244
245 scoped_refptr<const Extension> extension =
246 ExtensionBuilder()
247 .SetManifest(DictionaryBuilder()
248 .Set("name", "extension")
249 .Set("version", "1")
250 .Set("manifest_version", 2)
251 .Build())
252 .Build();
253 Feature* test_feature = api_feature_provider.GetFeature("alias_api_source");
254 ASSERT_TRUE(test_feature);
255 ASSERT_FALSE(api.IsAnyFeatureAvailableToContext(
256 *test_feature, extension.get(), Feature::UNBLESSED_EXTENSION_CONTEXT,
257 GURL(), false /* alow_alias */));
258 EXPECT_TRUE(api.IsAnyFeatureAvailableToContext(
259 *test_feature, extension.get(), Feature::UNBLESSED_EXTENSION_CONTEXT,
260 GURL(), true /* alow_alias */));
261 }
262
219 TEST(ExtensionAPITest, IsAnyFeatureAvailableToContext) { 263 TEST(ExtensionAPITest, IsAnyFeatureAvailableToContext) {
220 scoped_refptr<const Extension> app = 264 scoped_refptr<const Extension> app =
221 ExtensionBuilder() 265 ExtensionBuilder()
222 .SetManifest( 266 .SetManifest(
223 DictionaryBuilder() 267 DictionaryBuilder()
224 .Set("name", "app") 268 .Set("name", "app")
225 .Set("app", 269 .Set("app",
226 DictionaryBuilder() 270 DictionaryBuilder()
227 .Set("background", 271 .Set("background",
228 DictionaryBuilder() 272 DictionaryBuilder()
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 TestExtensionAPI api; 320 TestExtensionAPI api;
277 api.RegisterDependencyProvider("api", &api_feature_provider); 321 api.RegisterDependencyProvider("api", &api_feature_provider);
278 for (const auto& key : kTestFeatures) 322 for (const auto& key : kTestFeatures)
279 api.add_fake_schema(key); 323 api.add_fake_schema(key);
280 ExtensionAPI::OverrideSharedInstanceForTest scope(&api); 324 ExtensionAPI::OverrideSharedInstanceForTest scope(&api);
281 325
282 Feature* test_feature = 326 Feature* test_feature =
283 api_feature_provider.GetFeature(test_data[i].api_full_name); 327 api_feature_provider.GetFeature(test_data[i].api_full_name);
284 ASSERT_TRUE(test_feature); 328 ASSERT_TRUE(test_feature);
285 EXPECT_EQ(test_data[i].expect_is_available, 329 EXPECT_EQ(test_data[i].expect_is_available,
286 api.IsAnyFeatureAvailableToContext(*test_feature, 330 api.IsAnyFeatureAvailableToContext(
287 test_data[i].extension, 331 *test_feature, test_data[i].extension, test_data[i].context,
288 test_data[i].context, 332 test_data[i].url, false))
289 test_data[i].url))
290 << i; 333 << i;
291 } 334 }
292 } 335 }
293 336
294 TEST(ExtensionAPITest, SessionTypeFeature) { 337 TEST(ExtensionAPITest, SessionTypeFeature) {
295 const std::vector<FeatureSessionTypesTestData> kTestData( 338 const std::vector<FeatureSessionTypesTestData> kTestData(
296 {{"kiosk_only", true, FeatureSessionType::KIOSK}, 339 {{"kiosk_only", true, FeatureSessionType::KIOSK},
297 {"kiosk_only", false, FeatureSessionType::REGULAR}, 340 {"kiosk_only", false, FeatureSessionType::REGULAR},
298 {"kiosk_only", false, FeatureSessionType::UNKNOWN}, 341 {"kiosk_only", false, FeatureSessionType::UNKNOWN},
299 {"non_kiosk", false, FeatureSessionType::KIOSK}, 342 {"non_kiosk", false, FeatureSessionType::KIOSK},
(...skipping 12 matching lines...) Expand all
312 TestExtensionAPI api; 355 TestExtensionAPI api;
313 api.RegisterDependencyProvider("api", &api_feature_provider); 356 api.RegisterDependencyProvider("api", &api_feature_provider);
314 for (const auto& key : kSessionTypeTestFeatures) 357 for (const auto& key : kSessionTypeTestFeatures)
315 api.add_fake_schema(key); 358 api.add_fake_schema(key);
316 ExtensionAPI::OverrideSharedInstanceForTest scope(&api); 359 ExtensionAPI::OverrideSharedInstanceForTest scope(&api);
317 360
318 std::unique_ptr<base::AutoReset<FeatureSessionType>> current_session( 361 std::unique_ptr<base::AutoReset<FeatureSessionType>> current_session(
319 ScopedCurrentFeatureSessionType(test.current_session_type)); 362 ScopedCurrentFeatureSessionType(test.current_session_type));
320 EXPECT_EQ(test.expect_available, 363 EXPECT_EQ(test.expect_available,
321 api.IsAvailable(test.api_name, nullptr, 364 api.IsAvailable(test.api_name, nullptr,
322 Feature::BLESSED_EXTENSION_CONTEXT, GURL()) 365 Feature::BLESSED_EXTENSION_CONTEXT, GURL(), false)
323 .is_available()) 366 .is_available())
324 << "Test case (" << test.api_name << ", " 367 << "Test case (" << test.api_name << ", "
325 << static_cast<int>(test.current_session_type) << ")."; 368 << static_cast<int>(test.current_session_type) << ").";
326 } 369 }
327 } 370 }
328 371
329 TEST(ExtensionAPITest, LazyGetSchema) { 372 TEST(ExtensionAPITest, LazyGetSchema) {
330 std::unique_ptr<ExtensionAPI> apis( 373 std::unique_ptr<ExtensionAPI> apis(
331 ExtensionAPI::CreateWithDefaultConfiguration()); 374 ExtensionAPI::CreateWithDefaultConfiguration());
332 375
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 extension = CreateExtensionWithPermissions(permissions); 431 extension = CreateExtensionWithPermissions(permissions);
389 } 432 }
390 433
391 std::unique_ptr<ExtensionAPI> extension_api( 434 std::unique_ptr<ExtensionAPI> extension_api(
392 ExtensionAPI::CreateWithDefaultConfiguration()); 435 ExtensionAPI::CreateWithDefaultConfiguration());
393 436
394 const FeatureProvider& api_features = *FeatureProvider::GetAPIFeatures(); 437 const FeatureProvider& api_features = *FeatureProvider::GetAPIFeatures();
395 438
396 // "storage" is completely unprivileged. 439 // "storage" is completely unprivileged.
397 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 440 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
398 *api_features.GetFeature("storage"), 441 *api_features.GetFeature("storage"), NULL,
399 NULL, 442 Feature::BLESSED_EXTENSION_CONTEXT, GURL(), false));
400 Feature::BLESSED_EXTENSION_CONTEXT,
401 GURL()));
402 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 443 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
403 *api_features.GetFeature("storage"), 444 *api_features.GetFeature("storage"), NULL,
404 NULL, 445 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(), false));
405 Feature::UNBLESSED_EXTENSION_CONTEXT,
406 GURL()));
407 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 446 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
408 *api_features.GetFeature("storage"), 447 *api_features.GetFeature("storage"), NULL,
409 NULL, 448 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), false));
410 Feature::CONTENT_SCRIPT_CONTEXT,
411 GURL()));
412 449
413 // "extension" is partially unprivileged. 450 // "extension" is partially unprivileged.
414 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 451 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
415 *api_features.GetFeature("extension"), 452 *api_features.GetFeature("extension"), NULL,
416 NULL, 453 Feature::BLESSED_EXTENSION_CONTEXT, GURL(), false));
417 Feature::BLESSED_EXTENSION_CONTEXT,
418 GURL()));
419 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 454 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
420 *api_features.GetFeature("extension"), 455 *api_features.GetFeature("extension"), NULL,
421 NULL, 456 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(), false));
422 Feature::UNBLESSED_EXTENSION_CONTEXT,
423 GURL()));
424 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 457 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
425 *api_features.GetFeature("extension"), 458 *api_features.GetFeature("extension"), NULL,
426 NULL, 459 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), false));
427 Feature::CONTENT_SCRIPT_CONTEXT,
428 GURL()));
429 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 460 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
430 *api_features.GetFeature("extension.getURL"), 461 *api_features.GetFeature("extension.getURL"), NULL,
431 NULL, 462 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), false));
432 Feature::CONTENT_SCRIPT_CONTEXT,
433 GURL()));
434 463
435 // "history" is entirely privileged. 464 // "history" is entirely privileged.
436 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 465 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
437 *api_features.GetFeature("history"), 466 *api_features.GetFeature("history"), NULL,
438 NULL, 467 Feature::BLESSED_EXTENSION_CONTEXT, GURL(), false));
439 Feature::BLESSED_EXTENSION_CONTEXT,
440 GURL()));
441 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( 468 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext(
442 *api_features.GetFeature("history"), 469 *api_features.GetFeature("history"), NULL,
443 NULL, 470 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(), false));
444 Feature::UNBLESSED_EXTENSION_CONTEXT,
445 GURL()));
446 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( 471 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext(
447 *api_features.GetFeature("history"), 472 *api_features.GetFeature("history"), NULL,
448 NULL, 473 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), false));
449 Feature::CONTENT_SCRIPT_CONTEXT,
450 GURL()));
451 } 474 }
452 475
453 scoped_refptr<Extension> CreateHostedApp() { 476 scoped_refptr<Extension> CreateHostedApp() {
454 base::DictionaryValue values; 477 base::DictionaryValue values;
455 values.SetString(manifest_keys::kName, "test"); 478 values.SetString(manifest_keys::kName, "test");
456 values.SetString(manifest_keys::kVersion, "0.1"); 479 values.SetString(manifest_keys::kVersion, "0.1");
457 values.Set(manifest_keys::kWebURLs, new base::ListValue()); 480 values.Set(manifest_keys::kWebURLs, new base::ListValue());
458 values.SetString(manifest_keys::kLaunchWebURL, 481 values.SetString(manifest_keys::kLaunchWebURL,
459 "http://www.example.com"); 482 "http://www.example.com");
460 std::string error; 483 std::string error;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 return extension; 520 return extension;
498 } 521 }
499 522
500 TEST(ExtensionAPITest, HostedAppPermissions) { 523 TEST(ExtensionAPITest, HostedAppPermissions) {
501 scoped_refptr<Extension> extension = CreateHostedApp(); 524 scoped_refptr<Extension> extension = CreateHostedApp();
502 525
503 std::unique_ptr<ExtensionAPI> extension_api( 526 std::unique_ptr<ExtensionAPI> extension_api(
504 ExtensionAPI::CreateWithDefaultConfiguration()); 527 ExtensionAPI::CreateWithDefaultConfiguration());
505 528
506 // "runtime" and "tabs" should not be available in hosted apps. 529 // "runtime" and "tabs" should not be available in hosted apps.
507 EXPECT_FALSE(extension_api->IsAvailable("runtime", 530 EXPECT_FALSE(extension_api
508 extension.get(), 531 ->IsAvailable("runtime", extension.get(),
509 Feature::BLESSED_EXTENSION_CONTEXT, 532 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
510 GURL()).is_available()); 533 false)
511 EXPECT_FALSE(extension_api->IsAvailable("runtime.id", 534 .is_available());
512 extension.get(), 535 EXPECT_FALSE(extension_api
513 Feature::BLESSED_EXTENSION_CONTEXT, 536 ->IsAvailable("runtime.id", extension.get(),
514 GURL()).is_available()); 537 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
515 EXPECT_FALSE(extension_api->IsAvailable("runtime.sendMessage", 538 false)
516 extension.get(), 539 .is_available());
517 Feature::BLESSED_EXTENSION_CONTEXT, 540 EXPECT_FALSE(extension_api
518 GURL()).is_available()); 541 ->IsAvailable("runtime.sendMessage", extension.get(),
519 EXPECT_FALSE(extension_api->IsAvailable("runtime.sendNativeMessage", 542 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
520 extension.get(), 543 false)
521 Feature::BLESSED_EXTENSION_CONTEXT, 544 .is_available());
522 GURL()).is_available()); 545 EXPECT_FALSE(extension_api
523 EXPECT_FALSE(extension_api->IsAvailable("tabs.create", 546 ->IsAvailable("runtime.sendNativeMessage", extension.get(),
524 extension.get(), 547 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
525 Feature::BLESSED_EXTENSION_CONTEXT, 548 false)
526 GURL()).is_available()); 549 .is_available());
550 EXPECT_FALSE(extension_api
551 ->IsAvailable("tabs.create", extension.get(),
552 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
553 false)
554 .is_available());
527 } 555 }
528 556
529 TEST(ExtensionAPITest, AppAndFriendsAvailability) { 557 TEST(ExtensionAPITest, AppAndFriendsAvailability) {
530 std::unique_ptr<ExtensionAPI> extension_api( 558 std::unique_ptr<ExtensionAPI> extension_api(
531 ExtensionAPI::CreateWithDefaultConfiguration()); 559 ExtensionAPI::CreateWithDefaultConfiguration());
532 560
533 // Make sure chrome.app.runtime and chrome.app.window are available to apps, 561 // Make sure chrome.app.runtime and chrome.app.window are available to apps,
534 // and chrome.app is not. 562 // and chrome.app is not.
535 { 563 {
536 std::set<std::string> permissions; 564 std::set<std::string> permissions;
537 permissions.insert("app.runtime"); 565 permissions.insert("app.runtime");
538 permissions.insert("app.window"); 566 permissions.insert("app.window");
539 scoped_refptr<Extension> extension = 567 scoped_refptr<Extension> extension =
540 CreatePackagedAppWithPermissions(permissions); 568 CreatePackagedAppWithPermissions(permissions);
541 EXPECT_FALSE(extension_api->IsAvailable( 569 EXPECT_FALSE(extension_api
542 "app", 570 ->IsAvailable("app", extension.get(),
543 extension.get(), 571 Feature::BLESSED_EXTENSION_CONTEXT,
544 Feature::BLESSED_EXTENSION_CONTEXT, 572 GURL("http://foo.com"), false)
545 GURL("http://foo.com")).is_available()); 573 .is_available());
546 EXPECT_TRUE(extension_api->IsAvailable( 574 EXPECT_TRUE(extension_api
547 "app.runtime", 575 ->IsAvailable("app.runtime", extension.get(),
548 extension.get(), 576 Feature::BLESSED_EXTENSION_CONTEXT,
549 Feature::BLESSED_EXTENSION_CONTEXT, 577 GURL("http://foo.com"), false)
550 GURL("http://foo.com")).is_available()); 578 .is_available());
551 EXPECT_TRUE(extension_api->IsAvailable( 579 EXPECT_TRUE(extension_api
552 "app.window", 580 ->IsAvailable("app.window", extension.get(),
553 extension.get(), 581 Feature::BLESSED_EXTENSION_CONTEXT,
554 Feature::BLESSED_EXTENSION_CONTEXT, 582 GURL("http://foo.com"), false)
555 GURL("http://foo.com")).is_available()); 583 .is_available());
556 } 584 }
557 // Make sure chrome.app.runtime and chrome.app.window are not available to 585 // Make sure chrome.app.runtime and chrome.app.window are not available to
558 // extensions, and chrome.app is. 586 // extensions, and chrome.app is.
559 { 587 {
560 std::set<std::string> permissions; 588 std::set<std::string> permissions;
561 scoped_refptr<Extension> extension = 589 scoped_refptr<Extension> extension =
562 CreateExtensionWithPermissions(permissions); 590 CreateExtensionWithPermissions(permissions);
563 EXPECT_TRUE(extension_api->IsAvailable( 591 EXPECT_TRUE(extension_api
564 "app", 592 ->IsAvailable("app", extension.get(),
565 extension.get(), 593 Feature::BLESSED_EXTENSION_CONTEXT,
566 Feature::BLESSED_EXTENSION_CONTEXT, 594 GURL("http://foo.com"), false)
567 GURL("http://foo.com")).is_available()); 595 .is_available());
568 EXPECT_FALSE(extension_api->IsAvailable( 596 EXPECT_FALSE(extension_api
569 "app.runtime", 597 ->IsAvailable("app.runtime", extension.get(),
570 extension.get(), 598 Feature::BLESSED_EXTENSION_CONTEXT,
571 Feature::BLESSED_EXTENSION_CONTEXT, 599 GURL("http://foo.com"), false)
572 GURL("http://foo.com")).is_available()); 600 .is_available());
573 EXPECT_FALSE(extension_api->IsAvailable( 601 EXPECT_FALSE(extension_api
574 "app.window", 602 ->IsAvailable("app.window", extension.get(),
575 extension.get(), 603 Feature::BLESSED_EXTENSION_CONTEXT,
576 Feature::BLESSED_EXTENSION_CONTEXT, 604 GURL("http://foo.com"), false)
577 GURL("http://foo.com")).is_available()); 605 .is_available());
578 } 606 }
579 } 607 }
580 608
581 TEST(ExtensionAPITest, ExtensionWithDependencies) { 609 TEST(ExtensionAPITest, ExtensionWithDependencies) {
582 // Extension with the "ttsEngine" permission but not the "tts" permission; it 610 // Extension with the "ttsEngine" permission but not the "tts" permission; it
583 // should not automatically get "tts" permission. 611 // should not automatically get "tts" permission.
584 { 612 {
585 scoped_refptr<Extension> extension = 613 scoped_refptr<Extension> extension =
586 CreateExtensionWithPermission("ttsEngine"); 614 CreateExtensionWithPermission("ttsEngine");
587 std::unique_ptr<ExtensionAPI> api( 615 std::unique_ptr<ExtensionAPI> api(
588 ExtensionAPI::CreateWithDefaultConfiguration()); 616 ExtensionAPI::CreateWithDefaultConfiguration());
589 EXPECT_TRUE(api->IsAvailable("ttsEngine", 617 EXPECT_TRUE(api->IsAvailable("ttsEngine", extension.get(),
590 extension.get(), 618 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
591 Feature::BLESSED_EXTENSION_CONTEXT, 619 false)
592 GURL()).is_available()); 620 .is_available());
593 EXPECT_FALSE(api->IsAvailable("tts", 621 EXPECT_FALSE(api->IsAvailable("tts", extension.get(),
594 extension.get(), 622 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
595 Feature::BLESSED_EXTENSION_CONTEXT, 623 false)
596 GURL()).is_available()); 624 .is_available());
597 } 625 }
598 626
599 // Conversely, extension with the "tts" permission but not the "ttsEngine" 627 // Conversely, extension with the "tts" permission but not the "ttsEngine"
600 // permission shouldn't get the "ttsEngine" permission. 628 // permission shouldn't get the "ttsEngine" permission.
601 { 629 {
602 scoped_refptr<Extension> extension = 630 scoped_refptr<Extension> extension =
603 CreateExtensionWithPermission("tts"); 631 CreateExtensionWithPermission("tts");
604 std::unique_ptr<ExtensionAPI> api( 632 std::unique_ptr<ExtensionAPI> api(
605 ExtensionAPI::CreateWithDefaultConfiguration()); 633 ExtensionAPI::CreateWithDefaultConfiguration());
606 EXPECT_FALSE(api->IsAvailable("ttsEngine", 634 EXPECT_FALSE(api->IsAvailable("ttsEngine", extension.get(),
607 extension.get(), 635 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
608 Feature::BLESSED_EXTENSION_CONTEXT, 636 false)
609 GURL()).is_available()); 637 .is_available());
610 EXPECT_TRUE(api->IsAvailable("tts", 638 EXPECT_TRUE(api->IsAvailable("tts", extension.get(),
611 extension.get(), 639 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
612 Feature::BLESSED_EXTENSION_CONTEXT, 640 false)
613 GURL()).is_available()); 641 .is_available());
614 } 642 }
615 } 643 }
616 644
617 bool MatchesURL( 645 bool MatchesURL(
618 ExtensionAPI* api, const std::string& api_name, const std::string& url) { 646 ExtensionAPI* api, const std::string& api_name, const std::string& url) {
619 return api->IsAvailable( 647 return api
620 api_name, NULL, Feature::WEB_PAGE_CONTEXT, GURL(url)).is_available(); 648 ->IsAvailable(api_name, NULL, Feature::WEB_PAGE_CONTEXT, GURL(url), false)
649 .is_available();
621 } 650 }
622 651
623 TEST(ExtensionAPITest, URLMatching) { 652 TEST(ExtensionAPITest, URLMatching) {
624 std::unique_ptr<ExtensionAPI> api( 653 std::unique_ptr<ExtensionAPI> api(
625 ExtensionAPI::CreateWithDefaultConfiguration()); 654 ExtensionAPI::CreateWithDefaultConfiguration());
626 655
627 // "app" API is available to all URLs that content scripts can be injected. 656 // "app" API is available to all URLs that content scripts can be injected.
628 EXPECT_TRUE(MatchesURL(api.get(), "app", "http://example.com/example.html")); 657 EXPECT_TRUE(MatchesURL(api.get(), "app", "http://example.com/example.html"));
629 EXPECT_TRUE(MatchesURL(api.get(), "app", "https://blah.net")); 658 EXPECT_TRUE(MatchesURL(api.get(), "app", "https://blah.net"));
630 EXPECT_TRUE(MatchesURL(api.get(), "app", "file://somefile.html")); 659 EXPECT_TRUE(MatchesURL(api.get(), "app", "file://somefile.html"));
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 { "management.getPermissionWarningsById", false }, 871 { "management.getPermissionWarningsById", false },
843 { "runtime.connectNative", false }, 872 { "runtime.connectNative", false },
844 }; 873 };
845 874
846 std::unique_ptr<ExtensionAPI> extension_api( 875 std::unique_ptr<ExtensionAPI> extension_api(
847 ExtensionAPI::CreateWithDefaultConfiguration()); 876 ExtensionAPI::CreateWithDefaultConfiguration());
848 scoped_refptr<Extension> extension = 877 scoped_refptr<Extension> extension =
849 BuildExtension(ExtensionBuilder()).Build(); 878 BuildExtension(ExtensionBuilder()).Build();
850 879
851 for (size_t i = 0; i < arraysize(kTests); ++i) { 880 for (size_t i = 0; i < arraysize(kTests); ++i) {
852 EXPECT_EQ(kTests[i].expect_success, 881 EXPECT_EQ(
853 extension_api->IsAvailable(kTests[i].permission_name, 882 kTests[i].expect_success,
854 extension.get(), 883 extension_api
855 Feature::BLESSED_EXTENSION_CONTEXT, 884 ->IsAvailable(kTests[i].permission_name, extension.get(),
856 GURL()).is_available()) 885 Feature::BLESSED_EXTENSION_CONTEXT, GURL(), false)
886 .is_available())
857 << "Permission being tested: " << kTests[i].permission_name; 887 << "Permission being tested: " << kTests[i].permission_name;
858 } 888 }
859 } 889 }
860 890
861 // Tests that permissions that require manifest keys are available when those 891 // Tests that permissions that require manifest keys are available when those
862 // keys are present. 892 // keys are present.
863 TEST(ExtensionAPITest, ManifestKeys) { 893 TEST(ExtensionAPITest, ManifestKeys) {
864 std::unique_ptr<ExtensionAPI> extension_api( 894 std::unique_ptr<ExtensionAPI> extension_api(
865 ExtensionAPI::CreateWithDefaultConfiguration()); 895 ExtensionAPI::CreateWithDefaultConfiguration());
866 896
867 scoped_refptr<Extension> extension = 897 scoped_refptr<Extension> extension =
868 BuildExtension(ExtensionBuilder()) 898 BuildExtension(ExtensionBuilder())
869 .MergeManifest(DictionaryBuilder() 899 .MergeManifest(DictionaryBuilder()
870 .Set("browser_action", DictionaryBuilder().Build()) 900 .Set("browser_action", DictionaryBuilder().Build())
871 .Build()) 901 .Build())
872 .Build(); 902 .Build();
873 903
874 EXPECT_TRUE(extension_api->IsAvailable("browserAction", 904 EXPECT_TRUE(extension_api
875 extension.get(), 905 ->IsAvailable("browserAction", extension.get(),
876 Feature::BLESSED_EXTENSION_CONTEXT, 906 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
877 GURL()).is_available()); 907 false)
878 EXPECT_FALSE(extension_api->IsAvailable("pageAction", 908 .is_available());
879 extension.get(), 909 EXPECT_FALSE(extension_api
880 Feature::BLESSED_EXTENSION_CONTEXT, 910 ->IsAvailable("pageAction", extension.get(),
881 GURL()).is_available()); 911 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
912 false)
913 .is_available());
882 } 914 }
883 915
884 } // namespace extensions 916 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698