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/browser/extensions/api/permissions/permissions_api_helpers.h" |
| 6 |
5 #include <stddef.h> | 7 #include <stddef.h> |
6 | 8 |
| 9 #include <memory> |
| 10 |
7 #include "base/macros.h" | 11 #include "base/macros.h" |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "base/values.h" | 12 #include "base/values.h" |
10 #include "chrome/browser/extensions/api/permissions/permissions_api_helpers.h" | |
11 #include "chrome/common/extensions/api/permissions.h" | 13 #include "chrome/common/extensions/api/permissions.h" |
12 #include "extensions/common/permissions/permission_set.h" | 14 #include "extensions/common/permissions/permission_set.h" |
13 #include "extensions/common/url_pattern_set.h" | 15 #include "extensions/common/url_pattern_set.h" |
14 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "url/gurl.h" | 17 #include "url/gurl.h" |
16 | 18 |
17 using extensions::api::permissions::Permissions; | 19 using extensions::api::permissions::Permissions; |
18 using extensions::permissions_api_helpers::PackPermissionSet; | 20 using extensions::permissions_api_helpers::PackPermissionSet; |
19 using extensions::permissions_api_helpers::UnpackPermissionSet; | 21 using extensions::permissions_api_helpers::UnpackPermissionSet; |
20 | 22 |
(...skipping 15 matching lines...) Expand all Loading... |
36 apis.insert(APIPermission::kFileBrowserHandler); | 38 apis.insert(APIPermission::kFileBrowserHandler); |
37 // Note: kFileBrowserHandler implies kFileBrowserHandlerInternal. | 39 // Note: kFileBrowserHandler implies kFileBrowserHandlerInternal. |
38 URLPatternSet hosts; | 40 URLPatternSet hosts; |
39 AddPattern(&hosts, "http://a.com/*"); | 41 AddPattern(&hosts, "http://a.com/*"); |
40 AddPattern(&hosts, "http://b.com/*"); | 42 AddPattern(&hosts, "http://b.com/*"); |
41 | 43 |
42 PermissionSet permission_set(apis, ManifestPermissionSet(), hosts, | 44 PermissionSet permission_set(apis, ManifestPermissionSet(), hosts, |
43 URLPatternSet()); | 45 URLPatternSet()); |
44 | 46 |
45 // Pack the permission set to value and verify its contents. | 47 // Pack the permission set to value and verify its contents. |
46 scoped_ptr<Permissions> permissions(PackPermissionSet(permission_set)); | 48 std::unique_ptr<Permissions> permissions(PackPermissionSet(permission_set)); |
47 scoped_ptr<base::DictionaryValue> value(permissions->ToValue()); | 49 std::unique_ptr<base::DictionaryValue> value(permissions->ToValue()); |
48 base::ListValue* api_list = NULL; | 50 base::ListValue* api_list = NULL; |
49 base::ListValue* origin_list = NULL; | 51 base::ListValue* origin_list = NULL; |
50 EXPECT_TRUE(value->GetList("permissions", &api_list)); | 52 EXPECT_TRUE(value->GetList("permissions", &api_list)); |
51 EXPECT_TRUE(value->GetList("origins", &origin_list)); | 53 EXPECT_TRUE(value->GetList("origins", &origin_list)); |
52 | 54 |
53 EXPECT_EQ(3u, api_list->GetSize()); | 55 EXPECT_EQ(3u, api_list->GetSize()); |
54 EXPECT_EQ(2u, origin_list->GetSize()); | 56 EXPECT_EQ(2u, origin_list->GetSize()); |
55 | 57 |
56 std::string expected_apis[] = {"tabs", "fileBrowserHandler", | 58 std::string expected_apis[] = {"tabs", "fileBrowserHandler", |
57 "fileBrowserHandlerInternal"}; | 59 "fileBrowserHandlerInternal"}; |
58 for (size_t i = 0; i < arraysize(expected_apis); ++i) { | 60 for (size_t i = 0; i < arraysize(expected_apis); ++i) { |
59 scoped_ptr<base::Value> value(new base::StringValue(expected_apis[i])); | 61 std::unique_ptr<base::Value> value(new base::StringValue(expected_apis[i])); |
60 EXPECT_NE(api_list->end(), api_list->Find(*value)); | 62 EXPECT_NE(api_list->end(), api_list->Find(*value)); |
61 } | 63 } |
62 | 64 |
63 std::string expected_origins[] = { "http://a.com/*", "http://b.com/*" }; | 65 std::string expected_origins[] = { "http://a.com/*", "http://b.com/*" }; |
64 for (size_t i = 0; i < arraysize(expected_origins); ++i) { | 66 for (size_t i = 0; i < arraysize(expected_origins); ++i) { |
65 scoped_ptr<base::Value> value(new base::StringValue(expected_origins[i])); | 67 std::unique_ptr<base::Value> value( |
| 68 new base::StringValue(expected_origins[i])); |
66 EXPECT_NE(origin_list->end(), origin_list->Find(*value)); | 69 EXPECT_NE(origin_list->end(), origin_list->Find(*value)); |
67 } | 70 } |
68 | 71 |
69 // Unpack the value back to a permission set and make sure its equal to the | 72 // Unpack the value back to a permission set and make sure its equal to the |
70 // original one. | 73 // original one. |
71 std::string error; | 74 std::string error; |
72 Permissions permissions_object; | 75 Permissions permissions_object; |
73 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 76 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
74 scoped_ptr<const PermissionSet> from_value = | 77 std::unique_ptr<const PermissionSet> from_value = |
75 UnpackPermissionSet(permissions_object, true, &error); | 78 UnpackPermissionSet(permissions_object, true, &error); |
76 EXPECT_TRUE(error.empty()); | 79 EXPECT_TRUE(error.empty()); |
77 | 80 |
78 EXPECT_EQ(permission_set, *from_value); | 81 EXPECT_EQ(permission_set, *from_value); |
79 } | 82 } |
80 | 83 |
81 // Tests various error conditions and edge cases when unpacking values | 84 // Tests various error conditions and edge cases when unpacking values |
82 // into PermissionSets. | 85 // into PermissionSets. |
83 TEST(ExtensionPermissionsAPIHelpers, Unpack) { | 86 TEST(ExtensionPermissionsAPIHelpers, Unpack) { |
84 scoped_ptr<base::ListValue> apis(new base::ListValue()); | 87 std::unique_ptr<base::ListValue> apis(new base::ListValue()); |
85 apis->Append(new base::StringValue("tabs")); | 88 apis->Append(new base::StringValue("tabs")); |
86 scoped_ptr<base::ListValue> origins(new base::ListValue()); | 89 std::unique_ptr<base::ListValue> origins(new base::ListValue()); |
87 origins->Append(new base::StringValue("http://a.com/*")); | 90 origins->Append(new base::StringValue("http://a.com/*")); |
88 | 91 |
89 scoped_ptr<base::DictionaryValue> value(new base::DictionaryValue()); | 92 std::unique_ptr<base::DictionaryValue> value(new base::DictionaryValue()); |
90 scoped_ptr<const PermissionSet> permissions; | 93 std::unique_ptr<const PermissionSet> permissions; |
91 std::string error; | 94 std::string error; |
92 | 95 |
93 // Origins shouldn't have to be present. | 96 // Origins shouldn't have to be present. |
94 { | 97 { |
95 Permissions permissions_object; | 98 Permissions permissions_object; |
96 value->Set("permissions", apis->DeepCopy()); | 99 value->Set("permissions", apis->DeepCopy()); |
97 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 100 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
98 permissions = UnpackPermissionSet(permissions_object, true, &error); | 101 permissions = UnpackPermissionSet(permissions_object, true, &error); |
99 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); | 102 EXPECT_TRUE(permissions->HasAPIPermission(APIPermission::kTab)); |
100 EXPECT_TRUE(permissions.get()); | 103 EXPECT_TRUE(permissions.get()); |
101 EXPECT_TRUE(error.empty()); | 104 EXPECT_TRUE(error.empty()); |
102 } | 105 } |
103 | 106 |
104 // The api permissions don't need to be present either. | 107 // The api permissions don't need to be present either. |
105 { | 108 { |
106 Permissions permissions_object; | 109 Permissions permissions_object; |
107 value->Clear(); | 110 value->Clear(); |
108 value->Set("origins", origins->DeepCopy()); | 111 value->Set("origins", origins->DeepCopy()); |
109 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 112 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
110 permissions = UnpackPermissionSet(permissions_object, true, &error); | 113 permissions = UnpackPermissionSet(permissions_object, true, &error); |
111 EXPECT_TRUE(permissions.get()); | 114 EXPECT_TRUE(permissions.get()); |
112 EXPECT_TRUE(error.empty()); | 115 EXPECT_TRUE(error.empty()); |
113 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 116 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
114 } | 117 } |
115 | 118 |
116 // Throw errors for non-string API permissions. | 119 // Throw errors for non-string API permissions. |
117 { | 120 { |
118 Permissions permissions_object; | 121 Permissions permissions_object; |
119 value->Clear(); | 122 value->Clear(); |
120 scoped_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); | 123 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); |
121 invalid_apis->Append(new base::FundamentalValue(3)); | 124 invalid_apis->Append(new base::FundamentalValue(3)); |
122 value->Set("permissions", invalid_apis->DeepCopy()); | 125 value->Set("permissions", invalid_apis->DeepCopy()); |
123 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 126 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
124 } | 127 } |
125 | 128 |
126 // Throw errors for non-string origins. | 129 // Throw errors for non-string origins. |
127 { | 130 { |
128 Permissions permissions_object; | 131 Permissions permissions_object; |
129 value->Clear(); | 132 value->Clear(); |
130 scoped_ptr<base::ListValue> invalid_origins(origins->DeepCopy()); | 133 std::unique_ptr<base::ListValue> invalid_origins(origins->DeepCopy()); |
131 invalid_origins->Append(new base::FundamentalValue(3)); | 134 invalid_origins->Append(new base::FundamentalValue(3)); |
132 value->Set("origins", invalid_origins->DeepCopy()); | 135 value->Set("origins", invalid_origins->DeepCopy()); |
133 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); | 136 EXPECT_FALSE(Permissions::Populate(*value, &permissions_object)); |
134 } | 137 } |
135 | 138 |
136 // Throw errors when "origins" or "permissions" are not list values. | 139 // Throw errors when "origins" or "permissions" are not list values. |
137 { | 140 { |
138 Permissions permissions_object; | 141 Permissions permissions_object; |
139 value->Clear(); | 142 value->Clear(); |
140 value->Set("origins", new base::FundamentalValue(2)); | 143 value->Set("origins", new base::FundamentalValue(2)); |
(...skipping 17 matching lines...) Expand all Loading... |
158 permissions = UnpackPermissionSet(permissions_object, true, &error); | 161 permissions = UnpackPermissionSet(permissions_object, true, &error); |
159 EXPECT_TRUE(permissions.get()); | 162 EXPECT_TRUE(permissions.get()); |
160 EXPECT_TRUE(error.empty()); | 163 EXPECT_TRUE(error.empty()); |
161 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); | 164 EXPECT_TRUE(permissions->HasExplicitAccessToOrigin(GURL("http://a.com/"))); |
162 } | 165 } |
163 | 166 |
164 // Unknown permissions should throw an error. | 167 // Unknown permissions should throw an error. |
165 { | 168 { |
166 Permissions permissions_object; | 169 Permissions permissions_object; |
167 value->Clear(); | 170 value->Clear(); |
168 scoped_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); | 171 std::unique_ptr<base::ListValue> invalid_apis(apis->DeepCopy()); |
169 invalid_apis->Append(new base::StringValue("unknown_permission")); | 172 invalid_apis->Append(new base::StringValue("unknown_permission")); |
170 value->Set("permissions", invalid_apis->DeepCopy()); | 173 value->Set("permissions", invalid_apis->DeepCopy()); |
171 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); | 174 EXPECT_TRUE(Permissions::Populate(*value, &permissions_object)); |
172 permissions = UnpackPermissionSet(permissions_object, true, &error); | 175 permissions = UnpackPermissionSet(permissions_object, true, &error); |
173 EXPECT_FALSE(permissions.get()); | 176 EXPECT_FALSE(permissions.get()); |
174 EXPECT_FALSE(error.empty()); | 177 EXPECT_FALSE(error.empty()); |
175 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); | 178 EXPECT_EQ(error, "'unknown_permission' is not a recognized permission."); |
176 } | 179 } |
177 } | 180 } |
178 | 181 |
179 } // namespace extensions | 182 } // namespace extensions |
OLD | NEW |