| 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 |