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 |