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

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

Issue 2494653005: Support API aliases (Closed)
Patch Set: update docs 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, CheckAliasStatus::NOT_ALLOWED);
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,
Devlin 2016/11/17 01:11:15 nullptr in new code
tbarzic 2016/11/17 18:12:13 it's not really new, more of a product of git cl f
229 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
230 CheckAliasStatus::NOT_ALLOWED)
231 .is_available());
232 ASSERT_TRUE(api.IsAvailable("alias_api_source", NULL,
233 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
234 CheckAliasStatus::ALLOWED)
235 .is_available());
236 ASSERT_TRUE(api.IsAvailable("alias_api_source.bar", NULL,
237 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
238 CheckAliasStatus::ALLOWED)
239 .is_available());
240 ASSERT_FALSE(api.IsAvailable("alias_api_source.foo", NULL,
241 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
242 CheckAliasStatus::ALLOWED)
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(), CheckAliasStatus::NOT_ALLOWED));
258 EXPECT_TRUE(api.IsAnyFeatureAvailableToContext(
259 *test_feature, extension.get(), Feature::UNBLESSED_EXTENSION_CONTEXT,
260 GURL(), CheckAliasStatus::ALLOWED));
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, CheckAliasStatus::NOT_ALLOWED))
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(),
366 CheckAliasStatus::NOT_ALLOWED)
323 .is_available()) 367 .is_available())
324 << "Test case (" << test.api_name << ", " 368 << "Test case (" << test.api_name << ", "
325 << static_cast<int>(test.current_session_type) << ")."; 369 << static_cast<int>(test.current_session_type) << ").";
326 } 370 }
327 } 371 }
328 372
329 TEST(ExtensionAPITest, LazyGetSchema) { 373 TEST(ExtensionAPITest, LazyGetSchema) {
330 std::unique_ptr<ExtensionAPI> apis( 374 std::unique_ptr<ExtensionAPI> apis(
331 ExtensionAPI::CreateWithDefaultConfiguration()); 375 ExtensionAPI::CreateWithDefaultConfiguration());
332 376
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 extension = CreateExtensionWithPermissions(permissions); 432 extension = CreateExtensionWithPermissions(permissions);
389 } 433 }
390 434
391 std::unique_ptr<ExtensionAPI> extension_api( 435 std::unique_ptr<ExtensionAPI> extension_api(
392 ExtensionAPI::CreateWithDefaultConfiguration()); 436 ExtensionAPI::CreateWithDefaultConfiguration());
393 437
394 const FeatureProvider& api_features = *FeatureProvider::GetAPIFeatures(); 438 const FeatureProvider& api_features = *FeatureProvider::GetAPIFeatures();
395 439
396 // "storage" is completely unprivileged. 440 // "storage" is completely unprivileged.
397 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 441 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
398 *api_features.GetFeature("storage"), 442 *api_features.GetFeature("storage"), NULL,
399 NULL, 443 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
400 Feature::BLESSED_EXTENSION_CONTEXT, 444 CheckAliasStatus::NOT_ALLOWED));
401 GURL()));
402 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 445 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
403 *api_features.GetFeature("storage"), 446 *api_features.GetFeature("storage"), NULL,
404 NULL, 447 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
405 Feature::UNBLESSED_EXTENSION_CONTEXT, 448 CheckAliasStatus::NOT_ALLOWED));
406 GURL()));
407 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 449 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
408 *api_features.GetFeature("storage"), 450 *api_features.GetFeature("storage"), NULL,
409 NULL, 451 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), CheckAliasStatus::NOT_ALLOWED));
410 Feature::CONTENT_SCRIPT_CONTEXT,
411 GURL()));
412 452
413 // "extension" is partially unprivileged. 453 // "extension" is partially unprivileged.
414 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 454 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
415 *api_features.GetFeature("extension"), 455 *api_features.GetFeature("extension"), NULL,
416 NULL, 456 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
417 Feature::BLESSED_EXTENSION_CONTEXT, 457 CheckAliasStatus::NOT_ALLOWED));
418 GURL()));
419 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 458 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
420 *api_features.GetFeature("extension"), 459 *api_features.GetFeature("extension"), NULL,
421 NULL, 460 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
422 Feature::UNBLESSED_EXTENSION_CONTEXT, 461 CheckAliasStatus::NOT_ALLOWED));
423 GURL()));
424 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 462 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
425 *api_features.GetFeature("extension"), 463 *api_features.GetFeature("extension"), NULL,
426 NULL, 464 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), CheckAliasStatus::NOT_ALLOWED));
427 Feature::CONTENT_SCRIPT_CONTEXT,
428 GURL()));
429 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 465 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
430 *api_features.GetFeature("extension.getURL"), 466 *api_features.GetFeature("extension.getURL"), NULL,
431 NULL, 467 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), CheckAliasStatus::NOT_ALLOWED));
432 Feature::CONTENT_SCRIPT_CONTEXT,
433 GURL()));
434 468
435 // "history" is entirely privileged. 469 // "history" is entirely privileged.
436 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( 470 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext(
437 *api_features.GetFeature("history"), 471 *api_features.GetFeature("history"), NULL,
438 NULL, 472 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
439 Feature::BLESSED_EXTENSION_CONTEXT, 473 CheckAliasStatus::NOT_ALLOWED));
440 GURL()));
441 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( 474 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext(
442 *api_features.GetFeature("history"), 475 *api_features.GetFeature("history"), NULL,
443 NULL, 476 Feature::UNBLESSED_EXTENSION_CONTEXT, GURL(),
444 Feature::UNBLESSED_EXTENSION_CONTEXT, 477 CheckAliasStatus::NOT_ALLOWED));
445 GURL()));
446 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( 478 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext(
447 *api_features.GetFeature("history"), 479 *api_features.GetFeature("history"), NULL,
448 NULL, 480 Feature::CONTENT_SCRIPT_CONTEXT, GURL(), CheckAliasStatus::NOT_ALLOWED));
449 Feature::CONTENT_SCRIPT_CONTEXT,
450 GURL()));
451 } 481 }
452 482
453 scoped_refptr<Extension> CreateHostedApp() { 483 scoped_refptr<Extension> CreateHostedApp() {
454 base::DictionaryValue values; 484 base::DictionaryValue values;
455 values.SetString(manifest_keys::kName, "test"); 485 values.SetString(manifest_keys::kName, "test");
456 values.SetString(manifest_keys::kVersion, "0.1"); 486 values.SetString(manifest_keys::kVersion, "0.1");
457 values.Set(manifest_keys::kWebURLs, new base::ListValue()); 487 values.Set(manifest_keys::kWebURLs, new base::ListValue());
458 values.SetString(manifest_keys::kLaunchWebURL, 488 values.SetString(manifest_keys::kLaunchWebURL,
459 "http://www.example.com"); 489 "http://www.example.com");
460 std::string error; 490 std::string error;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 return extension; 527 return extension;
498 } 528 }
499 529
500 TEST(ExtensionAPITest, HostedAppPermissions) { 530 TEST(ExtensionAPITest, HostedAppPermissions) {
501 scoped_refptr<Extension> extension = CreateHostedApp(); 531 scoped_refptr<Extension> extension = CreateHostedApp();
502 532
503 std::unique_ptr<ExtensionAPI> extension_api( 533 std::unique_ptr<ExtensionAPI> extension_api(
504 ExtensionAPI::CreateWithDefaultConfiguration()); 534 ExtensionAPI::CreateWithDefaultConfiguration());
505 535
506 // "runtime" and "tabs" should not be available in hosted apps. 536 // "runtime" and "tabs" should not be available in hosted apps.
507 EXPECT_FALSE(extension_api->IsAvailable("runtime", 537 EXPECT_FALSE(extension_api
508 extension.get(), 538 ->IsAvailable("runtime", extension.get(),
509 Feature::BLESSED_EXTENSION_CONTEXT, 539 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
510 GURL()).is_available()); 540 CheckAliasStatus::NOT_ALLOWED)
511 EXPECT_FALSE(extension_api->IsAvailable("runtime.id", 541 .is_available());
512 extension.get(), 542 EXPECT_FALSE(extension_api
513 Feature::BLESSED_EXTENSION_CONTEXT, 543 ->IsAvailable("runtime.id", extension.get(),
514 GURL()).is_available()); 544 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
515 EXPECT_FALSE(extension_api->IsAvailable("runtime.sendMessage", 545 CheckAliasStatus::NOT_ALLOWED)
516 extension.get(), 546 .is_available());
517 Feature::BLESSED_EXTENSION_CONTEXT, 547 EXPECT_FALSE(extension_api
518 GURL()).is_available()); 548 ->IsAvailable("runtime.sendMessage", extension.get(),
519 EXPECT_FALSE(extension_api->IsAvailable("runtime.sendNativeMessage", 549 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
520 extension.get(), 550 CheckAliasStatus::NOT_ALLOWED)
521 Feature::BLESSED_EXTENSION_CONTEXT, 551 .is_available());
522 GURL()).is_available()); 552 EXPECT_FALSE(extension_api
523 EXPECT_FALSE(extension_api->IsAvailable("tabs.create", 553 ->IsAvailable("runtime.sendNativeMessage", extension.get(),
524 extension.get(), 554 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
525 Feature::BLESSED_EXTENSION_CONTEXT, 555 CheckAliasStatus::NOT_ALLOWED)
526 GURL()).is_available()); 556 .is_available());
557 EXPECT_FALSE(extension_api
558 ->IsAvailable("tabs.create", extension.get(),
559 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
560 CheckAliasStatus::NOT_ALLOWED)
561 .is_available());
527 } 562 }
528 563
529 TEST(ExtensionAPITest, AppAndFriendsAvailability) { 564 TEST(ExtensionAPITest, AppAndFriendsAvailability) {
530 std::unique_ptr<ExtensionAPI> extension_api( 565 std::unique_ptr<ExtensionAPI> extension_api(
531 ExtensionAPI::CreateWithDefaultConfiguration()); 566 ExtensionAPI::CreateWithDefaultConfiguration());
532 567
533 // Make sure chrome.app.runtime and chrome.app.window are available to apps, 568 // Make sure chrome.app.runtime and chrome.app.window are available to apps,
534 // and chrome.app is not. 569 // and chrome.app is not.
535 { 570 {
536 std::set<std::string> permissions; 571 std::set<std::string> permissions;
537 permissions.insert("app.runtime"); 572 permissions.insert("app.runtime");
538 permissions.insert("app.window"); 573 permissions.insert("app.window");
539 scoped_refptr<Extension> extension = 574 scoped_refptr<Extension> extension =
540 CreatePackagedAppWithPermissions(permissions); 575 CreatePackagedAppWithPermissions(permissions);
541 EXPECT_FALSE(extension_api->IsAvailable( 576 EXPECT_FALSE(extension_api
542 "app", 577 ->IsAvailable("app", extension.get(),
543 extension.get(), 578 Feature::BLESSED_EXTENSION_CONTEXT,
544 Feature::BLESSED_EXTENSION_CONTEXT, 579 GURL("http://foo.com"),
545 GURL("http://foo.com")).is_available()); 580 CheckAliasStatus::NOT_ALLOWED)
546 EXPECT_TRUE(extension_api->IsAvailable( 581 .is_available());
547 "app.runtime", 582 EXPECT_TRUE(extension_api
548 extension.get(), 583 ->IsAvailable("app.runtime", extension.get(),
549 Feature::BLESSED_EXTENSION_CONTEXT, 584 Feature::BLESSED_EXTENSION_CONTEXT,
550 GURL("http://foo.com")).is_available()); 585 GURL("http://foo.com"),
551 EXPECT_TRUE(extension_api->IsAvailable( 586 CheckAliasStatus::NOT_ALLOWED)
552 "app.window", 587 .is_available());
553 extension.get(), 588 EXPECT_TRUE(extension_api
554 Feature::BLESSED_EXTENSION_CONTEXT, 589 ->IsAvailable("app.window", extension.get(),
555 GURL("http://foo.com")).is_available()); 590 Feature::BLESSED_EXTENSION_CONTEXT,
591 GURL("http://foo.com"),
592 CheckAliasStatus::NOT_ALLOWED)
593 .is_available());
556 } 594 }
557 // Make sure chrome.app.runtime and chrome.app.window are not available to 595 // Make sure chrome.app.runtime and chrome.app.window are not available to
558 // extensions, and chrome.app is. 596 // extensions, and chrome.app is.
559 { 597 {
560 std::set<std::string> permissions; 598 std::set<std::string> permissions;
561 scoped_refptr<Extension> extension = 599 scoped_refptr<Extension> extension =
562 CreateExtensionWithPermissions(permissions); 600 CreateExtensionWithPermissions(permissions);
563 EXPECT_TRUE(extension_api->IsAvailable( 601 EXPECT_TRUE(extension_api
564 "app", 602 ->IsAvailable("app", extension.get(),
565 extension.get(), 603 Feature::BLESSED_EXTENSION_CONTEXT,
566 Feature::BLESSED_EXTENSION_CONTEXT, 604 GURL("http://foo.com"),
567 GURL("http://foo.com")).is_available()); 605 CheckAliasStatus::NOT_ALLOWED)
568 EXPECT_FALSE(extension_api->IsAvailable( 606 .is_available());
569 "app.runtime", 607 EXPECT_FALSE(extension_api
570 extension.get(), 608 ->IsAvailable("app.runtime", extension.get(),
571 Feature::BLESSED_EXTENSION_CONTEXT, 609 Feature::BLESSED_EXTENSION_CONTEXT,
572 GURL("http://foo.com")).is_available()); 610 GURL("http://foo.com"),
573 EXPECT_FALSE(extension_api->IsAvailable( 611 CheckAliasStatus::NOT_ALLOWED)
574 "app.window", 612 .is_available());
575 extension.get(), 613 EXPECT_FALSE(extension_api
576 Feature::BLESSED_EXTENSION_CONTEXT, 614 ->IsAvailable("app.window", extension.get(),
577 GURL("http://foo.com")).is_available()); 615 Feature::BLESSED_EXTENSION_CONTEXT,
616 GURL("http://foo.com"),
617 CheckAliasStatus::NOT_ALLOWED)
618 .is_available());
578 } 619 }
579 } 620 }
580 621
581 TEST(ExtensionAPITest, ExtensionWithDependencies) { 622 TEST(ExtensionAPITest, ExtensionWithDependencies) {
582 // Extension with the "ttsEngine" permission but not the "tts" permission; it 623 // Extension with the "ttsEngine" permission but not the "tts" permission; it
583 // should not automatically get "tts" permission. 624 // should not automatically get "tts" permission.
584 { 625 {
585 scoped_refptr<Extension> extension = 626 scoped_refptr<Extension> extension =
586 CreateExtensionWithPermission("ttsEngine"); 627 CreateExtensionWithPermission("ttsEngine");
587 std::unique_ptr<ExtensionAPI> api( 628 std::unique_ptr<ExtensionAPI> api(
588 ExtensionAPI::CreateWithDefaultConfiguration()); 629 ExtensionAPI::CreateWithDefaultConfiguration());
589 EXPECT_TRUE(api->IsAvailable("ttsEngine", 630 EXPECT_TRUE(api->IsAvailable("ttsEngine", extension.get(),
590 extension.get(), 631 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
591 Feature::BLESSED_EXTENSION_CONTEXT, 632 CheckAliasStatus::NOT_ALLOWED)
592 GURL()).is_available()); 633 .is_available());
593 EXPECT_FALSE(api->IsAvailable("tts", 634 EXPECT_FALSE(api->IsAvailable("tts", extension.get(),
594 extension.get(), 635 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
595 Feature::BLESSED_EXTENSION_CONTEXT, 636 CheckAliasStatus::NOT_ALLOWED)
596 GURL()).is_available()); 637 .is_available());
597 } 638 }
598 639
599 // Conversely, extension with the "tts" permission but not the "ttsEngine" 640 // Conversely, extension with the "tts" permission but not the "ttsEngine"
600 // permission shouldn't get the "ttsEngine" permission. 641 // permission shouldn't get the "ttsEngine" permission.
601 { 642 {
602 scoped_refptr<Extension> extension = 643 scoped_refptr<Extension> extension =
603 CreateExtensionWithPermission("tts"); 644 CreateExtensionWithPermission("tts");
604 std::unique_ptr<ExtensionAPI> api( 645 std::unique_ptr<ExtensionAPI> api(
605 ExtensionAPI::CreateWithDefaultConfiguration()); 646 ExtensionAPI::CreateWithDefaultConfiguration());
606 EXPECT_FALSE(api->IsAvailable("ttsEngine", 647 EXPECT_FALSE(api->IsAvailable("ttsEngine", extension.get(),
607 extension.get(), 648 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
608 Feature::BLESSED_EXTENSION_CONTEXT, 649 CheckAliasStatus::NOT_ALLOWED)
609 GURL()).is_available()); 650 .is_available());
610 EXPECT_TRUE(api->IsAvailable("tts", 651 EXPECT_TRUE(api->IsAvailable("tts", extension.get(),
611 extension.get(), 652 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
612 Feature::BLESSED_EXTENSION_CONTEXT, 653 CheckAliasStatus::NOT_ALLOWED)
613 GURL()).is_available()); 654 .is_available());
614 } 655 }
615 } 656 }
616 657
617 bool MatchesURL( 658 bool MatchesURL(
618 ExtensionAPI* api, const std::string& api_name, const std::string& url) { 659 ExtensionAPI* api, const std::string& api_name, const std::string& url) {
619 return api->IsAvailable( 660 return api
620 api_name, NULL, Feature::WEB_PAGE_CONTEXT, GURL(url)).is_available(); 661 ->IsAvailable(api_name, NULL, Feature::WEB_PAGE_CONTEXT, GURL(url),
662 CheckAliasStatus::NOT_ALLOWED)
663 .is_available();
621 } 664 }
622 665
623 TEST(ExtensionAPITest, URLMatching) { 666 TEST(ExtensionAPITest, URLMatching) {
624 std::unique_ptr<ExtensionAPI> api( 667 std::unique_ptr<ExtensionAPI> api(
625 ExtensionAPI::CreateWithDefaultConfiguration()); 668 ExtensionAPI::CreateWithDefaultConfiguration());
626 669
627 // "app" API is available to all URLs that content scripts can be injected. 670 // "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")); 671 EXPECT_TRUE(MatchesURL(api.get(), "app", "http://example.com/example.html"));
629 EXPECT_TRUE(MatchesURL(api.get(), "app", "https://blah.net")); 672 EXPECT_TRUE(MatchesURL(api.get(), "app", "https://blah.net"));
630 EXPECT_TRUE(MatchesURL(api.get(), "app", "file://somefile.html")); 673 EXPECT_TRUE(MatchesURL(api.get(), "app", "file://somefile.html"));
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 { "runtime.connectNative", false }, 886 { "runtime.connectNative", false },
844 }; 887 };
845 888
846 std::unique_ptr<ExtensionAPI> extension_api( 889 std::unique_ptr<ExtensionAPI> extension_api(
847 ExtensionAPI::CreateWithDefaultConfiguration()); 890 ExtensionAPI::CreateWithDefaultConfiguration());
848 scoped_refptr<Extension> extension = 891 scoped_refptr<Extension> extension =
849 BuildExtension(ExtensionBuilder()).Build(); 892 BuildExtension(ExtensionBuilder()).Build();
850 893
851 for (size_t i = 0; i < arraysize(kTests); ++i) { 894 for (size_t i = 0; i < arraysize(kTests); ++i) {
852 EXPECT_EQ(kTests[i].expect_success, 895 EXPECT_EQ(kTests[i].expect_success,
853 extension_api->IsAvailable(kTests[i].permission_name, 896 extension_api
854 extension.get(), 897 ->IsAvailable(kTests[i].permission_name, extension.get(),
855 Feature::BLESSED_EXTENSION_CONTEXT, 898 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
856 GURL()).is_available()) 899 CheckAliasStatus::NOT_ALLOWED)
900 .is_available())
857 << "Permission being tested: " << kTests[i].permission_name; 901 << "Permission being tested: " << kTests[i].permission_name;
858 } 902 }
859 } 903 }
860 904
861 // Tests that permissions that require manifest keys are available when those 905 // Tests that permissions that require manifest keys are available when those
862 // keys are present. 906 // keys are present.
863 TEST(ExtensionAPITest, ManifestKeys) { 907 TEST(ExtensionAPITest, ManifestKeys) {
864 std::unique_ptr<ExtensionAPI> extension_api( 908 std::unique_ptr<ExtensionAPI> extension_api(
865 ExtensionAPI::CreateWithDefaultConfiguration()); 909 ExtensionAPI::CreateWithDefaultConfiguration());
866 910
867 scoped_refptr<Extension> extension = 911 scoped_refptr<Extension> extension =
868 BuildExtension(ExtensionBuilder()) 912 BuildExtension(ExtensionBuilder())
869 .MergeManifest(DictionaryBuilder() 913 .MergeManifest(DictionaryBuilder()
870 .Set("browser_action", DictionaryBuilder().Build()) 914 .Set("browser_action", DictionaryBuilder().Build())
871 .Build()) 915 .Build())
872 .Build(); 916 .Build();
873 917
874 EXPECT_TRUE(extension_api->IsAvailable("browserAction", 918 EXPECT_TRUE(extension_api
875 extension.get(), 919 ->IsAvailable("browserAction", extension.get(),
876 Feature::BLESSED_EXTENSION_CONTEXT, 920 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
877 GURL()).is_available()); 921 CheckAliasStatus::NOT_ALLOWED)
878 EXPECT_FALSE(extension_api->IsAvailable("pageAction", 922 .is_available());
879 extension.get(), 923 EXPECT_FALSE(extension_api
880 Feature::BLESSED_EXTENSION_CONTEXT, 924 ->IsAvailable("pageAction", extension.get(),
881 GURL()).is_available()); 925 Feature::BLESSED_EXTENSION_CONTEXT, GURL(),
926 CheckAliasStatus::NOT_ALLOWED)
927 .is_available());
882 } 928 }
883 929
884 } // namespace extensions 930 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698