Chromium Code Reviews| Index: chrome/common/extensions/api/common_extension_api_unittest.cc |
| diff --git a/chrome/common/extensions/api/common_extension_api_unittest.cc b/chrome/common/extensions/api/common_extension_api_unittest.cc |
| index c451ea414898e5c766f2fce9873471a7d8d9fe70..57e48decca4f05d0c4df51d6d4be8b05eecd4c02 100644 |
| --- a/chrome/common/extensions/api/common_extension_api_unittest.cc |
| +++ b/chrome/common/extensions/api/common_extension_api_unittest.cc |
| @@ -24,6 +24,7 @@ |
| #include "extensions/common/extension.h" |
| #include "extensions/common/extension_builder.h" |
| #include "extensions/common/features/api_feature.h" |
| +#include "extensions/common/features/feature_session_type.h" |
| #include "extensions/common/features/json_feature_provider.h" |
| #include "extensions/common/features/simple_feature.h" |
| #include "extensions/common/manifest.h" |
| @@ -36,10 +37,41 @@ namespace extensions { |
| using test_util::BuildExtension; |
| +namespace { |
| + |
| SimpleFeature* CreateAPIFeature() { |
| return new APIFeature(); |
| } |
| +std::unique_ptr<base::DictionaryValue> GetJSONFeatures() { |
| + base::FilePath api_features_path; |
| + PathService::Get(chrome::DIR_TEST_DATA, &api_features_path); |
| + api_features_path = api_features_path.AppendASCII("extensions") |
| + .AppendASCII("extension_api_unittest") |
| + .AppendASCII("api_features.json"); |
| + |
| + std::string api_features_str; |
| + if (!base::ReadFileToString(api_features_path, &api_features_str)) { |
| + ADD_FAILURE() << "api_features.json unreadable"; |
| + return std::unique_ptr<base::DictionaryValue>(); |
| + } |
| + |
| + return std::unique_ptr<base::DictionaryValue>( |
| + static_cast<base::DictionaryValue*>( |
| + base::JSONReader::Read(api_features_str).release())); |
| +} |
| + |
| +void RegisterAPISchemaResourcesForTest(ExtensionAPI* api, |
| + const base::DictionaryValue& features) { |
| + for (base::DictionaryValue::Iterator iter(features); !iter.IsAtEnd(); |
| + iter.Advance()) { |
| + if (iter.key().find(".") == std::string::npos) |
| + api->RegisterSchemaResource(iter.key(), 0); |
| + } |
| +} |
| + |
| +} // namespace |
| + |
| TEST(ExtensionAPITest, Creation) { |
| ExtensionAPI* shared_instance = ExtensionAPI::GetSharedInstance(); |
| EXPECT_EQ(shared_instance, ExtensionAPI::GetSharedInstance()); |
| @@ -164,31 +196,16 @@ TEST(ExtensionAPITest, APIFeatures) { |
| GURL() } |
| }; |
| - base::FilePath api_features_path; |
| - PathService::Get(chrome::DIR_TEST_DATA, &api_features_path); |
| - api_features_path = api_features_path.AppendASCII("extensions") |
| - .AppendASCII("extension_api_unittest") |
| - .AppendASCII("api_features.json"); |
| - |
| - std::string api_features_str; |
| - ASSERT_TRUE(base::ReadFileToString( |
| - api_features_path, &api_features_str)) << "api_features.json"; |
| - |
| - std::unique_ptr<base::DictionaryValue> value( |
| - static_cast<base::DictionaryValue*>( |
| - base::JSONReader::Read(api_features_str).release())); |
| + std::unique_ptr<base::DictionaryValue> value(GetJSONFeatures()); |
| + ASSERT_TRUE(value); |
| JSONFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
| for (size_t i = 0; i < arraysize(test_data); ++i) { |
| ExtensionAPI api; |
| api.RegisterDependencyProvider("api", &api_feature_provider); |
| - for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); |
| - iter.Advance()) { |
| - if (iter.key().find(".") == std::string::npos) |
| - api.RegisterSchemaResource(iter.key(), 0); |
| - } |
| - |
| + RegisterAPISchemaResourcesForTest(&api, *value); |
| ExtensionAPI::OverrideSharedInstanceForTest scope(&api); |
| + |
| bool expected = test_data[i].expect_is_available; |
| Feature::Availability availability = |
| api.IsAvailable(test_data[i].api_full_name, |
| @@ -258,29 +275,15 @@ TEST(ExtensionAPITest, IsAnyFeatureAvailableToContext) { |
| { "test7", false, Feature::WEB_PAGE_CONTEXT, NULL, GURL("http://bar.com") } |
| }; |
| - base::FilePath api_features_path; |
| - PathService::Get(chrome::DIR_TEST_DATA, &api_features_path); |
| - api_features_path = api_features_path.AppendASCII("extensions") |
| - .AppendASCII("extension_api_unittest") |
| - .AppendASCII("api_features.json"); |
| - |
| - std::string api_features_str; |
| - ASSERT_TRUE(base::ReadFileToString( |
| - api_features_path, &api_features_str)) << "api_features.json"; |
| - |
| - std::unique_ptr<base::DictionaryValue> value( |
| - static_cast<base::DictionaryValue*>( |
| - base::JSONReader::Read(api_features_str).release())); |
| + std::unique_ptr<base::DictionaryValue> value(GetJSONFeatures()); |
| + ASSERT_TRUE(value); |
| JSONFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
| for (size_t i = 0; i < arraysize(test_data); ++i) { |
| ExtensionAPI api; |
| api.RegisterDependencyProvider("api", &api_feature_provider); |
| - for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); |
| - iter.Advance()) { |
| - if (iter.key().find(".") == std::string::npos) |
| - api.RegisterSchemaResource(iter.key(), 0); |
| - } |
| + RegisterAPISchemaResourcesForTest(&api, *value); |
| + ExtensionAPI::OverrideSharedInstanceForTest scope(&api); |
| Feature* test_feature = |
| api_feature_provider.GetFeature(test_data[i].api_full_name); |
| @@ -294,6 +297,38 @@ TEST(ExtensionAPITest, IsAnyFeatureAvailableToContext) { |
| } |
| } |
| +TEST(ExtensionAPITest, SessionTypeFeature) { |
| + struct { |
|
xiyuan
2016/08/18 21:24:00
nit: const
tbarzic
2016/08/18 22:18:56
Done
|
| + std::string api_name; |
| + bool expect_available; |
| + FeatureSessionType current_session_type; |
| + } test_data[]{{"kiosk_only", true, FeatureSessionType::KIOSK}, |
|
xiyuan
2016/08/18 21:24:00
nit: } kTestData[] = {...
tbarzic
2016/08/18 22:18:55
Done.
|
| + {"kiosk_only", false, FeatureSessionType::REGULAR}, |
| + {"kiosk_only", false, FeatureSessionType::UNKNOWN}, |
| + {"non_kiosk", false, FeatureSessionType::KIOSK}, |
| + {"non_kiosk", true, FeatureSessionType::REGULAR}, |
| + {"non_kiosk", false, FeatureSessionType::UNKNOWN}}; |
| + |
| + std::unique_ptr<base::DictionaryValue> value(GetJSONFeatures()); |
| + ASSERT_TRUE(value); |
| + JSONFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
| + |
| + for (size_t i = 0; i < arraysize(test_data); ++i) { |
|
rkc
2016/08/18 20:35:28
Change test data to a vector (or std::array) then
xiyuan
2016/08/18 21:24:00
Think this is fine as many tests are using test da
tbarzic
2016/08/18 22:18:55
Done
|
| + ExtensionAPI api; |
| + api.RegisterDependencyProvider("api", &api_feature_provider); |
| + RegisterAPISchemaResourcesForTest(&api, *value); |
| + ExtensionAPI::OverrideSharedInstanceForTest scope(&api); |
| + |
| + std::unique_ptr<base::AutoReset<FeatureSessionType>> current_session( |
| + ScopedCurrentFeatureSessionType(test_data[i].current_session_type)); |
| + EXPECT_EQ(test_data[i].expect_available, |
| + api.IsAvailable(test_data[i].api_name, NULL, |
| + Feature::BLESSED_EXTENSION_CONTEXT, GURL()) |
| + .is_available()) |
| + << "Test case " << i; |
| + } |
| +} |
| + |
| TEST(ExtensionAPITest, LazyGetSchema) { |
| std::unique_ptr<ExtensionAPI> apis( |
| ExtensionAPI::CreateWithDefaultConfiguration()); |