OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "base/pickle.h" | 5 #include "base/pickle.h" |
6 #include "base/values.h" | 6 #include "base/values.h" |
7 #include "extensions/common/extension_messages.h" | 7 #include "extensions/common/extension_messages.h" |
8 #include "extensions/common/permissions/api_permission_set.h" | 8 #include "extensions/common/permissions/api_permission_set.h" |
9 #include "extensions/common/permissions/permissions_info.h" | 9 #include "extensions/common/permissions/permissions_info.h" |
10 #include "ipc/ipc_message.h" | 10 #include "ipc/ipc_message.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
12 | 12 |
13 namespace extensions { | 13 namespace extensions { |
14 | 14 |
15 TEST(APIPermissionSetTest, General) { | 15 TEST(APIPermissionSetTest, General) { |
16 APIPermissionSet apis; | 16 APIPermissionSet apis; |
17 apis.insert(APIPermission::kTab); | 17 apis.insert(APIPermission::kAudioCapture); |
18 apis.insert(APIPermission::kBackground); | 18 apis.insert(APIPermission::kDns); |
19 apis.insert(APIPermission::kProxy); | 19 apis.insert(APIPermission::kHid); |
20 apis.insert(APIPermission::kClipboardWrite); | 20 apis.insert(APIPermission::kPower); |
21 apis.insert(APIPermission::kPlugin); | 21 apis.insert(APIPermission::kSerial); |
22 | 22 |
23 EXPECT_EQ(apis.find(APIPermission::kProxy)->id(), APIPermission::kProxy); | 23 EXPECT_EQ(apis.find(APIPermission::kPower)->id(), APIPermission::kPower); |
24 EXPECT_TRUE(apis.find(APIPermission::kSocket) == apis.end()); | 24 EXPECT_TRUE(apis.find(APIPermission::kSocket) == apis.end()); |
25 | 25 |
26 EXPECT_EQ(apis.size(), 5u); | 26 EXPECT_EQ(apis.size(), 5u); |
27 | 27 |
28 EXPECT_EQ(apis.erase(APIPermission::kTab), 1u); | 28 EXPECT_EQ(apis.erase(APIPermission::kAudioCapture), 1u); |
29 EXPECT_EQ(apis.size(), 4u); | 29 EXPECT_EQ(apis.size(), 4u); |
30 | 30 |
31 EXPECT_EQ(apis.erase(APIPermission::kTab), 0u); | 31 EXPECT_EQ(apis.erase(APIPermission::kAudioCapture), 0u); |
32 EXPECT_EQ(apis.size(), 4u); | 32 EXPECT_EQ(apis.size(), 4u); |
33 } | 33 } |
34 | 34 |
35 TEST(APIPermissionSetTest, CreateUnion) { | 35 TEST(APIPermissionSetTest, CreateUnion) { |
36 APIPermission* permission = NULL; | 36 APIPermission* permission = NULL; |
37 | 37 |
38 APIPermissionSet apis1; | 38 APIPermissionSet apis1; |
39 APIPermissionSet apis2; | 39 APIPermissionSet apis2; |
40 APIPermissionSet expected_apis; | 40 APIPermissionSet expected_apis; |
41 APIPermissionSet result; | 41 APIPermissionSet result; |
42 | 42 |
43 const APIPermissionInfo* permission_info = | 43 const APIPermissionInfo* permission_info = |
44 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 44 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
45 permission = permission_info->CreateAPIPermission(); | 45 permission = permission_info->CreateAPIPermission(); |
46 { | 46 { |
47 scoped_ptr<base::ListValue> value(new base::ListValue()); | 47 scoped_ptr<base::ListValue> value(new base::ListValue()); |
48 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 48 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
49 value->Append(new base::StringValue("udp-bind::8080")); | 49 value->Append(new base::StringValue("udp-bind::8080")); |
50 value->Append(new base::StringValue("udp-send-to::8888")); | 50 value->Append(new base::StringValue("udp-send-to::8888")); |
51 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 51 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
52 } | 52 } |
53 | 53 |
54 // Union with an empty set. | 54 // Union with an empty set. |
55 apis1.insert(APIPermission::kTab); | 55 apis1.insert(APIPermission::kAudioCapture); |
56 apis1.insert(APIPermission::kBackground); | 56 apis1.insert(APIPermission::kDns); |
57 apis1.insert(permission->Clone()); | 57 apis1.insert(permission->Clone()); |
58 expected_apis.insert(APIPermission::kTab); | 58 expected_apis.insert(APIPermission::kAudioCapture); |
59 expected_apis.insert(APIPermission::kBackground); | 59 expected_apis.insert(APIPermission::kDns); |
60 expected_apis.insert(permission); | 60 expected_apis.insert(permission); |
61 | 61 |
| 62 ASSERT_TRUE(apis2.empty()); |
62 APIPermissionSet::Union(apis1, apis2, &result); | 63 APIPermissionSet::Union(apis1, apis2, &result); |
63 | 64 |
64 EXPECT_TRUE(apis1.Contains(apis2)); | 65 EXPECT_TRUE(apis1.Contains(apis2)); |
65 EXPECT_TRUE(apis1.Contains(result)); | 66 EXPECT_TRUE(apis1.Contains(result)); |
66 EXPECT_FALSE(apis2.Contains(apis1)); | 67 EXPECT_FALSE(apis2.Contains(apis1)); |
67 EXPECT_FALSE(apis2.Contains(result)); | 68 EXPECT_FALSE(apis2.Contains(result)); |
68 EXPECT_TRUE(result.Contains(apis1)); | 69 EXPECT_TRUE(result.Contains(apis1)); |
69 EXPECT_TRUE(result.Contains(apis2)); | 70 EXPECT_TRUE(result.Contains(apis2)); |
70 | 71 |
71 EXPECT_EQ(expected_apis, result); | 72 EXPECT_EQ(expected_apis, result); |
72 | 73 |
73 // Now use a real second set. | 74 // Now use a real second set. |
74 apis2.insert(APIPermission::kTab); | 75 apis2.insert(APIPermission::kAudioCapture); |
75 apis2.insert(APIPermission::kProxy); | 76 apis2.insert(APIPermission::kHid); |
76 apis2.insert(APIPermission::kClipboardWrite); | 77 apis2.insert(APIPermission::kPower); |
77 apis2.insert(APIPermission::kPlugin); | 78 apis2.insert(APIPermission::kSerial); |
78 | 79 |
79 permission = permission_info->CreateAPIPermission(); | 80 permission = permission_info->CreateAPIPermission(); |
80 { | 81 { |
81 scoped_ptr<base::ListValue> value(new base::ListValue()); | 82 scoped_ptr<base::ListValue> value(new base::ListValue()); |
82 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 83 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
83 value->Append(new base::StringValue("udp-send-to::8899")); | 84 value->Append(new base::StringValue("udp-send-to::8899")); |
84 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 85 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
85 } | 86 } |
86 apis2.insert(permission); | 87 apis2.insert(permission); |
87 | 88 |
88 expected_apis.insert(APIPermission::kTab); | 89 expected_apis.insert(APIPermission::kAudioCapture); |
89 expected_apis.insert(APIPermission::kProxy); | 90 expected_apis.insert(APIPermission::kHid); |
90 expected_apis.insert(APIPermission::kClipboardWrite); | 91 expected_apis.insert(APIPermission::kPower); |
91 expected_apis.insert(APIPermission::kPlugin); | 92 expected_apis.insert(APIPermission::kSerial); |
92 | 93 |
93 permission = permission_info->CreateAPIPermission(); | 94 permission = permission_info->CreateAPIPermission(); |
94 { | 95 { |
95 scoped_ptr<base::ListValue> value(new base::ListValue()); | 96 scoped_ptr<base::ListValue> value(new base::ListValue()); |
96 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 97 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
97 value->Append(new base::StringValue("udp-bind::8080")); | 98 value->Append(new base::StringValue("udp-bind::8080")); |
98 value->Append(new base::StringValue("udp-send-to::8888")); | 99 value->Append(new base::StringValue("udp-send-to::8888")); |
99 value->Append(new base::StringValue("udp-send-to::8899")); | 100 value->Append(new base::StringValue("udp-send-to::8899")); |
100 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 101 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
101 } | 102 } |
(...skipping 17 matching lines...) Expand all Loading... |
119 | 120 |
120 APIPermissionSet apis1; | 121 APIPermissionSet apis1; |
121 APIPermissionSet apis2; | 122 APIPermissionSet apis2; |
122 APIPermissionSet expected_apis; | 123 APIPermissionSet expected_apis; |
123 APIPermissionSet result; | 124 APIPermissionSet result; |
124 | 125 |
125 const APIPermissionInfo* permission_info = | 126 const APIPermissionInfo* permission_info = |
126 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 127 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
127 | 128 |
128 // Intersection with an empty set. | 129 // Intersection with an empty set. |
129 apis1.insert(APIPermission::kTab); | 130 apis1.insert(APIPermission::kAudioCapture); |
130 apis1.insert(APIPermission::kBackground); | 131 apis1.insert(APIPermission::kDns); |
131 permission = permission_info->CreateAPIPermission(); | 132 permission = permission_info->CreateAPIPermission(); |
132 { | 133 { |
133 scoped_ptr<base::ListValue> value(new base::ListValue()); | 134 scoped_ptr<base::ListValue> value(new base::ListValue()); |
134 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 135 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
135 value->Append(new base::StringValue("udp-bind::8080")); | 136 value->Append(new base::StringValue("udp-bind::8080")); |
136 value->Append(new base::StringValue("udp-send-to::8888")); | 137 value->Append(new base::StringValue("udp-send-to::8888")); |
137 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 138 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
138 } | 139 } |
139 apis1.insert(permission); | 140 apis1.insert(permission); |
140 | 141 |
| 142 ASSERT_TRUE(apis2.empty()); |
141 APIPermissionSet::Intersection(apis1, apis2, &result); | 143 APIPermissionSet::Intersection(apis1, apis2, &result); |
| 144 |
142 EXPECT_TRUE(apis1.Contains(result)); | 145 EXPECT_TRUE(apis1.Contains(result)); |
143 EXPECT_TRUE(apis2.Contains(result)); | 146 EXPECT_TRUE(apis2.Contains(result)); |
144 EXPECT_TRUE(apis1.Contains(apis2)); | 147 EXPECT_TRUE(apis1.Contains(apis2)); |
145 EXPECT_FALSE(apis2.Contains(apis1)); | 148 EXPECT_FALSE(apis2.Contains(apis1)); |
146 EXPECT_FALSE(result.Contains(apis1)); | 149 EXPECT_FALSE(result.Contains(apis1)); |
147 EXPECT_TRUE(result.Contains(apis2)); | 150 EXPECT_TRUE(result.Contains(apis2)); |
148 | 151 |
149 EXPECT_TRUE(result.empty()); | 152 EXPECT_TRUE(result.empty()); |
150 EXPECT_EQ(expected_apis, result); | 153 EXPECT_EQ(expected_apis, result); |
151 | 154 |
152 // Now use a real second set. | 155 // Now use a real second set. |
153 apis2.insert(APIPermission::kTab); | 156 apis2.insert(APIPermission::kAudioCapture); |
154 apis2.insert(APIPermission::kProxy); | 157 apis2.insert(APIPermission::kHid); |
155 apis2.insert(APIPermission::kClipboardWrite); | 158 apis2.insert(APIPermission::kPower); |
156 apis2.insert(APIPermission::kPlugin); | 159 apis2.insert(APIPermission::kSerial); |
157 permission = permission_info->CreateAPIPermission(); | 160 permission = permission_info->CreateAPIPermission(); |
158 { | 161 { |
159 scoped_ptr<base::ListValue> value(new base::ListValue()); | 162 scoped_ptr<base::ListValue> value(new base::ListValue()); |
160 value->Append(new base::StringValue("udp-bind::8080")); | 163 value->Append(new base::StringValue("udp-bind::8080")); |
161 value->Append(new base::StringValue("udp-send-to::8888")); | 164 value->Append(new base::StringValue("udp-send-to::8888")); |
162 value->Append(new base::StringValue("udp-send-to::8899")); | 165 value->Append(new base::StringValue("udp-send-to::8899")); |
163 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 166 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
164 } | 167 } |
165 apis2.insert(permission); | 168 apis2.insert(permission); |
166 | 169 |
167 expected_apis.insert(APIPermission::kTab); | 170 expected_apis.insert(APIPermission::kAudioCapture); |
168 permission = permission_info->CreateAPIPermission(); | 171 permission = permission_info->CreateAPIPermission(); |
169 { | 172 { |
170 scoped_ptr<base::ListValue> value(new base::ListValue()); | 173 scoped_ptr<base::ListValue> value(new base::ListValue()); |
171 value->Append(new base::StringValue("udp-bind::8080")); | 174 value->Append(new base::StringValue("udp-bind::8080")); |
172 value->Append(new base::StringValue("udp-send-to::8888")); | 175 value->Append(new base::StringValue("udp-send-to::8888")); |
173 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 176 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
174 } | 177 } |
175 expected_apis.insert(permission); | 178 expected_apis.insert(permission); |
176 | 179 |
177 APIPermissionSet::Intersection(apis1, apis2, &result); | 180 APIPermissionSet::Intersection(apis1, apis2, &result); |
(...skipping 13 matching lines...) Expand all Loading... |
191 | 194 |
192 APIPermissionSet apis1; | 195 APIPermissionSet apis1; |
193 APIPermissionSet apis2; | 196 APIPermissionSet apis2; |
194 APIPermissionSet expected_apis; | 197 APIPermissionSet expected_apis; |
195 APIPermissionSet result; | 198 APIPermissionSet result; |
196 | 199 |
197 const APIPermissionInfo* permission_info = | 200 const APIPermissionInfo* permission_info = |
198 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 201 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
199 | 202 |
200 // Difference with an empty set. | 203 // Difference with an empty set. |
201 apis1.insert(APIPermission::kTab); | 204 apis1.insert(APIPermission::kAudioCapture); |
202 apis1.insert(APIPermission::kBackground); | 205 apis1.insert(APIPermission::kDns); |
203 permission = permission_info->CreateAPIPermission(); | 206 permission = permission_info->CreateAPIPermission(); |
204 { | 207 { |
205 scoped_ptr<base::ListValue> value(new base::ListValue()); | 208 scoped_ptr<base::ListValue> value(new base::ListValue()); |
206 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 209 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
207 value->Append(new base::StringValue("udp-bind::8080")); | 210 value->Append(new base::StringValue("udp-bind::8080")); |
208 value->Append(new base::StringValue("udp-send-to::8888")); | 211 value->Append(new base::StringValue("udp-send-to::8888")); |
209 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 212 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
210 } | 213 } |
211 apis1.insert(permission); | 214 apis1.insert(permission); |
212 | 215 |
| 216 ASSERT_TRUE(apis2.empty()); |
213 APIPermissionSet::Difference(apis1, apis2, &result); | 217 APIPermissionSet::Difference(apis1, apis2, &result); |
214 | 218 |
215 EXPECT_EQ(apis1, result); | 219 EXPECT_EQ(apis1, result); |
216 | 220 |
217 // Now use a real second set. | 221 // Now use a real second set. |
218 apis2.insert(APIPermission::kTab); | 222 apis2.insert(APIPermission::kAudioCapture); |
219 apis2.insert(APIPermission::kProxy); | 223 apis2.insert(APIPermission::kHid); |
220 apis2.insert(APIPermission::kClipboardWrite); | 224 apis2.insert(APIPermission::kPower); |
221 apis2.insert(APIPermission::kPlugin); | 225 apis2.insert(APIPermission::kSerial); |
222 permission = permission_info->CreateAPIPermission(); | 226 permission = permission_info->CreateAPIPermission(); |
223 { | 227 { |
224 scoped_ptr<base::ListValue> value(new base::ListValue()); | 228 scoped_ptr<base::ListValue> value(new base::ListValue()); |
225 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 229 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
226 value->Append(new base::StringValue("udp-send-to::8899")); | 230 value->Append(new base::StringValue("udp-send-to::8899")); |
227 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 231 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
228 } | 232 } |
229 apis2.insert(permission); | 233 apis2.insert(permission); |
230 | 234 |
231 expected_apis.insert(APIPermission::kBackground); | 235 expected_apis.insert(APIPermission::kDns); |
232 permission = permission_info->CreateAPIPermission(); | 236 permission = permission_info->CreateAPIPermission(); |
233 { | 237 { |
234 scoped_ptr<base::ListValue> value(new base::ListValue()); | 238 scoped_ptr<base::ListValue> value(new base::ListValue()); |
235 value->Append(new base::StringValue("udp-bind::8080")); | 239 value->Append(new base::StringValue("udp-bind::8080")); |
236 value->Append(new base::StringValue("udp-send-to::8888")); | 240 value->Append(new base::StringValue("udp-send-to::8888")); |
237 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 241 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
238 } | 242 } |
239 expected_apis.insert(permission); | 243 expected_apis.insert(permission); |
240 | 244 |
241 APIPermissionSet::Difference(apis1, apis2, &result); | 245 APIPermissionSet::Difference(apis1, apis2, &result); |
(...skipping 11 matching lines...) Expand all Loading... |
253 | 257 |
254 TEST(APIPermissionSetTest, IPC) { | 258 TEST(APIPermissionSetTest, IPC) { |
255 APIPermission* permission = NULL; | 259 APIPermission* permission = NULL; |
256 | 260 |
257 APIPermissionSet apis; | 261 APIPermissionSet apis; |
258 APIPermissionSet expected_apis; | 262 APIPermissionSet expected_apis; |
259 | 263 |
260 const APIPermissionInfo* permission_info = | 264 const APIPermissionInfo* permission_info = |
261 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); | 265 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket); |
262 | 266 |
263 apis.insert(APIPermission::kTab); | 267 apis.insert(APIPermission::kAudioCapture); |
264 apis.insert(APIPermission::kBackground); | 268 apis.insert(APIPermission::kDns); |
265 permission = permission_info->CreateAPIPermission(); | 269 permission = permission_info->CreateAPIPermission(); |
266 { | 270 { |
267 scoped_ptr<base::ListValue> value(new base::ListValue()); | 271 scoped_ptr<base::ListValue> value(new base::ListValue()); |
268 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); | 272 value->Append(new base::StringValue("tcp-connect:*.example.com:80")); |
269 value->Append(new base::StringValue("udp-bind::8080")); | 273 value->Append(new base::StringValue("udp-bind::8080")); |
270 value->Append(new base::StringValue("udp-send-to::8888")); | 274 value->Append(new base::StringValue("udp-send-to::8888")); |
271 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); | 275 ASSERT_TRUE(permission->FromValue(value.get(), NULL, NULL)); |
272 } | 276 } |
273 apis.insert(permission); | 277 apis.insert(permission); |
274 | 278 |
275 EXPECT_NE(apis, expected_apis); | 279 EXPECT_NE(apis, expected_apis); |
276 | 280 |
277 IPC::Message m; | 281 IPC::Message m; |
278 WriteParam(&m, apis); | 282 WriteParam(&m, apis); |
279 PickleIterator iter(m); | 283 PickleIterator iter(m); |
280 CHECK(ReadParam(&m, &iter, &expected_apis)); | 284 CHECK(ReadParam(&m, &iter, &expected_apis)); |
281 EXPECT_EQ(apis, expected_apis); | 285 EXPECT_EQ(apis, expected_apis); |
282 } | 286 } |
283 | 287 |
284 TEST(APIPermissionSetTest, ImplicitPermissions) { | |
285 APIPermissionSet apis; | |
286 apis.insert(APIPermission::kFileSystemWrite); | |
287 apis.AddImpliedPermissions(); | |
288 | |
289 EXPECT_EQ(apis.find(APIPermission::kFileSystemWrite)->id(), | |
290 APIPermission::kFileSystemWrite); | |
291 EXPECT_EQ(apis.size(), 1u); | |
292 | |
293 apis.erase(APIPermission::kFileSystemWrite); | |
294 apis.insert(APIPermission::kFileSystemDirectory); | |
295 apis.AddImpliedPermissions(); | |
296 | |
297 EXPECT_EQ(apis.find(APIPermission::kFileSystemDirectory)->id(), | |
298 APIPermission::kFileSystemDirectory); | |
299 EXPECT_EQ(apis.size(), 1u); | |
300 | |
301 apis.insert(APIPermission::kFileSystemWrite); | |
302 apis.AddImpliedPermissions(); | |
303 | |
304 EXPECT_EQ(apis.find(APIPermission::kFileSystemWrite)->id(), | |
305 APIPermission::kFileSystemWrite); | |
306 EXPECT_EQ(apis.find(APIPermission::kFileSystemDirectory)->id(), | |
307 APIPermission::kFileSystemDirectory); | |
308 EXPECT_EQ(apis.find(APIPermission::kFileSystemWriteDirectory)->id(), | |
309 APIPermission::kFileSystemWriteDirectory); | |
310 EXPECT_EQ(apis.size(), 3u); | |
311 } | |
312 | |
313 } // namespace extensions | 288 } // namespace extensions |
OLD | NEW |