OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/common/extensions/extension_permission_set.h" | 5 #include "chrome/common/extensions/extension_permission_set.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/memory/singleton.h" | 10 #include "base/memory/singleton.h" |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 RegisterHostedAppPermission( | 240 RegisterHostedAppPermission( |
241 ExtensionAPIPermission::kGeolocation, "geolocation", | 241 ExtensionAPIPermission::kGeolocation, "geolocation", |
242 IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION, | 242 IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION, |
243 ExtensionPermissionMessage::kGeolocation); | 243 ExtensionPermissionMessage::kGeolocation); |
244 RegisterHostedAppPermission( | 244 RegisterHostedAppPermission( |
245 ExtensionAPIPermission::kNotification, "notifications", 0, | 245 ExtensionAPIPermission::kNotification, "notifications", 0, |
246 ExtensionPermissionMessage::kNone); | 246 ExtensionPermissionMessage::kNone); |
247 RegisterHostedAppPermission( | 247 RegisterHostedAppPermission( |
248 ExtensionAPIPermission::kUnlimitedStorage, "unlimitedStorage", 0, | 248 ExtensionAPIPermission::kUnlimitedStorage, "unlimitedStorage", 0, |
249 ExtensionPermissionMessage::kNone); | 249 ExtensionPermissionMessage::kNone); |
| 250 RegisterHostedAppPermission( |
| 251 ExtensionAPIPermission::kPermissions, "permissions", 0, |
| 252 ExtensionPermissionMessage::kNone); |
250 | 253 |
251 // Hosted app and private permissions. | 254 // Hosted app and private permissions. |
252 RegisterPermission( | 255 RegisterPermission( |
253 ExtensionAPIPermission::kChromeAuthPrivate, "chromeAuthPrivate", 0, | 256 ExtensionAPIPermission::kChromeAuthPrivate, "chromeAuthPrivate", 0, |
254 ExtensionPermissionMessage::kNone, | 257 ExtensionPermissionMessage::kNone, |
255 true, true, false, false); | 258 true, true, false, false); |
256 RegisterPermission( | 259 RegisterPermission( |
257 ExtensionAPIPermission::kWebstorePrivate, "webstorePrivate", 0, | 260 ExtensionAPIPermission::kWebstorePrivate, "webstorePrivate", 0, |
258 ExtensionPermissionMessage::kNone, | 261 ExtensionPermissionMessage::kNone, |
259 true, true, false, false); | 262 true, true, false, false); |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
426 : apis_(apis), | 429 : apis_(apis), |
427 scriptable_hosts_(scriptable_hosts) { | 430 scriptable_hosts_(scriptable_hosts) { |
428 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); | 431 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); |
429 InitEffectiveHosts(); | 432 InitEffectiveHosts(); |
430 } | 433 } |
431 | 434 |
432 ExtensionPermissionSet::~ExtensionPermissionSet() { | 435 ExtensionPermissionSet::~ExtensionPermissionSet() { |
433 } | 436 } |
434 | 437 |
435 // static | 438 // static |
| 439 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( |
| 440 const ExtensionPermissionSet* set1, |
| 441 const ExtensionPermissionSet* set2) { |
| 442 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); |
| 443 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; |
| 444 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
| 445 |
| 446 ExtensionAPIPermissionSet apis; |
| 447 std::set_difference(set1_safe->apis().begin(), set1_safe->apis().end(), |
| 448 set2_safe->apis().begin(), set2_safe->apis().end(), |
| 449 std::insert_iterator<ExtensionAPIPermissionSet>( |
| 450 apis, apis.begin())); |
| 451 |
| 452 URLPatternSet explicit_hosts; |
| 453 URLPatternSet::CreateDifference(set1_safe->explicit_hosts(), |
| 454 set2_safe->explicit_hosts(), |
| 455 &explicit_hosts); |
| 456 |
| 457 URLPatternSet scriptable_hosts; |
| 458 URLPatternSet::CreateDifference(set1_safe->scriptable_hosts(), |
| 459 set2_safe->scriptable_hosts(), |
| 460 &scriptable_hosts); |
| 461 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
| 462 } |
| 463 |
| 464 // static |
| 465 ExtensionPermissionSet* ExtensionPermissionSet::CreateIntersection( |
| 466 const ExtensionPermissionSet* set1, |
| 467 const ExtensionPermissionSet* set2) { |
| 468 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); |
| 469 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; |
| 470 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
| 471 |
| 472 ExtensionAPIPermissionSet apis; |
| 473 std::set_intersection(set1_safe->apis().begin(), set1_safe->apis().end(), |
| 474 set2_safe->apis().begin(), set2_safe->apis().end(), |
| 475 std::insert_iterator<ExtensionAPIPermissionSet>( |
| 476 apis, apis.begin())); |
| 477 URLPatternSet explicit_hosts; |
| 478 URLPatternSet::CreateIntersection(set1_safe->explicit_hosts(), |
| 479 set2_safe->explicit_hosts(), |
| 480 &explicit_hosts); |
| 481 |
| 482 URLPatternSet scriptable_hosts; |
| 483 URLPatternSet::CreateIntersection(set1_safe->scriptable_hosts(), |
| 484 set2_safe->scriptable_hosts(), |
| 485 &scriptable_hosts); |
| 486 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
| 487 } |
| 488 // static |
436 ExtensionPermissionSet* ExtensionPermissionSet::CreateUnion( | 489 ExtensionPermissionSet* ExtensionPermissionSet::CreateUnion( |
437 const ExtensionPermissionSet* set1, | 490 const ExtensionPermissionSet* set1, |
438 const ExtensionPermissionSet* set2) { | 491 const ExtensionPermissionSet* set2) { |
439 ExtensionPermissionSet empty; | 492 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); |
440 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? &empty : set1; | 493 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; |
441 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? &empty : set2; | 494 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
442 | 495 |
443 ExtensionAPIPermissionSet apis; | 496 ExtensionAPIPermissionSet apis; |
444 std::set_union(set1_safe->apis().begin(), set1_safe->apis().end(), | 497 std::set_union(set1_safe->apis().begin(), set1_safe->apis().end(), |
445 set2_safe->apis().begin(), set2_safe->apis().end(), | 498 set2_safe->apis().begin(), set2_safe->apis().end(), |
446 std::insert_iterator<ExtensionAPIPermissionSet>( | 499 std::insert_iterator<ExtensionAPIPermissionSet>( |
447 apis, apis.begin())); | 500 apis, apis.begin())); |
448 | 501 |
449 URLPatternSet explicit_hosts; | 502 URLPatternSet explicit_hosts; |
450 URLPatternSet scriptable_hosts; | |
451 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), | 503 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), |
452 set2_safe->explicit_hosts(), | 504 set2_safe->explicit_hosts(), |
453 &explicit_hosts); | 505 &explicit_hosts); |
| 506 |
| 507 URLPatternSet scriptable_hosts; |
454 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), | 508 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), |
455 set2_safe->scriptable_hosts(), | 509 set2_safe->scriptable_hosts(), |
456 &scriptable_hosts); | 510 &scriptable_hosts); |
457 | 511 |
458 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); | 512 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
459 } | 513 } |
460 | 514 |
| 515 bool ExtensionPermissionSet::operator==( |
| 516 const ExtensionPermissionSet& rhs) const { |
| 517 return apis_ == rhs.apis_ && |
| 518 scriptable_hosts_ == rhs.scriptable_hosts_ && |
| 519 explicit_hosts_ == rhs.explicit_hosts_; |
| 520 } |
| 521 |
| 522 bool ExtensionPermissionSet::Contains(const ExtensionPermissionSet& set) const { |
| 523 // Every set includes the empty set. |
| 524 if (set.IsEmpty()) |
| 525 return true; |
| 526 |
| 527 if (!std::includes(apis_.begin(), apis_.end(), |
| 528 set.apis().begin(), set.apis().end())) |
| 529 return false; |
| 530 |
| 531 if (!explicit_hosts().Contains(set.explicit_hosts())) |
| 532 return false; |
| 533 |
| 534 if (!scriptable_hosts().Contains(set.scriptable_hosts())) |
| 535 return false; |
| 536 |
| 537 return true; |
| 538 } |
| 539 |
461 std::set<std::string> ExtensionPermissionSet::GetAPIsAsStrings() const { | 540 std::set<std::string> ExtensionPermissionSet::GetAPIsAsStrings() const { |
462 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); | 541 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
463 std::set<std::string> apis_str; | 542 std::set<std::string> apis_str; |
464 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); | 543 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); |
465 i != apis_.end(); ++i) { | 544 i != apis_.end(); ++i) { |
466 ExtensionAPIPermission* permission = info->GetByID(*i); | 545 ExtensionAPIPermission* permission = info->GetByID(*i); |
467 if (permission) | 546 if (permission) |
468 apis_str.insert(permission->name()); | 547 apis_str.insert(permission->name()); |
469 } | 548 } |
470 return apis_str; | 549 return apis_str; |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
782 std::set<std::string> new_hosts_set = GetDistinctHosts(new_list, false); | 861 std::set<std::string> new_hosts_set = GetDistinctHosts(new_list, false); |
783 std::set<std::string> old_hosts_set = GetDistinctHosts(old_list, false); | 862 std::set<std::string> old_hosts_set = GetDistinctHosts(old_list, false); |
784 std::set<std::string> new_hosts_only; | 863 std::set<std::string> new_hosts_only; |
785 | 864 |
786 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), | 865 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), |
787 old_hosts_set.begin(), old_hosts_set.end(), | 866 old_hosts_set.begin(), old_hosts_set.end(), |
788 std::inserter(new_hosts_only, new_hosts_only.begin())); | 867 std::inserter(new_hosts_only, new_hosts_only.begin())); |
789 | 868 |
790 return !new_hosts_only.empty(); | 869 return !new_hosts_only.empty(); |
791 } | 870 } |
OLD | NEW |