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

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: Fix unit test and clang presubmit errors. 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 ManifestPermissionSet permissions1;
129 ManifestPermissionSet permissions2;
130 ManifestPermissionSet expected_permissions;
131 ManifestPermissionSet result;
132
133 ManifestPermission* permission = new MockManifestPermission("p3");
134
135 // Union with an empty set.
136 permissions1.insert(new MockManifestPermission("p1"));
137 permissions1.insert(new MockManifestPermission("p2"));
138 permissions1.insert(permission->Clone());
139 expected_permissions.insert(new MockManifestPermission("p1"));
140 expected_permissions.insert(new MockManifestPermission("p2"));
141 expected_permissions.insert(permission);
142
143 ManifestPermissionSet::Union(permissions1, permissions2, &result);
144
145 EXPECT_TRUE(permissions1.Contains(permissions2));
146 EXPECT_TRUE(permissions1.Contains(result));
147 EXPECT_FALSE(permissions2.Contains(permissions1));
148 EXPECT_FALSE(permissions2.Contains(result));
149 EXPECT_TRUE(result.Contains(permissions1));
150 EXPECT_TRUE(result.Contains(permissions2));
151
152 EXPECT_EQ(expected_permissions, result);
153
154 // Now use a real second set.
155 permissions2.insert(new MockManifestPermission("p1"));
156 permissions2.insert(new MockManifestPermission("p2"));
157 permissions2.insert(new MockManifestPermission("p33"));
158 permissions2.insert(new MockManifestPermission("p4"));
159 permissions2.insert(new MockManifestPermission("p5"));
160
161 expected_permissions.insert(new MockManifestPermission("p1"));
162 expected_permissions.insert(new MockManifestPermission("p2"));
163 expected_permissions.insert(new MockManifestPermission("p3"));
164 expected_permissions.insert(new MockManifestPermission("p4"));
165 expected_permissions.insert(new MockManifestPermission("p5"));
166 expected_permissions.insert(new MockManifestPermission("p33"));
167
168 ManifestPermissionSet::Union(permissions1, permissions2, &result);
169
170 {
171 ManifestPermissionSet set1;
172 set1.insert(new MockManifestPermission("p1"));
173 set1.insert(new MockManifestPermission("p2"));
174 ManifestPermissionSet set2;
175 set2.insert(new MockManifestPermission("p3"));
176
177 EXPECT_FALSE(set1.Contains(set2));
178 EXPECT_FALSE(set2.Contains(set1));
179 }
180
181 EXPECT_FALSE(permissions1.Contains(permissions2));
182 EXPECT_FALSE(permissions1.Contains(result));
183 EXPECT_FALSE(permissions2.Contains(permissions1));
184 EXPECT_FALSE(permissions2.Contains(result));
185 EXPECT_TRUE(result.Contains(permissions1));
186 EXPECT_TRUE(result.Contains(permissions2));
187
188 EXPECT_EQ(expected_permissions, result);
189 }
190
191 TEST(ManifestPermissionSetTest, CreateIntersection) {
192 ManifestPermissionSet permissions1;
193 ManifestPermissionSet permissions2;
194 ManifestPermissionSet expected_permissions;
195 ManifestPermissionSet result;
196
197 // Intersection with an empty set.
198 permissions1.insert(new MockManifestPermission("p1"));
199 permissions1.insert(new MockManifestPermission("p2"));
200 permissions1.insert(new MockManifestPermission("p3"));
201
202 ManifestPermissionSet::Intersection(permissions1, permissions2, &result);
203 EXPECT_TRUE(permissions1.Contains(result));
204 EXPECT_TRUE(permissions2.Contains(result));
205 EXPECT_TRUE(permissions1.Contains(permissions2));
206 EXPECT_FALSE(permissions2.Contains(permissions1));
207 EXPECT_FALSE(result.Contains(permissions1));
208 EXPECT_TRUE(result.Contains(permissions2));
209
210 EXPECT_TRUE(result.empty());
211 EXPECT_EQ(expected_permissions, result);
212
213 // Now use a real second set.
214 permissions2.insert(new MockManifestPermission("p1"));
215 permissions2.insert(new MockManifestPermission("p3"));
216 permissions2.insert(new MockManifestPermission("p4"));
217 permissions2.insert(new MockManifestPermission("p5"));
218
219 expected_permissions.insert(new MockManifestPermission("p1"));
220 expected_permissions.insert(new MockManifestPermission("p3"));
221
222 ManifestPermissionSet::Intersection(permissions1, permissions2, &result);
223
224 EXPECT_TRUE(permissions1.Contains(result));
225 EXPECT_TRUE(permissions2.Contains(result));
226 EXPECT_FALSE(permissions1.Contains(permissions2));
227 EXPECT_FALSE(permissions2.Contains(permissions1));
228 EXPECT_FALSE(result.Contains(permissions1));
229 EXPECT_FALSE(result.Contains(permissions2));
230
231 EXPECT_EQ(expected_permissions, result);
232 }
233
234 TEST(ManifestPermissionSetTest, CreateDifference) {
235 ManifestPermissionSet permissions1;
236 ManifestPermissionSet permissions2;
237 ManifestPermissionSet expected_permissions;
238 ManifestPermissionSet result;
239
240 // Difference with an empty set.
241 permissions1.insert(new MockManifestPermission("p1"));
242 permissions1.insert(new MockManifestPermission("p2"));
243 permissions1.insert(new MockManifestPermission("p3"));
244
245 ManifestPermissionSet::Difference(permissions1, permissions2, &result);
246
247 EXPECT_EQ(permissions1, result);
248
249 // Now use a real second set.
250 permissions2.insert(new MockManifestPermission("p1"));
251 permissions2.insert(new MockManifestPermission("p2"));
252 permissions2.insert(new MockManifestPermission("p4"));
253 permissions2.insert(new MockManifestPermission("p5"));
254 permissions2.insert(new MockManifestPermission("p6"));
255
256 expected_permissions.insert(new MockManifestPermission("p3"));
257
258 ManifestPermissionSet::Difference(permissions1, permissions2, &result);
259
260 EXPECT_TRUE(permissions1.Contains(result));
261 EXPECT_FALSE(permissions2.Contains(result));
262
263 EXPECT_EQ(expected_permissions, result);
264
265 // |result| = |permissions1| - |permissions2| -->
266 // |result| intersect |permissions2| == empty_set
267 ManifestPermissionSet result2;
268 ManifestPermissionSet::Intersection(result, permissions2, &result2);
269 EXPECT_TRUE(result2.empty());
270 }
271
272 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/common/permissions/manifest_permission_set.cc ('k') | extensions/common/permissions/permission_set.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698