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

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

Issue 2149883002: 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),
38 permission_set_count_(0), 39 permission_set_count_(0),
39 last_permission_set_persisted_(false), 40 last_permission_set_persisted_(false),
40 last_permission_set_setting_(CONTENT_SETTING_DEFAULT) {} 41 last_permission_set_setting_(CONTENT_SETTING_DEFAULT) {}
41 42
42 int permission_set_count() const { return permission_set_count_; } 43 int permission_set_count() const { return permission_set_count_; }
43 bool last_permission_set_persisted() const { 44 bool last_permission_set_persisted() const {
44 return last_permission_set_persisted_; 45 return last_permission_set_persisted_;
45 } 46 }
46 ContentSetting last_permission_set_setting() const { 47 ContentSetting last_permission_set_setting() const {
47 return last_permission_set_setting_; 48 return last_permission_set_setting_;
(...skipping 20 matching lines...) Expand all
68 NotificationPermissionContext::NotifyPermissionSet( 69 NotificationPermissionContext::NotifyPermissionSet(
69 id, requesting_origin, embedder_origin, callback, persist, 70 id, requesting_origin, embedder_origin, callback, persist,
70 content_setting); 71 content_setting);
71 } 72 }
72 73
73 int permission_set_count_; 74 int permission_set_count_;
74 bool last_permission_set_persisted_; 75 bool last_permission_set_persisted_;
75 ContentSetting last_permission_set_setting_; 76 ContentSetting last_permission_set_setting_;
76 }; 77 };
77 78
79 } // namespace
80
78 class NotificationPermissionContextTest 81 class NotificationPermissionContextTest
79 : public ChromeRenderViewHostTestHarness { 82 : public ChromeRenderViewHostTestHarness {
80 public: 83 public:
81 scoped_refptr<base::TestMockTimeTaskRunner> SwitchToMockTime() { 84 scoped_refptr<base::TestMockTimeTaskRunner> SwitchToMockTime() {
82 old_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 85 old_task_runner_ = base::ThreadTaskRunnerHandle::Get();
83 scoped_refptr<base::TestMockTimeTaskRunner> task_runner( 86 scoped_refptr<base::TestMockTimeTaskRunner> task_runner(
84 new base::TestMockTimeTaskRunner(base::Time::Now(), 87 new base::TestMockTimeTaskRunner(base::Time::Now(),
85 base::TimeTicks::Now())); 88 base::TimeTicks::Now()));
86 base::MessageLoop::current()->SetTaskRunner(task_runner); 89 base::MessageLoop::current()->SetTaskRunner(task_runner);
87 return task_runner; 90 return task_runner;
88 } 91 }
89 92
90 void TearDown() override { 93 void TearDown() override {
91 if (old_task_runner_) { 94 if (old_task_runner_) {
92 base::MessageLoop::current()->SetTaskRunner(old_task_runner_); 95 base::MessageLoop::current()->SetTaskRunner(old_task_runner_);
93 old_task_runner_ = nullptr; 96 old_task_runner_ = nullptr;
94 } 97 }
95 ChromeRenderViewHostTestHarness::TearDown(); 98 ChromeRenderViewHostTestHarness::TearDown();
96 } 99 }
97 100
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
98 private: 109 private:
99 scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_; 110 scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_;
100 }; 111 };
101 112
102 } // namespace
103
104 // Web Notification permission requests will completely ignore the embedder 113 // Web Notification permission requests will completely ignore the embedder
105 // origin. See https://crbug.com/416894. 114 // origin. See https://crbug.com/416894.
106 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { 115 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) {
107 GURL requesting_origin("https://example.com"); 116 GURL requesting_origin("https://example.com");
108 GURL embedding_origin("https://chrome.com"); 117 GURL embedding_origin("https://chrome.com");
109 GURL different_origin("https://foobar.com"); 118 GURL different_origin("https://foobar.com");
110 119
111 NotificationPermissionContext context(profile()); 120 NotificationPermissionContext context(profile(),
112 context.UpdateContentSetting(requesting_origin, 121 content::PermissionType::NOTIFICATIONS);
113 embedding_origin, 122 UpdateContentSetting(&context, requesting_origin, embedding_origin,
114 CONTENT_SETTING_ALLOW); 123 CONTENT_SETTING_ALLOW);
115 124
116 EXPECT_EQ(CONTENT_SETTING_ALLOW, 125 EXPECT_EQ(CONTENT_SETTING_ALLOW,
117 context.GetPermissionStatus(requesting_origin, embedding_origin)); 126 context.GetPermissionStatus(requesting_origin, embedding_origin));
118 127
119 EXPECT_EQ(CONTENT_SETTING_ALLOW, 128 EXPECT_EQ(CONTENT_SETTING_ALLOW,
120 context.GetPermissionStatus(requesting_origin, different_origin)); 129 context.GetPermissionStatus(requesting_origin, different_origin));
121 130
122 context.ResetPermission(requesting_origin, embedding_origin); 131 context.ResetPermission(requesting_origin, embedding_origin);
123 132
124 EXPECT_EQ(CONTENT_SETTING_ASK, 133 EXPECT_EQ(CONTENT_SETTING_ASK,
125 context.GetPermissionStatus(requesting_origin, embedding_origin)); 134 context.GetPermissionStatus(requesting_origin, embedding_origin));
126 135
127 EXPECT_EQ(CONTENT_SETTING_ASK, 136 EXPECT_EQ(CONTENT_SETTING_ASK,
128 context.GetPermissionStatus(requesting_origin, different_origin)); 137 context.GetPermissionStatus(requesting_origin, different_origin));
129 } 138 }
130 139
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
131 // Web Notifications do not require a secure origin when requesting permission. 168 // Web Notifications do not require a secure origin when requesting permission.
132 // See https://crbug.com/404095. 169 // See https://crbug.com/404095.
133 TEST_F(NotificationPermissionContextTest, NoSecureOriginRequirement) { 170 TEST_F(NotificationPermissionContextTest, NoSecureOriginRequirement) {
134 GURL origin("http://example.com"); 171 GURL origin("http://example.com");
135 172
136 NotificationPermissionContext context(profile()); 173 NotificationPermissionContext context(profile(),
174 content::PermissionType::NOTIFICATIONS);
137 EXPECT_EQ(CONTENT_SETTING_ASK, 175 EXPECT_EQ(CONTENT_SETTING_ASK,
138 context.GetPermissionStatus(origin, origin)); 176 context.GetPermissionStatus(origin, origin));
139 177
140 context.UpdateContentSetting(origin, origin, CONTENT_SETTING_ALLOW); 178 UpdateContentSetting(&context, origin, origin, CONTENT_SETTING_ALLOW);
141 179
142 EXPECT_EQ(CONTENT_SETTING_ALLOW, 180 EXPECT_EQ(CONTENT_SETTING_ALLOW,
143 context.GetPermissionStatus(origin, origin)); 181 context.GetPermissionStatus(origin, origin));
144 } 182 }
145 183
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
146 // Tests auto-denial after a time delay in incognito. 207 // Tests auto-denial after a time delay in incognito.
147 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) { 208 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) {
148 TestNotificationPermissionContext permission_context( 209 TestNotificationPermissionContext permission_context(
149 profile()->GetOffTheRecordProfile()); 210 profile()->GetOffTheRecordProfile());
150 GURL url("https://www.example.com"); 211 GURL url("https://www.example.com");
151 NavigateAndCommit(url); 212 NavigateAndCommit(url);
152 213
153 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), 214 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(),
154 web_contents()->GetMainFrame()->GetRoutingID(), 215 web_contents()->GetMainFrame()->GetRoutingID(),
155 -1); 216 -1);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
294 // After another 2.5 seconds, the second permission request should also have 355 // After another 2.5 seconds, the second permission request should also have
295 // received a response. 356 // received a response.
296 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500)); 357 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500));
297 EXPECT_EQ(2, permission_context.permission_set_count()); 358 EXPECT_EQ(2, permission_context.permission_set_count());
298 EXPECT_TRUE(permission_context.last_permission_set_persisted()); 359 EXPECT_TRUE(permission_context.last_permission_set_persisted());
299 EXPECT_EQ(CONTENT_SETTING_BLOCK, 360 EXPECT_EQ(CONTENT_SETTING_BLOCK,
300 permission_context.last_permission_set_setting()); 361 permission_context.last_permission_set_setting());
301 EXPECT_EQ(CONTENT_SETTING_BLOCK, 362 EXPECT_EQ(CONTENT_SETTING_BLOCK,
302 permission_context.GetContentSettingFromMap(url, url)); 363 permission_context.GetContentSettingFromMap(url, url));
303 } 364 }
OLDNEW
« no previous file with comments | « chrome/browser/notifications/notification_permission_context.cc ('k') | chrome/browser/permissions/permission_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698