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

Side by Side Diff: extensions/common/permissions/manifest_permission_set_unittest.cc

Issue 51433002: Enable permission warnings from ManifestHandlers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address code review comments. Created 7 years, 1 month 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 2013 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 "extensions/common/permissions/manifest_permission.h"
9 #include "extensions/common/permissions/manifest_permission_set.h"
10 #include "ipc/ipc_message.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace extensions {
14
15 class MockManifestPermission : public ManifestPermission {
16 public:
17 MockManifestPermission(const std::string& name)
18 : name_(name) {
19 }
20
21 virtual std::string name() const OVERRIDE {
22 return name_;
23 }
24
25 virtual std::string id() const OVERRIDE {
26 return name();
27 }
28
29 virtual bool HasMessages() const OVERRIDE {
30 return false;
31 }
32
33 virtual PermissionMessages GetMessages() const OVERRIDE {
34 return PermissionMessages();
35 }
36
37 virtual bool FromValue(const base::Value* value) OVERRIDE {
38 return false;
39 }
40
41 virtual scoped_ptr<base::Value> ToValue() const OVERRIDE {
42 return scoped_ptr<base::Value>(base::Value::CreateNullValue());
43 }
44
45 virtual ManifestPermission* Clone() const OVERRIDE {
46 return new MockManifestPermission(name_);
47 }
48
49 virtual ManifestPermission* Diff(const ManifestPermission* rhs)
50 const OVERRIDE {
51 const MockManifestPermission* other =
52 static_cast<const MockManifestPermission*>(rhs);
53 EXPECT_EQ(name_, other->name_);
54 return NULL;
55 }
56
57 virtual ManifestPermission* Union(const ManifestPermission* rhs)
58 const OVERRIDE {
59 const MockManifestPermission* other =
60 static_cast<const MockManifestPermission*>(rhs);
61 EXPECT_EQ(name_, other->name_);
62 return new MockManifestPermission(name_);
63 }
64
65 virtual ManifestPermission* Intersect(const ManifestPermission* rhs)
66 const OVERRIDE {
67 const MockManifestPermission* other =
68 static_cast<const MockManifestPermission*>(rhs);
69 EXPECT_EQ(name_, other->name_);
70 return new MockManifestPermission(name_);
71 }
72
73 virtual bool Contains(const ManifestPermission* rhs) const OVERRIDE {
74 const MockManifestPermission* other =
75 static_cast<const MockManifestPermission*>(rhs);
76 EXPECT_EQ(name_, other->name_);
77 return true;
78 }
79
80 virtual bool Equal(const ManifestPermission* rhs) const OVERRIDE {
81 const MockManifestPermission* other =
82 static_cast<const MockManifestPermission*>(rhs);
83 EXPECT_EQ(name_, other->name_);
84 return true;
85 }
86
87 virtual void Write(IPC::Message* m) const OVERRIDE {
88 IPC::WriteParam(m, name_);
89 }
90
91 virtual bool Read(const IPC::Message* m, PickleIterator* iter) OVERRIDE {
92 std::string read_name;
93 bool result = IPC::ReadParam(m, iter, &read_name);
94 if (!result)
95 return result;
96 EXPECT_EQ(read_name, name_);
97 return true;
98 }
99
100 virtual void Log(std::string* log) const OVERRIDE {
101 }
102
103 private:
104 std::string name_;
105 };
106
107 TEST(ManifestPermissionSetTest, General) {
108 ManifestPermissionSet set;
109 set.insert(new MockManifestPermission("p1"));
110 set.insert(new MockManifestPermission("p2"));
111 set.insert(new MockManifestPermission("p3"));
112 set.insert(new MockManifestPermission("p4"));
113 set.insert(new MockManifestPermission("p5"));
114
115 EXPECT_EQ(set.find("p1")->id(), "p1");
116 EXPECT_TRUE(set.find("p10") == set.end());
117
118 EXPECT_EQ(set.size(), 5u);
119
120 EXPECT_EQ(set.erase("p1"), 1u);
121 EXPECT_EQ(set.size(), 4u);
122
123 EXPECT_EQ(set.erase("p1"), 0u);
124 EXPECT_EQ(set.size(), 4u);
125 }
126
127 TEST(ManifestPermissionSetTest, CreateUnion) {
128 ManifestPermission* permission = NULL;
129
130 ManifestPermissionSet permssions1;
Yoyo Zhou 2013/11/13 02:57:07 typo: permissions (throughout this file)
rpaquay 2013/11/13 21:28:55 Done.
131 ManifestPermissionSet permssions2;
132 ManifestPermissionSet expected_permissions;
133 ManifestPermissionSet result;
134
135 permission = new MockManifestPermission("p3");
136
137 // Union with an empty set.
138 permssions1.insert(new MockManifestPermission("p1"));
139 permssions1.insert(new MockManifestPermission("p2"));
140 permssions1.insert(permission->Clone());
141 expected_permissions.insert(new MockManifestPermission("p1"));
142 expected_permissions.insert(new MockManifestPermission("p2"));
143 expected_permissions.insert(permission);
144
145 ManifestPermissionSet::Union(permssions1, permssions2, &result);
146
147 EXPECT_TRUE(permssions1.Contains(permssions2));
148 EXPECT_TRUE(permssions1.Contains(result));
149 EXPECT_FALSE(permssions2.Contains(permssions1));
150 EXPECT_FALSE(permssions2.Contains(result));
151 EXPECT_TRUE(result.Contains(permssions1));
152 EXPECT_TRUE(result.Contains(permssions2));
153
154 EXPECT_EQ(expected_permissions, result);
155
156 // Now use a real second set.
157 permssions2.insert(new MockManifestPermission("p1"));
158 permssions2.insert(new MockManifestPermission("p2"));
159 permssions2.insert(new MockManifestPermission("p33"));
160 permssions2.insert(new MockManifestPermission("p4"));
161 permssions2.insert(new MockManifestPermission("p5"));
162
163 expected_permissions.insert(new MockManifestPermission("p1"));
164 expected_permissions.insert(new MockManifestPermission("p2"));
165 expected_permissions.insert(new MockManifestPermission("p3"));
166 expected_permissions.insert(new MockManifestPermission("p4"));
167 expected_permissions.insert(new MockManifestPermission("p5"));
168 expected_permissions.insert(new MockManifestPermission("p33"));
169
170 ManifestPermissionSet::Union(permssions1, permssions2, &result);
171
172 {
173 ManifestPermissionSet set1;
174 set1.insert(new MockManifestPermission("p1"));
175 set1.insert(new MockManifestPermission("p2"));
176 ManifestPermissionSet set2;
177 set2.insert(new MockManifestPermission("p3"));
178
179 EXPECT_FALSE(set1.Contains(set2));
180 EXPECT_FALSE(set2.Contains(set1));
181 }
182
183 EXPECT_FALSE(permssions1.Contains(permssions2));
184 EXPECT_FALSE(permssions1.Contains(result));
185 EXPECT_FALSE(permssions2.Contains(permssions1));
186 EXPECT_FALSE(permssions2.Contains(result));
187 EXPECT_TRUE(result.Contains(permssions1));
188 EXPECT_TRUE(result.Contains(permssions2));
189
190 EXPECT_EQ(expected_permissions, result);
191 }
192
193 TEST(ManifestPermissionSetTest, CreateIntersection) {
194 ManifestPermission* permission = NULL;
195
196 ManifestPermissionSet permssions1;
197 ManifestPermissionSet permssions2;
198 ManifestPermissionSet expected_permissions;
199 ManifestPermissionSet result;
200
201 // Intersection with an empty set.
202 permssions1.insert(new MockManifestPermission("p1"));
203 permssions1.insert(new MockManifestPermission("p2"));
204 permssions1.insert(new MockManifestPermission("p3"));
205
206 ManifestPermissionSet::Intersection(permssions1, permssions2, &result);
207 EXPECT_TRUE(permssions1.Contains(result));
208 EXPECT_TRUE(permssions2.Contains(result));
209 EXPECT_TRUE(permssions1.Contains(permssions2));
210 EXPECT_FALSE(permssions2.Contains(permssions1));
211 EXPECT_FALSE(result.Contains(permssions1));
212 EXPECT_TRUE(result.Contains(permssions2));
213
214 EXPECT_TRUE(result.empty());
215 EXPECT_EQ(expected_permissions, result);
216
217 // Now use a real second set.
218 permssions2.insert(new MockManifestPermission("p1"));
219 permssions2.insert(new MockManifestPermission("p3"));
220 permssions2.insert(new MockManifestPermission("p4"));
221 permssions2.insert(new MockManifestPermission("p5"));
222
223 expected_permissions.insert(new MockManifestPermission("p1"));
224 expected_permissions.insert(new MockManifestPermission("p3"));
225
226 ManifestPermissionSet::Intersection(permssions1, permssions2, &result);
227
228 EXPECT_TRUE(permssions1.Contains(result));
229 EXPECT_TRUE(permssions2.Contains(result));
230 EXPECT_FALSE(permssions1.Contains(permssions2));
231 EXPECT_FALSE(permssions2.Contains(permssions1));
232 EXPECT_FALSE(result.Contains(permssions1));
233 EXPECT_FALSE(result.Contains(permssions2));
234
235 EXPECT_EQ(expected_permissions, result);
236 }
237
238 TEST(ManifestPermissionSetTest, CreateDifference) {
239 ManifestPermission* permission = NULL;
240
241 ManifestPermissionSet permssions1;
242 ManifestPermissionSet permssions2;
243 ManifestPermissionSet expected_permissions;
244 ManifestPermissionSet result;
245
246 // Difference with an empty set.
247 permssions1.insert(new MockManifestPermission("p1"));
248 permssions1.insert(new MockManifestPermission("p2"));
249 permssions1.insert(new MockManifestPermission("p3"));
250
251 ManifestPermissionSet::Difference(permssions1, permssions2, &result);
252
253 EXPECT_EQ(permssions1, result);
254
255 // Now use a real second set.
256 permssions2.insert(new MockManifestPermission("p1"));
257 permssions2.insert(new MockManifestPermission("p2"));
258 permssions2.insert(new MockManifestPermission("p4"));
259 permssions2.insert(new MockManifestPermission("p5"));
260 permssions2.insert(new MockManifestPermission("p6"));
261
262 expected_permissions.insert(new MockManifestPermission("p3"));
263
264 ManifestPermissionSet::Difference(permssions1, permssions2, &result);
265
266 EXPECT_TRUE(permssions1.Contains(result));
267 EXPECT_FALSE(permssions2.Contains(result));
268
269 EXPECT_EQ(expected_permissions, result);
270
271 // |result| = |permssions1| - |permssions2| -->
272 // |result| intersect |permssions2| == empty_set
273 ManifestPermissionSet result2;
274 ManifestPermissionSet::Intersection(result, permssions2, &result2);
275 EXPECT_TRUE(result2.empty());
276 }
277
278 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698