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

Side by Side Diff: chrome/common/extensions/permissions/api_permission_set_unittest.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 "base/pickle.h"
6 #include "base/values.h"
7 #include "chrome/common/extensions/extension_messages.h"
8 #include "chrome/common/extensions/permissions/api_permission_set.h"
9 #include "chrome/common/extensions/permissions/permissions_info.h"
10 #include "ipc/ipc_message.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace extensions {
14
15 class APIPermissionSetTest : public testing::Test {
16 };
17
18 TEST(APIPermissionSetTest, General) {
19 APIPermissionSet apis;
20 apis.insert(APIPermission::kTab);
21 apis.insert(APIPermission::kBackground);
22 apis.insert(APIPermission::kProxy);
23 apis.insert(APIPermission::kClipboardWrite);
24 apis.insert(APIPermission::kPlugin);
25
26 EXPECT_EQ(apis.find(APIPermission::kProxy)->id(), APIPermission::kProxy);
27 EXPECT_TRUE(apis.find(APIPermission::kSocket) == apis.end());
28
29 EXPECT_EQ(apis.size(), 5u);
30
31 EXPECT_EQ(apis.erase(APIPermission::kTab), 1u);
32 EXPECT_EQ(apis.size(), 4u);
33
34 EXPECT_EQ(apis.erase(APIPermission::kTab), 0u);
35 EXPECT_EQ(apis.size(), 4u);
36 }
37
38 TEST(APIPermissionSetTest, CreateUnion) {
39 scoped_refptr<APIPermissionDetail> detail;
40
41 APIPermissionSet apis1;
42 APIPermissionSet apis2;
43 APIPermissionSet expected_apis;
44 APIPermissionSet result;
45
46 APIPermission* permission =
47 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
48 detail = permission->CreateDetail();
49 {
50 scoped_ptr<ListValue> value(new ListValue());
51 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
52 value->Append(Value::CreateStringValue("udp-bind::8080"));
53 value->Append(Value::CreateStringValue("udp-send-to::8888"));
54 if (!detail->FromValue(value.get())) {
55 NOTREACHED();
56 }
57 }
58
59 // Union with an empty set.
60 apis1.insert(APIPermission::kTab);
61 apis1.insert(APIPermission::kBackground);
62 apis1.insert(detail);
63 expected_apis.insert(APIPermission::kTab);
64 expected_apis.insert(APIPermission::kBackground);
65 expected_apis.insert(detail);
66
67 APIPermissionSet::Union(apis1, apis2, &result);
68
69 EXPECT_TRUE(apis1.Contains(apis2));
70 EXPECT_TRUE(apis1.Contains(result));
71 EXPECT_FALSE(apis2.Contains(apis1));
72 EXPECT_FALSE(apis2.Contains(result));
73 EXPECT_TRUE(result.Contains(apis1));
74 EXPECT_TRUE(result.Contains(apis2));
75
76 EXPECT_EQ(expected_apis, result);
77
78 // Now use a real second set.
79 apis2.insert(APIPermission::kTab);
80 apis2.insert(APIPermission::kProxy);
81 apis2.insert(APIPermission::kClipboardWrite);
82 apis2.insert(APIPermission::kPlugin);
83
84 detail = permission->CreateDetail();
85 {
86 scoped_ptr<ListValue> value(new ListValue());
87 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
88 value->Append(Value::CreateStringValue("udp-send-to::8899"));
89 if (!detail->FromValue(value.get())) {
90 NOTREACHED();
91 }
92 }
93 apis2.insert(detail);
94
95 expected_apis.insert(APIPermission::kTab);
96 expected_apis.insert(APIPermission::kProxy);
97 expected_apis.insert(APIPermission::kClipboardWrite);
98 expected_apis.insert(APIPermission::kPlugin);
99
100 detail = permission->CreateDetail();
101 {
102 scoped_ptr<ListValue> value(new ListValue());
103 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
104 value->Append(Value::CreateStringValue("udp-bind::8080"));
105 value->Append(Value::CreateStringValue("udp-send-to::8888"));
106 value->Append(Value::CreateStringValue("udp-send-to::8899"));
107 if (!detail->FromValue(value.get())) {
108 NOTREACHED();
109 }
110 }
111 // Insert a new detail socket permission which will replace the old one.
112 expected_apis.insert(detail);
113
114 APIPermissionSet::Union(apis1, apis2, &result);
115
116 EXPECT_FALSE(apis1.Contains(apis2));
117 EXPECT_FALSE(apis1.Contains(result));
118 EXPECT_FALSE(apis2.Contains(apis1));
119 EXPECT_FALSE(apis2.Contains(result));
120 EXPECT_TRUE(result.Contains(apis1));
121 EXPECT_TRUE(result.Contains(apis2));
122
123 EXPECT_EQ(expected_apis, result);
124 }
125
126 TEST(APIPermissionSetTest, CreateIntersection) {
127 scoped_refptr<APIPermissionDetail> detail;
128
129 APIPermissionSet apis1;
130 APIPermissionSet apis2;
131 APIPermissionSet expected_apis;
132 APIPermissionSet result;
133
134 APIPermission* permission =
135 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
136
137 // Intersection with an empty set.
138 apis1.insert(APIPermission::kTab);
139 apis1.insert(APIPermission::kBackground);
140 detail = permission->CreateDetail();
141 {
142 scoped_ptr<ListValue> value(new ListValue());
143 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
144 value->Append(Value::CreateStringValue("udp-bind::8080"));
145 value->Append(Value::CreateStringValue("udp-send-to::8888"));
146 if (!detail->FromValue(value.get())) {
147 NOTREACHED();
148 }
149 }
150 apis1.insert(detail);
151
152 APIPermissionSet::Intersection(apis1, apis2, &result);
153 EXPECT_TRUE(apis1.Contains(result));
154 EXPECT_TRUE(apis2.Contains(result));
155 EXPECT_TRUE(apis1.Contains(apis2));
156 EXPECT_FALSE(apis2.Contains(apis1));
157 EXPECT_FALSE(result.Contains(apis1));
158 EXPECT_TRUE(result.Contains(apis2));
159
160 EXPECT_TRUE(result.empty());
161 EXPECT_EQ(expected_apis, result);
162
163 // Now use a real second set.
164 apis2.insert(APIPermission::kTab);
165 apis2.insert(APIPermission::kProxy);
166 apis2.insert(APIPermission::kClipboardWrite);
167 apis2.insert(APIPermission::kPlugin);
168 detail = permission->CreateDetail();
169 {
170 scoped_ptr<ListValue> value(new ListValue());
171 value->Append(Value::CreateStringValue("udp-bind::8080"));
172 value->Append(Value::CreateStringValue("udp-send-to::8888"));
173 value->Append(Value::CreateStringValue("udp-send-to::8899"));
174 if (!detail->FromValue(value.get())) {
175 NOTREACHED();
176 }
177 }
178 apis2.insert(detail);
179
180 expected_apis.insert(APIPermission::kTab);
181 detail = permission->CreateDetail();
182 {
183 scoped_ptr<ListValue> value(new ListValue());
184 value->Append(Value::CreateStringValue("udp-bind::8080"));
185 value->Append(Value::CreateStringValue("udp-send-to::8888"));
186 if (!detail->FromValue(value.get())) {
187 NOTREACHED();
188 }
189 }
190 expected_apis.insert(detail);
191
192 APIPermissionSet::Intersection(apis1, apis2, &result);
193
194 EXPECT_TRUE(apis1.Contains(result));
195 EXPECT_TRUE(apis2.Contains(result));
196 EXPECT_FALSE(apis1.Contains(apis2));
197 EXPECT_FALSE(apis2.Contains(apis1));
198 EXPECT_FALSE(result.Contains(apis1));
199 EXPECT_FALSE(result.Contains(apis2));
200
201 EXPECT_EQ(expected_apis, result);
202 }
203
204 TEST(APIPermissionSetTest, CreateDifference) {
205 scoped_refptr<APIPermissionDetail> detail;
206
207 APIPermissionSet apis1;
208 APIPermissionSet apis2;
209 APIPermissionSet expected_apis;
210 APIPermissionSet result;
211
212 APIPermission* permission =
213 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
214
215 // Difference with an empty set.
216 apis1.insert(APIPermission::kTab);
217 apis1.insert(APIPermission::kBackground);
218 detail = permission->CreateDetail();
219 {
220 scoped_ptr<ListValue> value(new ListValue());
221 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
222 value->Append(Value::CreateStringValue("udp-bind::8080"));
223 value->Append(Value::CreateStringValue("udp-send-to::8888"));
224 if (!detail->FromValue(value.get())) {
225 NOTREACHED();
226 }
227 }
228 apis1.insert(detail);
229
230 APIPermissionSet::Difference(apis1, apis2, &result);
231
232 EXPECT_EQ(apis1, result);
233
234 // Now use a real second set.
235 apis2.insert(APIPermission::kTab);
236 apis2.insert(APIPermission::kProxy);
237 apis2.insert(APIPermission::kClipboardWrite);
238 apis2.insert(APIPermission::kPlugin);
239 detail = permission->CreateDetail();
240 {
241 scoped_ptr<ListValue> value(new ListValue());
242 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
243 value->Append(Value::CreateStringValue("udp-send-to::8899"));
244 if (!detail->FromValue(value.get())) {
245 NOTREACHED();
246 }
247 }
248 apis2.insert(detail);
249
250 expected_apis.insert(APIPermission::kBackground);
251 detail = permission->CreateDetail();
252 {
253 scoped_ptr<ListValue> value(new ListValue());
254 value->Append(Value::CreateStringValue("udp-bind::8080"));
255 value->Append(Value::CreateStringValue("udp-send-to::8888"));
256 if (!detail->FromValue(value.get())) {
257 NOTREACHED();
258 }
259 }
260 expected_apis.insert(detail);
261
262 APIPermissionSet::Difference(apis1, apis2, &result);
263
264 EXPECT_TRUE(apis1.Contains(result));
265 EXPECT_FALSE(apis2.Contains(result));
266
267 EXPECT_EQ(expected_apis, result);
268
269 // |result| = |apis1| - |apis2| --> |result| intersect |apis2| == empty_set
270 APIPermissionSet result2;
271 APIPermissionSet::Intersection(result, apis2, &result2);
272 EXPECT_TRUE(result2.empty());
273 }
274
275 TEST(APIPermissionSetTest, IPC) {
276 scoped_refptr<APIPermissionDetail> detail;
277
278 APIPermissionSet apis;
279 APIPermissionSet expected_apis;
280
281 APIPermission* permission =
282 PermissionsInfo::GetInstance()->GetByID(APIPermission::kSocket);
283
284 apis.insert(APIPermission::kTab);
285 apis.insert(APIPermission::kBackground);
286 detail = permission->CreateDetail();
287 {
288 scoped_ptr<ListValue> value(new ListValue());
289 value->Append(Value::CreateStringValue("tcp-connect:*.example.com:80"));
290 value->Append(Value::CreateStringValue("udp-bind::8080"));
291 value->Append(Value::CreateStringValue("udp-send-to::8888"));
292 if (!detail->FromValue(value.get())) {
293 NOTREACHED();
294 }
295 }
296 apis.insert(detail);
297
298 EXPECT_NE(apis, expected_apis);
299
300 IPC::Message m;
301 WriteParam(&m, apis);
302 PickleIterator iter(m);
303 CHECK(ReadParam(&m, &iter, &expected_apis));
304 EXPECT_EQ(apis, expected_apis);
305 }
306
307 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/common/extensions/permissions/api_permission_set.cc ('k') | chrome/common/extensions/permissions/permission_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698