OLD | NEW |
---|---|
(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 permisssion which will replace the old one. | |
miket_OOO
2012/08/07 23:02:47
spelling
Peng
2012/08/08 15:40:07
Done.
| |
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 | |
OLD | NEW |