| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/common/features/simple_feature.h" | 5 #include "extensions/common/features/simple_feature.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 test.manifest_version, | 110 test.manifest_version, |
| 111 test.platform).result()); | 111 test.platform).result()); |
| 112 } | 112 } |
| 113 } | 113 } |
| 114 | 114 |
| 115 TEST_F(SimpleFeatureTest, Whitelist) { | 115 TEST_F(SimpleFeatureTest, Whitelist) { |
| 116 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); | 116 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
| 117 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); | 117 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); |
| 118 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); | 118 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); |
| 119 SimpleFeature feature; | 119 SimpleFeature feature; |
| 120 feature.whitelist()->push_back(kIdFoo); | 120 feature.whitelist_.push_back(kIdFoo); |
| 121 feature.whitelist()->push_back(kIdBar); | 121 feature.whitelist_.push_back(kIdBar); |
| 122 | 122 |
| 123 EXPECT_EQ( | 123 EXPECT_EQ( |
| 124 Feature::IS_AVAILABLE, | 124 Feature::IS_AVAILABLE, |
| 125 feature.IsAvailableToManifest(kIdFoo, | 125 feature.IsAvailableToManifest(kIdFoo, |
| 126 Manifest::TYPE_UNKNOWN, | 126 Manifest::TYPE_UNKNOWN, |
| 127 Manifest::INVALID_LOCATION, | 127 Manifest::INVALID_LOCATION, |
| 128 -1, | 128 -1, |
| 129 Feature::UNSPECIFIED_PLATFORM).result()); | 129 Feature::UNSPECIFIED_PLATFORM).result()); |
| 130 EXPECT_EQ( | 130 EXPECT_EQ( |
| 131 Feature::IS_AVAILABLE, | 131 Feature::IS_AVAILABLE, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 143 -1, | 143 -1, |
| 144 Feature::UNSPECIFIED_PLATFORM).result()); | 144 Feature::UNSPECIFIED_PLATFORM).result()); |
| 145 EXPECT_EQ( | 145 EXPECT_EQ( |
| 146 Feature::NOT_FOUND_IN_WHITELIST, | 146 Feature::NOT_FOUND_IN_WHITELIST, |
| 147 feature.IsAvailableToManifest(std::string(), | 147 feature.IsAvailableToManifest(std::string(), |
| 148 Manifest::TYPE_UNKNOWN, | 148 Manifest::TYPE_UNKNOWN, |
| 149 Manifest::INVALID_LOCATION, | 149 Manifest::INVALID_LOCATION, |
| 150 -1, | 150 -1, |
| 151 Feature::UNSPECIFIED_PLATFORM).result()); | 151 Feature::UNSPECIFIED_PLATFORM).result()); |
| 152 | 152 |
| 153 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); | 153 feature.extension_types_.push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 154 EXPECT_EQ( | 154 EXPECT_EQ( |
| 155 Feature::NOT_FOUND_IN_WHITELIST, | 155 Feature::NOT_FOUND_IN_WHITELIST, |
| 156 feature.IsAvailableToManifest(kIdBaz, | 156 feature.IsAvailableToManifest(kIdBaz, |
| 157 Manifest::TYPE_LEGACY_PACKAGED_APP, | 157 Manifest::TYPE_LEGACY_PACKAGED_APP, |
| 158 Manifest::INVALID_LOCATION, | 158 Manifest::INVALID_LOCATION, |
| 159 -1, | 159 -1, |
| 160 Feature::UNSPECIFIED_PLATFORM).result()); | 160 Feature::UNSPECIFIED_PLATFORM).result()); |
| 161 } | 161 } |
| 162 | 162 |
| 163 TEST_F(SimpleFeatureTest, HashedIdWhitelist) { | 163 TEST_F(SimpleFeatureTest, HashedIdWhitelist) { |
| 164 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | | 164 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | |
| 165 // sha1sum | tr '[:lower:]' '[:upper:]' | 165 // sha1sum | tr '[:lower:]' '[:upper:]' |
| 166 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); | 166 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
| 167 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); | 167 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); |
| 168 SimpleFeature feature; | 168 SimpleFeature feature; |
| 169 | 169 |
| 170 feature.whitelist()->push_back(kIdFooHashed); | 170 feature.whitelist_.push_back(kIdFooHashed); |
| 171 | 171 |
| 172 EXPECT_EQ( | 172 EXPECT_EQ( |
| 173 Feature::IS_AVAILABLE, | 173 Feature::IS_AVAILABLE, |
| 174 feature.IsAvailableToManifest(kIdFoo, | 174 feature.IsAvailableToManifest(kIdFoo, |
| 175 Manifest::TYPE_UNKNOWN, | 175 Manifest::TYPE_UNKNOWN, |
| 176 Manifest::INVALID_LOCATION, | 176 Manifest::INVALID_LOCATION, |
| 177 -1, | 177 -1, |
| 178 Feature::UNSPECIFIED_PLATFORM).result()); | 178 Feature::UNSPECIFIED_PLATFORM).result()); |
| 179 EXPECT_NE( | 179 EXPECT_NE( |
| 180 Feature::IS_AVAILABLE, | 180 Feature::IS_AVAILABLE, |
| (...skipping 16 matching lines...) Expand all Loading... |
| 197 Manifest::INVALID_LOCATION, | 197 Manifest::INVALID_LOCATION, |
| 198 -1, | 198 -1, |
| 199 Feature::UNSPECIFIED_PLATFORM).result()); | 199 Feature::UNSPECIFIED_PLATFORM).result()); |
| 200 } | 200 } |
| 201 | 201 |
| 202 TEST_F(SimpleFeatureTest, Blacklist) { | 202 TEST_F(SimpleFeatureTest, Blacklist) { |
| 203 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); | 203 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
| 204 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); | 204 const std::string kIdBar("barabbbbccccddddeeeeffffgggghhhh"); |
| 205 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); | 205 const std::string kIdBaz("bazabbbbccccddddeeeeffffgggghhhh"); |
| 206 SimpleFeature feature; | 206 SimpleFeature feature; |
| 207 feature.blacklist()->push_back(kIdFoo); | 207 feature.blacklist_.push_back(kIdFoo); |
| 208 feature.blacklist()->push_back(kIdBar); | 208 feature.blacklist_.push_back(kIdBar); |
| 209 | 209 |
| 210 EXPECT_EQ( | 210 EXPECT_EQ( |
| 211 Feature::FOUND_IN_BLACKLIST, | 211 Feature::FOUND_IN_BLACKLIST, |
| 212 feature.IsAvailableToManifest(kIdFoo, | 212 feature.IsAvailableToManifest(kIdFoo, |
| 213 Manifest::TYPE_UNKNOWN, | 213 Manifest::TYPE_UNKNOWN, |
| 214 Manifest::INVALID_LOCATION, | 214 Manifest::INVALID_LOCATION, |
| 215 -1, | 215 -1, |
| 216 Feature::UNSPECIFIED_PLATFORM).result()); | 216 Feature::UNSPECIFIED_PLATFORM).result()); |
| 217 EXPECT_EQ( | 217 EXPECT_EQ( |
| 218 Feature::FOUND_IN_BLACKLIST, | 218 Feature::FOUND_IN_BLACKLIST, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 238 Feature::UNSPECIFIED_PLATFORM).result()); | 238 Feature::UNSPECIFIED_PLATFORM).result()); |
| 239 } | 239 } |
| 240 | 240 |
| 241 TEST_F(SimpleFeatureTest, HashedIdBlacklist) { | 241 TEST_F(SimpleFeatureTest, HashedIdBlacklist) { |
| 242 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | | 242 // echo -n "fooabbbbccccddddeeeeffffgggghhhh" | |
| 243 // sha1sum | tr '[:lower:]' '[:upper:]' | 243 // sha1sum | tr '[:lower:]' '[:upper:]' |
| 244 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); | 244 const std::string kIdFoo("fooabbbbccccddddeeeeffffgggghhhh"); |
| 245 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); | 245 const std::string kIdFooHashed("55BC7228A0D502A2A48C9BB16B07062A01E62897"); |
| 246 SimpleFeature feature; | 246 SimpleFeature feature; |
| 247 | 247 |
| 248 feature.blacklist()->push_back(kIdFooHashed); | 248 feature.blacklist_.push_back(kIdFooHashed); |
| 249 | 249 |
| 250 EXPECT_EQ( | 250 EXPECT_EQ( |
| 251 Feature::FOUND_IN_BLACKLIST, | 251 Feature::FOUND_IN_BLACKLIST, |
| 252 feature.IsAvailableToManifest(kIdFoo, | 252 feature.IsAvailableToManifest(kIdFoo, |
| 253 Manifest::TYPE_UNKNOWN, | 253 Manifest::TYPE_UNKNOWN, |
| 254 Manifest::INVALID_LOCATION, | 254 Manifest::INVALID_LOCATION, |
| 255 -1, | 255 -1, |
| 256 Feature::UNSPECIFIED_PLATFORM).result()); | 256 Feature::UNSPECIFIED_PLATFORM).result()); |
| 257 EXPECT_NE( | 257 EXPECT_NE( |
| 258 Feature::FOUND_IN_BLACKLIST, | 258 Feature::FOUND_IN_BLACKLIST, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 272 Feature::IS_AVAILABLE, | 272 Feature::IS_AVAILABLE, |
| 273 feature.IsAvailableToManifest("tooshortforanextensionid", | 273 feature.IsAvailableToManifest("tooshortforanextensionid", |
| 274 Manifest::TYPE_UNKNOWN, | 274 Manifest::TYPE_UNKNOWN, |
| 275 Manifest::INVALID_LOCATION, | 275 Manifest::INVALID_LOCATION, |
| 276 -1, | 276 -1, |
| 277 Feature::UNSPECIFIED_PLATFORM).result()); | 277 Feature::UNSPECIFIED_PLATFORM).result()); |
| 278 } | 278 } |
| 279 | 279 |
| 280 TEST_F(SimpleFeatureTest, PackageType) { | 280 TEST_F(SimpleFeatureTest, PackageType) { |
| 281 SimpleFeature feature; | 281 SimpleFeature feature; |
| 282 feature.extension_types()->push_back(Manifest::TYPE_EXTENSION); | 282 feature.extension_types_.push_back(Manifest::TYPE_EXTENSION); |
| 283 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); | 283 feature.extension_types_.push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 284 | 284 |
| 285 EXPECT_EQ( | 285 EXPECT_EQ( |
| 286 Feature::IS_AVAILABLE, | 286 Feature::IS_AVAILABLE, |
| 287 feature.IsAvailableToManifest(std::string(), | 287 feature.IsAvailableToManifest(std::string(), |
| 288 Manifest::TYPE_EXTENSION, | 288 Manifest::TYPE_EXTENSION, |
| 289 Manifest::INVALID_LOCATION, | 289 Manifest::INVALID_LOCATION, |
| 290 -1, | 290 -1, |
| 291 Feature::UNSPECIFIED_PLATFORM).result()); | 291 Feature::UNSPECIFIED_PLATFORM).result()); |
| 292 EXPECT_EQ( | 292 EXPECT_EQ( |
| 293 Feature::IS_AVAILABLE, | 293 Feature::IS_AVAILABLE, |
| (...skipping 15 matching lines...) Expand all Loading... |
| 309 feature.IsAvailableToManifest(std::string(), | 309 feature.IsAvailableToManifest(std::string(), |
| 310 Manifest::TYPE_THEME, | 310 Manifest::TYPE_THEME, |
| 311 Manifest::INVALID_LOCATION, | 311 Manifest::INVALID_LOCATION, |
| 312 -1, | 312 -1, |
| 313 Feature::UNSPECIFIED_PLATFORM).result()); | 313 Feature::UNSPECIFIED_PLATFORM).result()); |
| 314 } | 314 } |
| 315 | 315 |
| 316 TEST_F(SimpleFeatureTest, Context) { | 316 TEST_F(SimpleFeatureTest, Context) { |
| 317 SimpleFeature feature; | 317 SimpleFeature feature; |
| 318 feature.set_name("somefeature"); | 318 feature.set_name("somefeature"); |
| 319 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT); | 319 feature.contexts_.push_back(Feature::BLESSED_EXTENSION_CONTEXT); |
| 320 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); | 320 feature.extension_types_.push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 321 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM); | 321 feature.platforms_.push_back(Feature::CHROMEOS_PLATFORM); |
| 322 feature.set_min_manifest_version(21); | 322 feature.set_min_manifest_version(21); |
| 323 feature.set_max_manifest_version(25); | 323 feature.set_max_manifest_version(25); |
| 324 | 324 |
| 325 base::DictionaryValue manifest; | 325 base::DictionaryValue manifest; |
| 326 manifest.SetString("name", "test"); | 326 manifest.SetString("name", "test"); |
| 327 manifest.SetString("version", "1"); | 327 manifest.SetString("version", "1"); |
| 328 manifest.SetInteger("manifest_version", 21); | 328 manifest.SetInteger("manifest_version", 21); |
| 329 manifest.SetString("app.launch.local_path", "foo.html"); | 329 manifest.SetString("app.launch.local_path", "foo.html"); |
| 330 | 330 |
| 331 std::string error; | 331 std::string error; |
| 332 scoped_refptr<const Extension> extension(Extension::Create( | 332 scoped_refptr<const Extension> extension(Extension::Create( |
| 333 base::FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS, | 333 base::FilePath(), Manifest::INTERNAL, manifest, Extension::NO_FLAGS, |
| 334 &error)); | 334 &error)); |
| 335 EXPECT_EQ("", error); | 335 EXPECT_EQ("", error); |
| 336 ASSERT_TRUE(extension.get()); | 336 ASSERT_TRUE(extension.get()); |
| 337 | 337 |
| 338 feature.whitelist()->push_back("monkey"); | 338 feature.whitelist_.push_back("monkey"); |
| 339 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( | 339 EXPECT_EQ(Feature::NOT_FOUND_IN_WHITELIST, feature.IsAvailableToContext( |
| 340 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 340 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 341 Feature::CHROMEOS_PLATFORM).result()); | 341 Feature::CHROMEOS_PLATFORM).result()); |
| 342 feature.whitelist()->clear(); | 342 feature.whitelist_.clear(); |
| 343 | 343 |
| 344 feature.extension_types()->clear(); | 344 feature.extension_types_.clear(); |
| 345 feature.extension_types()->push_back(Manifest::TYPE_THEME); | 345 feature.extension_types_.push_back(Manifest::TYPE_THEME); |
| 346 { | 346 { |
| 347 Feature::Availability availability = feature.IsAvailableToContext( | 347 Feature::Availability availability = feature.IsAvailableToContext( |
| 348 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 348 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 349 Feature::CHROMEOS_PLATFORM); | 349 Feature::CHROMEOS_PLATFORM); |
| 350 EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); | 350 EXPECT_EQ(Feature::INVALID_TYPE, availability.result()); |
| 351 EXPECT_EQ("'somefeature' is only allowed for themes, " | 351 EXPECT_EQ("'somefeature' is only allowed for themes, " |
| 352 "but this is a legacy packaged app.", | 352 "but this is a legacy packaged app.", |
| 353 availability.message()); | 353 availability.message()); |
| 354 } | 354 } |
| 355 | 355 |
| 356 feature.extension_types()->clear(); | 356 feature.extension_types_.clear(); |
| 357 feature.extension_types()->push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); | 357 feature.extension_types_.push_back(Manifest::TYPE_LEGACY_PACKAGED_APP); |
| 358 feature.contexts()->clear(); | 358 feature.contexts_.clear(); |
| 359 feature.contexts()->push_back(Feature::UNBLESSED_EXTENSION_CONTEXT); | 359 feature.contexts_.push_back(Feature::UNBLESSED_EXTENSION_CONTEXT); |
| 360 feature.contexts()->push_back(Feature::CONTENT_SCRIPT_CONTEXT); | 360 feature.contexts_.push_back(Feature::CONTENT_SCRIPT_CONTEXT); |
| 361 { | 361 { |
| 362 Feature::Availability availability = feature.IsAvailableToContext( | 362 Feature::Availability availability = feature.IsAvailableToContext( |
| 363 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 363 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 364 Feature::CHROMEOS_PLATFORM); | 364 Feature::CHROMEOS_PLATFORM); |
| 365 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); | 365 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
| 366 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " | 366 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes and " |
| 367 "content scripts, but this is a privileged page", | 367 "content scripts, but this is a privileged page", |
| 368 availability.message()); | 368 availability.message()); |
| 369 } | 369 } |
| 370 | 370 |
| 371 feature.contexts()->push_back(Feature::WEB_PAGE_CONTEXT); | 371 feature.contexts_.push_back(Feature::WEB_PAGE_CONTEXT); |
| 372 { | 372 { |
| 373 Feature::Availability availability = feature.IsAvailableToContext( | 373 Feature::Availability availability = feature.IsAvailableToContext( |
| 374 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 374 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 375 Feature::CHROMEOS_PLATFORM); | 375 Feature::CHROMEOS_PLATFORM); |
| 376 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); | 376 EXPECT_EQ(Feature::INVALID_CONTEXT, availability.result()); |
| 377 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " | 377 EXPECT_EQ("'somefeature' is only allowed to run in extension iframes, " |
| 378 "content scripts, and web pages, but this is a privileged page", | 378 "content scripts, and web pages, but this is a privileged page", |
| 379 availability.message()); | 379 availability.message()); |
| 380 } | 380 } |
| 381 | 381 |
| 382 feature.contexts()->clear(); | 382 feature.contexts_.clear(); |
| 383 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT); | 383 feature.contexts_.push_back(Feature::BLESSED_EXTENSION_CONTEXT); |
| 384 feature.set_location(SimpleFeature::COMPONENT_LOCATION); | 384 feature.set_location(SimpleFeature::COMPONENT_LOCATION); |
| 385 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( | 385 EXPECT_EQ(Feature::INVALID_LOCATION, feature.IsAvailableToContext( |
| 386 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 386 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 387 Feature::CHROMEOS_PLATFORM).result()); | 387 Feature::CHROMEOS_PLATFORM).result()); |
| 388 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION); | 388 feature.set_location(SimpleFeature::UNSPECIFIED_LOCATION); |
| 389 | 389 |
| 390 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( | 390 EXPECT_EQ(Feature::INVALID_PLATFORM, feature.IsAvailableToContext( |
| 391 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, | 391 extension.get(), Feature::BLESSED_EXTENSION_CONTEXT, |
| 392 Feature::UNSPECIFIED_PLATFORM).result()); | 392 Feature::UNSPECIFIED_PLATFORM).result()); |
| 393 | 393 |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 446 Manifest::EXTERNAL_PREF_DOWNLOAD)); | 446 Manifest::EXTERNAL_PREF_DOWNLOAD)); |
| 447 | 447 |
| 448 // External component extensions can access the "external_component" | 448 // External component extensions can access the "external_component" |
| 449 // location. | 449 // location. |
| 450 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION, | 450 EXPECT_TRUE(LocationIsAvailable(SimpleFeature::EXTERNAL_COMPONENT_LOCATION, |
| 451 Manifest::EXTERNAL_COMPONENT)); | 451 Manifest::EXTERNAL_COMPONENT)); |
| 452 } | 452 } |
| 453 | 453 |
| 454 TEST_F(SimpleFeatureTest, Platform) { | 454 TEST_F(SimpleFeatureTest, Platform) { |
| 455 SimpleFeature feature; | 455 SimpleFeature feature; |
| 456 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM); | 456 feature.platforms_.push_back(Feature::CHROMEOS_PLATFORM); |
| 457 EXPECT_EQ(Feature::IS_AVAILABLE, | 457 EXPECT_EQ(Feature::IS_AVAILABLE, |
| 458 feature.IsAvailableToManifest(std::string(), | 458 feature.IsAvailableToManifest(std::string(), |
| 459 Manifest::TYPE_UNKNOWN, | 459 Manifest::TYPE_UNKNOWN, |
| 460 Manifest::INVALID_LOCATION, | 460 Manifest::INVALID_LOCATION, |
| 461 -1, | 461 -1, |
| 462 Feature::CHROMEOS_PLATFORM).result()); | 462 Feature::CHROMEOS_PLATFORM).result()); |
| 463 EXPECT_EQ( | 463 EXPECT_EQ( |
| 464 Feature::INVALID_PLATFORM, | 464 Feature::INVALID_PLATFORM, |
| 465 feature.IsAvailableToManifest(std::string(), | 465 feature.IsAvailableToManifest(std::string(), |
| 466 Manifest::TYPE_UNKNOWN, | 466 Manifest::TYPE_UNKNOWN, |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 Manifest::TYPE_UNKNOWN, | 525 Manifest::TYPE_UNKNOWN, |
| 526 Manifest::INVALID_LOCATION, | 526 Manifest::INVALID_LOCATION, |
| 527 7, | 527 7, |
| 528 Feature::UNSPECIFIED_PLATFORM).result()); | 528 Feature::UNSPECIFIED_PLATFORM).result()); |
| 529 } | 529 } |
| 530 | 530 |
| 531 TEST_F(SimpleFeatureTest, ParseNull) { | 531 TEST_F(SimpleFeatureTest, ParseNull) { |
| 532 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 532 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 533 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 533 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 534 feature->Parse(value.get()); | 534 feature->Parse(value.get()); |
| 535 EXPECT_TRUE(feature->whitelist()->empty()); | 535 EXPECT_TRUE(feature->whitelist().empty()); |
| 536 EXPECT_TRUE(feature->extension_types()->empty()); | 536 EXPECT_TRUE(feature->extension_types().empty()); |
| 537 EXPECT_TRUE(feature->contexts()->empty()); | 537 EXPECT_TRUE(feature->contexts().empty()); |
| 538 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); | 538 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); |
| 539 EXPECT_TRUE(feature->platforms()->empty()); | 539 EXPECT_TRUE(feature->platforms().empty()); |
| 540 EXPECT_EQ(0, feature->min_manifest_version()); | 540 EXPECT_EQ(0, feature->min_manifest_version()); |
| 541 EXPECT_EQ(0, feature->max_manifest_version()); | 541 EXPECT_EQ(0, feature->max_manifest_version()); |
| 542 } | 542 } |
| 543 | 543 |
| 544 TEST_F(SimpleFeatureTest, ParseWhitelist) { | 544 TEST_F(SimpleFeatureTest, ParseWhitelist) { |
| 545 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 545 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 546 base::ListValue* whitelist = new base::ListValue(); | 546 base::ListValue* whitelist = new base::ListValue(); |
| 547 whitelist->AppendString("foo"); | 547 whitelist->AppendString("foo"); |
| 548 whitelist->AppendString("bar"); | 548 whitelist->AppendString("bar"); |
| 549 value->Set("whitelist", whitelist); | 549 value->Set("whitelist", whitelist); |
| 550 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 550 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 551 feature->Parse(value.get()); | 551 feature->Parse(value.get()); |
| 552 EXPECT_EQ(2u, feature->whitelist()->size()); | 552 EXPECT_EQ(2u, feature->whitelist().size()); |
| 553 EXPECT_TRUE(STLCount(*(feature->whitelist()), "foo")); | 553 EXPECT_TRUE(STLCount(*(feature->whitelist()), "foo")); |
| 554 EXPECT_TRUE(STLCount(*(feature->whitelist()), "bar")); | 554 EXPECT_TRUE(STLCount(*(feature->whitelist()), "bar")); |
| 555 } | 555 } |
| 556 | 556 |
| 557 TEST_F(SimpleFeatureTest, ParsePackageTypes) { | 557 TEST_F(SimpleFeatureTest, ParsePackageTypes) { |
| 558 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 558 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 559 base::ListValue* extension_types = new base::ListValue(); | 559 base::ListValue* extension_types = new base::ListValue(); |
| 560 extension_types->AppendString("extension"); | 560 extension_types->AppendString("extension"); |
| 561 extension_types->AppendString("theme"); | 561 extension_types->AppendString("theme"); |
| 562 extension_types->AppendString("legacy_packaged_app"); | 562 extension_types->AppendString("legacy_packaged_app"); |
| 563 extension_types->AppendString("hosted_app"); | 563 extension_types->AppendString("hosted_app"); |
| 564 extension_types->AppendString("platform_app"); | 564 extension_types->AppendString("platform_app"); |
| 565 extension_types->AppendString("shared_module"); | 565 extension_types->AppendString("shared_module"); |
| 566 value->Set("extension_types", extension_types); | 566 value->Set("extension_types", extension_types); |
| 567 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 567 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 568 feature->Parse(value.get()); | 568 feature->Parse(value.get()); |
| 569 EXPECT_EQ(6u, feature->extension_types()->size()); | 569 EXPECT_EQ(6u, feature->extension_types().size()); |
| 570 EXPECT_TRUE( | 570 EXPECT_TRUE( |
| 571 STLCount(*(feature->extension_types()), Manifest::TYPE_EXTENSION)); | 571 STLCount(*(feature->extension_types()), Manifest::TYPE_EXTENSION)); |
| 572 EXPECT_TRUE( | 572 EXPECT_TRUE( |
| 573 STLCount(*(feature->extension_types()), Manifest::TYPE_THEME)); | 573 STLCount(*(feature->extension_types()), Manifest::TYPE_THEME)); |
| 574 EXPECT_TRUE( | 574 EXPECT_TRUE( |
| 575 STLCount( | 575 STLCount( |
| 576 *(feature->extension_types()), Manifest::TYPE_LEGACY_PACKAGED_APP)); | 576 *(feature->extension_types()), Manifest::TYPE_LEGACY_PACKAGED_APP)); |
| 577 EXPECT_TRUE( | 577 EXPECT_TRUE( |
| 578 STLCount(*(feature->extension_types()), Manifest::TYPE_HOSTED_APP)); | 578 STLCount(*(feature->extension_types()), Manifest::TYPE_HOSTED_APP)); |
| 579 EXPECT_TRUE( | 579 EXPECT_TRUE( |
| (...skipping 13 matching lines...) Expand all Loading... |
| 593 contexts->AppendString("blessed_extension"); | 593 contexts->AppendString("blessed_extension"); |
| 594 contexts->AppendString("unblessed_extension"); | 594 contexts->AppendString("unblessed_extension"); |
| 595 contexts->AppendString("content_script"); | 595 contexts->AppendString("content_script"); |
| 596 contexts->AppendString("web_page"); | 596 contexts->AppendString("web_page"); |
| 597 contexts->AppendString("blessed_web_page"); | 597 contexts->AppendString("blessed_web_page"); |
| 598 contexts->AppendString("webui"); | 598 contexts->AppendString("webui"); |
| 599 contexts->AppendString("extension_service_worker"); | 599 contexts->AppendString("extension_service_worker"); |
| 600 value->Set("contexts", contexts); | 600 value->Set("contexts", contexts); |
| 601 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 601 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 602 feature->Parse(value.get()); | 602 feature->Parse(value.get()); |
| 603 EXPECT_EQ(7u, feature->contexts()->size()); | 603 EXPECT_EQ(7u, feature->contexts().size()); |
| 604 EXPECT_TRUE( | 604 EXPECT_TRUE( |
| 605 STLCount(*(feature->contexts()), Feature::BLESSED_EXTENSION_CONTEXT)); | 605 STLCount(*(feature->contexts()), Feature::BLESSED_EXTENSION_CONTEXT)); |
| 606 EXPECT_TRUE( | 606 EXPECT_TRUE( |
| 607 STLCount(*(feature->contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT)); | 607 STLCount(*(feature->contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT)); |
| 608 EXPECT_TRUE( | 608 EXPECT_TRUE( |
| 609 STLCount(*(feature->contexts()), Feature::CONTENT_SCRIPT_CONTEXT)); | 609 STLCount(*(feature->contexts()), Feature::CONTENT_SCRIPT_CONTEXT)); |
| 610 EXPECT_TRUE( | 610 EXPECT_TRUE( |
| 611 STLCount(*(feature->contexts()), Feature::WEB_PAGE_CONTEXT)); | 611 STLCount(*(feature->contexts()), Feature::WEB_PAGE_CONTEXT)); |
| 612 EXPECT_TRUE( | 612 EXPECT_TRUE( |
| 613 STLCount(*(feature->contexts()), Feature::BLESSED_WEB_PAGE_CONTEXT)); | 613 STLCount(*(feature->contexts()), Feature::BLESSED_WEB_PAGE_CONTEXT)); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 625 feature->Parse(value.get()); | 625 feature->Parse(value.get()); |
| 626 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location()); | 626 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature->location()); |
| 627 } | 627 } |
| 628 | 628 |
| 629 TEST_F(SimpleFeatureTest, ParsePlatforms) { | 629 TEST_F(SimpleFeatureTest, ParsePlatforms) { |
| 630 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 630 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 631 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 631 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 632 base::ListValue* platforms = new base::ListValue(); | 632 base::ListValue* platforms = new base::ListValue(); |
| 633 value->Set("platforms", platforms); | 633 value->Set("platforms", platforms); |
| 634 feature->Parse(value.get()); | 634 feature->Parse(value.get()); |
| 635 EXPECT_TRUE(feature->platforms()->empty()); | 635 EXPECT_TRUE(feature->platforms().empty()); |
| 636 | 636 |
| 637 platforms->AppendString("chromeos"); | 637 platforms->AppendString("chromeos"); |
| 638 feature->Parse(value.get()); | 638 feature->Parse(value.get()); |
| 639 EXPECT_FALSE(feature->platforms()->empty()); | 639 EXPECT_FALSE(feature->platforms().empty()); |
| 640 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, *feature->platforms()->begin()); | 640 EXPECT_EQ(Feature::CHROMEOS_PLATFORM, *feature->platforms()->begin()); |
| 641 | 641 |
| 642 platforms->Clear(); | 642 platforms->Clear(); |
| 643 platforms->AppendString("win"); | 643 platforms->AppendString("win"); |
| 644 feature->Parse(value.get()); | 644 feature->Parse(value.get()); |
| 645 EXPECT_FALSE(feature->platforms()->empty()); | 645 EXPECT_FALSE(feature->platforms().empty()); |
| 646 EXPECT_EQ(Feature::WIN_PLATFORM, *feature->platforms()->begin()); | 646 EXPECT_EQ(Feature::WIN_PLATFORM, *feature->platforms()->begin()); |
| 647 | 647 |
| 648 platforms->Clear(); | 648 platforms->Clear(); |
| 649 platforms->AppendString("win"); | 649 platforms->AppendString("win"); |
| 650 platforms->AppendString("chromeos"); | 650 platforms->AppendString("chromeos"); |
| 651 feature->Parse(value.get()); | 651 feature->Parse(value.get()); |
| 652 std::vector<Feature::Platform> expected_platforms; | 652 std::vector<Feature::Platform> expected_platforms; |
| 653 expected_platforms.push_back(Feature::CHROMEOS_PLATFORM); | 653 expected_platforms.push_back(Feature::CHROMEOS_PLATFORM); |
| 654 expected_platforms.push_back(Feature::WIN_PLATFORM); | 654 expected_platforms.push_back(Feature::WIN_PLATFORM); |
| 655 | 655 |
| 656 EXPECT_FALSE(feature->platforms()->empty()); | 656 EXPECT_FALSE(feature->platforms().empty()); |
| 657 EXPECT_EQ(expected_platforms, *feature->platforms()); | 657 EXPECT_EQ(expected_platforms, *feature->platforms()); |
| 658 } | 658 } |
| 659 | 659 |
| 660 TEST_F(SimpleFeatureTest, ParseManifestVersion) { | 660 TEST_F(SimpleFeatureTest, ParseManifestVersion) { |
| 661 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 661 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
| 662 value->SetInteger("min_manifest_version", 1); | 662 value->SetInteger("min_manifest_version", 1); |
| 663 value->SetInteger("max_manifest_version", 5); | 663 value->SetInteger("max_manifest_version", 5); |
| 664 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); | 664 std::unique_ptr<SimpleFeature> feature(new SimpleFeature()); |
| 665 feature->Parse(value.get()); | 665 feature->Parse(value.get()); |
| 666 EXPECT_EQ(1, feature->min_manifest_version()); | 666 EXPECT_EQ(1, feature->min_manifest_version()); |
| 667 EXPECT_EQ(5, feature->max_manifest_version()); | 667 EXPECT_EQ(5, feature->max_manifest_version()); |
| 668 } | 668 } |
| 669 | 669 |
| 670 TEST_F(SimpleFeatureTest, Inheritance) { | 670 TEST_F(SimpleFeatureTest, Inheritance) { |
| 671 SimpleFeature feature; | 671 SimpleFeature feature; |
| 672 feature.whitelist()->push_back("foo"); | 672 feature.whitelist_.push_back("foo"); |
| 673 feature.extension_types()->push_back(Manifest::TYPE_THEME); | 673 feature.extension_types_.push_back(Manifest::TYPE_THEME); |
| 674 feature.contexts()->push_back(Feature::BLESSED_EXTENSION_CONTEXT); | 674 feature.contexts_.push_back(Feature::BLESSED_EXTENSION_CONTEXT); |
| 675 feature.set_location(SimpleFeature::COMPONENT_LOCATION); | 675 feature.set_location(SimpleFeature::COMPONENT_LOCATION); |
| 676 feature.platforms()->push_back(Feature::CHROMEOS_PLATFORM); | 676 feature.platforms_.push_back(Feature::CHROMEOS_PLATFORM); |
| 677 feature.set_min_manifest_version(1); | 677 feature.set_min_manifest_version(1); |
| 678 feature.set_max_manifest_version(2); | 678 feature.set_max_manifest_version(2); |
| 679 | 679 |
| 680 // Test additive parsing. Parsing an empty dictionary should result in no | 680 // Test additive parsing. Parsing an empty dictionary should result in no |
| 681 // changes to a SimpleFeature. | 681 // changes to a SimpleFeature. |
| 682 base::DictionaryValue definition; | 682 base::DictionaryValue definition; |
| 683 feature.Parse(&definition); | 683 feature.Parse(&definition); |
| 684 EXPECT_EQ(1u, feature.whitelist()->size()); | 684 EXPECT_EQ(1u, feature.whitelist().size()); |
| 685 EXPECT_EQ(1u, feature.extension_types()->size()); | 685 EXPECT_EQ(1u, feature.extension_types().size()); |
| 686 EXPECT_EQ(1u, feature.contexts()->size()); | 686 EXPECT_EQ(1u, feature.contexts().size()); |
| 687 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "foo")); | 687 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "foo")); |
| 688 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location()); | 688 EXPECT_EQ(SimpleFeature::COMPONENT_LOCATION, feature.location()); |
| 689 EXPECT_EQ(1u, feature.platforms()->size()); | 689 EXPECT_EQ(1u, feature.platforms().size()); |
| 690 EXPECT_EQ(1, STLCount(*(feature.platforms()), Feature::CHROMEOS_PLATFORM)); | 690 EXPECT_EQ(1, STLCount(*(feature.platforms()), Feature::CHROMEOS_PLATFORM)); |
| 691 EXPECT_EQ(1, feature.min_manifest_version()); | 691 EXPECT_EQ(1, feature.min_manifest_version()); |
| 692 EXPECT_EQ(2, feature.max_manifest_version()); | 692 EXPECT_EQ(2, feature.max_manifest_version()); |
| 693 | 693 |
| 694 base::ListValue* whitelist = new base::ListValue(); | 694 base::ListValue* whitelist = new base::ListValue(); |
| 695 base::ListValue* extension_types = new base::ListValue(); | 695 base::ListValue* extension_types = new base::ListValue(); |
| 696 base::ListValue* contexts = new base::ListValue(); | 696 base::ListValue* contexts = new base::ListValue(); |
| 697 whitelist->AppendString("bar"); | 697 whitelist->AppendString("bar"); |
| 698 extension_types->AppendString("extension"); | 698 extension_types->AppendString("extension"); |
| 699 contexts->AppendString("unblessed_extension"); | 699 contexts->AppendString("unblessed_extension"); |
| 700 definition.Set("whitelist", whitelist); | 700 definition.Set("whitelist", whitelist); |
| 701 definition.Set("extension_types", extension_types); | 701 definition.Set("extension_types", extension_types); |
| 702 definition.Set("contexts", contexts); | 702 definition.Set("contexts", contexts); |
| 703 // Can't test location or platform because we only have one value so far. | 703 // Can't test location or platform because we only have one value so far. |
| 704 definition.Set("min_manifest_version", new base::FundamentalValue(2)); | 704 definition.Set("min_manifest_version", new base::FundamentalValue(2)); |
| 705 definition.Set("max_manifest_version", new base::FundamentalValue(3)); | 705 definition.Set("max_manifest_version", new base::FundamentalValue(3)); |
| 706 | 706 |
| 707 feature.Parse(&definition); | 707 feature.Parse(&definition); |
| 708 EXPECT_EQ(1u, feature.whitelist()->size()); | 708 EXPECT_EQ(1u, feature.whitelist().size()); |
| 709 EXPECT_EQ(1u, feature.extension_types()->size()); | 709 EXPECT_EQ(1u, feature.extension_types().size()); |
| 710 EXPECT_EQ(1u, feature.contexts()->size()); | 710 EXPECT_EQ(1u, feature.contexts().size()); |
| 711 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "bar")); | 711 EXPECT_EQ(1, STLCount(*(feature.whitelist()), "bar")); |
| 712 EXPECT_EQ(1, | 712 EXPECT_EQ(1, |
| 713 STLCount(*(feature.extension_types()), Manifest::TYPE_EXTENSION)); | 713 STLCount(*(feature.extension_types()), Manifest::TYPE_EXTENSION)); |
| 714 EXPECT_EQ(1, | 714 EXPECT_EQ(1, |
| 715 STLCount( | 715 STLCount( |
| 716 *(feature.contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT)); | 716 *(feature.contexts()), Feature::UNBLESSED_EXTENSION_CONTEXT)); |
| 717 EXPECT_EQ(2, feature.min_manifest_version()); | 717 EXPECT_EQ(2, feature.min_manifest_version()); |
| 718 EXPECT_EQ(3, feature.max_manifest_version()); | 718 EXPECT_EQ(3, feature.max_manifest_version()); |
| 719 } | 719 } |
| 720 | 720 |
| (...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 Feature::IS_AVAILABLE, | 1007 Feature::IS_AVAILABLE, |
| 1008 feature->IsAvailableToManifest("1", | 1008 feature->IsAvailableToManifest("1", |
| 1009 Manifest::TYPE_EXTENSION, | 1009 Manifest::TYPE_EXTENSION, |
| 1010 Manifest::INVALID_LOCATION, | 1010 Manifest::INVALID_LOCATION, |
| 1011 Feature::UNSPECIFIED_PLATFORM, | 1011 Feature::UNSPECIFIED_PLATFORM, |
| 1012 Feature::GetCurrentPlatform()).result()); | 1012 Feature::GetCurrentPlatform()).result()); |
| 1013 } | 1013 } |
| 1014 } | 1014 } |
| 1015 | 1015 |
| 1016 } // namespace extensions | 1016 } // namespace extensions |
| OLD | NEW |