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

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: Rebase and fix a unit test 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 APIPermissionSet::APIPermissionSet() {
13 }
14
15 APIPermissionSet::APIPermissionSet(const APIPermissionSet& set) {
16 this->operator=(set);
17 }
18
19 APIPermissionSet::~APIPermissionSet() {
20 }
21
22 APIPermissionSet::const_iterator::const_iterator(
23 const APIPermissionMap::const_iterator& it)
24 : it_(it) {
25 }
26
27 APIPermissionSet::const_iterator::const_iterator(
28 const const_iterator& ids_it)
29 : it_(ids_it.it_) {
30 }
31
32 APIPermissionSet& APIPermissionSet::operator=(const APIPermissionSet& rhs) {
33 const_iterator it = rhs.begin();
34 const const_iterator end = rhs.end();
35 while (it != end)
36 insert(*it++);
37 return *this;
38 }
39
40 bool APIPermissionSet::operator==(const APIPermissionSet& rhs) const {
41 const_iterator it = begin();
42 const_iterator rhs_it = rhs.begin();
43 const_iterator it_end = end();
44 const_iterator rhs_it_end = rhs.end();
45
46 while (it != it_end && rhs_it != rhs_it_end) {
47 if (!it->Equal(*rhs_it))
48 return false;
49 ++it;
50 ++rhs_it;
51 }
52 return it == it_end && rhs_it == rhs_it_end;
53 }
54
55 void APIPermissionSet::insert(APIPermission::ID id) {
56 APIPermission* permission =
57 PermissionsInfo::GetInstance()->GetByID(id);
58 insert(permission->CreateDetail());
59 }
60
61 void APIPermissionSet::insert(
62 const scoped_refptr<APIPermissionDetail>& detail) {
63 map_[detail->id()] = detail->Clone();
64 }
65
66 bool APIPermissionSet::Contains(const APIPermissionSet& rhs) const {
67 APIPermissionSet::const_iterator it1 = begin();
68 APIPermissionSet::const_iterator it2 = rhs.begin();
69 APIPermissionSet::const_iterator end1 = end();
70 APIPermissionSet::const_iterator end2 = rhs.end();
71
72 while (it1 != end1 && it2 != end2) {
73 if (it1->id() > it2->id()) {
74 return false;
75 } else if (it1->id() < it2->id()) {
76 ++it1;
77 } else {
78 if (!it1->Contains(*it2))
79 return false;
80 ++it1;
81 ++it2;
82 }
83 }
84
85 return it2 == end2;
86 }
87
88 void APIPermissionSet::Difference(
89 const APIPermissionSet& set1,
90 const APIPermissionSet& set2,
91 APIPermissionSet* set3) {
92 CHECK(set3);
93 set3->clear();
94
95 APIPermissionSet::const_iterator it1 = set1.begin();
96 APIPermissionSet::const_iterator it2 = set2.begin();
97 const APIPermissionSet::const_iterator end1 = set1.end();
98 const APIPermissionSet::const_iterator end2 = set2.end();
99
100 while (it1 != end1 && it2 != end2) {
101 if (it1->id() < it2->id()) {
102 set3->insert(*it1++);
103 } else if (it1->id() > it2->id()) {
104 ++it2;
105 } else {
106 scoped_refptr<APIPermissionDetail> p = it1->Diff(*it2);
107 if (p.get())
108 set3->insert(p);
109 ++it1;
110 ++it2;
111 }
112 }
113
114 while (it1 != end1)
115 set3->insert(*it1++);
116 }
117
118 void APIPermissionSet::Intersection(
119 const APIPermissionSet& set1,
120 const APIPermissionSet& set2,
121 APIPermissionSet* set3) {
122 DCHECK(set3);
123 set3->clear();
124
125 APIPermissionSet::const_iterator it1 = set1.begin();
126 APIPermissionSet::const_iterator it2 = set2.begin();
127 const APIPermissionSet::const_iterator end1 = set1.end();
128 const APIPermissionSet::const_iterator end2 = set2.end();
129
130 while (it1 != end1 && it2 != end2) {
131 if (it1->id() < it2->id()) {
132 ++it1;
133 } else if (it1->id() > it2->id()) {
134 ++it2;
135 } else {
136 scoped_refptr<APIPermissionDetail> p = it1->Intersect(*it2);
137 if (p.get())
138 set3->insert(p);
139 ++it1;
140 ++it2;
141 }
142 }
143 }
144
145 void APIPermissionSet::Union(
146 const APIPermissionSet& set1,
147 const APIPermissionSet& set2,
148 APIPermissionSet* set3) {
149 DCHECK(set3);
150 set3->clear();
151
152 APIPermissionSet::const_iterator it1 = set1.begin();
153 APIPermissionSet::const_iterator it2 = set2.begin();
154 const APIPermissionSet::const_iterator end1 = set1.end();
155 const APIPermissionSet::const_iterator end2 = set2.end();
156
157 while (true) {
158 if (it1 == end1) {
159 while (it2 != end2) {
160 set3->insert(*it2++);
161 }
162 break;
163 }
164 if (it2 == end2) {
165 while (it1 != end1) {
166 set3->insert(*it1++);
167 }
168 break;
169 }
170 if (it1->id() < it2->id()) {
171 set3->insert(*it1++);
172 } else if (it1->id() > it2->id()) {
173 set3->insert(*it2++);
174 } else {
175 set3->insert(it1->Union(*it2));
176 ++it1;
177 ++it2;
178 }
179 }
180 }
181
182 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698