Index: chrome/common/extensions/permissions/permission_set.cc |
diff --git a/chrome/common/extensions/permissions/permission_set.cc b/chrome/common/extensions/permissions/permission_set.cc |
index 5b51616c1e88b03e6795467af0a3966ae488d046..be0318cbc4439d6c04ef47620cfc195135150112 100644 |
--- a/chrome/common/extensions/permissions/permission_set.cc |
+++ b/chrome/common/extensions/permissions/permission_set.cc |
@@ -128,10 +128,7 @@ PermissionSet* PermissionSet::CreateDifference( |
const PermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
APIPermissionSet apis; |
- std::set_difference(set1_safe->apis().begin(), set1_safe->apis().end(), |
- set2_safe->apis().begin(), set2_safe->apis().end(), |
- std::insert_iterator<APIPermissionSet>( |
- apis, apis.begin())); |
+ APIPermissionSet::Difference(set1_safe->apis(), set2_safe->apis(), &apis); |
URLPatternSet explicit_hosts; |
URLPatternSet::CreateDifference(set1_safe->explicit_hosts(), |
@@ -155,10 +152,8 @@ PermissionSet* PermissionSet::CreateIntersection( |
const PermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
APIPermissionSet apis; |
- std::set_intersection(set1_safe->apis().begin(), set1_safe->apis().end(), |
- set2_safe->apis().begin(), set2_safe->apis().end(), |
- std::insert_iterator<APIPermissionSet>( |
- apis, apis.begin())); |
+ APIPermissionSet::Intersection(set1_safe->apis(), set2_safe->apis(), &apis); |
+ |
URLPatternSet explicit_hosts; |
URLPatternSet::CreateIntersection(set1_safe->explicit_hosts(), |
set2_safe->explicit_hosts(), |
@@ -181,10 +176,7 @@ PermissionSet* PermissionSet::CreateUnion( |
const PermissionSet* set2_safe = (set2 == NULL) ? empty : set2; |
APIPermissionSet apis; |
- std::set_union(set1_safe->apis().begin(), set1_safe->apis().end(), |
- set2_safe->apis().begin(), set2_safe->apis().end(), |
- std::insert_iterator<APIPermissionSet>( |
- apis, apis.begin())); |
+ APIPermissionSet::Union(set1_safe->apis(), set2_safe->apis(), &apis); |
URLPatternSet explicit_hosts; |
URLPatternSet::CreateUnion(set1_safe->explicit_hosts(), |
@@ -211,9 +203,23 @@ bool PermissionSet::Contains(const PermissionSet& set) const { |
if (set.IsEmpty()) |
return true; |
- if (!std::includes(apis_.begin(), apis_.end(), |
- set.apis().begin(), set.apis().end())) |
- return false; |
+ APIPermissionSet::const_iterator first1 = apis_.begin(); |
+ APIPermissionSet::const_iterator first2 = set.apis().begin(); |
+ APIPermissionSet::const_iterator end1 = apis_.end(); |
+ APIPermissionSet::const_iterator end2 = set.apis().end(); |
+ |
+ while (first1 != end1 && first2 != end2) { |
+ if (first1->id() > first2->id()) { |
+ return false; |
+ } else if (first1->id() < first2->id()) { |
+ ++first1; |
+ } else { |
+ if (!first1->Contains(*first2)) |
+ return false; |
+ first1++; |
+ first2++; |
+ } |
+ } |
if (!explicit_hosts().Contains(set.explicit_hosts())) |
return false; |
@@ -225,13 +231,10 @@ bool PermissionSet::Contains(const PermissionSet& set) const { |
} |
std::set<std::string> PermissionSet::GetAPIsAsStrings() const { |
- PermissionsInfo* info = PermissionsInfo::GetInstance(); |
std::set<std::string> apis_str; |
for (APIPermissionSet::const_iterator i = apis_.begin(); |
i != apis_.end(); ++i) { |
- APIPermission* permission = info->GetByID(*i); |
- if (permission) |
- apis_str.insert(permission->name()); |
+ apis_str.insert(i->name()); |
} |
return apis_str; |
} |
@@ -335,8 +338,21 @@ bool PermissionSet::IsEmpty() const { |
} |
bool PermissionSet::HasAPIPermission( |
- APIPermission::ID permission) const { |
- return apis().find(permission) != apis().end(); |
+ APIPermission::ID id) const { |
+ return apis().find(id) != apis().end(); |
+} |
+ |
+bool PermissionSet::CheckAPIPermission(APIPermission::ID permission) const { |
+ return CheckAPIPermissionWithDetail(permission, NULL); |
+} |
+ |
+bool PermissionSet::CheckAPIPermissionWithDetail( |
+ APIPermission::ID permission, |
+ const APIPermissionDetail::DetailParam* detail) const { |
+ APIPermissionSet::const_iterator iter = apis().find(permission); |
+ if (iter == apis().end()) |
+ return false; |
+ return iter->Check(detail); |
} |
bool PermissionSet::HasAccessToFunction( |
@@ -389,11 +405,9 @@ bool PermissionSet::HasEffectiveAccessToAllHosts() const { |
return true; |
} |
- PermissionsInfo* info = PermissionsInfo::GetInstance(); |
for (APIPermissionSet::const_iterator i = apis().begin(); |
i != apis().end(); ++i) { |
- APIPermission* permission = info->GetByID(*i); |
- if (permission->implies_full_url_access()) |
+ if (i->permission()->implies_full_url_access()) |
return true; |
} |
return false; |
@@ -405,11 +419,9 @@ bool PermissionSet::HasEffectiveAccessToURL( |
} |
bool PermissionSet::HasEffectiveFullAccess() const { |
- PermissionsInfo* info = PermissionsInfo::GetInstance(); |
for (APIPermissionSet::const_iterator i = apis().begin(); |
i != apis().end(); ++i) { |
- APIPermission* permission = info->GetByID(*i); |
- if (permission->implies_full_access()) |
+ if (i->permission()->implies_full_access()) |
return true; |
} |
return false; |
@@ -539,7 +551,7 @@ std::set<PermissionMessage> |
i != apis_.end(); ++i) { |
DCHECK_GT(PermissionMessage::kNone, |
PermissionMessage::kUnknown); |
- APIPermission* perm = info->GetByID(*i); |
+ APIPermission* perm = info->GetByID(i->id()); |
if (perm && perm->message_id() > PermissionMessage::kNone) |
messages.insert(perm->GetMessage_()); |
} |