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

Side by Side Diff: chrome/common/extensions/feature_unittest.cc

Issue 9978012: Revert 130697 - Reland r130462: Implement FeatureProvider for ExtensionAPI." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 8 months 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 | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/feature_provider.h ('k') | chrome/common/extensions/manifest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/common/extensions/feature.h" 5 #include "chrome/common/extensions/feature.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 using extensions::Feature; 9 using extensions::Feature;
10 10
11 namespace { 11 namespace {
12 12
13 struct IsAvailableTestData { 13 struct IsAvailableTestData {
14 std::string extension_id; 14 std::string extension_id;
15 Extension::Type extension_type; 15 Extension::Type extension_type;
16 Feature::Context context;
16 Feature::Location location; 17 Feature::Location location;
17 Feature::Platform platform; 18 Feature::Platform platform;
18 int manifest_version; 19 int manifest_version;
19 Feature::Availability expected_result; 20 Feature::Availability expected_result;
20 }; 21 };
21 22
22 } // namespace 23 } // namespace
23 24
24 TEST(ExtensionFeatureTest, IsAvailableNullCase) { 25 TEST(ExtensionFeatureTest, IsAvailableNullCase) {
25 const IsAvailableTestData tests[] = { 26 const IsAvailableTestData tests[] = {
26 { "", Extension::TYPE_UNKNOWN, 27 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT,
27 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 28 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
28 Feature::IS_AVAILABLE }, 29 Feature::IS_AVAILABLE },
29 { "random-extension", Extension::TYPE_UNKNOWN, 30 { "random-extension", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT,
30 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 31 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
31 Feature::IS_AVAILABLE }, 32 Feature::IS_AVAILABLE },
32 { "", Extension::TYPE_PACKAGED_APP, 33 { "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_CONTEXT,
33 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 34 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
34 Feature::IS_AVAILABLE }, 35 Feature::IS_AVAILABLE },
35 { "", Extension::TYPE_UNKNOWN, 36 { "", Extension::TYPE_UNKNOWN, Feature::BLESSED_EXTENSION_CONTEXT,
36 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 37 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
37 Feature::IS_AVAILABLE }, 38 Feature::IS_AVAILABLE },
38 { "", Extension::TYPE_UNKNOWN, 39 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT,
39 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 40 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
40 Feature::IS_AVAILABLE }, 41 Feature::IS_AVAILABLE },
41 { "", Extension::TYPE_UNKNOWN, 42 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT,
42 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, 43 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1,
43 Feature::IS_AVAILABLE }, 44 Feature::IS_AVAILABLE },
44 { "", Extension::TYPE_UNKNOWN, 45 { "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_CONTEXT,
45 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, 46 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25,
46 Feature::IS_AVAILABLE } 47 Feature::IS_AVAILABLE }
47 }; 48 };
48 49
49 Feature feature; 50 Feature feature;
50 for (size_t i = 0; i < arraysize(tests); ++i) { 51 for (size_t i = 0; i < arraysize(tests); ++i) {
51 const IsAvailableTestData& test = tests[i]; 52 const IsAvailableTestData& test = tests[i];
52 EXPECT_EQ(test.expected_result, 53 EXPECT_EQ(test.expected_result,
53 feature.IsAvailableToManifest(test.extension_id, 54 feature.IsAvailable(test.extension_id, test.extension_type,
54 test.extension_type, 55 test.location, test.context, test.platform,
55 test.location, 56 test.manifest_version));
56 test.manifest_version,
57 test.platform));
58 } 57 }
59 } 58 }
60 59
61 TEST(ExtensionFeatureTest, Whitelist) { 60 TEST(ExtensionFeatureTest, Whitelist) {
62 Feature feature; 61 Feature feature;
63 feature.whitelist()->insert("foo"); 62 feature.whitelist()->insert("foo");
64 feature.whitelist()->insert("bar"); 63 feature.whitelist()->insert("bar");
65 64
66 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 65 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
67 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 66 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
68 Feature::UNSPECIFIED_PLATFORM)); 67 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
69 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 68 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
70 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 69 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
71 Feature::UNSPECIFIED_PLATFORM)); 70 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
72 71
73 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 72 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable(
74 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 73 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
75 Feature::UNSPECIFIED_PLATFORM)); 74 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
76 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 75 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable(
77 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 76 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
78 Feature::UNSPECIFIED_PLATFORM)); 77 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
79 78
80 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP); 79 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
81 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 80 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailable(
82 "baz", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, -1, 81 "baz", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION,
83 Feature::UNSPECIFIED_PLATFORM)); 82 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
84 } 83 }
85 84
86 TEST(ExtensionFeatureTest, PackageType) { 85 TEST(ExtensionFeatureTest, PackageType) {
87 Feature feature; 86 Feature feature;
88 feature.extension_types()->insert(Extension::TYPE_EXTENSION); 87 feature.extension_types()->insert(Extension::TYPE_EXTENSION);
89 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP); 88 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
90 89
91 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 90 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
92 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, 91 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION,
93 Feature::UNSPECIFIED_PLATFORM)); 92 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
94 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 93 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
95 "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, -1, 94 "", Extension::TYPE_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION,
96 Feature::UNSPECIFIED_PLATFORM)); 95 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
97 96
98 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( 97 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailable(
99 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 98 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
100 Feature::UNSPECIFIED_PLATFORM)); 99 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
101 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( 100 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailable(
102 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, 101 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION,
103 Feature::UNSPECIFIED_PLATFORM)); 102 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
104 } 103 }
105 104
106 TEST(ExtensionFeatureTest, Context) { 105 TEST(ExtensionFeatureTest, Context) {
107 Feature feature; 106 Feature feature;
108 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 107 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
109 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP); 108 feature.contexts()->insert(Feature::CONTENT_SCRIPT_CONTEXT);
110 feature.set_platform(Feature::CHROMEOS_PLATFORM);
111 feature.set_min_manifest_version(21);
112 feature.set_max_manifest_version(25);
113 109
114 DictionaryValue manifest; 110 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
115 manifest.SetString("name", "test"); 111 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
116 manifest.SetString("version", "1"); 112 Feature::BLESSED_EXTENSION_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
117 manifest.SetInteger("manifest_version", 21); 113 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
118 manifest.SetString("app.launch.local_path", "foo.html"); 114 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
115 Feature::CONTENT_SCRIPT_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
119 116
120 std::string error; 117 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailable(
121 scoped_refptr<const Extension> extension(Extension::Create( 118 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
122 FilePath(), Extension::INTERNAL, manifest, Extension::NO_FLAGS, &error)); 119 Feature::UNBLESSED_EXTENSION_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
123 EXPECT_EQ("", error); 120 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailable(
124 ASSERT_TRUE(extension.get()); 121 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
125 122 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
126 feature.whitelist()->insert("monkey");
127 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext(
128 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
129 Feature::CHROMEOS_PLATFORM));
130 feature.whitelist()->clear();
131
132 feature.extension_types()->clear();
133 feature.extension_types()->insert(Extension::TYPE_THEME);
134 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToContext(
135 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
136 Feature::CHROMEOS_PLATFORM));
137 feature.extension_types()->clear();
138 feature.extension_types()->insert(Extension::TYPE_PACKAGED_APP);
139
140 feature.contexts()->clear();
141 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
142 EXPECT_EQ(Feature::INVALID_CONTEXT, feature.IsAvailableToContext(
143 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
144 Feature::CHROMEOS_PLATFORM));
145 feature.contexts()->clear();
146 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
147
148 feature.set_location(Feature::COMPONENT_LOCATION);
149 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext(
150 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
151 Feature::CHROMEOS_PLATFORM));
152 feature.set_location(Feature::UNSPECIFIED_LOCATION);
153
154 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext(
155 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
156 Feature::UNSPECIFIED_PLATFORM));
157
158 feature.set_min_manifest_version(22);
159 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailableToContext(
160 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
161 Feature::CHROMEOS_PLATFORM));
162 feature.set_min_manifest_version(21);
163
164 feature.set_max_manifest_version(18);
165 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext(
166 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
167 Feature::CHROMEOS_PLATFORM));
168 feature.set_max_manifest_version(25);
169 } 123 }
170 124
171 TEST(ExtensionFeatureTest, Location) { 125 TEST(ExtensionFeatureTest, Location) {
172 Feature feature; 126 Feature feature;
173 127
174 // If the feature specifies "component" as its location, then only component 128 // If the feature specifies "component" as its location, then only component
175 // extensions can access it. 129 // extensions can access it.
176 feature.set_location(Feature::COMPONENT_LOCATION); 130 feature.set_location(Feature::COMPONENT_LOCATION);
177 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 131 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
178 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, 132 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION,
179 Feature::UNSPECIFIED_PLATFORM)); 133 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
180 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( 134 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailable(
181 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 135 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
182 Feature::UNSPECIFIED_PLATFORM)); 136 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
183 137
184 // But component extensions can access anything else, whatever their location. 138 // But component extensions can access anything else, whatever their location.
185 feature.set_location(Feature::UNSPECIFIED_LOCATION); 139 feature.set_location(Feature::UNSPECIFIED_LOCATION);
186 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 140 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
187 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, 141 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION,
188 Feature::UNSPECIFIED_PLATFORM)); 142 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
189 } 143 }
190 144
191 TEST(ExtensionFeatureTest, Platform) { 145 TEST(ExtensionFeatureTest, Platform) {
192 Feature feature; 146 Feature feature;
193 feature.set_platform(Feature::CHROMEOS_PLATFORM); 147 feature.set_platform(Feature::CHROMEOS_PLATFORM);
194 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 148 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
195 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 149 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
196 Feature::CHROMEOS_PLATFORM)); 150 Feature::UNSPECIFIED_CONTEXT, Feature::CHROMEOS_PLATFORM, -1));
197 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( 151 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailable(
198 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 152 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
199 Feature::UNSPECIFIED_PLATFORM)); 153 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, -1));
200 } 154 }
201 155
202 TEST(ExtensionFeatureTest, Version) { 156 TEST(ExtensionFeatureTest, Version) {
203 Feature feature; 157 Feature feature;
204 feature.set_min_manifest_version(5); 158 feature.set_min_manifest_version(5);
205 159
206 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, 160 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable(
207 feature.IsAvailableToManifest( 161 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
208 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 162 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 0));
209 0, Feature::UNSPECIFIED_PLATFORM)); 163 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, feature.IsAvailable(
210 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, 164 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
211 feature.IsAvailableToManifest( 165 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 4));
212 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
213 4, Feature::UNSPECIFIED_PLATFORM));
214 166
215 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 167 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
216 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 168 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
217 5, Feature::UNSPECIFIED_PLATFORM)); 169 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 5));
218 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 170 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
219 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 171 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
220 10, Feature::UNSPECIFIED_PLATFORM)); 172 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 10));
221 173
222 feature.set_max_manifest_version(8); 174 feature.set_max_manifest_version(8);
223 175
224 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, 176 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailable(
225 feature.IsAvailableToManifest(
226 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
227 10, Feature::UNSPECIFIED_PLATFORM));
228 EXPECT_EQ(Feature::IS_AVAILABLE,
229 feature.IsAvailableToManifest(
230 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
231 8, Feature::UNSPECIFIED_PLATFORM));
232 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
233 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 177 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
234 7, Feature::UNSPECIFIED_PLATFORM)); 178 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 10));
179 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
180 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
181 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 8));
182 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailable(
183 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
184 Feature::UNSPECIFIED_CONTEXT, Feature::UNSPECIFIED_PLATFORM, 7));
235 } 185 }
236 186
237 TEST(ExtensionFeatureTest, ParseNull) { 187 TEST(ExtensionFeatureTest, ParseNull) {
238 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 188 scoped_ptr<DictionaryValue> value(new DictionaryValue());
239 scoped_ptr<Feature> feature(new Feature()); 189 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
240 feature->Parse(value.get());
241 EXPECT_TRUE(feature->whitelist()->empty()); 190 EXPECT_TRUE(feature->whitelist()->empty());
242 EXPECT_TRUE(feature->extension_types()->empty()); 191 EXPECT_TRUE(feature->extension_types()->empty());
243 EXPECT_TRUE(feature->contexts()->empty()); 192 EXPECT_TRUE(feature->contexts()->empty());
244 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); 193 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
245 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); 194 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform());
246 EXPECT_EQ(0, feature->min_manifest_version()); 195 EXPECT_EQ(0, feature->min_manifest_version());
247 EXPECT_EQ(0, feature->max_manifest_version()); 196 EXPECT_EQ(0, feature->max_manifest_version());
248 } 197 }
249 198
250 TEST(ExtensionFeatureTest, ParseWhitelist) { 199 TEST(ExtensionFeatureTest, ParseWhitelist) {
251 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 200 scoped_ptr<DictionaryValue> value(new DictionaryValue());
252 ListValue* whitelist = new ListValue(); 201 ListValue* whitelist = new ListValue();
253 whitelist->Append(Value::CreateStringValue("foo")); 202 whitelist->Append(Value::CreateStringValue("foo"));
254 whitelist->Append(Value::CreateStringValue("bar")); 203 whitelist->Append(Value::CreateStringValue("bar"));
255 value->Set("whitelist", whitelist); 204 value->Set("whitelist", whitelist);
256 scoped_ptr<Feature> feature(new Feature()); 205 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
257 feature->Parse(value.get());
258 EXPECT_EQ(2u, feature->whitelist()->size()); 206 EXPECT_EQ(2u, feature->whitelist()->size());
259 EXPECT_TRUE(feature->whitelist()->count("foo")); 207 EXPECT_TRUE(feature->whitelist()->count("foo"));
260 EXPECT_TRUE(feature->whitelist()->count("bar")); 208 EXPECT_TRUE(feature->whitelist()->count("bar"));
261 } 209 }
262 210
263 TEST(ExtensionFeatureTest, ParsePackageTypes) { 211 TEST(ExtensionFeatureTest, ParsePackageTypes) {
264 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 212 scoped_ptr<DictionaryValue> value(new DictionaryValue());
265 ListValue* extension_types = new ListValue(); 213 ListValue* extension_types = new ListValue();
266 extension_types->Append(Value::CreateStringValue("extension")); 214 extension_types->Append(Value::CreateStringValue("extension"));
267 extension_types->Append(Value::CreateStringValue("theme")); 215 extension_types->Append(Value::CreateStringValue("theme"));
268 extension_types->Append(Value::CreateStringValue("packaged_app")); 216 extension_types->Append(Value::CreateStringValue("packaged_app"));
269 extension_types->Append(Value::CreateStringValue("hosted_app")); 217 extension_types->Append(Value::CreateStringValue("hosted_app"));
270 extension_types->Append(Value::CreateStringValue("platform_app")); 218 extension_types->Append(Value::CreateStringValue("platform_app"));
271 value->Set("extension_types", extension_types); 219 value->Set("extension_types", extension_types);
272 scoped_ptr<Feature> feature(new Feature()); 220 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
273 feature->Parse(value.get());
274 EXPECT_EQ(5u, feature->extension_types()->size()); 221 EXPECT_EQ(5u, feature->extension_types()->size());
275 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); 222 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION));
276 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); 223 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME));
277 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP)); 224 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PACKAGED_APP));
278 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); 225 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP));
279 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); 226 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
280 227
281 value->SetString("extension_types", "all"); 228 value->SetString("extension_types", "all");
282 scoped_ptr<Feature> feature2(new Feature()); 229 scoped_ptr<Feature> feature2(Feature::Parse(value.get()));
283 feature2->Parse(value.get());
284 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); 230 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types()));
285 } 231 }
286 232
287 TEST(ExtensionFeatureTest, ParseContexts) { 233 TEST(ExtensionFeatureTest, ParseContexts) {
288 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 234 scoped_ptr<DictionaryValue> value(new DictionaryValue());
289 ListValue* contexts = new ListValue(); 235 ListValue* contexts = new ListValue();
290 contexts->Append(Value::CreateStringValue("blessed_extension")); 236 contexts->Append(Value::CreateStringValue("blessed_extension"));
291 contexts->Append(Value::CreateStringValue("unblessed_extension")); 237 contexts->Append(Value::CreateStringValue("unblessed_extension"));
292 contexts->Append(Value::CreateStringValue("content_script")); 238 contexts->Append(Value::CreateStringValue("content_script"));
293 contexts->Append(Value::CreateStringValue("web_page")); 239 contexts->Append(Value::CreateStringValue("web_page"));
294 value->Set("contexts", contexts); 240 value->Set("contexts", contexts);
295 scoped_ptr<Feature> feature(new Feature()); 241 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
296 feature->Parse(value.get());
297 EXPECT_EQ(4u, feature->contexts()->size()); 242 EXPECT_EQ(4u, feature->contexts()->size());
298 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); 243 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT));
299 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 244 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
300 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); 245 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT));
301 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); 246 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT));
302 247
303 value->SetString("contexts", "all"); 248 value->SetString("contexts", "all");
304 scoped_ptr<Feature> feature2(new Feature()); 249 scoped_ptr<Feature> feature2(Feature::Parse(value.get()));
305 feature2->Parse(value.get());
306 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); 250 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts()));
307 } 251 }
308 252
309 TEST(ExtensionFeatureTest, ParseLocation) { 253 TEST(ExtensionFeatureTest, ParseLocation) {
310 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 254 scoped_ptr<DictionaryValue> value(new DictionaryValue());
311 value->SetString("location", "component"); 255 value->SetString("location", "component");
312 scoped_ptr<Feature> feature(new Feature()); 256 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
313 feature->Parse(value.get());
314 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); 257 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location());
315 } 258 }
316 259
317 TEST(ExtensionFeatureTest, ParsePlatform) { 260 TEST(ExtensionFeatureTest, ParsePlatform) {
318 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 261 scoped_ptr<DictionaryValue> value(new DictionaryValue());
319 value->SetString("platform", "chromeos"); 262 value->SetString("platform", "chromeos");
320 scoped_ptr<Feature> feature(new Feature()); 263 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
321 feature->Parse(value.get());
322 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); 264 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform());
323 } 265 }
324 266
325 TEST(ExtensionFeatureTest, ManifestVersion) { 267 TEST(ExtensionFeatureTest, ManifestVersion) {
326 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 268 scoped_ptr<DictionaryValue> value(new DictionaryValue());
327 value->SetInteger("min_manifest_version", 1); 269 value->SetInteger("min_manifest_version", 1);
328 value->SetInteger("max_manifest_version", 5); 270 value->SetInteger("max_manifest_version", 5);
329 scoped_ptr<Feature> feature(new Feature()); 271 scoped_ptr<Feature> feature(Feature::Parse(value.get()));
330 feature->Parse(value.get());
331 EXPECT_EQ(1, feature->min_manifest_version()); 272 EXPECT_EQ(1, feature->min_manifest_version());
332 EXPECT_EQ(5, feature->max_manifest_version()); 273 EXPECT_EQ(5, feature->max_manifest_version());
333 } 274 }
334
335 TEST(ExtensionFeatureTest, Inheritance) {
336 Feature feature;
337 feature.whitelist()->insert("foo");
338 feature.extension_types()->insert(Extension::TYPE_THEME);
339 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
340 feature.set_location(Feature::COMPONENT_LOCATION);
341 feature.set_platform(Feature::CHROMEOS_PLATFORM);
342 feature.set_min_manifest_version(1);
343 feature.set_max_manifest_version(2);
344
345 Feature feature2 = feature;
346 EXPECT_TRUE(feature2.Equals(feature));
347
348 DictionaryValue definition;
349 feature2.Parse(&definition);
350 EXPECT_TRUE(feature2.Equals(feature));
351
352 ListValue* whitelist = new ListValue();
353 ListValue* extension_types = new ListValue();
354 ListValue* contexts = new ListValue();
355 whitelist->Append(Value::CreateStringValue("bar"));
356 extension_types->Append(Value::CreateStringValue("extension"));
357 contexts->Append(Value::CreateStringValue("unblessed_extension"));
358 definition.Set("whitelist", whitelist);
359 definition.Set("extension_types", extension_types);
360 definition.Set("contexts", contexts);
361 // Can't test location or platform because we only have one value so far.
362 definition.Set("min_manifest_version", Value::CreateIntegerValue(2));
363 definition.Set("max_manifest_version", Value::CreateIntegerValue(3));
364
365 feature2.Parse(&definition);
366 EXPECT_FALSE(feature2.Equals(feature));
367 EXPECT_EQ(1u, feature2.whitelist()->size());
368 EXPECT_EQ(1u, feature2.extension_types()->size());
369 EXPECT_EQ(1u, feature2.contexts()->size());
370 EXPECT_EQ(1u, feature2.whitelist()->count("bar"));
371 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION));
372 EXPECT_EQ(1u,
373 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
374 EXPECT_EQ(2, feature2.min_manifest_version());
375 EXPECT_EQ(3, feature2.max_manifest_version());
376 }
377
378 TEST(ExtensionFeatureTest, Equals) {
379 Feature feature;
380 feature.whitelist()->insert("foo");
381 feature.extension_types()->insert(Extension::TYPE_THEME);
382 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
383 feature.set_location(Feature::COMPONENT_LOCATION);
384 feature.set_platform(Feature::CHROMEOS_PLATFORM);
385 feature.set_min_manifest_version(18);
386 feature.set_max_manifest_version(25);
387
388 Feature feature2(feature);
389 EXPECT_TRUE(feature2.Equals(feature));
390
391 feature2.whitelist()->clear();
392 EXPECT_FALSE(feature2.Equals(feature));
393
394 feature2 = feature;
395 feature2.extension_types()->clear();
396 EXPECT_FALSE(feature2.Equals(feature));
397
398 feature2 = feature;
399 feature2.contexts()->clear();
400 EXPECT_FALSE(feature2.Equals(feature));
401
402 feature2 = feature;
403 feature2.set_location(Feature::UNSPECIFIED_LOCATION);
404 EXPECT_FALSE(feature2.Equals(feature));
405
406 feature2 = feature;
407 feature2.set_platform(Feature::UNSPECIFIED_PLATFORM);
408 EXPECT_FALSE(feature2.Equals(feature));
409
410 feature2 = feature;
411 feature2.set_min_manifest_version(0);
412 EXPECT_FALSE(feature2.Equals(feature));
413
414 feature2 = feature;
415 feature2.set_max_manifest_version(0);
416 EXPECT_FALSE(feature2.Equals(feature));
417 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/feature_provider.h ('k') | chrome/common/extensions/manifest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698