OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/features/simple_feature.h" | 5 #include "extensions/common/features/simple_feature.h" |
6 | 6 |
7 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" | 7 #include "chrome/common/extensions/features/chrome_channel_feature_filter.h" |
8 #include "chrome/common/extensions/features/feature_channel.h" | 8 #include "chrome/common/extensions/features/feature_channel.h" |
9 #include "extensions/common/value_builder.h" | 9 #include "extensions/common/value_builder.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 feature.IsAvailableToManifest(std::string(), | 282 feature.IsAvailableToManifest(std::string(), |
283 Manifest::TYPE_THEME, | 283 Manifest::TYPE_THEME, |
284 Manifest::INVALID_LOCATION, | 284 Manifest::INVALID_LOCATION, |
285 -1, | 285 -1, |
286 Feature::UNSPECIFIED_PLATFORM).result()); | 286 Feature::UNSPECIFIED_PLATFORM).result()); |
287 } | 287 } |
288 | 288 |
289 TEST_F(ExtensionSimpleFeatureTest, Context) { | 289 TEST_F(ExtensionSimpleFeatureTest, Context) { |
290 SimpleFeature feature; | 290 SimpleFeature feature; |
291 feature.set_name("somefeature"); | 291 feature.set_name("somefeature"); |
292 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 292 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
293 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); | 293 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
294 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); | 294 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); |
295 feature.set_min_manifest_version(21); | 295 feature.set_min_manifest_version(21); |
296 feature.set_max_manifest_version(25); | 296 feature.set_max_manifest_version(25); |
297 | 297 |
298 base::DictionaryValue manifest; | 298 base::DictionaryValue manifest; |
299 manifest.SetString("name", "test"); | 299 manifest.SetString("name", "test"); |
300 manifest.SetString("version", "1"); | 300 manifest.SetString("version", "1"); |
301 manifest.SetInteger("manifest_version", 21); | 301 manifest.SetInteger("manifest_version", 21); |
302 manifest.SetString("app.launch.local_path", "foo.html"); | 302 manifest.SetString("app.launch.local_path", "foo.html"); |
(...skipping 18 matching lines...) Expand all Loading... |
321 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 321 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
322 Feature::CHROMEOS_PLATFORM); | 322 Feature::CHROMEOS_PLATFORM); |
323 EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); | 323 EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); |
324 EXPECT_EQ("'somefeature' is only allowed for themes, " | 324 EXPECT_EQ("'somefeature' is only allowed for themes, " |
325 "but this is a legacy packaged app.", | 325 "but this is a legacy packaged app.", |
326 availability.message()); | 326 availability.message()); |
327 } | 327 } |
328 | 328 |
329 feature.extension_types()->clear(); | 329 feature.extension_types()->clear(); |
330 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); | 330 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
331 feature.GetContexts()->clear(); | 331 feature.contexts()->clear(); |
332 feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); | 332 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); |
333 feature.GetContexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT); | 333 feature.contexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT); |
334 { | 334 { |
335 Feature::Availability availability = feature.IsAvailableToContext( | 335 Feature::Availability availability = feature.IsAvailableToContext( |
336 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 336 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
337 Feature::CHROMEOS_PLATFORM); | 337 Feature::CHROMEOS_PLATFORM); |
338 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); | 338 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
339 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " | 339 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " |
340 "content scripts, but this is a privileged page", | 340 "content scripts, but this is a privileged page", |
341 availability.message()); | 341 availability.message()); |
342 } | 342 } |
343 | 343 |
344 feature.GetContexts()->insert(Feature::WEB_PAGE_CONTEXT); | 344 feature.contexts()->insert(Feature::WEB_PAGE_CONTEXT); |
345 { | 345 { |
346 Feature::Availability availability = feature.IsAvailableToContext( | 346 Feature::Availability availability = feature.IsAvailableToContext( |
347 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 347 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
348 Feature::CHROMEOS_PLATFORM); | 348 Feature::CHROMEOS_PLATFORM); |
349 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); | 349 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
350 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " | 350 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " |
351 "content scripts, and web pages, but this is a privileged page", | 351 "content scripts, and web pages, but this is a privileged page", |
352 availability.message()); | 352 availability.message()); |
353 } | 353 } |
354 | 354 |
355 feature.GetContexts()->clear(); | 355 feature.contexts()->clear(); |
356 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 356 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
357 feature.set_location(SimpleFeature::COMPONENT_LOCATION); | 357 feature.set_location(SimpleFeature::COMPONENT_LOCATION); |
358 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( | 358 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( |
359 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 359 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
360 Feature::CHROMEOS_PLATFORM).result()); | 360 Feature::CHROMEOS_PLATFORM).result()); |
361 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION); | 361 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION); |
362 | 362 |
363 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( | 363 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( |
364 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 364 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
365 Feature::UNSPECIFIED_PLATFORM).result()); | 365 Feature::UNSPECIFIED_PLATFORM).result()); |
366 | 366 |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 7, | 489 7, |
490 Feature::UNSPECIFIED_PLATFORM).result()); | 490 Feature::UNSPECIFIED_PLATFORM).result()); |
491 } | 491 } |
492 | 492 |
493 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { | 493 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { |
494 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 494 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
495 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 495 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
496 feature->Parse(value.get()); | 496 feature->Parse(value.get()); |
497 EXPECT_TRUE(feature->whitelist()->empty()); | 497 EXPECT_TRUE(feature->whitelist()->empty()); |
498 EXPECT_TRUE(feature->extension_types()->empty()); | 498 EXPECT_TRUE(feature->extension_types()->empty()); |
499 EXPECT_TRUE(feature->GetContexts()->empty()); | 499 EXPECT_TRUE(feature->contexts()->empty()); |
500 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); | 500 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); |
501 EXPECT_TRUE(feature->platforms()->empty()); | 501 EXPECT_TRUE(feature->platforms()->empty()); |
502 EXPECT_EQ(0, feature->min_manifest_version()); | 502 EXPECT_EQ(0, feature->min_manifest_version()); |
503 EXPECT_EQ(0, feature->max_manifest_version()); | 503 EXPECT_EQ(0, feature->max_manifest_version()); |
504 } | 504 } |
505 | 505 |
506 TEST_F(ExtensionSimpleFeatureTest, ParseWhitelist) { | 506 TEST_F(ExtensionSimpleFeatureTest, ParseWhitelist) { |
507 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 507 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
508 base::ListValue* whitelist = new base::ListValue(); | 508 base::ListValue* whitelist = new base::ListValue(); |
509 whitelist->Append(new base::StringValue("foo")); | 509 whitelist->Append(new base::StringValue("foo")); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 547 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
548 base::ListValue* contexts = new base::ListValue(); | 548 base::ListValue* contexts = new base::ListValue(); |
549 contexts->Append(new base::StringValue("blessed_extension")); | 549 contexts->Append(new base::StringValue("blessed_extension")); |
550 contexts->Append(new base::StringValue("unblessed_extension")); | 550 contexts->Append(new base::StringValue("unblessed_extension")); |
551 contexts->Append(new base::StringValue("content_script")); | 551 contexts->Append(new base::StringValue("content_script")); |
552 contexts->Append(new base::StringValue("web_page")); | 552 contexts->Append(new base::StringValue("web_page")); |
553 contexts->Append(new base::StringValue("blessed_web_page")); | 553 contexts->Append(new base::StringValue("blessed_web_page")); |
554 value->Set("contexts", contexts); | 554 value->Set("contexts", contexts); |
555 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 555 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
556 feature->Parse(value.get()); | 556 feature->Parse(value.get()); |
557 EXPECT_EQ(5u, feature->GetContexts()->size()); | 557 EXPECT_EQ(5u, feature->contexts()->size()); |
558 EXPECT_TRUE( | 558 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); |
559 feature->GetContexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); | 559 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
560 EXPECT_TRUE( | 560 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); |
561 feature->GetContexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); | 561 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); |
562 EXPECT_TRUE( | 562 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_WEB_PAGE_CONTEXT)); |
563 feature->GetContexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); | |
564 EXPECT_TRUE( | |
565 feature->GetContexts()->count(Feature::WEB_PAGE_CONTEXT)); | |
566 EXPECT_TRUE( | |
567 feature->GetContexts()->count(Feature::BLESSED_WEB_PAGE_CONTEXT)); | |
568 | 563 |
569 value->SetString("contexts", "all"); | 564 value->SetString("contexts", "all"); |
570 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); | 565 scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
571 feature2->Parse(value.get()); | 566 feature2->Parse(value.get()); |
572 EXPECT_EQ(*(feature->GetContexts()), *(feature2->GetContexts())); | 567 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); |
573 } | 568 } |
574 | 569 |
575 TEST_F(ExtensionSimpleFeatureTest, ParseLocation) { | 570 TEST_F(ExtensionSimpleFeatureTest, ParseLocation) { |
576 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 571 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
577 value->SetString("location", "component"); | 572 value->SetString("location", "component"); |
578 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 573 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
579 feature->Parse(value.get()); | 574 feature->Parse(value.get()); |
580 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location()); | 575 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location()); |
581 } | 576 } |
582 | 577 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
618 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 613 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
619 feature->Parse(value.get()); | 614 feature->Parse(value.get()); |
620 EXPECT_EQ(1, feature->min_manifest_version()); | 615 EXPECT_EQ(1, feature->min_manifest_version()); |
621 EXPECT_EQ(5, feature->max_manifest_version()); | 616 EXPECT_EQ(5, feature->max_manifest_version()); |
622 } | 617 } |
623 | 618 |
624 TEST_F(ExtensionSimpleFeatureTest, Inheritance) { | 619 TEST_F(ExtensionSimpleFeatureTest, Inheritance) { |
625 SimpleFeature feature; | 620 SimpleFeature feature; |
626 feature.whitelist()->insert("foo"); | 621 feature.whitelist()->insert("foo"); |
627 feature.extension_types()->insert(Manifest::TYPE_THEME); | 622 feature.extension_types()->insert(Manifest::TYPE_THEME); |
628 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 623 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
629 feature.set_location(SimpleFeature::COMPONENT_LOCATION); | 624 feature.set_location(SimpleFeature::COMPONENT_LOCATION); |
630 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); | 625 feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); |
631 feature.set_min_manifest_version(1); | 626 feature.set_min_manifest_version(1); |
632 feature.set_max_manifest_version(2); | 627 feature.set_max_manifest_version(2); |
633 | 628 |
634 // Test additive parsing. Parsing an empty dictionary should result in no | 629 // Test additive parsing. Parsing an empty dictionary should result in no |
635 // changes to a SimpleFeature. | 630 // changes to a SimpleFeature. |
636 base::DictionaryValue definition; | 631 base::DictionaryValue definition; |
637 feature.Parse(&definition); | 632 feature.Parse(&definition); |
638 EXPECT_EQ(1u, feature.whitelist()->size()); | 633 EXPECT_EQ(1u, feature.whitelist()->size()); |
639 EXPECT_EQ(1u, feature.extension_types()->size()); | 634 EXPECT_EQ(1u, feature.extension_types()->size()); |
640 EXPECT_EQ(1u, feature.GetContexts()->size()); | 635 EXPECT_EQ(1u, feature.contexts()->size()); |
641 EXPECT_EQ(1u, feature.whitelist()->count("foo")); | 636 EXPECT_EQ(1u, feature.whitelist()->count("foo")); |
642 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location()); | 637 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location()); |
643 EXPECT_EQ(1u, feature.platforms()->size()); | 638 EXPECT_EQ(1u, feature.platforms()->size()); |
644 EXPECT_EQ(1u, feature.platforms()->count(Feature::CHROMEOS_PLATFORM)); | 639 EXPECT_EQ(1u, feature.platforms()->count(Feature::CHROMEOS_PLATFORM)); |
645 EXPECT_EQ(1, feature.min_manifest_version()); | 640 EXPECT_EQ(1, feature.min_manifest_version()); |
646 EXPECT_EQ(2, feature.max_manifest_version()); | 641 EXPECT_EQ(2, feature.max_manifest_version()); |
647 | 642 |
648 base::ListValue* whitelist = new base::ListValue(); | 643 base::ListValue* whitelist = new base::ListValue(); |
649 base::ListValue* extension_types = new base::ListValue(); | 644 base::ListValue* extension_types = new base::ListValue(); |
650 base::ListValue* contexts = new base::ListValue(); | 645 base::ListValue* contexts = new base::ListValue(); |
651 whitelist->Append(new base::StringValue("bar")); | 646 whitelist->Append(new base::StringValue("bar")); |
652 extension_types->Append(new base::StringValue("extension")); | 647 extension_types->Append(new base::StringValue("extension")); |
653 contexts->Append(new base::StringValue("unblessed_extension")); | 648 contexts->Append(new base::StringValue("unblessed_extension")); |
654 definition.Set("whitelist", whitelist); | 649 definition.Set("whitelist", whitelist); |
655 definition.Set("extension_types", extension_types); | 650 definition.Set("extension_types", extension_types); |
656 definition.Set("contexts", contexts); | 651 definition.Set("contexts", contexts); |
657 // Can't test location or platform because we only have one value so far. | 652 // Can't test location or platform because we only have one value so far. |
658 definition.Set("min_manifest_version", new base::FundamentalValue(2)); | 653 definition.Set("min_manifest_version", new base::FundamentalValue(2)); |
659 definition.Set("max_manifest_version", new base::FundamentalValue(3)); | 654 definition.Set("max_manifest_version", new base::FundamentalValue(3)); |
660 | 655 |
661 feature.Parse(&definition); | 656 feature.Parse(&definition); |
662 EXPECT_EQ(1u, feature.whitelist()->size()); | 657 EXPECT_EQ(1u, feature.whitelist()->size()); |
663 EXPECT_EQ(1u, feature.extension_types()->size()); | 658 EXPECT_EQ(1u, feature.extension_types()->size()); |
664 EXPECT_EQ(1u, feature.GetContexts()->size()); | 659 EXPECT_EQ(1u, feature.contexts()->size()); |
665 EXPECT_EQ(1u, feature.whitelist()->count("bar")); | 660 EXPECT_EQ(1u, feature.whitelist()->count("bar")); |
666 EXPECT_EQ(1u, feature.extension_types()->count(Manifest::TYPE_EXTENSION)); | 661 EXPECT_EQ(1u, feature.extension_types()->count(Manifest::TYPE_EXTENSION)); |
667 EXPECT_EQ(1u, | 662 EXPECT_EQ(1u, |
668 feature.GetContexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); | 663 feature.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
669 EXPECT_EQ(2, feature.min_manifest_version()); | 664 EXPECT_EQ(2, feature.min_manifest_version()); |
670 EXPECT_EQ(3, feature.max_manifest_version()); | 665 EXPECT_EQ(3, feature.max_manifest_version()); |
671 } | 666 } |
672 | 667 |
673 Feature::AvailabilityResult IsAvailableInChannel( | 668 Feature::AvailabilityResult IsAvailableInChannel( |
674 const std::string& channel, VersionInfo::Channel channel_for_testing) { | 669 const std::string& channel, VersionInfo::Channel channel_for_testing) { |
675 ScopedCurrentChannel current_channel(channel_for_testing); | 670 ScopedCurrentChannel current_channel(channel_for_testing); |
676 | 671 |
677 SimpleFeature feature; | 672 SimpleFeature feature; |
678 feature.AddFilter(scoped_ptr<extensions::SimpleFeatureFilter>( | 673 feature.AddFilter(scoped_ptr<extensions::SimpleFeatureFilter>( |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
746 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_CANARY)); | 741 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_CANARY)); |
747 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 742 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
748 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_DEV)); | 743 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_DEV)); |
749 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 744 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
750 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_BETA)); | 745 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_BETA)); |
751 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 746 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
752 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE)); | 747 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE)); |
753 } | 748 } |
754 | 749 |
755 } // namespace extensions | 750 } // namespace extensions |
OLD | NEW |