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

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: Implement DelegationTracker for tracking delegated permissions to RenderFrameHosts 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 "chrome/test/base/chrome_render_view_host_test_harness.h"
8 #include "content/public/browser/permission_type.h"
9 #include "content/public/browser/render_frame_host.h"
10 #include "content/public/browser/web_contents.h"
11 #include "content/public/test/test_renderer_host.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "url/gurl.h"
14
15 using content::PermissionType;
16
17 const char* kOrigin1 = "https://google.com";
18 const char* kOrigin2 = "https://maps.google.com";
19 const char* kOrigin3 = "https://example.com";
20 const char* kUniqueOrigin = "about:blank";
21
22 class DelegationTrackerTest : public ChromeRenderViewHostTestHarness {
23 protected:
24 content::RenderFrameHost* GetMainRFH(const char* origin) {
25 content::RenderFrameHost* result = web_contents()->GetMainFrame();
26 content::RenderFrameHostTester::For(result)
27 ->InitializeRenderFrameIfNeeded();
28 content::RenderFrameHostTester::For(result)->SimulateNavigationCommit(
29 GURL(origin));
30 return result;
31 }
32
33 content::RenderFrameHost* AddChildRFH(content::RenderFrameHost* parent,
34 const char* origin) {
35 content::RenderFrameHost* result =
36 content::RenderFrameHostTester::For(parent)->AppendChild("");
37 content::RenderFrameHostTester::For(result)
38 ->InitializeRenderFrameIfNeeded();
39 content::RenderFrameHostTester::For(result)->SimulateNavigationCommit(
40 GURL(origin));
41 return result;
42 }
43 };
44
45 TEST_F(DelegationTrackerTest, SingleFrame) {
46 DelegationTracker tracker;
47 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
48
49 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
50 }
51
52 TEST_F(DelegationTrackerTest, SingleAncestorSameOrigin) {
53 DelegationTracker tracker;
54 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
55 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin1);
56
57 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
58 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
59 }
60
61 TEST_F(DelegationTrackerTest, SingleAncestorNoDelegation) {
62 DelegationTracker tracker;
63 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
64 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
65
66 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
67 EXPECT_FALSE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
68 }
69
70 TEST_F(DelegationTrackerTest, SingleAncestorPermissionDelegated) {
71 DelegationTracker tracker;
72 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
73 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
74
75 tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
76
77 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
78 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
79 EXPECT_FALSE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
80 }
81
82 TEST_F(DelegationTrackerTest, SingleAncestorMultiplePermissionsDelegated) {
83 DelegationTracker tracker;
84 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
85 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin2);
86
87 tracker.SetDelegatedPermissions(
88 child, {PermissionType::GEOLOCATION, PermissionType::NOTIFICATIONS});
89
90 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
91 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
92 }
93
94 TEST_F(DelegationTrackerTest, SingleAncestorMultipleChildren) {
95 DelegationTracker tracker;
96 content::RenderFrameHost* parent = GetMainRFH(kOrigin1);
97 content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin2);
98 content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin2);
99
100 tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
101
102 EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
103 EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
104 }
105
106 TEST_F(DelegationTrackerTest, MultipleAncestorsNotDelegated) {
107 DelegationTracker tracker;
108 content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
109 content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
110 content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin3);
111 content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin3);
112
113 tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
114
115 EXPECT_FALSE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
116 EXPECT_FALSE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
117 EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
118 }
119
120 TEST_F(DelegationTrackerTest, MultipleAncestorsDelegated) {
121 DelegationTracker tracker;
122 content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
123 content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
124 content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin3);
125 content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin3);
126
127 tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
128 tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
129
130 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
131 EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
132 EXPECT_FALSE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
133 }
134
135 TEST_F(DelegationTrackerTest, MultipleAncestorsSameOrigin) {
136 DelegationTracker tracker;
137 content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
138 content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin1);
139 content::RenderFrameHost* child1 = AddChildRFH(parent, kOrigin1);
140 content::RenderFrameHost* child2 = AddChildRFH(parent, kOrigin1);
141
142 tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
143 tracker.SetDelegatedPermissions(child1, {PermissionType::GEOLOCATION});
144
145 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
146 EXPECT_TRUE(tracker.IsGranted(child1, PermissionType::GEOLOCATION));
147 EXPECT_TRUE(tracker.IsGranted(child2, PermissionType::GEOLOCATION));
148 }
149
150 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexSinglePermission) {
151 DelegationTracker tracker;
152 content::RenderFrameHost* great_grandparent = GetMainRFH(kOrigin1);
153 content::RenderFrameHost* grandparent =
154 AddChildRFH(great_grandparent, kOrigin2);
155 content::RenderFrameHost* parent1 = AddChildRFH(grandparent, kOrigin2);
156 content::RenderFrameHost* parent2 = AddChildRFH(grandparent, kOrigin3);
157 content::RenderFrameHost* child = AddChildRFH(parent1, kOrigin3);
158
159 tracker.SetDelegatedPermissions(grandparent, {PermissionType::GEOLOCATION});
160 tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
161
162 EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::GEOLOCATION));
163 EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::GEOLOCATION));
164 EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::GEOLOCATION));
165 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
166 }
167
168 TEST_F(DelegationTrackerTest, MultipleAncestorsComplexMultiplePermissions) {
169 DelegationTracker tracker;
170 content::RenderFrameHost* great_grandparent = GetMainRFH(kOrigin1);
171 content::RenderFrameHost* grandparent =
172 AddChildRFH(great_grandparent, kOrigin2);
173 content::RenderFrameHost* parent1 = AddChildRFH(grandparent, kOrigin2);
174 content::RenderFrameHost* parent2 = AddChildRFH(grandparent, kOrigin3);
175 content::RenderFrameHost* child = AddChildRFH(parent1, kOrigin3);
176
177 tracker.SetDelegatedPermissions(grandparent, {PermissionType::GEOLOCATION,
178 PermissionType::NOTIFICATIONS});
179 tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
180
181 EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::GEOLOCATION));
182 EXPECT_TRUE(tracker.IsGranted(grandparent, PermissionType::NOTIFICATIONS));
183
184 EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::GEOLOCATION));
185 EXPECT_TRUE(tracker.IsGranted(parent1, PermissionType::NOTIFICATIONS));
186
187 EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::GEOLOCATION));
188 EXPECT_FALSE(tracker.IsGranted(parent2, PermissionType::NOTIFICATIONS));
189
190 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
191 EXPECT_FALSE(tracker.IsGranted(child, PermissionType::NOTIFICATIONS));
192 }
193
194 TEST_F(DelegationTrackerTest, RenderFrameHostChanged) {
195 DelegationTracker tracker;
196 content::RenderFrameHost* grandparent = GetMainRFH(kOrigin1);
197 content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
198 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin3);
199
200 tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
201 tracker.SetDelegatedPermissions(child, {PermissionType::GEOLOCATION});
202
203 EXPECT_TRUE(tracker.IsGranted(parent, PermissionType::GEOLOCATION));
204 EXPECT_TRUE(tracker.IsGranted(child, PermissionType::GEOLOCATION));
205
206 content::RenderFrameHostTester::For(parent)->SimulateNavigationCommit(
207 GURL(kUniqueOrigin));
208
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 content::RenderFrameHost* grandparent = GetMainRFH(kUniqueOrigin);
216 content::RenderFrameHost* parent = AddChildRFH(grandparent, kOrigin2);
217 content::RenderFrameHost* child = AddChildRFH(parent, kOrigin3);
218
219 tracker.SetDelegatedPermissions(parent, {PermissionType::GEOLOCATION});
220 tracker.SetDelegatedPermissions(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
« no previous file with comments | « chrome/browser/permissions/delegation_tracker.cc ('k') | chrome/browser/permissions/permission_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698