Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(498)

Side by Side Diff: chrome/common/extensions/permissions/permission_set_unittest.cc

Issue 10692160: Support socket endpoint permissions for AppsV2 Socket API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Support socket endpoint permissions Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/json/json_file_value_serializer.h" 6 #include "base/json/json_file_value_serializer.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "chrome/common/chrome_paths.h" 10 #include "chrome/common/chrome_paths.h"
11 #include "chrome/common/chrome_switches.h" 11 #include "chrome/common/chrome_switches.h"
12 #include "chrome/common/extensions/extension.h" 12 #include "chrome/common/extensions/extension.h"
13 #include "chrome/common/extensions/extension_manifest_constants.h" 13 #include "chrome/common/extensions/extension_manifest_constants.h"
14 #include "chrome/common/extensions/extension_error_utils.h" 14 #include "chrome/common/extensions/extension_error_utils.h"
15 #include "chrome/common/extensions/permissions/permission_set.h" 15 #include "chrome/common/extensions/permissions/permission_set.h"
16 #include "chrome/common/extensions/permissions/permissions_info.h" 16 #include "chrome/common/extensions/permissions/permissions_info.h"
17 #include "chrome/common/extensions/permissions/socket_permission.h"
17 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
18 19
19 using extensions::Extension; 20 using extensions::Extension;
20 21
21 namespace errors = extension_manifest_errors; 22 namespace errors = extension_manifest_errors;
22 namespace keys = extension_manifest_keys; 23 namespace keys = extension_manifest_keys;
23 namespace values = extension_manifest_values; 24 namespace values = extension_manifest_values;
24 namespace { 25 namespace {
25 26
26 static scoped_refptr<Extension> LoadManifest(const std::string& dir, 27 static scoped_refptr<Extension> LoadManifest(const std::string& dir,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 } // namespace 85 } // namespace
85 86
86 namespace extensions { 87 namespace extensions {
87 88
88 class PermissionsTest : public testing::Test { 89 class PermissionsTest : public testing::Test {
89 }; 90 };
90 91
91 // Tests GetByID. 92 // Tests GetByID.
92 TEST(PermissionsTest, GetByID) { 93 TEST(PermissionsTest, GetByID) {
93 PermissionsInfo* info = PermissionsInfo::GetInstance(); 94 PermissionsInfo* info = PermissionsInfo::GetInstance();
94 APIPermissionSet ids = info->GetAll(); 95 APIPermissionSet apis = info->GetAll();
95 for (APIPermissionSet::iterator i = ids.begin(); 96 for (APIPermissionSet::const_iterator i = apis.begin();
96 i != ids.end(); ++i) { 97 i != apis.end(); ++i) {
97 EXPECT_EQ(*i, info->GetByID(*i)->id()); 98 EXPECT_EQ(i->id(), i->permission()->id());
98 } 99 }
99 } 100 }
100 101
101 // Tests that GetByName works with normal permission names and aliases. 102 // Tests that GetByName works with normal permission names and aliases.
102 TEST(PermissionsTest, GetByName) { 103 TEST(PermissionsTest, GetByName) {
103 PermissionsInfo* info = PermissionsInfo::GetInstance(); 104 PermissionsInfo* info = PermissionsInfo::GetInstance();
104 EXPECT_EQ(APIPermission::kTab, info->GetByName("tabs")->id()); 105 EXPECT_EQ(APIPermission::kTab, info->GetByName("tabs")->id());
105 EXPECT_EQ(APIPermission::kManagement, 106 EXPECT_EQ(APIPermission::kManagement,
106 info->GetByName("management")->id()); 107 info->GetByName("management")->id());
107 EXPECT_FALSE(info->GetByName("alsdkfjasldkfj")); 108 EXPECT_FALSE(info->GetByName("alsdkfjasldkfj"));
108 } 109 }
109 110
110 TEST(PermissionsTest, GetAll) { 111 TEST(PermissionsTest, GetAll) {
111 size_t count = 0; 112 size_t count = 0;
112 PermissionsInfo* info = PermissionsInfo::GetInstance(); 113 PermissionsInfo* info = PermissionsInfo::GetInstance();
113 APIPermissionSet apis = info->GetAll(); 114 APIPermissionSet apis = info->GetAll();
114 for (APIPermissionSet::iterator api = apis.begin(); 115 for (APIPermissionSet::const_iterator api = apis.begin();
115 api != apis.end(); ++api) { 116 api != apis.end(); ++api) {
116 // Make sure only the valid permission IDs get returned. 117 // Make sure only the valid permission IDs get returned.
117 EXPECT_NE(APIPermission::kInvalid, *api); 118 EXPECT_NE(APIPermission::kInvalid, api->id());
118 EXPECT_NE(APIPermission::kUnknown, *api); 119 EXPECT_NE(APIPermission::kUnknown, api->id());
119 count++; 120 count++;
120 } 121 }
121 EXPECT_EQ(count, info->get_permission_count()); 122 EXPECT_EQ(count, info->get_permission_count());
122 } 123 }
123 124
124 TEST(PermissionsTest, GetAllByName) { 125 TEST(PermissionsTest, GetAllByName) {
125 std::set<std::string> names; 126 std::set<std::string> names;
126 names.insert("background"); 127 names.insert("background");
127 names.insert("management"); 128 names.insert("management");
128 129
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 GURL("http://test.google.com/"))); 254 GURL("http://test.google.com/")));
254 ASSERT_TRUE(perm_set->HasExplicitAccessToOrigin( 255 ASSERT_TRUE(perm_set->HasExplicitAccessToOrigin(
255 GURL("http://www.example.com"))); 256 GURL("http://www.example.com")));
256 ASSERT_TRUE(perm_set->HasEffectiveAccessToURL( 257 ASSERT_TRUE(perm_set->HasEffectiveAccessToURL(
257 GURL("http://www.example.com"))); 258 GURL("http://www.example.com")));
258 ASSERT_FALSE(perm_set->HasExplicitAccessToOrigin( 259 ASSERT_FALSE(perm_set->HasExplicitAccessToOrigin(
259 GURL("http://test.example.com"))); 260 GURL("http://test.example.com")));
260 } 261 }
261 262
262 TEST(PermissionsTest, CreateUnion) { 263 TEST(PermissionsTest, CreateUnion) {
264 scoped_refptr<APIPermissionDetail> detail;
265
263 APIPermissionSet apis1; 266 APIPermissionSet apis1;
264 APIPermissionSet apis2; 267 APIPermissionSet apis2;
265 APIPermissionSet expected_apis; 268 APIPermissionSet expected_apis;
266 269
267 URLPatternSet explicit_hosts1; 270 URLPatternSet explicit_hosts1;
268 URLPatternSet explicit_hosts2; 271 URLPatternSet explicit_hosts2;
269 URLPatternSet expected_explicit_hosts; 272 URLPatternSet expected_explicit_hosts;
270 273
271 URLPatternSet scriptable_hosts1; 274 URLPatternSet scriptable_hosts1;
272 URLPatternSet scriptable_hosts2; 275 URLPatternSet scriptable_hosts2;
273 URLPatternSet expected_scriptable_hosts; 276 URLPatternSet expected_scriptable_hosts;
274 277
275 URLPatternSet effective_hosts; 278 URLPatternSet effective_hosts;
276 279
277 scoped_refptr<PermissionSet> set1; 280 scoped_refptr<PermissionSet> set1;
278 scoped_refptr<PermissionSet> set2; 281 scoped_refptr<PermissionSet> set2;
279 scoped_refptr<PermissionSet> union_set; 282 scoped_refptr<PermissionSet> union_set;
280 283
284 APIPermission* permission =
285 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
286 detail = permission->CreateDetail();
287 {
288 scoped_ptr<ListValue> value(new ListValue());
289 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
290 value->Append(Value::CreateStringValue("udp-bind::8080"));
291 value->Append(Value::CreateStringValue("udp-send-to::8888"));
292 if (!detail->FromValue(value.get())) {
293 NOTREACHED();
294 }
295 }
296
281 // Union with an empty set. 297 // Union with an empty set.
282 apis1.insert(APIPermission::kTab); 298 apis1.insert(APIPermission::kTab);
283 apis1.insert(APIPermission::kBackground); 299 apis1.insert(APIPermission::kBackground);
300 apis1.insert(detail);
284 expected_apis.insert(APIPermission::kTab); 301 expected_apis.insert(APIPermission::kTab);
285 expected_apis.insert(APIPermission::kBackground); 302 expected_apis.insert(APIPermission::kBackground);
303 expected_apis.insert(detail);
286 304
287 AddPattern(&explicit_hosts1, "http://*.google.com/*"); 305 AddPattern(&explicit_hosts1, "http://*.google.com/*");
288 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); 306 AddPattern(&expected_explicit_hosts, "http://*.google.com/*");
289 AddPattern(&effective_hosts, "http://*.google.com/*"); 307 AddPattern(&effective_hosts, "http://*.google.com/*");
290 308
291 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1); 309 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1);
292 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 310 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
293 union_set = PermissionSet::CreateUnion(set1.get(), set2.get()); 311 union_set = PermissionSet::CreateUnion(set1.get(), set2.get());
294 EXPECT_TRUE(set1->Contains(*set2)); 312 EXPECT_TRUE(set1->Contains(*set2));
295 EXPECT_TRUE(set1->Contains(*union_set)); 313 EXPECT_TRUE(set1->Contains(*union_set));
296 EXPECT_FALSE(set2->Contains(*set1)); 314 EXPECT_FALSE(set2->Contains(*set1));
297 EXPECT_FALSE(set2->Contains(*union_set)); 315 EXPECT_FALSE(set2->Contains(*union_set));
298 EXPECT_TRUE(union_set->Contains(*set1)); 316 EXPECT_TRUE(union_set->Contains(*set1));
299 EXPECT_TRUE(union_set->Contains(*set2)); 317 EXPECT_TRUE(union_set->Contains(*set2));
300 318
301 EXPECT_FALSE(union_set->HasEffectiveFullAccess()); 319 EXPECT_FALSE(union_set->HasEffectiveFullAccess());
302 EXPECT_EQ(expected_apis, union_set->apis()); 320 EXPECT_EQ(expected_apis, union_set->apis());
303 EXPECT_EQ(expected_explicit_hosts, union_set->explicit_hosts()); 321 EXPECT_EQ(expected_explicit_hosts, union_set->explicit_hosts());
304 EXPECT_EQ(expected_scriptable_hosts, union_set->scriptable_hosts()); 322 EXPECT_EQ(expected_scriptable_hosts, union_set->scriptable_hosts());
305 EXPECT_EQ(expected_explicit_hosts, union_set->effective_hosts()); 323 EXPECT_EQ(expected_explicit_hosts, union_set->effective_hosts());
306 324
307 // Now use a real second set. 325 // Now use a real second set.
308 apis2.insert(APIPermission::kTab); 326 apis2.insert(APIPermission::kTab);
309 apis2.insert(APIPermission::kProxy); 327 apis2.insert(APIPermission::kProxy);
310 apis2.insert(APIPermission::kClipboardWrite); 328 apis2.insert(APIPermission::kClipboardWrite);
311 apis2.insert(APIPermission::kPlugin); 329 apis2.insert(APIPermission::kPlugin);
330
331 detail = permission->CreateDetail();
332 {
333 scoped_ptr<ListValue> value(new ListValue());
334 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
335 value->Append(Value::CreateStringValue("udp-send-to::8899"));
336 if (!detail->FromValue(value.get())) {
337 NOTREACHED();
338 }
339 }
340 apis2.insert(detail);
341
312 expected_apis.insert(APIPermission::kTab); 342 expected_apis.insert(APIPermission::kTab);
313 expected_apis.insert(APIPermission::kProxy); 343 expected_apis.insert(APIPermission::kProxy);
314 expected_apis.insert(APIPermission::kClipboardWrite); 344 expected_apis.insert(APIPermission::kClipboardWrite);
315 expected_apis.insert(APIPermission::kPlugin); 345 expected_apis.insert(APIPermission::kPlugin);
316 346
347 detail = permission->CreateDetail();
348 {
349 scoped_ptr<ListValue> value(new ListValue());
350 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
351 value->Append(Value::CreateStringValue("udp-bind::8080"));
352 value->Append(Value::CreateStringValue("udp-send-to::8888"));
353 value->Append(Value::CreateStringValue("udp-send-to::8899"));
354 if (!detail->FromValue(value.get())) {
355 NOTREACHED();
356 }
357 }
358 // Insert a new detail socket permisssion which will replace the old one.
359 expected_apis.insert(detail);
360
317 AddPattern(&explicit_hosts2, "http://*.example.com/*"); 361 AddPattern(&explicit_hosts2, "http://*.example.com/*");
318 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); 362 AddPattern(&scriptable_hosts2, "http://*.google.com/*");
319 AddPattern(&expected_explicit_hosts, "http://*.example.com/*"); 363 AddPattern(&expected_explicit_hosts, "http://*.example.com/*");
320 AddPattern(&expected_scriptable_hosts, "http://*.google.com/*"); 364 AddPattern(&expected_scriptable_hosts, "http://*.google.com/*");
321 365
322 URLPatternSet::CreateUnion( 366 URLPatternSet::CreateUnion(
323 explicit_hosts2, scriptable_hosts2, &effective_hosts); 367 explicit_hosts2, scriptable_hosts2, &effective_hosts);
324 368
325 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 369 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
326 union_set = PermissionSet::CreateUnion(set1.get(), set2.get()); 370 union_set = PermissionSet::CreateUnion(set1.get(), set2.get());
327 371
328 EXPECT_FALSE(set1->Contains(*set2)); 372 EXPECT_FALSE(set1->Contains(*set2));
329 EXPECT_FALSE(set1->Contains(*union_set)); 373 EXPECT_FALSE(set1->Contains(*union_set));
330 EXPECT_FALSE(set2->Contains(*set1)); 374 EXPECT_FALSE(set2->Contains(*set1));
331 EXPECT_FALSE(set2->Contains(*union_set)); 375 EXPECT_FALSE(set2->Contains(*union_set));
332 EXPECT_TRUE(union_set->Contains(*set1)); 376 EXPECT_TRUE(union_set->Contains(*set1));
333 EXPECT_TRUE(union_set->Contains(*set2)); 377 EXPECT_TRUE(union_set->Contains(*set2));
334 378
335 EXPECT_TRUE(union_set->HasEffectiveFullAccess()); 379 EXPECT_TRUE(union_set->HasEffectiveFullAccess());
336 EXPECT_TRUE(union_set->HasEffectiveAccessToAllHosts()); 380 EXPECT_TRUE(union_set->HasEffectiveAccessToAllHosts());
337 EXPECT_EQ(expected_apis, union_set->apis()); 381 EXPECT_EQ(expected_apis, union_set->apis());
338 EXPECT_EQ(expected_explicit_hosts, union_set->explicit_hosts()); 382 EXPECT_EQ(expected_explicit_hosts, union_set->explicit_hosts());
339 EXPECT_EQ(expected_scriptable_hosts, union_set->scriptable_hosts()); 383 EXPECT_EQ(expected_scriptable_hosts, union_set->scriptable_hosts());
340 EXPECT_EQ(effective_hosts, union_set->effective_hosts()); 384 EXPECT_EQ(effective_hosts, union_set->effective_hosts());
341 } 385 }
342 386
343 TEST(PermissionsTest, CreateIntersection) { 387 TEST(PermissionsTest, CreateIntersection) {
388 scoped_refptr<APIPermissionDetail> detail;
389
344 APIPermissionSet apis1; 390 APIPermissionSet apis1;
345 APIPermissionSet apis2; 391 APIPermissionSet apis2;
346 APIPermissionSet expected_apis; 392 APIPermissionSet expected_apis;
347 393
348 URLPatternSet explicit_hosts1; 394 URLPatternSet explicit_hosts1;
349 URLPatternSet explicit_hosts2; 395 URLPatternSet explicit_hosts2;
350 URLPatternSet expected_explicit_hosts; 396 URLPatternSet expected_explicit_hosts;
351 397
352 URLPatternSet scriptable_hosts1; 398 URLPatternSet scriptable_hosts1;
353 URLPatternSet scriptable_hosts2; 399 URLPatternSet scriptable_hosts2;
354 URLPatternSet expected_scriptable_hosts; 400 URLPatternSet expected_scriptable_hosts;
355 401
356 URLPatternSet effective_hosts; 402 URLPatternSet effective_hosts;
357 403
358 scoped_refptr<PermissionSet> set1; 404 scoped_refptr<PermissionSet> set1;
359 scoped_refptr<PermissionSet> set2; 405 scoped_refptr<PermissionSet> set2;
360 scoped_refptr<PermissionSet> new_set; 406 scoped_refptr<PermissionSet> new_set;
361 407
408 APIPermission* permission =
409 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
410
362 // Intersection with an empty set. 411 // Intersection with an empty set.
363 apis1.insert(APIPermission::kTab); 412 apis1.insert(APIPermission::kTab);
364 apis1.insert(APIPermission::kBackground); 413 apis1.insert(APIPermission::kBackground);
414 detail = permission->CreateDetail();
415 {
416 scoped_ptr<ListValue> value(new ListValue());
417 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
418 value->Append(Value::CreateStringValue("udp-bind::8080"));
419 value->Append(Value::CreateStringValue("udp-send-to::8888"));
420 if (!detail->FromValue(value.get())) {
421 NOTREACHED();
422 }
423 }
424 apis1.insert(detail);
365 425
366 AddPattern(&explicit_hosts1, "http://*.google.com/*"); 426 AddPattern(&explicit_hosts1, "http://*.google.com/*");
367 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); 427 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*");
368 428
369 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1); 429 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1);
370 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 430 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
371 new_set = PermissionSet::CreateIntersection(set1.get(), set2.get()); 431 new_set = PermissionSet::CreateIntersection(set1.get(), set2.get());
372 EXPECT_TRUE(set1->Contains(*new_set)); 432 EXPECT_TRUE(set1->Contains(*new_set));
373 EXPECT_TRUE(set2->Contains(*new_set)); 433 EXPECT_TRUE(set2->Contains(*new_set));
374 EXPECT_TRUE(set1->Contains(*set2)); 434 EXPECT_TRUE(set1->Contains(*set2));
375 EXPECT_FALSE(set2->Contains(*set1)); 435 EXPECT_FALSE(set2->Contains(*set1));
376 EXPECT_FALSE(new_set->Contains(*set1)); 436 EXPECT_FALSE(new_set->Contains(*set1));
377 EXPECT_TRUE(new_set->Contains(*set2)); 437 EXPECT_TRUE(new_set->Contains(*set2));
378 438
379 EXPECT_TRUE(new_set->IsEmpty()); 439 EXPECT_TRUE(new_set->IsEmpty());
380 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); 440 EXPECT_FALSE(new_set->HasEffectiveFullAccess());
381 EXPECT_EQ(expected_apis, new_set->apis()); 441 EXPECT_EQ(expected_apis, new_set->apis());
382 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); 442 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts());
383 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); 443 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts());
384 EXPECT_EQ(expected_explicit_hosts, new_set->effective_hosts()); 444 EXPECT_EQ(expected_explicit_hosts, new_set->effective_hosts());
385 445
386 // Now use a real second set. 446 // Now use a real second set.
387 apis2.insert(APIPermission::kTab); 447 apis2.insert(APIPermission::kTab);
388 apis2.insert(APIPermission::kProxy); 448 apis2.insert(APIPermission::kProxy);
389 apis2.insert(APIPermission::kClipboardWrite); 449 apis2.insert(APIPermission::kClipboardWrite);
390 apis2.insert(APIPermission::kPlugin); 450 apis2.insert(APIPermission::kPlugin);
451 detail = permission->CreateDetail();
452 {
453 scoped_ptr<ListValue> value(new ListValue());
454 value->Append(Value::CreateStringValue("udp-bind::8080"));
455 value->Append(Value::CreateStringValue("udp-send-to::8888"));
456 value->Append(Value::CreateStringValue("udp-send-to::8899"));
457 if (!detail->FromValue(value.get())) {
458 NOTREACHED();
459 }
460 }
461 apis2.insert(detail);
462
391 expected_apis.insert(APIPermission::kTab); 463 expected_apis.insert(APIPermission::kTab);
464 detail = permission->CreateDetail();
465 {
466 scoped_ptr<ListValue> value(new ListValue());
467 value->Append(Value::CreateStringValue("udp-bind::8080"));
468 value->Append(Value::CreateStringValue("udp-send-to::8888"));
469 if (!detail->FromValue(value.get())) {
470 NOTREACHED();
471 }
472 }
473 expected_apis.insert(detail);
392 474
393 AddPattern(&explicit_hosts2, "http://*.example.com/*"); 475 AddPattern(&explicit_hosts2, "http://*.example.com/*");
394 AddPattern(&explicit_hosts2, "http://*.google.com/*"); 476 AddPattern(&explicit_hosts2, "http://*.google.com/*");
395 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); 477 AddPattern(&scriptable_hosts2, "http://*.google.com/*");
396 AddPattern(&expected_explicit_hosts, "http://*.google.com/*"); 478 AddPattern(&expected_explicit_hosts, "http://*.google.com/*");
397 479
398 effective_hosts.ClearPatterns(); 480 effective_hosts.ClearPatterns();
399 AddPattern(&effective_hosts, "http://*.google.com/*"); 481 AddPattern(&effective_hosts, "http://*.google.com/*");
400 482
401 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 483 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
402 new_set = PermissionSet::CreateIntersection(set1.get(), set2.get()); 484 new_set = PermissionSet::CreateIntersection(set1.get(), set2.get());
403 485
404 EXPECT_TRUE(set1->Contains(*new_set)); 486 EXPECT_TRUE(set1->Contains(*new_set));
405 EXPECT_TRUE(set2->Contains(*new_set)); 487 EXPECT_TRUE(set2->Contains(*new_set));
406 EXPECT_FALSE(set1->Contains(*set2)); 488 EXPECT_FALSE(set1->Contains(*set2));
407 EXPECT_FALSE(set2->Contains(*set1)); 489 EXPECT_FALSE(set2->Contains(*set1));
408 EXPECT_FALSE(new_set->Contains(*set1)); 490 EXPECT_FALSE(new_set->Contains(*set1));
409 EXPECT_FALSE(new_set->Contains(*set2)); 491 EXPECT_FALSE(new_set->Contains(*set2));
410 492
411 EXPECT_FALSE(new_set->HasEffectiveFullAccess()); 493 EXPECT_FALSE(new_set->HasEffectiveFullAccess());
412 EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts()); 494 EXPECT_FALSE(new_set->HasEffectiveAccessToAllHosts());
413 EXPECT_EQ(expected_apis, new_set->apis()); 495 EXPECT_EQ(expected_apis, new_set->apis());
414 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts()); 496 EXPECT_EQ(expected_explicit_hosts, new_set->explicit_hosts());
415 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts()); 497 EXPECT_EQ(expected_scriptable_hosts, new_set->scriptable_hosts());
416 EXPECT_EQ(effective_hosts, new_set->effective_hosts()); 498 EXPECT_EQ(effective_hosts, new_set->effective_hosts());
417 } 499 }
418 500
419 TEST(PermissionsTest, CreateDifference) { 501 TEST(PermissionsTest, CreateDifference) {
502 scoped_refptr<APIPermissionDetail> detail;
503
420 APIPermissionSet apis1; 504 APIPermissionSet apis1;
421 APIPermissionSet apis2; 505 APIPermissionSet apis2;
422 APIPermissionSet expected_apis; 506 APIPermissionSet expected_apis;
423 507
424 URLPatternSet explicit_hosts1; 508 URLPatternSet explicit_hosts1;
425 URLPatternSet explicit_hosts2; 509 URLPatternSet explicit_hosts2;
426 URLPatternSet expected_explicit_hosts; 510 URLPatternSet expected_explicit_hosts;
427 511
428 URLPatternSet scriptable_hosts1; 512 URLPatternSet scriptable_hosts1;
429 URLPatternSet scriptable_hosts2; 513 URLPatternSet scriptable_hosts2;
430 URLPatternSet expected_scriptable_hosts; 514 URLPatternSet expected_scriptable_hosts;
431 515
432 URLPatternSet effective_hosts; 516 URLPatternSet effective_hosts;
433 517
434 scoped_refptr<PermissionSet> set1; 518 scoped_refptr<PermissionSet> set1;
435 scoped_refptr<PermissionSet> set2; 519 scoped_refptr<PermissionSet> set2;
436 scoped_refptr<PermissionSet> new_set; 520 scoped_refptr<PermissionSet> new_set;
437 521
522 APIPermission* permission =
523 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
524
438 // Difference with an empty set. 525 // Difference with an empty set.
439 apis1.insert(APIPermission::kTab); 526 apis1.insert(APIPermission::kTab);
440 apis1.insert(APIPermission::kBackground); 527 apis1.insert(APIPermission::kBackground);
528 detail = permission->CreateDetail();
529 {
530 scoped_ptr<ListValue> value(new ListValue());
531 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
532 value->Append(Value::CreateStringValue("udp-bind::8080"));
533 value->Append(Value::CreateStringValue("udp-send-to::8888"));
534 if (!detail->FromValue(value.get())) {
535 NOTREACHED();
536 }
537 }
538 apis1.insert(detail);
441 539
442 AddPattern(&explicit_hosts1, "http://*.google.com/*"); 540 AddPattern(&explicit_hosts1, "http://*.google.com/*");
443 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*"); 541 AddPattern(&scriptable_hosts1, "http://www.reddit.com/*");
444 542
445 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1); 543 set1 = new PermissionSet(apis1, explicit_hosts1, scriptable_hosts1);
446 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 544 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
447 new_set = PermissionSet::CreateDifference(set1.get(), set2.get()); 545 new_set = PermissionSet::CreateDifference(set1.get(), set2.get());
448 EXPECT_EQ(*set1, *new_set); 546 EXPECT_EQ(*set1, *new_set);
449 547
450 // Now use a real second set. 548 // Now use a real second set.
451 apis2.insert(APIPermission::kTab); 549 apis2.insert(APIPermission::kTab);
452 apis2.insert(APIPermission::kProxy); 550 apis2.insert(APIPermission::kProxy);
453 apis2.insert(APIPermission::kClipboardWrite); 551 apis2.insert(APIPermission::kClipboardWrite);
454 apis2.insert(APIPermission::kPlugin); 552 apis2.insert(APIPermission::kPlugin);
553 detail = permission->CreateDetail();
554 {
555 scoped_ptr<ListValue> value(new ListValue());
556 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
557 value->Append(Value::CreateStringValue("udp-send-to::8899"));
558 if (!detail->FromValue(value.get())) {
559 NOTREACHED();
560 }
561 }
562 apis2.insert(detail);
563
455 expected_apis.insert(APIPermission::kBackground); 564 expected_apis.insert(APIPermission::kBackground);
565 detail = permission->CreateDetail();
566 {
567 scoped_ptr<ListValue> value(new ListValue());
568 value->Append(Value::CreateStringValue("udp-bind::8080"));
569 value->Append(Value::CreateStringValue("udp-send-to::8888"));
miket_OOO 2012/08/06 21:04:06 These tests are all good, just make sure that they
Peng 2012/08/07 21:31:55 Done. I also added some unittests for APIPermissio
570 if (!detail->FromValue(value.get())) {
571 NOTREACHED();
572 }
573 }
574 expected_apis.insert(detail);
456 575
457 AddPattern(&explicit_hosts2, "http://*.example.com/*"); 576 AddPattern(&explicit_hosts2, "http://*.example.com/*");
458 AddPattern(&explicit_hosts2, "http://*.google.com/*"); 577 AddPattern(&explicit_hosts2, "http://*.google.com/*");
459 AddPattern(&scriptable_hosts2, "http://*.google.com/*"); 578 AddPattern(&scriptable_hosts2, "http://*.google.com/*");
460 AddPattern(&expected_scriptable_hosts, "http://www.reddit.com/*"); 579 AddPattern(&expected_scriptable_hosts, "http://www.reddit.com/*");
461 580
462 effective_hosts.ClearPatterns(); 581 effective_hosts.ClearPatterns();
463 AddPattern(&effective_hosts, "http://www.reddit.com/*"); 582 AddPattern(&effective_hosts, "http://www.reddit.com/*");
464 583
465 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2); 584 set2 = new PermissionSet(apis2, explicit_hosts2, scriptable_hosts2);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 // permissions. 680 // permissions.
562 skip.insert(APIPermission::kCookie); 681 skip.insert(APIPermission::kCookie);
563 682
564 // The ime, proxy, and webRequest permissions are warned as part of host 683 // The ime, proxy, and webRequest permissions are warned as part of host
565 // permission checks. 684 // permission checks.
566 skip.insert(APIPermission::kProxy); 685 skip.insert(APIPermission::kProxy);
567 skip.insert(APIPermission::kWebRequest); 686 skip.insert(APIPermission::kWebRequest);
568 skip.insert(APIPermission::kWebRequestBlocking); 687 skip.insert(APIPermission::kWebRequestBlocking);
569 skip.insert(APIPermission::kDeclarativeWebRequest); 688 skip.insert(APIPermission::kDeclarativeWebRequest);
570 689
571
572 // This permission requires explicit user action (context menu handler) 690 // This permission requires explicit user action (context menu handler)
573 // so we won't prompt for it for now. 691 // so we won't prompt for it for now.
574 skip.insert(APIPermission::kFileBrowserHandler); 692 skip.insert(APIPermission::kFileBrowserHandler);
575 693
576 // This permission requires explicit user action (shortcut) so we don't 694 // This permission requires explicit user action (shortcut) so we don't
577 // prompt for it. 695 // prompt for it.
578 skip.insert(APIPermission::kCommands); 696 skip.insert(APIPermission::kCommands);
579 697
580 // These permissions require explicit user action (configuration dialog) 698 // These permissions require explicit user action (configuration dialog)
581 // so we don't prompt for them at install time. 699 // so we don't prompt for them at install time.
(...skipping 26 matching lines...) Expand all
608 726
609 // Platform apps. TODO(miket): must we skip? 727 // Platform apps. TODO(miket): must we skip?
610 skip.insert(APIPermission::kFileSystem); 728 skip.insert(APIPermission::kFileSystem);
611 skip.insert(APIPermission::kSocket); 729 skip.insert(APIPermission::kSocket);
612 skip.insert(APIPermission::kUsb); 730 skip.insert(APIPermission::kUsb);
613 731
614 PermissionsInfo* info = PermissionsInfo::GetInstance(); 732 PermissionsInfo* info = PermissionsInfo::GetInstance();
615 APIPermissionSet permissions = info->GetAll(); 733 APIPermissionSet permissions = info->GetAll();
616 for (APIPermissionSet::const_iterator i = permissions.begin(); 734 for (APIPermissionSet::const_iterator i = permissions.begin();
617 i != permissions.end(); ++i) { 735 i != permissions.end(); ++i) {
618 APIPermission* permission = info->GetByID(*i); 736 const APIPermission* permission = i->permission();
619 EXPECT_TRUE(permission); 737 EXPECT_TRUE(permission);
620 if (skip.count(*i)) { 738 if (skip.count(i->id())) {
621 EXPECT_EQ(PermissionMessage::kNone, permission->message_id()) 739 EXPECT_EQ(PermissionMessage::kNone, permission->message_id())
622 << "unexpected message_id for " << permission->name(); 740 << "unexpected message_id for " << permission->name();
623 } else { 741 } else {
624 EXPECT_NE(PermissionMessage::kNone, permission->message_id()) 742 EXPECT_NE(PermissionMessage::kNone, permission->message_id())
625 << "missing message_id for " << permission->name(); 743 << "missing message_id for " << permission->name();
626 } 744 }
627 } 745 }
628 } 746 }
629 747
630 // Tests the default permissions (empty API permission set). 748 // Tests the default permissions (empty API permission set).
(...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 apis.insert(APIPermission::kWebRequest); 1265 apis.insert(APIPermission::kWebRequest);
1148 apis.insert(APIPermission::kFileBrowserHandler); 1266 apis.insert(APIPermission::kFileBrowserHandler);
1149 EXPECT_EQ(2U, apis.size()); 1267 EXPECT_EQ(2U, apis.size());
1150 1268
1151 scoped_refptr<PermissionSet> perm_set; 1269 scoped_refptr<PermissionSet> perm_set;
1152 perm_set = new PermissionSet(apis, empty_extent, empty_extent); 1270 perm_set = new PermissionSet(apis, empty_extent, empty_extent);
1153 EXPECT_EQ(4U, perm_set->apis().size()); 1271 EXPECT_EQ(4U, perm_set->apis().size());
1154 } 1272 }
1155 1273
1156 } // namespace extensions 1274 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698