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

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

Powered by Google App Engine
This is Rietveld 408576698