| 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 "extensions/common/extension_api.h" | 5 #include "extensions/common/extension_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 | 309 |
| 310 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 310 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { |
| 311 ExtensionAPI api; | 311 ExtensionAPI api; |
| 312 api.RegisterDependencyProvider("api", &api_feature_provider); | 312 api.RegisterDependencyProvider("api", &api_feature_provider); |
| 313 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); | 313 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); |
| 314 iter.Advance()) { | 314 iter.Advance()) { |
| 315 if (iter.key().find(".") == std::string::npos) | 315 if (iter.key().find(".") == std::string::npos) |
| 316 api.RegisterSchemaResource(iter.key(), 0); | 316 api.RegisterSchemaResource(iter.key(), 0); |
| 317 } | 317 } |
| 318 | 318 |
| 319 Feature* test_feature = |
| 320 api_feature_provider.GetFeature(test_data[i].api_full_name); |
| 321 ASSERT_TRUE(test_feature); |
| 319 EXPECT_EQ(test_data[i].expect_is_available, | 322 EXPECT_EQ(test_data[i].expect_is_available, |
| 320 api.IsAnyFeatureAvailableToContext(test_data[i].api_full_name, | 323 api.IsAnyFeatureAvailableToContext(*test_feature, |
| 321 test_data[i].extension, | 324 test_data[i].extension, |
| 322 test_data[i].context, | 325 test_data[i].context, |
| 323 test_data[i].url)) << i; | 326 test_data[i].url)) |
| 327 << i; |
| 324 } | 328 } |
| 325 } | 329 } |
| 326 | 330 |
| 327 TEST(ExtensionAPITest, LazyGetSchema) { | 331 TEST(ExtensionAPITest, LazyGetSchema) { |
| 328 scoped_ptr<ExtensionAPI> apis(ExtensionAPI::CreateWithDefaultConfiguration()); | 332 scoped_ptr<ExtensionAPI> apis(ExtensionAPI::CreateWithDefaultConfiguration()); |
| 329 | 333 |
| 330 EXPECT_EQ(NULL, apis->GetSchema(std::string())); | 334 EXPECT_EQ(NULL, apis->GetSchema(std::string())); |
| 331 EXPECT_EQ(NULL, apis->GetSchema(std::string())); | 335 EXPECT_EQ(NULL, apis->GetSchema(std::string())); |
| 332 EXPECT_EQ(NULL, apis->GetSchema("experimental")); | 336 EXPECT_EQ(NULL, apis->GetSchema("experimental")); |
| 333 EXPECT_EQ(NULL, apis->GetSchema("experimental")); | 337 EXPECT_EQ(NULL, apis->GetSchema("experimental")); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 { | 387 { |
| 384 std::set<std::string> permissions; | 388 std::set<std::string> permissions; |
| 385 permissions.insert("storage"); | 389 permissions.insert("storage"); |
| 386 permissions.insert("history"); | 390 permissions.insert("history"); |
| 387 extension = CreateExtensionWithPermissions(permissions); | 391 extension = CreateExtensionWithPermissions(permissions); |
| 388 } | 392 } |
| 389 | 393 |
| 390 scoped_ptr<ExtensionAPI> extension_api( | 394 scoped_ptr<ExtensionAPI> extension_api( |
| 391 ExtensionAPI::CreateWithDefaultConfiguration()); | 395 ExtensionAPI::CreateWithDefaultConfiguration()); |
| 392 | 396 |
| 393 // "runtime" has privileged parts that should not be accessed by content | 397 const FeatureProvider& api_features = *FeatureProvider::GetAPIFeatures(); |
| 394 // scripts. | |
| 395 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( | |
| 396 "runtime.getBackgroundPage", | |
| 397 NULL, | |
| 398 Feature::CONTENT_SCRIPT_CONTEXT, | |
| 399 GURL())); | |
| 400 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( | |
| 401 "runtime.sendNativeMessage", | |
| 402 NULL, | |
| 403 Feature::CONTENT_SCRIPT_CONTEXT, | |
| 404 GURL())); | |
| 405 // "runtime" also has unprivileged parts. | |
| 406 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | |
| 407 "runtime.sendMessage", | |
| 408 NULL, | |
| 409 Feature::CONTENT_SCRIPT_CONTEXT, | |
| 410 GURL())); | |
| 411 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | |
| 412 "runtime.id", | |
| 413 NULL, | |
| 414 Feature::CONTENT_SCRIPT_CONTEXT, | |
| 415 GURL())); | |
| 416 | 398 |
| 417 // "storage" is completely unprivileged. | 399 // "storage" is completely unprivileged. |
| 418 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 400 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 419 "storage", | 401 *api_features.GetFeature("storage"), |
| 420 NULL, | 402 NULL, |
| 421 Feature::BLESSED_EXTENSION_CONTEXT, | 403 Feature::BLESSED_EXTENSION_CONTEXT, |
| 422 GURL())); | 404 GURL())); |
| 423 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 405 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 424 "storage", | 406 *api_features.GetFeature("storage"), |
| 425 NULL, | 407 NULL, |
| 426 Feature::UNBLESSED_EXTENSION_CONTEXT, | 408 Feature::UNBLESSED_EXTENSION_CONTEXT, |
| 427 GURL())); | 409 GURL())); |
| 428 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 410 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 429 "storage", | 411 *api_features.GetFeature("storage"), |
| 430 NULL, | 412 NULL, |
| 431 Feature::CONTENT_SCRIPT_CONTEXT, | 413 Feature::CONTENT_SCRIPT_CONTEXT, |
| 432 GURL())); | 414 GURL())); |
| 433 | 415 |
| 434 // "extension" is partially unprivileged. | 416 // "extension" is partially unprivileged. |
| 435 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 417 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 436 "extension", | 418 *api_features.GetFeature("extension"), |
| 437 NULL, | 419 NULL, |
| 438 Feature::BLESSED_EXTENSION_CONTEXT, | 420 Feature::BLESSED_EXTENSION_CONTEXT, |
| 439 GURL())); | 421 GURL())); |
| 440 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 422 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 441 "extension", | 423 *api_features.GetFeature("extension"), |
| 442 NULL, | 424 NULL, |
| 443 Feature::UNBLESSED_EXTENSION_CONTEXT, | 425 Feature::UNBLESSED_EXTENSION_CONTEXT, |
| 444 GURL())); | 426 GURL())); |
| 445 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 427 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 446 "extension", | 428 *api_features.GetFeature("extension"), |
| 429 NULL, |
| 430 Feature::CONTENT_SCRIPT_CONTEXT, |
| 431 GURL())); |
| 432 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 433 *api_features.GetFeature("extension.getURL"), |
| 447 NULL, | 434 NULL, |
| 448 Feature::CONTENT_SCRIPT_CONTEXT, | 435 Feature::CONTENT_SCRIPT_CONTEXT, |
| 449 GURL())); | 436 GURL())); |
| 450 | 437 |
| 451 // "history" is entirely privileged. | 438 // "history" is entirely privileged. |
| 452 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( | 439 EXPECT_TRUE(extension_api->IsAnyFeatureAvailableToContext( |
| 453 "history", | 440 *api_features.GetFeature("history"), |
| 454 NULL, | 441 NULL, |
| 455 Feature::BLESSED_EXTENSION_CONTEXT, | 442 Feature::BLESSED_EXTENSION_CONTEXT, |
| 456 GURL())); | 443 GURL())); |
| 457 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( | 444 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( |
| 458 "history", | 445 *api_features.GetFeature("history"), |
| 459 NULL, | 446 NULL, |
| 460 Feature::UNBLESSED_EXTENSION_CONTEXT, | 447 Feature::UNBLESSED_EXTENSION_CONTEXT, |
| 461 GURL())); | 448 GURL())); |
| 462 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( | 449 EXPECT_FALSE(extension_api->IsAnyFeatureAvailableToContext( |
| 463 "history", | 450 *api_features.GetFeature("history"), |
| 464 NULL, | 451 NULL, |
| 465 Feature::CONTENT_SCRIPT_CONTEXT, | 452 Feature::CONTENT_SCRIPT_CONTEXT, |
| 466 GURL())); | 453 GURL())); |
| 467 } | 454 } |
| 468 | 455 |
| 469 scoped_refptr<Extension> CreateHostedApp() { | 456 scoped_refptr<Extension> CreateHostedApp() { |
| 470 base::DictionaryValue values; | 457 base::DictionaryValue values; |
| 471 values.SetString(manifest_keys::kName, "test"); | 458 values.SetString(manifest_keys::kName, "test"); |
| 472 values.SetString(manifest_keys::kVersion, "0.1"); | 459 values.SetString(manifest_keys::kVersion, "0.1"); |
| 473 values.Set(manifest_keys::kWebURLs, new base::ListValue()); | 460 values.Set(manifest_keys::kWebURLs, new base::ListValue()); |
| (...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 extension.get(), | 890 extension.get(), |
| 904 Feature::BLESSED_EXTENSION_CONTEXT, | 891 Feature::BLESSED_EXTENSION_CONTEXT, |
| 905 GURL()).is_available()); | 892 GURL()).is_available()); |
| 906 EXPECT_FALSE(extension_api->IsAvailable("pageAction", | 893 EXPECT_FALSE(extension_api->IsAvailable("pageAction", |
| 907 extension.get(), | 894 extension.get(), |
| 908 Feature::BLESSED_EXTENSION_CONTEXT, | 895 Feature::BLESSED_EXTENSION_CONTEXT, |
| 909 GURL()).is_available()); | 896 GURL()).is_available()); |
| 910 } | 897 } |
| 911 | 898 |
| 912 } // namespace extensions | 899 } // namespace extensions |
| OLD | NEW |