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

Side by Side Diff: chrome/common/extensions/extension_permission_set.cc

Issue 7432006: Add an experimental permissions API for extensions. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix clang Created 9 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 | Annotate | Revision Log
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_permission_set.h ('k') | chrome/common/extensions/extension_permission_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698