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/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 | 50 |
51 struct { | 51 struct { |
52 ExtensionAPI* api; | 52 ExtensionAPI* api; |
53 bool expect_populated; | 53 bool expect_populated; |
54 } test_data[] = { | 54 } test_data[] = { |
55 { shared_instance, true }, | 55 { shared_instance, true }, |
56 { new_instance.get(), true }, | 56 { new_instance.get(), true }, |
57 { &empty_instance, false } | 57 { &empty_instance, false } |
58 }; | 58 }; |
59 | 59 |
60 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 60 for (size_t i = 0; i < arraysize(test_data); ++i) { |
61 EXPECT_EQ(test_data[i].expect_populated, | 61 EXPECT_EQ(test_data[i].expect_populated, |
62 test_data[i].api->GetSchema("bookmarks.create") != NULL); | 62 test_data[i].api->GetSchema("bookmarks.create") != NULL); |
63 } | 63 } |
64 } | 64 } |
65 | 65 |
66 TEST(ExtensionAPITest, SplitDependencyName) { | 66 TEST(ExtensionAPITest, SplitDependencyName) { |
67 struct { | 67 struct { |
68 std::string input; | 68 std::string input; |
69 std::string expected_feature_type; | 69 std::string expected_feature_type; |
70 std::string expected_feature_name; | 70 std::string expected_feature_name; |
71 } test_data[] = {{"", "api", ""}, // assumes "api" when no type is present | 71 } test_data[] = {{"", "api", ""}, // assumes "api" when no type is present |
72 {"foo", "api", "foo"}, | 72 {"foo", "api", "foo"}, |
73 {"foo:", "foo", ""}, | 73 {"foo:", "foo", ""}, |
74 {":foo", "", "foo"}, | 74 {":foo", "", "foo"}, |
75 {"foo:bar", "foo", "bar"}, | 75 {"foo:bar", "foo", "bar"}, |
76 {"foo:bar.baz", "foo", "bar.baz"}}; | 76 {"foo:bar.baz", "foo", "bar.baz"}}; |
77 | 77 |
78 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 78 for (size_t i = 0; i < arraysize(test_data); ++i) { |
79 std::string feature_type; | 79 std::string feature_type; |
80 std::string feature_name; | 80 std::string feature_name; |
81 ExtensionAPI::SplitDependencyName( | 81 ExtensionAPI::SplitDependencyName( |
82 test_data[i].input, &feature_type, &feature_name); | 82 test_data[i].input, &feature_type, &feature_name); |
83 EXPECT_EQ(test_data[i].expected_feature_type, feature_type) << i; | 83 EXPECT_EQ(test_data[i].expected_feature_type, feature_type) << i; |
84 EXPECT_EQ(test_data[i].expected_feature_name, feature_name) << i; | 84 EXPECT_EQ(test_data[i].expected_feature_name, feature_name) << i; |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 TEST(ExtensionAPITest, IsAvailableInUntrustedContext) { | 88 TEST(ExtensionAPITest, IsAvailableInUntrustedContext) { |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 ASSERT_TRUE(base::ReadFileToString( | 163 ASSERT_TRUE(base::ReadFileToString( |
164 api_features_path, &api_features_str)) << "privileged_api_features.json"; | 164 api_features_path, &api_features_str)) << "privileged_api_features.json"; |
165 | 165 |
166 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( | 166 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( |
167 base::JSONReader::Read(api_features_str))); | 167 base::JSONReader::Read(api_features_str))); |
168 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); | 168 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
169 | 169 |
170 scoped_refptr<Extension> extension = | 170 scoped_refptr<Extension> extension = |
171 BuildExtension(ExtensionBuilder().Pass()).Build(); | 171 BuildExtension(ExtensionBuilder().Pass()).Build(); |
172 | 172 |
173 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 173 for (size_t i = 0; i < arraysize(test_data); ++i) { |
174 ExtensionAPI api; | 174 ExtensionAPI api; |
175 api.RegisterDependencyProvider("api", &api_feature_provider); | 175 api.RegisterDependencyProvider("api", &api_feature_provider); |
176 EXPECT_EQ(test_data[i].expect_is_available, | 176 EXPECT_EQ(test_data[i].expect_is_available, |
177 api.IsAvailableInUntrustedContext(test_data[i].api_full_name, | 177 api.IsAvailableInUntrustedContext(test_data[i].api_full_name, |
178 extension.get())) | 178 extension.get())) |
179 << i; | 179 << i; |
180 } | 180 } |
181 } | 181 } |
182 | 182 |
183 TEST(ExtensionAPITest, APIFeatures) { | 183 TEST(ExtensionAPITest, APIFeatures) { |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 .AppendASCII("api_features.json"); | 261 .AppendASCII("api_features.json"); |
262 | 262 |
263 std::string api_features_str; | 263 std::string api_features_str; |
264 ASSERT_TRUE(base::ReadFileToString( | 264 ASSERT_TRUE(base::ReadFileToString( |
265 api_features_path, &api_features_str)) << "api_features.json"; | 265 api_features_path, &api_features_str)) << "api_features.json"; |
266 | 266 |
267 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( | 267 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( |
268 base::JSONReader::Read(api_features_str))); | 268 base::JSONReader::Read(api_features_str))); |
269 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); | 269 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
270 | 270 |
271 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 271 for (size_t i = 0; i < arraysize(test_data); ++i) { |
272 ExtensionAPI api; | 272 ExtensionAPI api; |
273 api.RegisterDependencyProvider("api", &api_feature_provider); | 273 api.RegisterDependencyProvider("api", &api_feature_provider); |
274 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); | 274 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); |
275 iter.Advance()) { | 275 iter.Advance()) { |
276 if (iter.key().find(".") == std::string::npos) | 276 if (iter.key().find(".") == std::string::npos) |
277 api.RegisterSchemaResource(iter.key(), 0); | 277 api.RegisterSchemaResource(iter.key(), 0); |
278 } | 278 } |
279 | 279 |
280 ExtensionAPI::OverrideSharedInstanceForTest scope(&api); | 280 ExtensionAPI::OverrideSharedInstanceForTest scope(&api); |
281 bool expected = test_data[i].expect_is_available; | 281 bool expected = test_data[i].expect_is_available; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 .AppendASCII("api_features.json"); | 341 .AppendASCII("api_features.json"); |
342 | 342 |
343 std::string api_features_str; | 343 std::string api_features_str; |
344 ASSERT_TRUE(base::ReadFileToString( | 344 ASSERT_TRUE(base::ReadFileToString( |
345 api_features_path, &api_features_str)) << "api_features.json"; | 345 api_features_path, &api_features_str)) << "api_features.json"; |
346 | 346 |
347 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( | 347 scoped_ptr<base::DictionaryValue> value(static_cast<base::DictionaryValue*>( |
348 base::JSONReader::Read(api_features_str))); | 348 base::JSONReader::Read(api_features_str))); |
349 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); | 349 BaseFeatureProvider api_feature_provider(*value, CreateAPIFeature); |
350 | 350 |
351 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 351 for (size_t i = 0; i < arraysize(test_data); ++i) { |
352 ExtensionAPI api; | 352 ExtensionAPI api; |
353 api.RegisterDependencyProvider("api", &api_feature_provider); | 353 api.RegisterDependencyProvider("api", &api_feature_provider); |
354 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); | 354 for (base::DictionaryValue::Iterator iter(*value); !iter.IsAtEnd(); |
355 iter.Advance()) { | 355 iter.Advance()) { |
356 if (iter.key().find(".") == std::string::npos) | 356 if (iter.key().find(".") == std::string::npos) |
357 api.RegisterSchemaResource(iter.key(), 0); | 357 api.RegisterSchemaResource(iter.key(), 0); |
358 } | 358 } |
359 | 359 |
360 Feature* test_feature = | 360 Feature* test_feature = |
361 api_feature_provider.GetFeature(test_data[i].api_full_name); | 361 api_feature_provider.GetFeature(test_data[i].api_full_name); |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 { "bookmarks.", "bookmarks", "" }, | 704 { "bookmarks.", "bookmarks", "" }, |
705 { ".bookmarks", "", "" }, | 705 { ".bookmarks", "", "" }, |
706 { "bookmarks.create", "bookmarks", "create" }, | 706 { "bookmarks.create", "bookmarks", "create" }, |
707 { "bookmarks.create.", "bookmarks", "create." }, | 707 { "bookmarks.create.", "bookmarks", "create." }, |
708 { "bookmarks.create.monkey", "bookmarks", "create.monkey" }, | 708 { "bookmarks.create.monkey", "bookmarks", "create.monkey" }, |
709 { "bookmarkManagerPrivate", "bookmarkManagerPrivate", "" }, | 709 { "bookmarkManagerPrivate", "bookmarkManagerPrivate", "" }, |
710 { "bookmarkManagerPrivate.copy", "bookmarkManagerPrivate", "copy" } | 710 { "bookmarkManagerPrivate.copy", "bookmarkManagerPrivate", "copy" } |
711 }; | 711 }; |
712 | 712 |
713 scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration()); | 713 scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration()); |
714 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 714 for (size_t i = 0; i < arraysize(test_data); ++i) { |
715 std::string child_name; | 715 std::string child_name; |
716 std::string api_name = api->GetAPINameFromFullName(test_data[i].input, | 716 std::string api_name = api->GetAPINameFromFullName(test_data[i].input, |
717 &child_name); | 717 &child_name); |
718 EXPECT_EQ(test_data[i].api_name, api_name) << test_data[i].input; | 718 EXPECT_EQ(test_data[i].api_name, api_name) << test_data[i].input; |
719 EXPECT_EQ(test_data[i].child_name, child_name) << test_data[i].input; | 719 EXPECT_EQ(test_data[i].child_name, child_name) << test_data[i].input; |
720 } | 720 } |
721 } | 721 } |
722 | 722 |
723 TEST(ExtensionAPITest, DefaultConfigurationFeatures) { | 723 TEST(ExtensionAPITest, DefaultConfigurationFeatures) { |
724 scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration()); | 724 scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration()); |
725 | 725 |
726 SimpleFeature* bookmarks = static_cast<SimpleFeature*>( | 726 SimpleFeature* bookmarks = static_cast<SimpleFeature*>( |
727 api->GetFeatureDependency("api:bookmarks")); | 727 api->GetFeatureDependency("api:bookmarks")); |
728 SimpleFeature* bookmarks_create = static_cast<SimpleFeature*>( | 728 SimpleFeature* bookmarks_create = static_cast<SimpleFeature*>( |
729 api->GetFeatureDependency("api:bookmarks.create")); | 729 api->GetFeatureDependency("api:bookmarks.create")); |
730 | 730 |
731 struct { | 731 struct { |
732 SimpleFeature* feature; | 732 SimpleFeature* feature; |
733 // TODO(aa): More stuff to test over time. | 733 // TODO(aa): More stuff to test over time. |
734 } test_data[] = { | 734 } test_data[] = { |
735 { bookmarks }, | 735 { bookmarks }, |
736 { bookmarks_create } | 736 { bookmarks_create } |
737 }; | 737 }; |
738 | 738 |
739 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | 739 for (size_t i = 0; i < arraysize(test_data); ++i) { |
740 SimpleFeature* feature = test_data[i].feature; | 740 SimpleFeature* feature = test_data[i].feature; |
741 ASSERT_TRUE(feature) << i; | 741 ASSERT_TRUE(feature) << i; |
742 | 742 |
743 EXPECT_TRUE(feature->whitelist()->empty()); | 743 EXPECT_TRUE(feature->whitelist()->empty()); |
744 EXPECT_TRUE(feature->extension_types()->empty()); | 744 EXPECT_TRUE(feature->extension_types()->empty()); |
745 | 745 |
746 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); | 746 EXPECT_EQ(SimpleFeature::UNSPECIFIED_LOCATION, feature->location()); |
747 EXPECT_TRUE(feature->platforms()->empty()); | 747 EXPECT_TRUE(feature->platforms()->empty()); |
748 EXPECT_EQ(0, feature->min_manifest_version()); | 748 EXPECT_EQ(0, feature->min_manifest_version()); |
749 EXPECT_EQ(0, feature->max_manifest_version()); | 749 EXPECT_EQ(0, feature->max_manifest_version()); |
(...skipping 15 matching lines...) Expand all Loading... |
765 api_features2->Set("test", test2); | 765 api_features2->Set("test", test2); |
766 | 766 |
767 struct { | 767 struct { |
768 base::DictionaryValue* api_features; | 768 base::DictionaryValue* api_features; |
769 bool expect_success; | 769 bool expect_success; |
770 } test_data[] = { | 770 } test_data[] = { |
771 { api_features1.get(), true }, | 771 { api_features1.get(), true }, |
772 { api_features2.get(), false } | 772 { api_features2.get(), false } |
773 }; | 773 }; |
774 | 774 |
775 | 775 for (size_t i = 0; i < arraysize(test_data); ++i) { |
776 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) { | |
777 BaseFeatureProvider api_feature_provider(*test_data[i].api_features, | 776 BaseFeatureProvider api_feature_provider(*test_data[i].api_features, |
778 CreateAPIFeature); | 777 CreateAPIFeature); |
779 Feature* feature = api_feature_provider.GetFeature("test"); | 778 Feature* feature = api_feature_provider.GetFeature("test"); |
780 EXPECT_EQ(test_data[i].expect_success, feature != NULL) << i; | 779 EXPECT_EQ(test_data[i].expect_success, feature != NULL) << i; |
781 } | 780 } |
782 } | 781 } |
783 | 782 |
784 static void GetDictionaryFromList(const base::DictionaryValue* schema, | 783 static void GetDictionaryFromList(const base::DictionaryValue* schema, |
785 const std::string& list_name, | 784 const std::string& list_name, |
786 const int list_index, | 785 const int list_index, |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
894 { "management.uninstallSelf", true }, | 893 { "management.uninstallSelf", true }, |
895 // But other functions in those modules do. | 894 // But other functions in those modules do. |
896 { "management.getPermissionWarningsById", false }, | 895 { "management.getPermissionWarningsById", false }, |
897 }; | 896 }; |
898 | 897 |
899 scoped_ptr<ExtensionAPI> extension_api( | 898 scoped_ptr<ExtensionAPI> extension_api( |
900 ExtensionAPI::CreateWithDefaultConfiguration()); | 899 ExtensionAPI::CreateWithDefaultConfiguration()); |
901 scoped_refptr<Extension> extension = | 900 scoped_refptr<Extension> extension = |
902 BuildExtension(ExtensionBuilder().Pass()).Build(); | 901 BuildExtension(ExtensionBuilder().Pass()).Build(); |
903 | 902 |
904 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) { | 903 for (size_t i = 0; i < arraysize(kTests); ++i) { |
905 EXPECT_EQ(kTests[i].expect_success, | 904 EXPECT_EQ(kTests[i].expect_success, |
906 extension_api->IsAvailable(kTests[i].permission_name, | 905 extension_api->IsAvailable(kTests[i].permission_name, |
907 extension.get(), | 906 extension.get(), |
908 Feature::BLESSED_EXTENSION_CONTEXT, | 907 Feature::BLESSED_EXTENSION_CONTEXT, |
909 GURL()).is_available()) | 908 GURL()).is_available()) |
910 << "Permission being tested: " << kTests[i].permission_name; | 909 << "Permission being tested: " << kTests[i].permission_name; |
911 } | 910 } |
912 } | 911 } |
913 | 912 |
914 // Tests that permissions that require manifest keys are available when those | 913 // Tests that permissions that require manifest keys are available when those |
(...skipping 12 matching lines...) Expand all Loading... |
927 extension.get(), | 926 extension.get(), |
928 Feature::BLESSED_EXTENSION_CONTEXT, | 927 Feature::BLESSED_EXTENSION_CONTEXT, |
929 GURL()).is_available()); | 928 GURL()).is_available()); |
930 EXPECT_FALSE(extension_api->IsAvailable("pageAction", | 929 EXPECT_FALSE(extension_api->IsAvailable("pageAction", |
931 extension.get(), | 930 extension.get(), |
932 Feature::BLESSED_EXTENSION_CONTEXT, | 931 Feature::BLESSED_EXTENSION_CONTEXT, |
933 GURL()).is_available()); | 932 GURL()).is_available()); |
934 } | 933 } |
935 | 934 |
936 } // namespace extensions | 935 } // namespace extensions |
OLD | NEW |