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

Side by Side Diff: chrome/common/extensions/features/simple_feature_unittest.cc

Issue 11316164: Implement ComplexFeature to support permission features with multiple rules. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: new Created 8 years 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
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/features/feature.h" 5 #include "chrome/common/extensions/features/simple_feature.h"
6 6
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 using chrome::VersionInfo; 9 using chrome::VersionInfo;
10 using extensions::Extension; 10 using extensions::Extension;
11 using extensions::Feature; 11 using extensions::Feature;
12 using extensions::SimpleFeature;
12 13
13 namespace { 14 namespace {
14 15
15 struct IsAvailableTestData { 16 struct IsAvailableTestData {
16 std::string extension_id; 17 std::string extension_id;
17 Extension::Type extension_type; 18 Extension::Type extension_type;
18 Feature::Location location; 19 Feature::Location location;
19 Feature::Platform platform; 20 Feature::Platform platform;
20 int manifest_version; 21 int manifest_version;
21 Feature::AvailabilityResult expected_result; 22 Feature::AvailabilityResult expected_result;
22 }; 23 };
23 24
24 class ExtensionFeatureTest : public testing::Test { 25 class ExtensionSimpleFeatureTest : public testing::Test {
25 protected: 26 protected:
26 ExtensionFeatureTest() 27 ExtensionSimpleFeatureTest()
27 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {} 28 : current_channel_(VersionInfo::CHANNEL_UNKNOWN) {}
28 virtual ~ExtensionFeatureTest() {} 29 virtual ~ExtensionSimpleFeatureTest() {}
29 30
30 private: 31 private:
31 Feature::ScopedCurrentChannel current_channel_; 32 Feature::ScopedCurrentChannel current_channel_;
32 }; 33 };
33 34
34 TEST_F(ExtensionFeatureTest, IsAvailableNullCase) { 35 TEST_F(ExtensionSimpleFeatureTest, IsAvailableNullCase) {
35 const IsAvailableTestData tests[] = { 36 const IsAvailableTestData tests[] = {
36 { "", Extension::TYPE_UNKNOWN, 37 { "", Extension::TYPE_UNKNOWN,
37 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 38 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
38 Feature::IS_AVAILABLE }, 39 Feature::IS_AVAILABLE },
39 { "random-extension", Extension::TYPE_UNKNOWN, 40 { "random-extension", Extension::TYPE_UNKNOWN,
40 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 41 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
41 Feature::IS_AVAILABLE }, 42 Feature::IS_AVAILABLE },
42 { "", Extension::TYPE_LEGACY_PACKAGED_APP, 43 { "", Extension::TYPE_LEGACY_PACKAGED_APP,
43 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 44 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
44 Feature::IS_AVAILABLE }, 45 Feature::IS_AVAILABLE },
45 { "", Extension::TYPE_UNKNOWN, 46 { "", Extension::TYPE_UNKNOWN,
46 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 47 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
47 Feature::IS_AVAILABLE }, 48 Feature::IS_AVAILABLE },
48 { "", Extension::TYPE_UNKNOWN, 49 { "", Extension::TYPE_UNKNOWN,
49 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1, 50 Feature::COMPONENT_LOCATION, Feature::UNSPECIFIED_PLATFORM, -1,
50 Feature::IS_AVAILABLE }, 51 Feature::IS_AVAILABLE },
51 { "", Extension::TYPE_UNKNOWN, 52 { "", Extension::TYPE_UNKNOWN,
52 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1, 53 Feature::UNSPECIFIED_LOCATION, Feature::CHROMEOS_PLATFORM, -1,
53 Feature::IS_AVAILABLE }, 54 Feature::IS_AVAILABLE },
54 { "", Extension::TYPE_UNKNOWN, 55 { "", Extension::TYPE_UNKNOWN,
55 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25, 56 Feature::UNSPECIFIED_LOCATION, Feature::UNSPECIFIED_PLATFORM, 25,
56 Feature::IS_AVAILABLE } 57 Feature::IS_AVAILABLE }
57 }; 58 };
58 59
59 Feature feature; 60 SimpleFeature feature;
60 for (size_t i = 0; i < arraysize(tests); ++i) { 61 for (size_t i = 0; i < arraysize(tests); ++i) {
61 const IsAvailableTestData& test = tests[i]; 62 const IsAvailableTestData& test = tests[i];
62 EXPECT_EQ(test.expected_result, 63 EXPECT_EQ(test.expected_result,
63 feature.IsAvailableToManifest(test.extension_id, 64 feature.IsAvailableToManifest(test.extension_id,
64 test.extension_type, 65 test.extension_type,
65 test.location, 66 test.location,
66 test.manifest_version, 67 test.manifest_version,
67 test.platform).result()); 68 test.platform).result());
68 } 69 }
69 } 70 }
70 71
71 TEST_F(ExtensionFeatureTest, Whitelist) { 72 TEST_F(ExtensionSimpleFeatureTest, Whitelist) {
72 Feature feature; 73 SimpleFeature feature;
73 feature.whitelist()->insert("foo"); 74 feature.whitelist()->insert("foo");
74 feature.whitelist()->insert("bar"); 75 feature.whitelist()->insert("bar");
75 76
76 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 77 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
77 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 78 "foo", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
78 Feature::UNSPECIFIED_PLATFORM).result()); 79 Feature::UNSPECIFIED_PLATFORM).result());
79 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 80 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
80 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 81 "bar", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
81 Feature::UNSPECIFIED_PLATFORM).result()); 82 Feature::UNSPECIFIED_PLATFORM).result());
82 83
83 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 84 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
84 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 85 "baz", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
85 Feature::UNSPECIFIED_PLATFORM).result()); 86 Feature::UNSPECIFIED_PLATFORM).result());
86 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 87 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
87 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 88 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
88 Feature::UNSPECIFIED_PLATFORM).result()); 89 Feature::UNSPECIFIED_PLATFORM).result());
89 90
90 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); 91 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP);
91 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( 92 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest(
92 "baz", Extension::TYPE_LEGACY_PACKAGED_APP, 93 "baz", Extension::TYPE_LEGACY_PACKAGED_APP,
93 Feature::UNSPECIFIED_LOCATION, -1, 94 Feature::UNSPECIFIED_LOCATION, -1,
94 Feature::UNSPECIFIED_PLATFORM).result()); 95 Feature::UNSPECIFIED_PLATFORM).result());
95 } 96 }
96 97
97 TEST_F(ExtensionFeatureTest, PackageType) { 98 TEST_F(ExtensionSimpleFeatureTest, PackageType) {
98 Feature feature; 99 SimpleFeature feature;
99 feature.extension_types()->insert(Extension::TYPE_EXTENSION); 100 feature.extension_types()->insert(Extension::TYPE_EXTENSION);
100 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); 101 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP);
101 102
102 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 103 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
103 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, 104 "", Extension::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1,
104 Feature::UNSPECIFIED_PLATFORM).result()); 105 Feature::UNSPECIFIED_PLATFORM).result());
105 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 106 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
106 "", Extension::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, 107 "", Extension::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION,
107 -1, Feature::UNSPECIFIED_PLATFORM).result()); 108 -1, Feature::UNSPECIFIED_PLATFORM).result());
108 109
109 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( 110 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest(
110 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 111 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
111 Feature::UNSPECIFIED_PLATFORM).result()); 112 Feature::UNSPECIFIED_PLATFORM).result());
112 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( 113 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest(
113 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, 114 "", Extension::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1,
114 Feature::UNSPECIFIED_PLATFORM).result()); 115 Feature::UNSPECIFIED_PLATFORM).result());
115 } 116 }
116 117
117 TEST_F(ExtensionFeatureTest, Context) { 118 TEST_F(ExtensionSimpleFeatureTest, Context) {
118 Feature feature; 119 SimpleFeature feature;
119 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 120 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
120 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP); 121 feature.extension_types()->insert(Extension::TYPE_LEGACY_PACKAGED_APP);
121 feature.set_platform(Feature::CHROMEOS_PLATFORM); 122 feature.set_platform(Feature::CHROMEOS_PLATFORM);
122 feature.set_min_manifest_version(21); 123 feature.set_min_manifest_version(21);
123 feature.set_max_manifest_version(25); 124 feature.set_max_manifest_version(25);
124 125
125 DictionaryValue manifest; 126 DictionaryValue manifest;
126 manifest.SetString("name", "test"); 127 manifest.SetString("name", "test");
127 manifest.SetString("version", "1"); 128 manifest.SetString("version", "1");
128 manifest.SetInteger("manifest_version", 21); 129 manifest.SetInteger("manifest_version", 21);
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 Feature::CHROMEOS_PLATFORM).result()); 173 Feature::CHROMEOS_PLATFORM).result());
173 feature.set_min_manifest_version(21); 174 feature.set_min_manifest_version(21);
174 175
175 feature.set_max_manifest_version(18); 176 feature.set_max_manifest_version(18);
176 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext( 177 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, feature.IsAvailableToContext(
177 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, 178 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT,
178 Feature::CHROMEOS_PLATFORM).result()); 179 Feature::CHROMEOS_PLATFORM).result());
179 feature.set_max_manifest_version(25); 180 feature.set_max_manifest_version(25);
180 } 181 }
181 182
182 TEST_F(ExtensionFeatureTest, Location) { 183 TEST_F(ExtensionSimpleFeatureTest, Location) {
183 Feature feature; 184 SimpleFeature feature;
184 185
185 // If the feature specifies "component" as its location, then only component 186 // If the feature specifies "component" as its location, then only component
186 // extensions can access it. 187 // extensions can access it.
187 feature.set_location(Feature::COMPONENT_LOCATION); 188 feature.set_location(Feature::COMPONENT_LOCATION);
188 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 189 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
189 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, 190 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
190 Feature::UNSPECIFIED_PLATFORM).result()); 191 Feature::UNSPECIFIED_PLATFORM).result());
191 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( 192 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest(
192 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 193 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
193 Feature::UNSPECIFIED_PLATFORM).result()); 194 Feature::UNSPECIFIED_PLATFORM).result());
194 195
195 // But component extensions can access anything else, whatever their location. 196 // But component extensions can access anything else, whatever their location.
196 feature.set_location(Feature::UNSPECIFIED_LOCATION); 197 feature.set_location(Feature::UNSPECIFIED_LOCATION);
197 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 198 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
198 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, 199 "", Extension::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1,
199 Feature::UNSPECIFIED_PLATFORM).result()); 200 Feature::UNSPECIFIED_PLATFORM).result());
200 } 201 }
201 202
202 TEST_F(ExtensionFeatureTest, Platform) { 203 TEST_F(ExtensionSimpleFeatureTest, Platform) {
203 Feature feature; 204 SimpleFeature feature;
204 feature.set_platform(Feature::CHROMEOS_PLATFORM); 205 feature.set_platform(Feature::CHROMEOS_PLATFORM);
205 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 206 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
206 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 207 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
207 Feature::CHROMEOS_PLATFORM).result()); 208 Feature::CHROMEOS_PLATFORM).result());
208 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( 209 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest(
209 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, 210 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1,
210 Feature::UNSPECIFIED_PLATFORM).result()); 211 Feature::UNSPECIFIED_PLATFORM).result());
211 } 212 }
212 213
213 TEST_F(ExtensionFeatureTest, Version) { 214 TEST_F(ExtensionSimpleFeatureTest, Version) {
214 Feature feature; 215 SimpleFeature feature;
215 feature.set_min_manifest_version(5); 216 feature.set_min_manifest_version(5);
216 217
217 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, 218 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
218 feature.IsAvailableToManifest( 219 feature.IsAvailableToManifest(
219 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 220 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
220 0, Feature::UNSPECIFIED_PLATFORM).result()); 221 0, Feature::UNSPECIFIED_PLATFORM).result());
221 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, 222 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION,
222 feature.IsAvailableToManifest( 223 feature.IsAvailableToManifest(
223 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 224 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
224 4, Feature::UNSPECIFIED_PLATFORM).result()); 225 4, Feature::UNSPECIFIED_PLATFORM).result());
(...skipping 13 matching lines...) Expand all
238 10, Feature::UNSPECIFIED_PLATFORM).result()); 239 10, Feature::UNSPECIFIED_PLATFORM).result());
239 EXPECT_EQ(Feature::IS_AVAILABLE, 240 EXPECT_EQ(Feature::IS_AVAILABLE,
240 feature.IsAvailableToManifest( 241 feature.IsAvailableToManifest(
241 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 242 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
242 8, Feature::UNSPECIFIED_PLATFORM).result()); 243 8, Feature::UNSPECIFIED_PLATFORM).result());
243 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( 244 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest(
244 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, 245 "", Extension::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION,
245 7, Feature::UNSPECIFIED_PLATFORM).result()); 246 7, Feature::UNSPECIFIED_PLATFORM).result());
246 } 247 }
247 248
248 TEST_F(ExtensionFeatureTest, ParseNull) { 249 TEST_F(ExtensionSimpleFeatureTest, ParseNull) {
249 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 250 scoped_ptr<DictionaryValue> value(new DictionaryValue());
250 scoped_ptr<Feature> feature(new Feature()); 251 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
251 feature->Parse(value.get()); 252 feature->Parse(value.get());
252 EXPECT_TRUE(feature->whitelist()->empty()); 253 EXPECT_TRUE(feature->whitelist()->empty());
253 EXPECT_TRUE(feature->extension_types()->empty()); 254 EXPECT_TRUE(feature->extension_types()->empty());
254 EXPECT_TRUE(feature->contexts()->empty()); 255 EXPECT_TRUE(feature->contexts()->empty());
255 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); 256 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
256 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform()); 257 EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform());
257 EXPECT_EQ(0, feature->min_manifest_version()); 258 EXPECT_EQ(0, feature->min_manifest_version());
258 EXPECT_EQ(0, feature->max_manifest_version()); 259 EXPECT_EQ(0, feature->max_manifest_version());
259 } 260 }
260 261
261 TEST_F(ExtensionFeatureTest, ParseWhitelist) { 262 TEST_F(ExtensionSimpleFeatureTest, ParseWhitelist) {
262 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 263 scoped_ptr<DictionaryValue> value(new DictionaryValue());
263 ListValue* whitelist = new ListValue(); 264 ListValue* whitelist = new ListValue();
264 whitelist->Append(Value::CreateStringValue("foo")); 265 whitelist->Append(Value::CreateStringValue("foo"));
265 whitelist->Append(Value::CreateStringValue("bar")); 266 whitelist->Append(Value::CreateStringValue("bar"));
266 value->Set("whitelist", whitelist); 267 value->Set("whitelist", whitelist);
267 scoped_ptr<Feature> feature(new Feature()); 268 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
268 feature->Parse(value.get()); 269 feature->Parse(value.get());
269 EXPECT_EQ(2u, feature->whitelist()->size()); 270 EXPECT_EQ(2u, feature->whitelist()->size());
270 EXPECT_TRUE(feature->whitelist()->count("foo")); 271 EXPECT_TRUE(feature->whitelist()->count("foo"));
271 EXPECT_TRUE(feature->whitelist()->count("bar")); 272 EXPECT_TRUE(feature->whitelist()->count("bar"));
272 } 273 }
273 274
274 TEST_F(ExtensionFeatureTest, ParsePackageTypes) { 275 TEST_F(ExtensionSimpleFeatureTest, ParsePackageTypes) {
275 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 276 scoped_ptr<DictionaryValue> value(new DictionaryValue());
276 ListValue* extension_types = new ListValue(); 277 ListValue* extension_types = new ListValue();
277 extension_types->Append(Value::CreateStringValue("extension")); 278 extension_types->Append(Value::CreateStringValue("extension"));
278 extension_types->Append(Value::CreateStringValue("theme")); 279 extension_types->Append(Value::CreateStringValue("theme"));
279 extension_types->Append(Value::CreateStringValue("packaged_app")); 280 extension_types->Append(Value::CreateStringValue("packaged_app"));
280 extension_types->Append(Value::CreateStringValue("hosted_app")); 281 extension_types->Append(Value::CreateStringValue("hosted_app"));
281 extension_types->Append(Value::CreateStringValue("platform_app")); 282 extension_types->Append(Value::CreateStringValue("platform_app"));
282 value->Set("extension_types", extension_types); 283 value->Set("extension_types", extension_types);
283 scoped_ptr<Feature> feature(new Feature()); 284 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
284 feature->Parse(value.get()); 285 feature->Parse(value.get());
285 EXPECT_EQ(5u, feature->extension_types()->size()); 286 EXPECT_EQ(5u, feature->extension_types()->size());
286 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION)); 287 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_EXTENSION));
287 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME)); 288 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_THEME));
288 EXPECT_TRUE(feature->extension_types()->count( 289 EXPECT_TRUE(feature->extension_types()->count(
289 Extension::TYPE_LEGACY_PACKAGED_APP)); 290 Extension::TYPE_LEGACY_PACKAGED_APP));
290 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP)); 291 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_HOSTED_APP));
291 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP)); 292 EXPECT_TRUE(feature->extension_types()->count(Extension::TYPE_PLATFORM_APP));
292 293
293 value->SetString("extension_types", "all"); 294 value->SetString("extension_types", "all");
294 scoped_ptr<Feature> feature2(new Feature()); 295 scoped_ptr<SimpleFeature> feature2(new SimpleFeature());
295 feature2->Parse(value.get()); 296 feature2->Parse(value.get());
296 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types())); 297 EXPECT_EQ(*(feature->extension_types()), *(feature2->extension_types()));
297 } 298 }
298 299
299 TEST_F(ExtensionFeatureTest, ParseContexts) { 300 TEST_F(ExtensionSimpleFeatureTest, ParseContexts) {
300 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 301 scoped_ptr<DictionaryValue> value(new DictionaryValue());
301 ListValue* contexts = new ListValue(); 302 ListValue* contexts = new ListValue();
302 contexts->Append(Value::CreateStringValue("blessed_extension")); 303 contexts->Append(Value::CreateStringValue("blessed_extension"));
303 contexts->Append(Value::CreateStringValue("unblessed_extension")); 304 contexts->Append(Value::CreateStringValue("unblessed_extension"));
304 contexts->Append(Value::CreateStringValue("content_script")); 305 contexts->Append(Value::CreateStringValue("content_script"));
305 contexts->Append(Value::CreateStringValue("web_page")); 306 contexts->Append(Value::CreateStringValue("web_page"));
306 value->Set("contexts", contexts); 307 value->Set("contexts", contexts);
307 scoped_ptr<Feature> feature(new Feature()); 308 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
308 feature->Parse(value.get()); 309 feature->Parse(value.get());
309 EXPECT_EQ(4u, feature->contexts()->size()); 310 EXPECT_EQ(4u, feature->contexts()->size());
310 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT)); 311 EXPECT_TRUE(feature->contexts()->count(Feature::BLESSED_EXTENSION_CONTEXT));
311 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 312 EXPECT_TRUE(feature->contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
312 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT)); 313 EXPECT_TRUE(feature->contexts()->count(Feature::CONTENT_SCRIPT_CONTEXT));
313 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT)); 314 EXPECT_TRUE(feature->contexts()->count(Feature::WEB_PAGE_CONTEXT));
314 315
315 value->SetString("contexts", "all"); 316 value->SetString("contexts", "all");
316 scoped_ptr<Feature> feature2(new Feature()); 317 scoped_ptr<SimpleFeature> feature2(new SimpleFeature());
317 feature2->Parse(value.get()); 318 feature2->Parse(value.get());
318 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts())); 319 EXPECT_EQ(*(feature->contexts()), *(feature2->contexts()));
319 } 320 }
320 321
321 TEST_F(ExtensionFeatureTest, ParseLocation) { 322 TEST_F(ExtensionSimpleFeatureTest, ParseLocation) {
322 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 323 scoped_ptr<DictionaryValue> value(new DictionaryValue());
323 value->SetString("location", "component"); 324 value->SetString("location", "component");
324 scoped_ptr<Feature> feature(new Feature()); 325 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
325 feature->Parse(value.get()); 326 feature->Parse(value.get());
326 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location()); 327 EXPECT_EQ(Feature::COMPONENT_LOCATION, feature->location());
327 } 328 }
328 329
329 TEST_F(ExtensionFeatureTest, ParsePlatform) { 330 TEST_F(ExtensionSimpleFeatureTest, ParsePlatform) {
330 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 331 scoped_ptr<DictionaryValue> value(new DictionaryValue());
331 value->SetString("platform", "chromeos"); 332 value->SetString("platform", "chromeos");
332 scoped_ptr<Feature> feature(new Feature()); 333 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
333 feature->Parse(value.get()); 334 feature->Parse(value.get());
334 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform()); 335 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, feature->platform());
335 } 336 }
336 337
337 TEST_F(ExtensionFeatureTest, ManifestVersion) { 338 TEST_F(ExtensionSimpleFeatureTest, ManifestVersion) {
338 scoped_ptr<DictionaryValue> value(new DictionaryValue()); 339 scoped_ptr<DictionaryValue> value(new DictionaryValue());
339 value->SetInteger("min_manifest_version", 1); 340 value->SetInteger("min_manifest_version", 1);
340 value->SetInteger("max_manifest_version", 5); 341 value->SetInteger("max_manifest_version", 5);
341 scoped_ptr<Feature> feature(new Feature()); 342 scoped_ptr<SimpleFeature> feature(new SimpleFeature());
342 feature->Parse(value.get()); 343 feature->Parse(value.get());
343 EXPECT_EQ(1, feature->min_manifest_version()); 344 EXPECT_EQ(1, feature->min_manifest_version());
344 EXPECT_EQ(5, feature->max_manifest_version()); 345 EXPECT_EQ(5, feature->max_manifest_version());
345 } 346 }
346 347
347 TEST_F(ExtensionFeatureTest, Inheritance) { 348 TEST_F(ExtensionSimpleFeatureTest, Inheritance) {
348 Feature feature; 349 SimpleFeature feature;
349 feature.whitelist()->insert("foo"); 350 feature.whitelist()->insert("foo");
350 feature.extension_types()->insert(Extension::TYPE_THEME); 351 feature.extension_types()->insert(Extension::TYPE_THEME);
351 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); 352 feature.contexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT);
352 feature.set_location(Feature::COMPONENT_LOCATION); 353 feature.set_location(Feature::COMPONENT_LOCATION);
353 feature.set_platform(Feature::CHROMEOS_PLATFORM); 354 feature.set_platform(Feature::CHROMEOS_PLATFORM);
354 feature.set_min_manifest_version(1); 355 feature.set_min_manifest_version(1);
355 feature.set_max_manifest_version(2); 356 feature.set_max_manifest_version(2);
356 357
357 Feature feature2 = feature; 358 SimpleFeature feature2 = feature;
358 EXPECT_TRUE(feature2.Equals(feature)); 359 EXPECT_TRUE(feature2.Equals(feature));
359 360
360 DictionaryValue definition; 361 DictionaryValue definition;
361 feature2.Parse(&definition); 362 feature2.Parse(&definition);
362 EXPECT_TRUE(feature2.Equals(feature)); 363 EXPECT_TRUE(feature2.Equals(feature));
363 364
364 ListValue* whitelist = new ListValue(); 365 ListValue* whitelist = new ListValue();
365 ListValue* extension_types = new ListValue(); 366 ListValue* extension_types = new ListValue();
366 ListValue* contexts = new ListValue(); 367 ListValue* contexts = new ListValue();
367 whitelist->Append(Value::CreateStringValue("bar")); 368 whitelist->Append(Value::CreateStringValue("bar"));
(...skipping 12 matching lines...) Expand all
380 EXPECT_EQ(1u, feature2.extension_types()->size()); 381 EXPECT_EQ(1u, feature2.extension_types()->size());
381 EXPECT_EQ(1u, feature2.contexts()->size()); 382 EXPECT_EQ(1u, feature2.contexts()->size());
382 EXPECT_EQ(1u, feature2.whitelist()->count("bar")); 383 EXPECT_EQ(1u, feature2.whitelist()->count("bar"));
383 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION)); 384 EXPECT_EQ(1u, feature2.extension_types()->count(Extension::TYPE_EXTENSION));
384 EXPECT_EQ(1u, 385 EXPECT_EQ(1u,
385 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT)); 386 feature2.contexts()->count(Feature::UNBLESSED_EXTENSION_CONTEXT));
386 EXPECT_EQ(2, feature2.min_manifest_version()); 387 EXPECT_EQ(2, feature2.min_manifest_version());
387 EXPECT_EQ(3, feature2.max_manifest_version()); 388 EXPECT_EQ(3, feature2.max_manifest_version());
388 } 389 }
389 390
390 TEST_F(ExtensionFeatureTest, Equals) { 391 TEST_F(ExtensionSimpleFeatureTest, Equals) {
391 Feature feature; 392 SimpleFeature feature;
392 feature.whitelist()->insert("foo"); 393 feature.whitelist()->insert("foo");
393 feature.extension_types()->insert(Extension::TYPE_THEME); 394 feature.extension_types()->insert(Extension::TYPE_THEME);
394 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT); 395 feature.contexts()->insert(Feature::UNBLESSED_EXTENSION_CONTEXT);
395 feature.set_location(Feature::COMPONENT_LOCATION); 396 feature.set_location(Feature::COMPONENT_LOCATION);
396 feature.set_platform(Feature::CHROMEOS_PLATFORM); 397 feature.set_platform(Feature::CHROMEOS_PLATFORM);
397 feature.set_min_manifest_version(18); 398 feature.set_min_manifest_version(18);
398 feature.set_max_manifest_version(25); 399 feature.set_max_manifest_version(25);
399 400
400 Feature feature2(feature); 401 SimpleFeature feature2(feature);
401 EXPECT_TRUE(feature2.Equals(feature)); 402 EXPECT_TRUE(feature2.Equals(feature));
402 403
403 feature2.whitelist()->clear(); 404 feature2.whitelist()->clear();
404 EXPECT_FALSE(feature2.Equals(feature)); 405 EXPECT_FALSE(feature2.Equals(feature));
405 406
406 feature2 = feature; 407 feature2 = feature;
407 feature2.extension_types()->clear(); 408 feature2.extension_types()->clear();
408 EXPECT_FALSE(feature2.Equals(feature)); 409 EXPECT_FALSE(feature2.Equals(feature));
409 410
410 feature2 = feature; 411 feature2 = feature;
(...skipping 14 matching lines...) Expand all
425 426
426 feature2 = feature; 427 feature2 = feature;
427 feature2.set_max_manifest_version(0); 428 feature2.set_max_manifest_version(0);
428 EXPECT_FALSE(feature2.Equals(feature)); 429 EXPECT_FALSE(feature2.Equals(feature));
429 } 430 }
430 431
431 Feature::AvailabilityResult IsAvailableInChannel( 432 Feature::AvailabilityResult IsAvailableInChannel(
432 const std::string& channel, VersionInfo::Channel channel_for_testing) { 433 const std::string& channel, VersionInfo::Channel channel_for_testing) {
433 Feature::ScopedCurrentChannel current_channel(channel_for_testing); 434 Feature::ScopedCurrentChannel current_channel(channel_for_testing);
434 435
435 Feature feature; 436 SimpleFeature feature;
436 if (!channel.empty()) { 437 if (!channel.empty()) {
437 DictionaryValue feature_value; 438 DictionaryValue feature_value;
438 feature_value.SetString("channel", channel); 439 feature_value.SetString("channel", channel);
439 feature.Parse(&feature_value); 440 feature.Parse(&feature_value);
440 } 441 }
441 442
442 return feature.IsAvailableToManifest( 443 return feature.IsAvailableToManifest(
443 "random-extension", 444 "random-extension",
444 Extension::TYPE_UNKNOWN, 445 Extension::TYPE_UNKNOWN,
445 Feature::UNSPECIFIED_LOCATION, 446 Feature::UNSPECIFIED_LOCATION,
446 -1).result(); 447 -1,
448 Feature::GetCurrentPlatform()).result();
447 } 449 }
448 450
449 TEST_F(ExtensionFeatureTest, SupportedChannel) { 451 TEST_F(ExtensionSimpleFeatureTest, SupportedChannel) {
450 // stable supported. 452 // stable supported.
451 EXPECT_EQ(Feature::IS_AVAILABLE, 453 EXPECT_EQ(Feature::IS_AVAILABLE,
452 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN)); 454 IsAvailableInChannel("stable", VersionInfo::CHANNEL_UNKNOWN));
453 EXPECT_EQ(Feature::IS_AVAILABLE, 455 EXPECT_EQ(Feature::IS_AVAILABLE,
454 IsAvailableInChannel("stable", VersionInfo::CHANNEL_CANARY)); 456 IsAvailableInChannel("stable", VersionInfo::CHANNEL_CANARY));
455 EXPECT_EQ(Feature::IS_AVAILABLE, 457 EXPECT_EQ(Feature::IS_AVAILABLE,
456 IsAvailableInChannel("stable", VersionInfo::CHANNEL_DEV)); 458 IsAvailableInChannel("stable", VersionInfo::CHANNEL_DEV));
457 EXPECT_EQ(Feature::IS_AVAILABLE, 459 EXPECT_EQ(Feature::IS_AVAILABLE,
458 IsAvailableInChannel("stable", VersionInfo::CHANNEL_BETA)); 460 IsAvailableInChannel("stable", VersionInfo::CHANNEL_BETA));
459 EXPECT_EQ(Feature::IS_AVAILABLE, 461 EXPECT_EQ(Feature::IS_AVAILABLE,
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); 516 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY));
515 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, 517 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
516 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); 518 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV));
517 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, 519 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
518 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); 520 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA));
519 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, 521 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL,
520 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); 522 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE));
521 } 523 }
522 524
523 } // namespace 525 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698