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/simple_feature.h" | 5 #include "chrome/common/extensions/features/simple_feature.h" |
6 | 6 |
7 #include "chrome/common/extensions/value_builder.h" | 7 #include "chrome/common/extensions/value_builder.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 using chrome::VersionInfo; | 10 using chrome::VersionInfo; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 84 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
85 kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 85 kIdFoo, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
86 Feature::UNSPECIFIED_PLATFORM).result()); | 86 Feature::UNSPECIFIED_PLATFORM).result()); |
87 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 87 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( |
88 kIdBar, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 88 kIdBar, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
89 Feature::UNSPECIFIED_PLATFORM).result()); | 89 Feature::UNSPECIFIED_PLATFORM).result()); |
90 | 90 |
91 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 91 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
92 kIdBaz, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 92 kIdBaz, Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, |
93 Feature::UNSPECIFIED_PLATFORM).result()); | 93 Feature::UNSPECIFIED_PLATFORM).result()); |
94 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 94 EXPECT_EQ( |
95 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 95 Feature::NOT_FOUND_IN_WHITELIST, |
96 Feature::UNSPECIFIED_PLATFORM).result()); | 96 feature.IsAvailableToManifest(std::string(), |
| 97 Manifest::TYPE_UNKNOWN, |
| 98 Feature::UNSPECIFIED_LOCATION, |
| 99 -1, |
| 100 Feature::UNSPECIFIED_PLATFORM).result()); |
97 | 101 |
98 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); | 102 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
99 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( | 103 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToManifest( |
100 kIdBaz, Manifest::TYPE_LEGACY_PACKAGED_APP, | 104 kIdBaz, Manifest::TYPE_LEGACY_PACKAGED_APP, |
101 Feature::UNSPECIFIED_LOCATION, -1, | 105 Feature::UNSPECIFIED_LOCATION, -1, |
102 Feature::UNSPECIFIED_PLATFORM).result()); | 106 Feature::UNSPECIFIED_PLATFORM).result()); |
103 } | 107 } |
104 | 108 |
105 TEST_F(ExtensionSimpleFeatureTest, HashedIdWhitelist) { | 109 TEST_F(ExtensionSimpleFeatureTest, HashedIdWhitelist) { |
106 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | | 110 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | |
(...skipping 19 matching lines...) Expand all Loading... |
126 "tooshortforanextensionid", Manifest::TYPE_UNKNOWN, | 130 "tooshortforanextensionid", Manifest::TYPE_UNKNOWN, |
127 Feature::UNSPECIFIED_LOCATION, -1, | 131 Feature::UNSPECIFIED_LOCATION, -1, |
128 Feature::UNSPECIFIED_PLATFORM).result()); | 132 Feature::UNSPECIFIED_PLATFORM).result()); |
129 } | 133 } |
130 | 134 |
131 TEST_F(ExtensionSimpleFeatureTest, PackageType) { | 135 TEST_F(ExtensionSimpleFeatureTest, PackageType) { |
132 SimpleFeature feature; | 136 SimpleFeature feature; |
133 feature.extension_types()->insert(Manifest::TYPE_EXTENSION); | 137 feature.extension_types()->insert(Manifest::TYPE_EXTENSION); |
134 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); | 138 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
135 | 139 |
136 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 140 EXPECT_EQ( |
137 "", Manifest::TYPE_EXTENSION, Feature::UNSPECIFIED_LOCATION, -1, | 141 Feature::IS_AVAILABLE, |
138 Feature::UNSPECIFIED_PLATFORM).result()); | 142 feature.IsAvailableToManifest(std::string(), |
139 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 143 Manifest::TYPE_EXTENSION, |
140 "", Manifest::TYPE_LEGACY_PACKAGED_APP, Feature::UNSPECIFIED_LOCATION, | 144 Feature::UNSPECIFIED_LOCATION, |
141 -1, Feature::UNSPECIFIED_PLATFORM).result()); | 145 -1, |
| 146 Feature::UNSPECIFIED_PLATFORM).result()); |
| 147 EXPECT_EQ( |
| 148 Feature::IS_AVAILABLE, |
| 149 feature.IsAvailableToManifest(std::string(), |
| 150 Manifest::TYPE_LEGACY_PACKAGED_APP, |
| 151 Feature::UNSPECIFIED_LOCATION, |
| 152 -1, |
| 153 Feature::UNSPECIFIED_PLATFORM).result()); |
142 | 154 |
143 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 155 EXPECT_EQ( |
144 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 156 Feature::INVALID_TYPE, |
145 Feature::UNSPECIFIED_PLATFORM).result()); | 157 feature.IsAvailableToManifest(std::string(), |
146 EXPECT_EQ(Feature::INVALID_TYPE, feature.IsAvailableToManifest( | 158 Manifest::TYPE_UNKNOWN, |
147 "", Manifest::TYPE_THEME, Feature::UNSPECIFIED_LOCATION, -1, | 159 Feature::UNSPECIFIED_LOCATION, |
148 Feature::UNSPECIFIED_PLATFORM).result()); | 160 -1, |
| 161 Feature::UNSPECIFIED_PLATFORM).result()); |
| 162 EXPECT_EQ( |
| 163 Feature::INVALID_TYPE, |
| 164 feature.IsAvailableToManifest(std::string(), |
| 165 Manifest::TYPE_THEME, |
| 166 Feature::UNSPECIFIED_LOCATION, |
| 167 -1, |
| 168 Feature::UNSPECIFIED_PLATFORM).result()); |
149 } | 169 } |
150 | 170 |
151 TEST_F(ExtensionSimpleFeatureTest, Context) { | 171 TEST_F(ExtensionSimpleFeatureTest, Context) { |
152 SimpleFeature feature; | 172 SimpleFeature feature; |
153 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); | 173 feature.GetContexts()->insert(Feature::BLESSED_EXTENSION_CONTEXT); |
154 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); | 174 feature.extension_types()->insert(Manifest::TYPE_LEGACY_PACKAGED_APP); |
155 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 175 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
156 feature.set_min_manifest_version(21); | 176 feature.set_min_manifest_version(21); |
157 feature.set_max_manifest_version(25); | 177 feature.set_max_manifest_version(25); |
158 | 178 |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
213 Feature::CHROMEOS_PLATFORM).result()); | 233 Feature::CHROMEOS_PLATFORM).result()); |
214 feature.set_max_manifest_version(25); | 234 feature.set_max_manifest_version(25); |
215 } | 235 } |
216 | 236 |
217 TEST_F(ExtensionSimpleFeatureTest, Location) { | 237 TEST_F(ExtensionSimpleFeatureTest, Location) { |
218 SimpleFeature feature; | 238 SimpleFeature feature; |
219 | 239 |
220 // If the feature specifies "component" as its location, then only component | 240 // If the feature specifies "component" as its location, then only component |
221 // extensions can access it. | 241 // extensions can access it. |
222 feature.set_location(Feature::COMPONENT_LOCATION); | 242 feature.set_location(Feature::COMPONENT_LOCATION); |
223 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 243 EXPECT_EQ( |
224 "", Manifest::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 244 Feature::IS_AVAILABLE, |
225 Feature::UNSPECIFIED_PLATFORM).result()); | 245 feature.IsAvailableToManifest(std::string(), |
226 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToManifest( | 246 Manifest::TYPE_UNKNOWN, |
227 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 247 Feature::COMPONENT_LOCATION, |
228 Feature::UNSPECIFIED_PLATFORM).result()); | 248 -1, |
| 249 Feature::UNSPECIFIED_PLATFORM).result()); |
| 250 EXPECT_EQ( |
| 251 Feature::INVALID_LOCATION, |
| 252 feature.IsAvailableToManifest(std::string(), |
| 253 Manifest::TYPE_UNKNOWN, |
| 254 Feature::UNSPECIFIED_LOCATION, |
| 255 -1, |
| 256 Feature::UNSPECIFIED_PLATFORM).result()); |
229 | 257 |
230 // But component extensions can access anything else, whatever their location. | 258 // But component extensions can access anything else, whatever their location. |
231 feature.set_location(Feature::UNSPECIFIED_LOCATION); | 259 feature.set_location(Feature::UNSPECIFIED_LOCATION); |
232 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 260 EXPECT_EQ( |
233 "", Manifest::TYPE_UNKNOWN, Feature::COMPONENT_LOCATION, -1, | 261 Feature::IS_AVAILABLE, |
234 Feature::UNSPECIFIED_PLATFORM).result()); | 262 feature.IsAvailableToManifest(std::string(), |
| 263 Manifest::TYPE_UNKNOWN, |
| 264 Feature::COMPONENT_LOCATION, |
| 265 -1, |
| 266 Feature::UNSPECIFIED_PLATFORM).result()); |
235 } | 267 } |
236 | 268 |
237 TEST_F(ExtensionSimpleFeatureTest, Platform) { | 269 TEST_F(ExtensionSimpleFeatureTest, Platform) { |
238 SimpleFeature feature; | 270 SimpleFeature feature; |
239 feature.set_platform(Feature::CHROMEOS_PLATFORM); | 271 feature.set_platform(Feature::CHROMEOS_PLATFORM); |
240 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 272 EXPECT_EQ(Feature::IS_AVAILABLE, |
241 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 273 feature.IsAvailableToManifest(std::string(), |
242 Feature::CHROMEOS_PLATFORM).result()); | 274 Manifest::TYPE_UNKNOWN, |
243 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToManifest( | 275 Feature::UNSPECIFIED_LOCATION, |
244 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, -1, | 276 -1, |
245 Feature::UNSPECIFIED_PLATFORM).result()); | 277 Feature::CHROMEOS_PLATFORM).result()); |
| 278 EXPECT_EQ( |
| 279 Feature::INVALID_PLATFORM, |
| 280 feature.IsAvailableToManifest(std::string(), |
| 281 Manifest::TYPE_UNKNOWN, |
| 282 Feature::UNSPECIFIED_LOCATION, |
| 283 -1, |
| 284 Feature::UNSPECIFIED_PLATFORM).result()); |
246 } | 285 } |
247 | 286 |
248 TEST_F(ExtensionSimpleFeatureTest, Version) { | 287 TEST_F(ExtensionSimpleFeatureTest, Version) { |
249 SimpleFeature feature; | 288 SimpleFeature feature; |
250 feature.set_min_manifest_version(5); | 289 feature.set_min_manifest_version(5); |
251 | 290 |
252 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, | 291 EXPECT_EQ( |
253 feature.IsAvailableToManifest( | 292 Feature::INVALID_MIN_MANIFEST_VERSION, |
254 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 293 feature.IsAvailableToManifest(std::string(), |
255 0, Feature::UNSPECIFIED_PLATFORM).result()); | 294 Manifest::TYPE_UNKNOWN, |
256 EXPECT_EQ(Feature::INVALID_MIN_MANIFEST_VERSION, | 295 Feature::UNSPECIFIED_LOCATION, |
257 feature.IsAvailableToManifest( | 296 0, |
258 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 297 Feature::UNSPECIFIED_PLATFORM).result()); |
259 4, Feature::UNSPECIFIED_PLATFORM).result()); | 298 EXPECT_EQ( |
| 299 Feature::INVALID_MIN_MANIFEST_VERSION, |
| 300 feature.IsAvailableToManifest(std::string(), |
| 301 Manifest::TYPE_UNKNOWN, |
| 302 Feature::UNSPECIFIED_LOCATION, |
| 303 4, |
| 304 Feature::UNSPECIFIED_PLATFORM).result()); |
260 | 305 |
261 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 306 EXPECT_EQ( |
262 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 307 Feature::IS_AVAILABLE, |
263 5, Feature::UNSPECIFIED_PLATFORM).result()); | 308 feature.IsAvailableToManifest(std::string(), |
264 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 309 Manifest::TYPE_UNKNOWN, |
265 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 310 Feature::UNSPECIFIED_LOCATION, |
266 10, Feature::UNSPECIFIED_PLATFORM).result()); | 311 5, |
| 312 Feature::UNSPECIFIED_PLATFORM).result()); |
| 313 EXPECT_EQ( |
| 314 Feature::IS_AVAILABLE, |
| 315 feature.IsAvailableToManifest(std::string(), |
| 316 Manifest::TYPE_UNKNOWN, |
| 317 Feature::UNSPECIFIED_LOCATION, |
| 318 10, |
| 319 Feature::UNSPECIFIED_PLATFORM).result()); |
267 | 320 |
268 feature.set_max_manifest_version(8); | 321 feature.set_max_manifest_version(8); |
269 | 322 |
270 EXPECT_EQ(Feature::INVALID_MAX_MANIFEST_VERSION, | 323 EXPECT_EQ( |
271 feature.IsAvailableToManifest( | 324 Feature::INVALID_MAX_MANIFEST_VERSION, |
272 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 325 feature.IsAvailableToManifest(std::string(), |
273 10, Feature::UNSPECIFIED_PLATFORM).result()); | 326 Manifest::TYPE_UNKNOWN, |
274 EXPECT_EQ(Feature::IS_AVAILABLE, | 327 Feature::UNSPECIFIED_LOCATION, |
275 feature.IsAvailableToManifest( | 328 10, |
276 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 329 Feature::UNSPECIFIED_PLATFORM).result()); |
277 8, Feature::UNSPECIFIED_PLATFORM).result()); | 330 EXPECT_EQ( |
278 EXPECT_EQ(Feature::IS_AVAILABLE, feature.IsAvailableToManifest( | 331 Feature::IS_AVAILABLE, |
279 "", Manifest::TYPE_UNKNOWN, Feature::UNSPECIFIED_LOCATION, | 332 feature.IsAvailableToManifest(std::string(), |
280 7, Feature::UNSPECIFIED_PLATFORM).result()); | 333 Manifest::TYPE_UNKNOWN, |
| 334 Feature::UNSPECIFIED_LOCATION, |
| 335 8, |
| 336 Feature::UNSPECIFIED_PLATFORM).result()); |
| 337 EXPECT_EQ( |
| 338 Feature::IS_AVAILABLE, |
| 339 feature.IsAvailableToManifest(std::string(), |
| 340 Manifest::TYPE_UNKNOWN, |
| 341 Feature::UNSPECIFIED_LOCATION, |
| 342 7, |
| 343 Feature::UNSPECIFIED_PLATFORM).result()); |
281 } | 344 } |
282 | 345 |
283 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { | 346 TEST_F(ExtensionSimpleFeatureTest, ParseNull) { |
284 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 347 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
285 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); | 348 scoped_ptr<SimpleFeature> feature(new SimpleFeature()); |
286 feature->Parse(value.get()); | 349 feature->Parse(value.get()); |
287 EXPECT_TRUE(feature->whitelist()->empty()); | 350 EXPECT_TRUE(feature->whitelist()->empty()); |
288 EXPECT_TRUE(feature->extension_types()->empty()); | 351 EXPECT_TRUE(feature->extension_types()->empty()); |
289 EXPECT_TRUE(feature->GetContexts()->empty()); | 352 EXPECT_TRUE(feature->GetContexts()->empty()); |
290 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); | 353 EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location()); |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
542 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_CANARY)); | 605 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_CANARY)); |
543 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 606 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
544 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_DEV)); | 607 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_DEV)); |
545 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 608 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
546 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_BETA)); | 609 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_BETA)); |
547 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 610 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
548 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE)); | 611 IsAvailableInChannel("trunk", VersionInfo::CHANNEL_STABLE)); |
549 | 612 |
550 // Default supported channel (trunk). | 613 // Default supported channel (trunk). |
551 EXPECT_EQ(Feature::IS_AVAILABLE, | 614 EXPECT_EQ(Feature::IS_AVAILABLE, |
552 IsAvailableInChannel("", VersionInfo::CHANNEL_UNKNOWN)); | 615 IsAvailableInChannel(std::string(), VersionInfo::CHANNEL_UNKNOWN)); |
553 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 616 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
554 IsAvailableInChannel("", VersionInfo::CHANNEL_CANARY)); | 617 IsAvailableInChannel(std::string(), VersionInfo::CHANNEL_CANARY)); |
555 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 618 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
556 IsAvailableInChannel("", VersionInfo::CHANNEL_DEV)); | 619 IsAvailableInChannel(std::string(), VersionInfo::CHANNEL_DEV)); |
557 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 620 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
558 IsAvailableInChannel("", VersionInfo::CHANNEL_BETA)); | 621 IsAvailableInChannel(std::string(), VersionInfo::CHANNEL_BETA)); |
559 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, | 622 EXPECT_EQ(Feature::UNSUPPORTED_CHANNEL, |
560 IsAvailableInChannel("", VersionInfo::CHANNEL_STABLE)); | 623 IsAvailableInChannel(std::string(), VersionInfo::CHANNEL_STABLE)); |
561 } | 624 } |
562 | 625 |
563 } // namespace | 626 } // namespace |
OLD | NEW |