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

Side by Side Diff: chrome/browser/permissions/delegation_tracker_unittest.cc

Issue 2046293002: Implement DelegationTracker for tracking delegated permissions to RenderFrameHosts (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission-delegation-2-blink
Patch Set: Created 4 years, 6 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 2016 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/browser/permissions/delegation_tracker.h"
6
7 #include "content/public/browser/permission_type.h"
8 #include "content/public/test/mock_render_frame_host.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using content::PermissionType;
12
13 const char* kOrigin1 = "https://google.com";
14 const char* kOrigin2 = "https://maps.google.com";
15 const char* kOrigin3 = "https://example.com";
16 const char* kUniqueOrigin = "about:blank";
17
18 class TestRenderFrameHost : public content::MockRenderFrameHost {
19 public:
20 TestRenderFrameHost(TestRenderFrameHost* parent, const GURL& origin)
21 : parent_(parent), origin_(origin) {}
22
23 private:
24 // MockRenderFrameHost
25 RenderFrameHost* GetParent() override { return parent_; }
26
27 url::Origin GetLastCommittedOrigin() override { return origin_; }
28
29 TestRenderFrameHost* parent_;
30 url::Origin origin_;
31 };
32
33 class DelegationTrackerTest : public testing::Test {
34 protected:
35 void SetDelegatedPermissions(DelegationTracker* tracker,
36 TestRenderFrameHost* child_rfh,
37 const std::vector<PermissionType>& types) {
38 tracker->SetDelegatedPermissionsInternal(child_rfh, nullptr, types);
39 }
40
41 void RenderFrameHostChanged(DelegationTracker* tracker,
42 TestRenderFrameHost* child_rfh) {
43 tracker->RenderFrameHostChanged(child_rfh);
44 }
45 };
46
47 TEST_F(DelegationTrackerTest, SingleFrame) {
48 DelegationTracker tracker;
49 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
50
51 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
52 }
53
54 TEST_F(DelegationTrackerTest, SingleAncestorSameOrigin) {
55 DelegationTracker tracker;
56 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
57 TestRenderFrameHost child(&parent, GURL(kOrigin1));
58
59 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
60 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
61 }
62
63 TEST_F(DelegationTrackerTest, SingleAncestorNoDelegation) {
64 DelegationTracker tracker;
65 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
66 TestRenderFrameHost child(&parent, GURL(kOrigin2));
67
68 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
69 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
70 }
71
72 TEST_F(DelegationTrackerTest, SingleAncestorPermissionDelegated) {
73 DelegationTracker tracker;
74 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
75 TestRenderFrameHost child(&parent, GURL(kOrigin2));
76
77 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
78
79 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
80 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
81 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
82 }
83
84 TEST_F(DelegationTrackerTest, SingleAncestorMultiplePermissionsDelegated) {
85 DelegationTracker tracker;
86 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
87 TestRenderFrameHost child(&parent, GURL(kOrigin2));
88
89 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION,
90 PermissionType::NOTIFICATIONS});
91
92 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
93 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
94 }
95
96 TEST_F(DelegationTrackerTest, SingleAncestorMultipleChildren) {
97 DelegationTracker tracker;
98 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
99 TestRenderFrameHost child1(&parent, GURL(kOrigin2));
100 TestRenderFrameHost child2(&parent, GURL(kOrigin2));
101
102 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
103
104 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
105 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
106 }
107
108 TEST_F(DelegationTrackerTest, MultipleAncestorsNotDelegated) {
109 DelegationTracker tracker;
110 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
111 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
112 TestRenderFrameHost child1(&parent, GURL(kOrigin3));
113 TestRenderFrameHost child2(&parent, GURL(kOrigin3));
114
115 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
116
117 EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
118 EXPECT_FALSE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
119 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
120 }
121
122 TEST_F(DelegationTrackerTest, MultipleAncestorsDelegated) {
123 DelegationTracker tracker;
124 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
125 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
126 TestRenderFrameHost child1(&parent, GURL(kOrigin3));
127 TestRenderFrameHost child2(&parent, GURL(kOrigin3));
128
129 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
130 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
131
132 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
133 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
134 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
135 }
136
137 TEST_F(DelegationTrackerTest, MultipleAncestorsSameOrigin) {
138 DelegationTracker tracker;
139 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
140 TestRenderFrameHost parent(&grandparent, GURL(kOrigin1));
141 TestRenderFrameHost child1(&parent, GURL(kOrigin1));
142 TestRenderFrameHost child2(&parent, GURL(kOrigin1));
143
144 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
145 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
146
147 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
148 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
149 EXPECT_TRUE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
150 }
151
152 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexSinglePermission) {
153 DelegationTracker tracker;
154 TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
155 TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
156 TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
157 TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
158 TestRenderFrameHost child(&parent1, GURL(kOrigin3));
159
160 SetDelegatedPermissions(&tracker, &grandparent,
161 {PermissionType::GEOLOCATION});
162 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
163
164 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::GEOLOCATION));
165 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::GEOLOCATION));
166 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::GEOLOCATION));
167 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
168 }
169
170 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexMultiplePermissions) {
171 DelegationTracker tracker;
172 TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
173 TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
174 TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
175 TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
176 TestRenderFrameHost child(&parent1, GURL(kOrigin3));
177
178 SetDelegatedPermissions(
179 &tracker, &grandparent,
180 {PermissionType::GEOLOCATION, PermissionType::NOTIFICATIONS});
181 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
182
183 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::GEOLOCATION));
184 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::NOTIFICATIONS));
185
186 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::GEOLOCATION));
187 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::NOTIFICATIONS));
188
189 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::GEOLOCATION));
190 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::NOTIFICATIONS));
191
192 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
193 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
194 }
195
196 TEST_F(DelegationTrackerTest, RenderFrameHostChanged) {
197 DelegationTracker tracker;
198 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
199 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
200 TestRenderFrameHost child(&parent, GURL(kOrigin3));
201
202 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
203 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
204
205 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
206 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
207
208 RenderFrameHostChanged(&tracker, &parent);
209 EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
210 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
211 }
212
213 TEST_F(DelegationTrackerTest, UniqueOrigins) {
214 DelegationTracker tracker;
215 TestRenderFrameHost grandparent(nullptr, GURL(kUniqueOrigin));
216 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
217 TestRenderFrameHost child(&parent, GURL(kOrigin3));
218
219 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
220 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
221
222 // Unique origins should never be able to delegate permission.
223 EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
224 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
225 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698