| 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 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 419 : apis_(apis), | 422 : apis_(apis), |
| 420 scriptable_hosts_(scriptable_hosts) { | 423 scriptable_hosts_(scriptable_hosts) { |
| 421 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); | 424 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); |
| 422 InitEffectiveHosts(); | 425 InitEffectiveHosts(); |
| 423 } | 426 } |
| 424 | 427 |
| 425 ExtensionPermissionSet::~ExtensionPermissionSet() { | 428 ExtensionPermissionSet::~ExtensionPermissionSet() { |
| 426 } | 429 } |
| 427 | 430 |
| 428 // static | 431 // static |
| 432 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( |
| 433 const ExtensionPermissionSet* set1, |
| 434 const ExtensionPermissionSet* set2) { |
| 435 ExtensionPermissionSet empty; |
| 436 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? &empty : set1; |
| 437 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? &empty : set2; |
| 438 |
| 439 ExtensionAPIPermissionSet apis; |
| 440 std::set_difference(set1_safe->apis().begin(), set1_safe->apis().end(), |
| 441 set2_safe->apis().begin(), set2_safe->apis().end(), |
| 442 std::insert_iterator<ExtensionAPIPermissionSet>( |
| 443 apis, apis.begin())); |
| 444 |
| 445 URLPatternSet explicit_hosts; |
| 446 URLPatternSet::CreateDifference(set1_safe->explicit_hosts(), |
| 447 set2_safe->explicit_hosts(), |
| 448 &explicit_hosts); |
| 449 |
| 450 URLPatternSet scriptable_hosts; |
| 451 URLPatternSet::CreateDifference(set1_safe->scriptable_hosts(), |
| 452 set2_safe->scriptable_hosts(), |
| 453 &scriptable_hosts); |
| 454 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
| 455 } |
| 456 |
| 457 // static |
| 458 ExtensionPermissionSet* ExtensionPermissionSet::CreateIntersection( |
| 459 const ExtensionPermissionSet* set1, |
| 460 const ExtensionPermissionSet* set2) { |
| 461 ExtensionPermissionSet empty; |
| 462 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? &empty : set1; |
| 463 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? &empty : set2; |
| 464 |
| 465 ExtensionAPIPermissionSet apis; |
| 466 std::set_intersection(set1_safe->apis().begin(), set1_safe->apis().end(), |
| 467 set2_safe->apis().begin(), set2_safe->apis().end(), |
| 468 std::insert_iterator<ExtensionAPIPermissionSet>( |
| 469 apis, apis.begin())); |
| 470 URLPatternSet explicit_hosts; |
| 471 URLPatternSet::CreateIntersection(set1_safe->explicit_hosts(), |
| 472 set2_safe->explicit_hosts(), |
| 473 &explicit_hosts); |
| 474 |
| 475 URLPatternSet scriptable_hosts; |
| 476 URLPatternSet::CreateIntersection(set1_safe->scriptable_hosts(), |
| 477 set2_safe->scriptable_hosts(), |
| 478 &scriptable_hosts); |
| 479 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
| 480 } |
| 481 // static |
| 429 ExtensionPermissionSet* ExtensionPermissionSet::CreateUnion( | 482 ExtensionPermissionSet* ExtensionPermissionSet::CreateUnion( |
| 430 const ExtensionPermissionSet* set1, | 483 const ExtensionPermissionSet* set1, |
| 431 const ExtensionPermissionSet* set2) { | 484 const ExtensionPermissionSet* set2) { |
| 432 ExtensionPermissionSet empty; | 485 ExtensionPermissionSet empty; |
| 433 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? &empty : set1; | 486 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? &empty : set1; |
| 434 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? &empty : set2; | 487 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? &empty : set2; |
| 435 | 488 |
| 436 ExtensionAPIPermissionSet apis; | 489 ExtensionAPIPermissionSet apis; |
| 437 std::set_union(set1_safe->apis().begin(), set1_safe->apis().end(), | 490 std::set_union(set1_safe->apis().begin(), set1_safe->apis().end(), |
| 438 set2_safe->apis().begin(), set2_safe->apis().end(), | 491 set2_safe->apis().begin(), set2_safe->apis().end(), |
| 439 std::insert_iterator<ExtensionAPIPermissionSet>( | 492 std::insert_iterator<ExtensionAPIPermissionSet>( |
| 440 apis, apis.begin())); | 493 apis, apis.begin())); |
| 441 | 494 |
| 442 URLPatternSet explicit_hosts; | 495 URLPatternSet explicit_hosts; |
| 443 URLPatternSet scriptable_hosts; | |
| 444 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), | 496 URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), |
| 445 set2_safe->explicit_hosts(), | 497 set2_safe->explicit_hosts(), |
| 446 &explicit_hosts); | 498 &explicit_hosts); |
| 499 |
| 500 URLPatternSet scriptable_hosts; |
| 447 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), | 501 URLPatternSet::CreateUnion(set1_safe->scriptable_hosts(), |
| 448 set2_safe->scriptable_hosts(), | 502 set2_safe->scriptable_hosts(), |
| 449 &scriptable_hosts); | 503 &scriptable_hosts); |
| 450 | 504 |
| 451 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); | 505 return new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); |
| 452 } | 506 } |
| 453 | 507 |
| 508 bool ExtensionPermissionSet::operator==( |
| 509 const ExtensionPermissionSet& rhs) const { |
| 510 return apis_ == rhs.apis_ && |
| 511 scriptable_hosts_ == rhs.scriptable_hosts_ && |
| 512 explicit_hosts_ == rhs.explicit_hosts_; |
| 513 } |
| 514 |
| 515 bool ExtensionPermissionSet::Contains(const ExtensionPermissionSet& set) const { |
| 516 // Every set includes the empty set. |
| 517 if (set.IsEmpty()) |
| 518 return true; |
| 519 |
| 520 if (!std::includes(apis_.begin(), apis_.end(), |
| 521 set.apis().begin(), set.apis().end())) |
| 522 return false; |
| 523 |
| 524 if (!explicit_hosts().Contains(set.explicit_hosts())) |
| 525 return false; |
| 526 |
| 527 if (!scriptable_hosts().Contains(set.scriptable_hosts())) |
| 528 return false; |
| 529 |
| 530 return true; |
| 531 } |
| 532 |
| 454 std::set<std::string> ExtensionPermissionSet::GetAPIsAsStrings() const { | 533 std::set<std::string> ExtensionPermissionSet::GetAPIsAsStrings() const { |
| 455 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); | 534 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); |
| 456 std::set<std::string> apis_str; | 535 std::set<std::string> apis_str; |
| 457 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); | 536 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); |
| 458 i != apis_.end(); ++i) { | 537 i != apis_.end(); ++i) { |
| 459 ExtensionAPIPermission* permission = info->GetByID(*i); | 538 ExtensionAPIPermission* permission = info->GetByID(*i); |
| 460 if (permission) | 539 if (permission) |
| 461 apis_str.insert(permission->name()); | 540 apis_str.insert(permission->name()); |
| 462 } | 541 } |
| 463 return apis_str; | 542 return apis_str; |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 775 std::set<std::string> new_hosts_set = GetDistinctHosts(new_list, false); | 854 std::set<std::string> new_hosts_set = GetDistinctHosts(new_list, false); |
| 776 std::set<std::string> old_hosts_set = GetDistinctHosts(old_list, false); | 855 std::set<std::string> old_hosts_set = GetDistinctHosts(old_list, false); |
| 777 std::set<std::string> new_hosts_only; | 856 std::set<std::string> new_hosts_only; |
| 778 | 857 |
| 779 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), | 858 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), |
| 780 old_hosts_set.begin(), old_hosts_set.end(), | 859 old_hosts_set.begin(), old_hosts_set.end(), |
| 781 std::inserter(new_hosts_only, new_hosts_only.begin())); | 860 std::inserter(new_hosts_only, new_hosts_only.begin())); |
| 782 | 861 |
| 783 return !new_hosts_only.empty(); | 862 return !new_hosts_only.empty(); |
| 784 } | 863 } |
| OLD | NEW |