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

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
17 class TestRenderFrameHost : public content::MockRenderFrameHost {
18 public:
19 TestRenderFrameHost(TestRenderFrameHost* parent, const GURL& origin)
20 : parent_(parent), origin_(origin) {}
21
22 private:
23 // MockRenderFrameHost
24 RenderFrameHost* GetParent() override { return parent_; }
25
26 url::Origin GetLastCommittedOrigin() override { return origin_; }
27
28 TestRenderFrameHost* parent_;
29 url::Origin origin_;
30 };
31
32 class DelegationTrackerTest : public testing::Test {
33 protected:
34 void SetDelegatedPermissions(DelegationTracker* tracker,
35 TestRenderFrameHost* child_rfh,
36 const std::vector<PermissionType>& types) {
37 tracker->SetDelegatedPermissionsInternal(child_rfh, nullptr, types);
38 }
39
40 void RenderFrameHostChanged(DelegationTracker* tracker,
41 TestRenderFrameHost* child_rfh) {
42 tracker->RenderFrameHostChanged(child_rfh);
43 }
44 };
45
46 TEST_F(DelegationTrackerTest, SingleFrame) {
47 DelegationTracker tracker;
48 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
49
50 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
51 }
52
53 TEST_F(DelegationTrackerTest, SingleAncestorSameOrigin) {
54 DelegationTracker tracker;
55 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
56 TestRenderFrameHost child(&parent, GURL(kOrigin1));
57
58 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
59 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
60 }
61
62 TEST_F(DelegationTrackerTest, SingleAncestorNoDelegation) {
63 DelegationTracker tracker;
64 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
65 TestRenderFrameHost child(&parent, GURL(kOrigin2));
66
67 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
68 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
69 }
70
71 TEST_F(DelegationTrackerTest, SingleAncestorPermissionDelegated) {
72 DelegationTracker tracker;
73 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
74 TestRenderFrameHost child(&parent, GURL(kOrigin2));
75
76 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
77
78 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
79 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
80 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
81 }
82
83 TEST_F(DelegationTrackerTest, SingleAncestorMultiplePermissionsDelegated) {
84 DelegationTracker tracker;
85 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
86 TestRenderFrameHost child(&parent, GURL(kOrigin2));
87
88 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION,
89 PermissionType::NOTIFICATIONS});
90
91 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
92 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
93 }
94
95 TEST_F(DelegationTrackerTest, SingleAncestorMultipleChildren) {
96 DelegationTracker tracker;
97 TestRenderFrameHost parent(nullptr, GURL(kOrigin1));
98 TestRenderFrameHost child1(&parent, GURL(kOrigin2));
99 TestRenderFrameHost child2(&parent, GURL(kOrigin2));
100
101 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
102
103 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
104 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
105 }
106
107 TEST_F(DelegationTrackerTest, MultipleAncestorsNotDelegated) {
108 DelegationTracker tracker;
109 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
110 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
111 TestRenderFrameHost child1(&parent, GURL(kOrigin3));
112 TestRenderFrameHost child2(&parent, GURL(kOrigin3));
113
114 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
115
116 EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
117 EXPECT_FALSE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
118 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
119 }
120
121 TEST_F(DelegationTrackerTest, MultipleAncestorsDelegated) {
122 DelegationTracker tracker;
123 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
124 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
125 TestRenderFrameHost child1(&parent, GURL(kOrigin3));
126 TestRenderFrameHost child2(&parent, GURL(kOrigin3));
127
128 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
129 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
130
131 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
132 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
133 EXPECT_FALSE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
134 }
135
136 TEST_F(DelegationTrackerTest, MultipleAncestorsSameOrigin) {
137 DelegationTracker tracker;
138 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
139 TestRenderFrameHost parent(&grandparent, GURL(kOrigin1));
140 TestRenderFrameHost child1(&parent, GURL(kOrigin1));
141 TestRenderFrameHost child2(&parent, GURL(kOrigin1));
142
143 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
144 SetDelegatedPermissions(&tracker, &child1, {PermissionType::GEOLOCATION});
145
146 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
147 EXPECT_TRUE(tracker.IsGranted(&child1, PermissionType::GEOLOCATION));
148 EXPECT_TRUE(tracker.IsGranted(&child2, PermissionType::GEOLOCATION));
149 }
150
151 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexSinglePermission) {
152 DelegationTracker tracker;
153 TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
154 TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
155 TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
156 TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
157 TestRenderFrameHost child(&parent1, GURL(kOrigin3));
158
159 SetDelegatedPermissions(&tracker, &grandparent,
160 {PermissionType::GEOLOCATION});
161 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
162
163 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::GEOLOCATION));
164 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::GEOLOCATION));
165 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::GEOLOCATION));
166 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
167 }
168
169 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexMultiplePermissions) {
170 DelegationTracker tracker;
171 TestRenderFrameHost great_grandparent(nullptr, GURL(kOrigin1));
172 TestRenderFrameHost grandparent(&great_grandparent, GURL(kOrigin2));
173 TestRenderFrameHost parent1(&grandparent, GURL(kOrigin2));
174 TestRenderFrameHost parent2(&grandparent, GURL(kOrigin3));
175 TestRenderFrameHost child(&parent1, GURL(kOrigin3));
176
177 SetDelegatedPermissions(
178 &tracker, &grandparent,
179 {PermissionType::GEOLOCATION, PermissionType::NOTIFICATIONS});
180 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
181
182 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::GEOLOCATION));
183 EXPECT_TRUE(tracker.IsGranted(&grandparent, PermissionType::NOTIFICATIONS));
184
185 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::GEOLOCATION));
186 EXPECT_TRUE(tracker.IsGranted(&parent1, PermissionType::NOTIFICATIONS));
187
188 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::GEOLOCATION));
189 EXPECT_FALSE(tracker.IsGranted(&parent2, PermissionType::NOTIFICATIONS));
190
191 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
192 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::NOTIFICATIONS));
193 }
194
195 TEST_F(DelegationTrackerTest, RenderFrameHostChanged) {
196 DelegationTracker tracker;
197 TestRenderFrameHost grandparent(nullptr, GURL(kOrigin1));
198 TestRenderFrameHost parent(&grandparent, GURL(kOrigin2));
199 TestRenderFrameHost child(&parent, GURL(kOrigin3));
200
201 SetDelegatedPermissions(&tracker, &parent, {PermissionType::GEOLOCATION});
202 SetDelegatedPermissions(&tracker, &child, {PermissionType::GEOLOCATION});
203
204 EXPECT_TRUE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
205 EXPECT_TRUE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
206
207 RenderFrameHostChanged(&tracker, &parent);
208 EXPECT_FALSE(tracker.IsGranted(&parent, PermissionType::GEOLOCATION));
209 EXPECT_FALSE(tracker.IsGranted(&child, PermissionType::GEOLOCATION));
210 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698