OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |