Index: chrome/common/extensions/features/simple_feature_unittest.cc |
diff --git a/chrome/common/extensions/features/simple_feature_unittest.cc b/chrome/common/extensions/features/simple_feature_unittest.cc |
deleted file mode 100644 |
index 36f2084350922fc16efbea86a9b9f8c7f73d6d00..0000000000000000000000000000000000000000 |
--- a/chrome/common/extensions/features/simple_feature_unittest.cc |
+++ /dev/null |
@@ -1,637 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "chrome/common/extensions/features/simple_feature.h" |
- |
-#include "chrome/common/extensions/features/chrome_channel_feature_filter.h" |
-#include "chrome/common/extensions/features/feature_channel.h" |
-#include "extensions/common/value_builder.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-using chrome::VersionInfo; |
-using extensions::DictionaryBuilder; |
-using extensions::Extension; |
-using extensions::Feature; |
-using extensions::ListBuilder; |
-using extensions::Manifest; |
-using extensions::ScopedCurrentChannel; |
-using extensions::SimpleFeature; |
- |
-namespace { |
- |
-struct IsAvailableTestData { |
- std::string extension_id; |
- Manifest::Type extension_type; |
- Feature::Location location; |
- Feature::Platform platform; |
- int manifest_version; |
- Feature::AvailabilityResult expected_result; |
-}; |
- |
-class ExtensionSimpleFeatureTest : public testing::Test { |
- protected: |
- ExtensionSimpleFeatureTest() |
- : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} |
- virtual ~ExtensionSimpleFeatureTest() {} |
- |
- private: |
- ScopedCurrentChannel current_channel_; |
-}; |
- |
-TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) { |
- const IsAvailableTestData tests[] = { |
- { "", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "random-extension", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "", Manifest::TYPE_LEGACY_PACKAGED_APP, |
- Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "", Manifest::TYPE_UNKNOWN, |
- Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, |
- Feature::IS_AVAILABLE }, |
- { "", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, |
- Feature::IS_AVAILABLE } |
- }; |
- |
- SimpleFeature feature; |
- for (size_t i = 0; i < arraysize(tests); ++i) { |
- const IsAvailableTestData& test = tests[i]; |
- EXPECT_EQ(test.expected_result, |
- feature.IsAvailableToManifest(test.extension_id, |
- test.extension_type, |
- test.location, |
- test.manifest_version, |
- test.platform).result()); |
- } |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Whitelist) { |
- const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
- const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); |
- const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); |
- SimpleFeature feature; |
- feature.whitelist()->insert(kIdFoo); |
- feature.whitelist()->insert(kIdBar); |
- |
- EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
- kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
- kIdBar, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
- kIdBaz, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::NOT_FOUND_IN_WHITELIST, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
- EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
- kIdBaz, Manifest::TYPE_LEGACY_PACKAGED_APP, |
- Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, HashedIdWhitelist) { |
- // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | |
- // sha1sum | tr '[:lower:]' '[:upper:]' |
- const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
- const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); |
- SimpleFeature feature; |
- |
- feature.whitelist()->insert(kIdFooHashed); |
- |
- EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
- kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_NE(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
- kIdFooHashed, Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
- "slightlytoooolongforanextensionid", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
- "tooshortforanextensionid", Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, PackageType) { |
- SimpleFeature feature; |
- feature.extension_types()->insert(Manifest::TYPE_EXTENSION); |
- feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
- |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_EXTENSION, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_LEGACY_PACKAGED_APP, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- EXPECT_EQ( |
- Feature::INVALID_TYPE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::INVALID_TYPE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_THEME, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Context) { |
- SimpleFeature feature; |
- feature.set_name("somefeature"); |
- feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
- feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
- feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); |
- feature.set_min_manifest_version(21); |
- feature.set_max_manifest_version(25); |
- |
- base::DictionaryValue manifest; |
- manifest.SetString("name", "test"); |
- manifest.SetString("version", "1"); |
- manifest.SetInteger("manifest_version", 21); |
- manifest.SetString("app.launch.local_path", "foo.html"); |
- |
- std::string error; |
- scoped_refptr<const Extension> extension(Extension::Create( |
- base::FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS, |
- &error)); |
- EXPECT_EQ("", error); |
- ASSERT_TRUE(extension.get()); |
- |
- feature.whitelist()->insert("monkey"); |
- EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM).result()); |
- feature.whitelist()->clear(); |
- |
- feature.extension_types()->clear(); |
- feature.extension_types()->insert(Manifest::TYPE_THEME); |
- { |
- Feature::Availability availability = feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM); |
- EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); |
- EXPECT_EQ("'somefeature' is only allowed for themes, " |
- "but this is a legacy packaged app.", |
- availability.message()); |
- } |
- |
- feature.extension_types()->clear(); |
- feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
- feature.GetContexts()->clear(); |
- feature.GetContexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); |
- feature.GetContexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT); |
- { |
- Feature::Availability availability = feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM); |
- EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
- EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " |
- "content scripts, but this is a privileged page", |
- availability.message()); |
- } |
- |
- feature.GetContexts()->insert(Feature::WEB_PAGE_CONTEXT); |
- { |
- Feature::Availability availability = feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM); |
- EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
- EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " |
- "content scripts, and web pages, but this is a privileged page", |
- availability.message()); |
- } |
- |
- feature.GetContexts()->clear(); |
- feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
- feature.set_location(Feature::COMPONENT_LOCATION); |
- EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM).result()); |
- feature.set_location(Feature::UNSPECIFIED_LOCATION); |
- |
- EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- feature.set_min_manifest_version(22); |
- EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM).result()); |
- feature.set_min_manifest_version(21); |
- |
- feature.set_max_manifest_version(18); |
- EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext( |
- extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
- Feature::CHROMEOS_PLATFORM).result()); |
- feature.set_max_manifest_version(25); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Location) { |
- SimpleFeature feature; |
- |
- // If the feature specifies "component" as its location, then only component |
- // extensions can access it. |
- feature.set_location(Feature::COMPONENT_LOCATION); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::COMPONENT_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::INVALID_LOCATION, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- // But component extensions can access anything else, whatever their location. |
- feature.set_location(Feature::UNSPECIFIED_LOCATION); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::COMPONENT_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Platform) { |
- SimpleFeature feature; |
- feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::CHROMEOS_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::INVALID_PLATFORM, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Version) { |
- SimpleFeature feature; |
- feature.set_min_manifest_version(5); |
- |
- EXPECT_EQ( |
- Feature::INVALID_MIN_MANIFEST_VERSION, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 0, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::INVALID_MIN_MANIFEST_VERSION, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 4, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 5, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 10, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- |
- feature.set_max_manifest_version(8); |
- |
- EXPECT_EQ( |
- Feature::INVALID_MAX_MANIFEST_VERSION, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 10, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 8, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
- EXPECT_EQ( |
- Feature::IS_AVAILABLE, |
- feature.IsAvailableToManifest(std::string(), |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- 7, |
- Feature::UNSPECIFIED_PLATFORM).result()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParseNull) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_TRUE(feature->whitelist()->empty()); |
- EXPECT_TRUE(feature->extension_types()->empty()); |
- EXPECT_TRUE(feature->GetContexts()->empty()); |
- EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); |
- EXPECT_TRUE(feature->platforms()->empty()); |
- EXPECT_EQ(0, feature->min_manifest_version()); |
- EXPECT_EQ(0, feature->max_manifest_version()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParseWhitelist) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- base::ListValue* whitelist = new base::ListValue(); |
- whitelist->Append(new base::StringValue("foo")); |
- whitelist->Append(new base::StringValue("bar")); |
- value->Set("whitelist", whitelist); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_EQ(2u, feature->whitelist()->size()); |
- EXPECT_TRUE(feature->whitelist()->count("foo")); |
- EXPECT_TRUE(feature->whitelist()->count("bar")); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParsePackageTypes) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- base::ListValue* extension_types = new base::ListValue(); |
- extension_types->Append(new base::StringValue("extension")); |
- extension_types->Append(new base::StringValue("theme")); |
- extension_types->Append(new base::StringValue("legacy_packaged_app")); |
- extension_types->Append(new base::StringValue("hosted_app")); |
- extension_types->Append(new base::StringValue("platform_app")); |
- extension_types->Append(new base::StringValue("shared_module")); |
- value->Set("extension_types", extension_types); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_EQ(6u, feature->extension_types()->size()); |
- EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_EXTENSION)); |
- EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_THEME)); |
- EXPECT_TRUE(feature->extension_types()->count( |
- Manifest::TYPE_LEGACY_PACKAGED_APP)); |
- EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_HOSTED_APP)); |
- EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_PLATFORM_APP)); |
- EXPECT_TRUE(feature->extension_types()->count(Manifest::TYPE_SHARED_MODULE)); |
- |
- value->SetString("extension_types", "all"); |
- scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
- feature2->Parse(value.get()); |
- EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParseContexts) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- base::ListValue* contexts = new base::ListValue(); |
- contexts->Append(new base::StringValue("blessed_extension")); |
- contexts->Append(new base::StringValue("unblessed_extension")); |
- contexts->Append(new base::StringValue("content_script")); |
- contexts->Append(new base::StringValue("web_page")); |
- contexts->Append(new base::StringValue("blessed_web_page")); |
- value->Set("contexts", contexts); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_EQ(5u, feature->GetContexts()->size()); |
- EXPECT_TRUE( |
- feature->GetContexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); |
- EXPECT_TRUE( |
- feature->GetContexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
- EXPECT_TRUE( |
- feature->GetContexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); |
- EXPECT_TRUE( |
- feature->GetContexts()->count(Feature::WEB_PAGE_CONTEXT)); |
- EXPECT_TRUE( |
- feature->GetContexts()->count(Feature::BLESSED_WEB_PAGE_CONTEXT)); |
- |
- value->SetString("contexts", "all"); |
- scoped_ptr<SimpleFeature> feature2(new SimpleFeature()); |
- feature2->Parse(value.get()); |
- EXPECT_EQ(*(feature->GetContexts()), *(feature2->GetContexts())); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParseLocation) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- value->SetString("location", "component"); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ParsePlatforms) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- base::ListValue* platforms = new base::ListValue(); |
- value->Set("platforms", platforms); |
- feature->Parse(value.get()); |
- EXPECT_TRUE(feature->platforms()->empty()); |
- |
- platforms->AppendString("chromeos"); |
- feature->Parse(value.get()); |
- EXPECT_FALSE(feature->platforms()->empty()); |
- EXPECT_EQ(Feature::CHROMEOS_PLATFORM, *feature->platforms()->begin()); |
- |
- platforms->Clear(); |
- platforms->AppendString("win"); |
- feature->Parse(value.get()); |
- EXPECT_FALSE(feature->platforms()->empty()); |
- EXPECT_EQ(Feature::WIN_PLATFORM, *feature->platforms()->begin()); |
- |
- platforms->Clear(); |
- platforms->AppendString("win"); |
- platforms->AppendString("chromeos"); |
- feature->Parse(value.get()); |
- std::set<Feature::Platform> expected_platforms; |
- expected_platforms.insert(Feature::CHROMEOS_PLATFORM); |
- expected_platforms.insert(Feature::WIN_PLATFORM); |
- |
- EXPECT_FALSE(feature->platforms()->empty()); |
- EXPECT_EQ(expected_platforms, *feature->platforms()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, ManifestVersion) { |
- scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
- value->SetInteger("min_manifest_version", 1); |
- value->SetInteger("max_manifest_version", 5); |
- scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
- feature->Parse(value.get()); |
- EXPECT_EQ(1, feature->min_manifest_version()); |
- EXPECT_EQ(5, feature->max_manifest_version()); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, Inheritance) { |
- SimpleFeature feature; |
- feature.whitelist()->insert("foo"); |
- feature.extension_types()->insert(Manifest::TYPE_THEME); |
- feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
- feature.set_location(Feature::COMPONENT_LOCATION); |
- feature.platforms()->insert(Feature::CHROMEOS_PLATFORM); |
- feature.set_min_manifest_version(1); |
- feature.set_max_manifest_version(2); |
- |
- // Test additive parsing. Parsing an empty dictionary should result in no |
- // changes to a SimpleFeature. |
- base::DictionaryValue definition; |
- feature.Parse(&definition); |
- EXPECT_EQ(1u, feature.whitelist()->size()); |
- EXPECT_EQ(1u, feature.extension_types()->size()); |
- EXPECT_EQ(1u, feature.GetContexts()->size()); |
- EXPECT_EQ(1u, feature.whitelist()->count("foo")); |
- EXPECT_EQ(Feature::COMPONENT_LOCATION, feature.location()); |
- EXPECT_EQ(1u, feature.platforms()->size()); |
- EXPECT_EQ(1u, feature.platforms()->count(Feature::CHROMEOS_PLATFORM)); |
- EXPECT_EQ(1, feature.min_manifest_version()); |
- EXPECT_EQ(2, feature.max_manifest_version()); |
- |
- base::ListValue* whitelist = new base::ListValue(); |
- base::ListValue* extension_types = new base::ListValue(); |
- base::ListValue* contexts = new base::ListValue(); |
- whitelist->Append(new base::StringValue("bar")); |
- extension_types->Append(new base::StringValue("extension")); |
- contexts->Append(new base::StringValue("unblessed_extension")); |
- definition.Set("whitelist", whitelist); |
- definition.Set("extension_types", extension_types); |
- definition.Set("contexts", contexts); |
- // Can't test location or platform because we only have one value so far. |
- definition.Set("min_manifest_version", new base::FundamentalValue(2)); |
- definition.Set("max_manifest_version", new base::FundamentalValue(3)); |
- |
- feature.Parse(&definition); |
- EXPECT_EQ(1u, feature.whitelist()->size()); |
- EXPECT_EQ(1u, feature.extension_types()->size()); |
- EXPECT_EQ(1u, feature.GetContexts()->size()); |
- EXPECT_EQ(1u, feature.whitelist()->count("bar")); |
- EXPECT_EQ(1u, feature.extension_types()->count(Manifest::TYPE_EXTENSION)); |
- EXPECT_EQ(1u, |
- feature.GetContexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); |
- EXPECT_EQ(2, feature.min_manifest_version()); |
- EXPECT_EQ(3, feature.max_manifest_version()); |
-} |
- |
-Feature::AvailabilityResult IsAvailableInChannel( |
- const std::string& channel, VersionInfo::Channel channel_for_testing) { |
- ScopedCurrentChannel current_channel(channel_for_testing); |
- |
- SimpleFeature feature; |
- feature.AddFilter(scoped_ptr<extensions::SimpleFeatureFilter>( |
- new extensions::ChromeChannelFeatureFilter(&feature))); |
- if (!channel.empty()) { |
- base::DictionaryValue feature_value; |
- feature_value.SetString("channel", channel); |
- feature.Parse(&feature_value); |
- } |
- |
- return feature.IsAvailableToManifest( |
- "random-extension", |
- Manifest::TYPE_UNKNOWN, |
- Feature::UNSPECIFIED_LOCATION, |
- -1, |
- Feature::GetCurrentPlatform()).result(); |
-} |
- |
-TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) { |
- // stable supported. |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("stable", VersionInfo::CHANNEL_CANARY)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("stable", VersionInfo::CHANNEL_DEV)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("stable", VersionInfo::CHANNEL_BETA)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("stable", VersionInfo::CHANNEL_STABLE)); |
- |
- // beta supported. |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("beta", VersionInfo::CHANNEL_UNKNOWN)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("beta", VersionInfo::CHANNEL_CANARY)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("beta", VersionInfo::CHANNEL_DEV)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("beta", VersionInfo::CHANNEL_BETA)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("beta", VersionInfo::CHANNEL_STABLE)); |
- |
- // dev supported. |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("dev", VersionInfo::CHANNEL_UNKNOWN)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("dev", VersionInfo::CHANNEL_CANARY)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("dev", VersionInfo::CHANNEL_DEV)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("dev", VersionInfo::CHANNEL_BETA)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("dev", VersionInfo::CHANNEL_STABLE)); |
- |
- // canary supported. |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("canary", VersionInfo::CHANNEL_UNKNOWN)); |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("canary", VersionInfo::CHANNEL_CANARY)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("canary", VersionInfo::CHANNEL_DEV)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("canary", VersionInfo::CHANNEL_BETA)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("canary", VersionInfo::CHANNEL_STABLE)); |
- |
- // trunk supported. |
- EXPECT_EQ(Feature::IS_AVAILABLE, |
- IsAvailableInChannel("trunk", VersionInfo::CHANNEL_UNKNOWN)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("trunk", VersionInfo::CHANNEL_CANARY)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("trunk", VersionInfo::CHANNEL_DEV)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("trunk", VersionInfo::CHANNEL_BETA)); |
- EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
- IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE)); |
-} |
- |
-} // namespace |