| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "chrome/common/extensions/features/simple_feature_provider.h" | |
| 6 | |
| 7 #include "testing/gtest/include/gtest/gtest.h" | |
| 8 | |
| 9 using extensions::Extension; | |
| 10 using extensions::Feature; | |
| 11 using extensions::SimpleFeatureProvider; | |
| 12 | |
| 13 TEST(SimpleFeatureProvider, ManifestFeatures) { | |
| 14 SimpleFeatureProvider* provider = | |
| 15 SimpleFeatureProvider::GetManifestFeatures(); | |
| 16 Feature* feature = provider->GetFeature("description"); | |
| 17 ASSERT_TRUE(feature); | |
| 18 EXPECT_EQ(5u, feature->extension_types()->size()); | |
| 19 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION)); | |
| 20 EXPECT_EQ(1u, | |
| 21 feature->extension_types()->count(Extension::TYPE_LEGACY_PACKAGED_APP)); | |
| 22 EXPECT_EQ(1u, | |
| 23 feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); | |
| 24 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); | |
| 25 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_THEME)); | |
| 26 | |
| 27 DictionaryValue manifest; | |
| 28 manifest.SetString("name", "test extension"); | |
| 29 manifest.SetString("version", "1"); | |
| 30 manifest.SetString("description", "hello there"); | |
| 31 | |
| 32 std::string error; | |
| 33 scoped_refptr<const Extension> extension(Extension::Create( | |
| 34 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS, | |
| 35 &error)); | |
| 36 | |
| 37 ASSERT_TRUE(extension.get()); | |
| 38 EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext( | |
| 39 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 40 | |
| 41 feature = provider->GetFeature("theme"); | |
| 42 ASSERT_TRUE(feature); | |
| 43 EXPECT_EQ(Feature::INVALID_TYPE, feature->IsAvailableToContext( | |
| 44 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 45 | |
| 46 feature = provider->GetFeature("devtools_page"); | |
| 47 ASSERT_TRUE(feature); | |
| 48 EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext( | |
| 49 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 50 } | |
| 51 | |
| 52 TEST(SimpleFeatureProvider, PermissionFeatures) { | |
| 53 SimpleFeatureProvider* provider = | |
| 54 SimpleFeatureProvider::GetPermissionFeatures(); | |
| 55 Feature* feature = provider->GetFeature("contextMenus"); | |
| 56 ASSERT_TRUE(feature); | |
| 57 EXPECT_EQ(3u, feature->extension_types()->size()); | |
| 58 EXPECT_EQ(1u, feature->extension_types()->count(Extension::TYPE_EXTENSION)); | |
| 59 EXPECT_EQ(1u, | |
| 60 feature->extension_types()->count(Extension::TYPE_LEGACY_PACKAGED_APP)); | |
| 61 EXPECT_EQ(1u, | |
| 62 feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); | |
| 63 | |
| 64 DictionaryValue manifest; | |
| 65 manifest.SetString("name", "test extension"); | |
| 66 manifest.SetString("version", "1"); | |
| 67 ListValue* permissions = new ListValue(); | |
| 68 manifest.Set("permissions", permissions); | |
| 69 permissions->Append(Value::CreateStringValue("contextMenus")); | |
| 70 | |
| 71 std::string error; | |
| 72 scoped_refptr<const Extension> extension(Extension::Create( | |
| 73 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS, | |
| 74 &error)); | |
| 75 | |
| 76 ASSERT_TRUE(extension.get()); | |
| 77 EXPECT_EQ(Feature::IS_AVAILABLE, feature->IsAvailableToContext( | |
| 78 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 79 | |
| 80 feature = provider->GetFeature("chromePrivate"); | |
| 81 ASSERT_TRUE(feature); | |
| 82 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature->IsAvailableToContext( | |
| 83 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 84 | |
| 85 feature = provider->GetFeature("clipboardWrite"); | |
| 86 ASSERT_TRUE(feature); | |
| 87 EXPECT_EQ(Feature::NOT_PRESENT, feature->IsAvailableToContext( | |
| 88 extension.get(), Feature::UNSPECIFIED_CONTEXT).result()); | |
| 89 } | |
| 90 | |
| 91 TEST(SimpleFeatureProvider, Validation) { | |
| 92 scoped_ptr<DictionaryValue> value(new DictionaryValue()); | |
| 93 | |
| 94 DictionaryValue* feature1 = new DictionaryValue(); | |
| 95 value->Set("feature1", feature1); | |
| 96 | |
| 97 DictionaryValue* feature2 = new DictionaryValue(); | |
| 98 ListValue* extension_types = new ListValue(); | |
| 99 extension_types->Append(Value::CreateStringValue("extension")); | |
| 100 feature2->Set("extension_types", extension_types); | |
| 101 ListValue* contexts = new ListValue(); | |
| 102 contexts->Append(Value::CreateStringValue("blessed_extension")); | |
| 103 feature2->Set("contexts", contexts); | |
| 104 value->Set("feature2", feature2); | |
| 105 | |
| 106 scoped_ptr<SimpleFeatureProvider> provider( | |
| 107 new SimpleFeatureProvider(value.get(), NULL)); | |
| 108 | |
| 109 // feature1 won't validate because it lacks an extension type. | |
| 110 EXPECT_FALSE(provider->GetFeature("feature1")); | |
| 111 | |
| 112 // If we add one, it works. | |
| 113 feature1->Set("extension_types", extension_types->DeepCopy()); | |
| 114 provider.reset(new SimpleFeatureProvider(value.get(), NULL)); | |
| 115 EXPECT_TRUE(provider->GetFeature("feature1")); | |
| 116 | |
| 117 // feature2 won't validate because of the presence of "contexts". | |
| 118 EXPECT_FALSE(provider->GetFeature("feature2")); | |
| 119 | |
| 120 // If we remove it, it works. | |
| 121 feature2->Remove("contexts", NULL); | |
| 122 provider.reset(new SimpleFeatureProvider(value.get(), NULL)); | |
| 123 EXPECT_TRUE(provider->GetFeature("feature2")); | |
| 124 } | |
| OLD | NEW |