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

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

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

Powered by Google App Engine
This is Rietveld 408576698