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

Unified Diff: chrome/common/extensions/permissions/permission_set.cc

Issue 10692160: Support socket endpoint permissions for AppsV2 Socket API. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Update Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
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_());
}

Powered by Google App Engine
This is Rietveld 408576698