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

Side by Side Diff: chrome/common/extensions/permissions/api_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: Fix review issues and add some unit tests Created 8 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/common/extensions/permissions/api_permission_set.h"
6
7 #include "base/logging.h"
8 #include "chrome/common/extensions/permissions/permissions_info.h"
9
10 namespace extensions {
11
12 bool APIPermissionSet::operator==(const APIPermissionSet& rhs) const {
13 const_iterator it = begin();
14 const_iterator rhs_it = rhs.begin();
15 const_iterator it_end = end();
16 const_iterator rhs_it_end = rhs.end();
17
18 while (it != it_end && rhs_it != rhs_it_end) {
19 if (!it->Equal(*rhs_it))
20 return false;
21 it++;
22 rhs_it++;
23 }
24 return it == it_end && rhs_it == rhs_it_end;
25 }
26
27 void APIPermissionSet::insert(APIPermission::ID id) {
28 APIPermission* permission =
29 PermissionsInfo::GetInstance()->GetByID(id);
30 insert(permission->CreateDetail());
31 }
32
33 void APIPermissionSet::insert(
34 const scoped_refptr<APIPermissionDetail>& detail) {
35 map_[detail->id()] = detail->Clone();
36 }
37
38 bool APIPermissionSet::Contains(const APIPermissionSet& rhs) const {
39 APIPermissionSet::const_iterator it1 = begin();
40 APIPermissionSet::const_iterator it2 = rhs.begin();
41 APIPermissionSet::const_iterator end1 = end();
42 APIPermissionSet::const_iterator end2 = rhs.end();
43
44 while (it1 != end1 && it2 != end2) {
45 if (it1->id() > it2->id()) {
46 return false;
47 } else if (it1->id() < it2->id()) {
48 ++it1;
49 } else {
50 if (!it1->Contains(*it2))
51 return false;
52 it1++;
53 it2++;
54 }
55 }
56
57 return it2 == end2;
58 }
59
60 void APIPermissionSet::Difference(
61 const APIPermissionSet& set1,
62 const APIPermissionSet& set2,
63 APIPermissionSet* set3) {
64 CHECK(set3);
65 set3->clear();
66
67 APIPermissionSet::const_iterator it1 = set1.begin();
68 APIPermissionSet::const_iterator it2 = set2.begin();
69 APIPermissionSet::const_iterator end1 = set1.end();
70 APIPermissionSet::const_iterator end2 = set2.end();
71 while (it1 != end1 && it2 != end2) {
72 if (it1->id() < it2->id()) {
73 set3->insert(*it1++);
74 } else if (it1->id() > it2->id()) {
75 it2++;
76 } else {
77 scoped_refptr<APIPermissionDetail> p = it1->Diff(*it2);
78 if (p.get())
79 set3->insert(p);
80 it1++;
81 it2++;
82 }
83 }
84
85 while (it1 != end1)
86 set3->insert(*it1++);
87 }
88
89 void APIPermissionSet::Intersection(
90 const APIPermissionSet& set1,
91 const APIPermissionSet& set2,
92 APIPermissionSet* set3) {
93 DCHECK(set3);
94 set3->clear();
95
96 APIPermissionSet::const_iterator it1 = set1.begin();
97 APIPermissionSet::const_iterator it2 = set2.begin();
98 APIPermissionSet::const_iterator end1 = set1.end();
99 APIPermissionSet::const_iterator end2 = set2.end();
100 while (it1 != end1 && it2 != end2) {
101 if (it1->id() < it2->id()) {
102 it1++;
103 } else if (it1->id() > it2->id()) {
104 it2++;
105 } else {
106 scoped_refptr<APIPermissionDetail> p = it1->Intersect(*it2);
107 if (p.get())
108 set3->insert(p);
109 it1++;
110 it2++;
111 }
112 }
113 }
114
115 void APIPermissionSet::Union(
116 const APIPermissionSet& set1,
117 const APIPermissionSet& set2,
118 APIPermissionSet* set3) {
119 DCHECK(set3);
120 set3->clear();
121
122 APIPermissionSet::const_iterator it1 = set1.begin();
123 APIPermissionSet::const_iterator it2 = set2.begin();
124 APIPermissionSet::const_iterator end1 = set1.end();
125 APIPermissionSet::const_iterator end2 = set2.end();
126
127 while (true) {
128 if (it1 == end1) {
129 while (it2 != end2) {
130 set3->insert(*it2++);
131 }
132 break;
133 }
134 if (it2 == end2) {
135 while (it1 != end1) {
136 set3->insert(*it1++);
137 }
138 break;
139 }
140 if (it1->id() < it2->id()) {
141 set3->insert(*it1++);
142 } else if (it1->id() > it2->id()) {
143 set3->insert(*it2++);
144 } else {
145 set3->insert(it1->Union(*it2));
146 it1++;
147 it2++;
148 }
149 }
150 }
151
152 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698