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

Side by Side Diff: chrome/browser/notifications/notification_permission_context_unittest.cc

Issue 2162033002: Revert "Use the same codepath for NOTIFICATIONS and PUSH_MESSAGING permissions" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/notifications/notification_permission_context.h" 5 #include "chrome/browser/notifications/notification_permission_context.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/test/test_mock_time_task_runner.h" 9 #include "base/test/test_mock_time_task_runner.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 16 matching lines...) Expand all
27 #include "url/gurl.h" 27 #include "url/gurl.h"
28 28
29 namespace { 29 namespace {
30 30
31 void DoNothing(ContentSetting content_setting) {} 31 void DoNothing(ContentSetting content_setting) {}
32 void DoNothing2(blink::mojom::PermissionStatus status) {} 32 void DoNothing2(blink::mojom::PermissionStatus status) {}
33 33
34 class TestNotificationPermissionContext : public NotificationPermissionContext { 34 class TestNotificationPermissionContext : public NotificationPermissionContext {
35 public: 35 public:
36 explicit TestNotificationPermissionContext(Profile* profile) 36 explicit TestNotificationPermissionContext(Profile* profile)
37 : NotificationPermissionContext(profile, 37 : NotificationPermissionContext(profile),
38 content::PermissionType::NOTIFICATIONS),
39 permission_set_count_(0), 38 permission_set_count_(0),
40 last_permission_set_persisted_(false), 39 last_permission_set_persisted_(false),
41 last_permission_set_setting_(CONTENT_SETTING_DEFAULT) {} 40 last_permission_set_setting_(CONTENT_SETTING_DEFAULT) {}
42 41
43 int permission_set_count() const { return permission_set_count_; } 42 int permission_set_count() const { return permission_set_count_; }
44 bool last_permission_set_persisted() const { 43 bool last_permission_set_persisted() const {
45 return last_permission_set_persisted_; 44 return last_permission_set_persisted_;
46 } 45 }
47 ContentSetting last_permission_set_setting() const { 46 ContentSetting last_permission_set_setting() const {
48 return last_permission_set_setting_; 47 return last_permission_set_setting_;
(...skipping 20 matching lines...) Expand all
69 NotificationPermissionContext::NotifyPermissionSet( 68 NotificationPermissionContext::NotifyPermissionSet(
70 id, requesting_origin, embedder_origin, callback, persist, 69 id, requesting_origin, embedder_origin, callback, persist,
71 content_setting); 70 content_setting);
72 } 71 }
73 72
74 int permission_set_count_; 73 int permission_set_count_;
75 bool last_permission_set_persisted_; 74 bool last_permission_set_persisted_;
76 ContentSetting last_permission_set_setting_; 75 ContentSetting last_permission_set_setting_;
77 }; 76 };
78 77
79 } // namespace
80
81 class NotificationPermissionContextTest 78 class NotificationPermissionContextTest
82 : public ChromeRenderViewHostTestHarness { 79 : public ChromeRenderViewHostTestHarness {
83 public: 80 public:
84 scoped_refptr<base::TestMockTimeTaskRunner> SwitchToMockTime() { 81 scoped_refptr<base::TestMockTimeTaskRunner> SwitchToMockTime() {
85 old_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 82 old_task_runner_ = base::ThreadTaskRunnerHandle::Get();
86 scoped_refptr<base::TestMockTimeTaskRunner> task_runner( 83 scoped_refptr<base::TestMockTimeTaskRunner> task_runner(
87 new base::TestMockTimeTaskRunner(base::Time::Now(), 84 new base::TestMockTimeTaskRunner(base::Time::Now(),
88 base::TimeTicks::Now())); 85 base::TimeTicks::Now()));
89 base::MessageLoop::current()->SetTaskRunner(task_runner); 86 base::MessageLoop::current()->SetTaskRunner(task_runner);
90 return task_runner; 87 return task_runner;
91 } 88 }
92 89
93 void TearDown() override { 90 void TearDown() override {
94 if (old_task_runner_) { 91 if (old_task_runner_) {
95 base::MessageLoop::current()->SetTaskRunner(old_task_runner_); 92 base::MessageLoop::current()->SetTaskRunner(old_task_runner_);
96 old_task_runner_ = nullptr; 93 old_task_runner_ = nullptr;
97 } 94 }
98 ChromeRenderViewHostTestHarness::TearDown(); 95 ChromeRenderViewHostTestHarness::TearDown();
99 } 96 }
100 97
101 protected:
102 void UpdateContentSetting(NotificationPermissionContext* context,
103 const GURL& requesting_origin,
104 const GURL& embedding_origin,
105 ContentSetting setting) {
106 context->UpdateContentSetting(requesting_origin, embedding_origin, setting);
107 }
108
109 private: 98 private:
110 scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_; 99 scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_;
111 }; 100 };
112 101
102 } // namespace
103
113 // Web Notification permission requests will completely ignore the embedder 104 // Web Notification permission requests will completely ignore the embedder
114 // origin. See https://crbug.com/416894. 105 // origin. See https://crbug.com/416894.
115 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { 106 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) {
116 GURL requesting_origin("https://example.com"); 107 GURL requesting_origin("https://example.com");
117 GURL embedding_origin("https://chrome.com"); 108 GURL embedding_origin("https://chrome.com");
118 GURL different_origin("https://foobar.com"); 109 GURL different_origin("https://foobar.com");
119 110
120 NotificationPermissionContext context(profile(), 111 NotificationPermissionContext context(profile());
121 content::PermissionType::NOTIFICATIONS); 112 context.UpdateContentSetting(requesting_origin,
122 UpdateContentSetting(&context, requesting_origin, embedding_origin, 113 embedding_origin,
123 CONTENT_SETTING_ALLOW); 114 CONTENT_SETTING_ALLOW);
124 115
125 EXPECT_EQ(CONTENT_SETTING_ALLOW, 116 EXPECT_EQ(CONTENT_SETTING_ALLOW,
126 context.GetPermissionStatus(requesting_origin, embedding_origin)); 117 context.GetPermissionStatus(requesting_origin, embedding_origin));
127 118
128 EXPECT_EQ(CONTENT_SETTING_ALLOW, 119 EXPECT_EQ(CONTENT_SETTING_ALLOW,
129 context.GetPermissionStatus(requesting_origin, different_origin)); 120 context.GetPermissionStatus(requesting_origin, different_origin));
130 121
131 context.ResetPermission(requesting_origin, embedding_origin); 122 context.ResetPermission(requesting_origin, embedding_origin);
132 123
133 EXPECT_EQ(CONTENT_SETTING_ASK, 124 EXPECT_EQ(CONTENT_SETTING_ASK,
134 context.GetPermissionStatus(requesting_origin, embedding_origin)); 125 context.GetPermissionStatus(requesting_origin, embedding_origin));
135 126
136 EXPECT_EQ(CONTENT_SETTING_ASK, 127 EXPECT_EQ(CONTENT_SETTING_ASK,
137 context.GetPermissionStatus(requesting_origin, different_origin)); 128 context.GetPermissionStatus(requesting_origin, different_origin));
138 } 129 }
139 130
140 // Push messaging permission requests should only succeed for top level origins
141 // (embedding origin == requesting origin).
142 TEST_F(NotificationPermissionContextTest, PushTopLevelOriginOnly) {
143 GURL requesting_origin("https://example.com");
144 GURL embedding_origin("https://chrome.com");
145
146 NotificationPermissionContext context(
147 profile(), content::PermissionType::PUSH_MESSAGING);
148 UpdateContentSetting(&context, requesting_origin, embedding_origin,
149 CONTENT_SETTING_ALLOW);
150
151 EXPECT_EQ(CONTENT_SETTING_BLOCK,
152 context.GetPermissionStatus(requesting_origin, embedding_origin));
153
154 context.ResetPermission(requesting_origin, embedding_origin);
155
156 UpdateContentSetting(&context, embedding_origin, embedding_origin,
157 CONTENT_SETTING_ALLOW);
158
159 EXPECT_EQ(CONTENT_SETTING_ALLOW,
160 context.GetPermissionStatus(embedding_origin, embedding_origin));
161
162 context.ResetPermission(embedding_origin, embedding_origin);
163
164 EXPECT_EQ(CONTENT_SETTING_ASK,
165 context.GetPermissionStatus(embedding_origin, embedding_origin));
166 }
167
168 // Web Notifications do not require a secure origin when requesting permission. 131 // Web Notifications do not require a secure origin when requesting permission.
169 // See https://crbug.com/404095. 132 // See https://crbug.com/404095.
170 TEST_F(NotificationPermissionContextTest, NoSecureOriginRequirement) { 133 TEST_F(NotificationPermissionContextTest, NoSecureOriginRequirement) {
171 GURL origin("http://example.com"); 134 GURL origin("http://example.com");
172 135
173 NotificationPermissionContext context(profile(), 136 NotificationPermissionContext context(profile());
174 content::PermissionType::NOTIFICATIONS);
175 EXPECT_EQ(CONTENT_SETTING_ASK, 137 EXPECT_EQ(CONTENT_SETTING_ASK,
176 context.GetPermissionStatus(origin, origin)); 138 context.GetPermissionStatus(origin, origin));
177 139
178 UpdateContentSetting(&context, origin, origin, CONTENT_SETTING_ALLOW); 140 context.UpdateContentSetting(origin, origin, CONTENT_SETTING_ALLOW);
179 141
180 EXPECT_EQ(CONTENT_SETTING_ALLOW, 142 EXPECT_EQ(CONTENT_SETTING_ALLOW,
181 context.GetPermissionStatus(origin, origin)); 143 context.GetPermissionStatus(origin, origin));
182 } 144 }
183 145
184 // Push notifications requires a secure origin to acquire permission.
185 TEST_F(NotificationPermissionContextTest, PushSecureOriginRequirement) {
186 GURL origin("http://example.com");
187 GURL secure_origin("https://example.com");
188
189 NotificationPermissionContext context(
190 profile(), content::PermissionType::PUSH_MESSAGING);
191 EXPECT_EQ(CONTENT_SETTING_BLOCK, context.GetPermissionStatus(origin, origin));
192
193 UpdateContentSetting(&context, origin, origin, CONTENT_SETTING_ALLOW);
194
195 EXPECT_EQ(CONTENT_SETTING_BLOCK, context.GetPermissionStatus(origin, origin));
196
197 EXPECT_EQ(CONTENT_SETTING_ASK,
198 context.GetPermissionStatus(secure_origin, secure_origin));
199
200 UpdateContentSetting(&context, secure_origin, secure_origin,
201 CONTENT_SETTING_ALLOW);
202
203 EXPECT_EQ(CONTENT_SETTING_ALLOW,
204 context.GetPermissionStatus(secure_origin, secure_origin));
205 }
206
207 // Tests auto-denial after a time delay in incognito. 146 // Tests auto-denial after a time delay in incognito.
208 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) { 147 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) {
209 TestNotificationPermissionContext permission_context( 148 TestNotificationPermissionContext permission_context(
210 profile()->GetOffTheRecordProfile()); 149 profile()->GetOffTheRecordProfile());
211 GURL url("https://www.example.com"); 150 GURL url("https://www.example.com");
212 NavigateAndCommit(url); 151 NavigateAndCommit(url);
213 152
214 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), 153 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(),
215 web_contents()->GetMainFrame()->GetRoutingID(), 154 web_contents()->GetMainFrame()->GetRoutingID(),
216 -1); 155 -1);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 // After another 2.5 seconds, the second permission request should also have 294 // After another 2.5 seconds, the second permission request should also have
356 // received a response. 295 // received a response.
357 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500)); 296 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500));
358 EXPECT_EQ(2, permission_context.permission_set_count()); 297 EXPECT_EQ(2, permission_context.permission_set_count());
359 EXPECT_TRUE(permission_context.last_permission_set_persisted()); 298 EXPECT_TRUE(permission_context.last_permission_set_persisted());
360 EXPECT_EQ(CONTENT_SETTING_BLOCK, 299 EXPECT_EQ(CONTENT_SETTING_BLOCK,
361 permission_context.last_permission_set_setting()); 300 permission_context.last_permission_set_setting());
362 EXPECT_EQ(CONTENT_SETTING_BLOCK, 301 EXPECT_EQ(CONTENT_SETTING_BLOCK,
363 permission_context.GetContentSettingFromMap(url, url)); 302 permission_context.GetContentSettingFromMap(url, url));
364 } 303 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698