OLD | NEW |
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/memory/ptr_util.h" |
9 #include "base/test/test_mock_time_task_runner.h" | 9 #include "base/test/scoped_mock_time_message_loop_task_runner.h" |
10 #include "base/threading/thread_task_runner_handle.h" | |
11 #include "base/time/time.h" | 10 #include "base/time/time.h" |
12 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 11 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
13 #include "chrome/browser/notifications/desktop_notification_profile_util.h" | 12 #include "chrome/browser/notifications/desktop_notification_profile_util.h" |
14 #include "chrome/browser/permissions/permission_manager.h" | 13 #include "chrome/browser/permissions/permission_manager.h" |
15 #include "chrome/browser/permissions/permission_manager_factory.h" | 14 #include "chrome/browser/permissions/permission_manager_factory.h" |
16 #include "chrome/browser/permissions/permission_request_id.h" | 15 #include "chrome/browser/permissions/permission_request_id.h" |
17 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
18 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 17 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
19 #include "chrome/test/base/testing_profile.h" | 18 #include "chrome/test/base/testing_profile.h" |
20 #include "components/content_settings/core/browser/host_content_settings_map.h" | 19 #include "components/content_settings/core/browser/host_content_settings_map.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 | 78 } // namespace |
80 | 79 |
81 class NotificationPermissionContextTest | 80 class NotificationPermissionContextTest |
82 : public ChromeRenderViewHostTestHarness { | 81 : public ChromeRenderViewHostTestHarness { |
83 public: | 82 public: |
84 scoped_refptr<base::TestMockTimeTaskRunner> SwitchToMockTime() { | |
85 old_task_runner_ = base::ThreadTaskRunnerHandle::Get(); | |
86 scoped_refptr<base::TestMockTimeTaskRunner> task_runner( | |
87 new base::TestMockTimeTaskRunner(base::Time::Now(), | |
88 base::TimeTicks::Now())); | |
89 base::MessageLoop::current()->SetTaskRunner(task_runner); | |
90 return task_runner; | |
91 } | |
92 | |
93 void TearDown() override { | 83 void TearDown() override { |
94 if (old_task_runner_) { | 84 mock_time_task_runner_.reset(); |
95 base::MessageLoop::current()->SetTaskRunner(old_task_runner_); | |
96 old_task_runner_ = nullptr; | |
97 } | |
98 ChromeRenderViewHostTestHarness::TearDown(); | 85 ChromeRenderViewHostTestHarness::TearDown(); |
99 } | 86 } |
100 | 87 |
101 protected: | 88 protected: |
| 89 base::TestMockTimeTaskRunner* SwitchToMockTime() { |
| 90 EXPECT_FALSE(mock_time_task_runner_); |
| 91 mock_time_task_runner_ = |
| 92 base::MakeUnique<base::ScopedMockTimeMessageLoopTaskRunner>(); |
| 93 return mock_time_task_runner_->task_runner(); |
| 94 } |
| 95 |
102 void UpdateContentSetting(NotificationPermissionContext* context, | 96 void UpdateContentSetting(NotificationPermissionContext* context, |
103 const GURL& requesting_origin, | 97 const GURL& requesting_origin, |
104 const GURL& embedding_origin, | 98 const GURL& embedding_origin, |
105 ContentSetting setting) { | 99 ContentSetting setting) { |
106 context->UpdateContentSetting(requesting_origin, embedding_origin, setting); | 100 context->UpdateContentSetting(requesting_origin, embedding_origin, setting); |
107 } | 101 } |
108 | 102 |
109 private: | 103 private: |
110 scoped_refptr<base::SingleThreadTaskRunner> old_task_runner_; | 104 std::unique_ptr<base::ScopedMockTimeMessageLoopTaskRunner> |
| 105 mock_time_task_runner_; |
111 }; | 106 }; |
112 | 107 |
113 // Web Notification permission requests will completely ignore the embedder | 108 // Web Notification permission requests will completely ignore the embedder |
114 // origin. See https://crbug.com/416894. | 109 // origin. See https://crbug.com/416894. |
115 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { | 110 TEST_F(NotificationPermissionContextTest, IgnoresEmbedderOrigin) { |
116 GURL requesting_origin("https://example.com"); | 111 GURL requesting_origin("https://example.com"); |
117 GURL embedding_origin("https://chrome.com"); | 112 GURL embedding_origin("https://chrome.com"); |
118 GURL different_origin("https://foobar.com"); | 113 GURL different_origin("https://foobar.com"); |
119 | 114 |
120 NotificationPermissionContext context(profile(), | 115 NotificationPermissionContext context(profile(), |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) { | 203 TEST_F(NotificationPermissionContextTest, TestDenyInIncognitoAfterDelay) { |
209 TestNotificationPermissionContext permission_context( | 204 TestNotificationPermissionContext permission_context( |
210 profile()->GetOffTheRecordProfile()); | 205 profile()->GetOffTheRecordProfile()); |
211 GURL url("https://www.example.com"); | 206 GURL url("https://www.example.com"); |
212 NavigateAndCommit(url); | 207 NavigateAndCommit(url); |
213 | 208 |
214 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), | 209 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), |
215 web_contents()->GetMainFrame()->GetRoutingID(), | 210 web_contents()->GetMainFrame()->GetRoutingID(), |
216 -1); | 211 -1); |
217 | 212 |
218 scoped_refptr<base::TestMockTimeTaskRunner> task_runner(SwitchToMockTime()); | 213 base::TestMockTimeTaskRunner* task_runner = SwitchToMockTime(); |
219 | 214 |
220 ASSERT_EQ(0, permission_context.permission_set_count()); | 215 ASSERT_EQ(0, permission_context.permission_set_count()); |
221 ASSERT_FALSE(permission_context.last_permission_set_persisted()); | 216 ASSERT_FALSE(permission_context.last_permission_set_persisted()); |
222 ASSERT_EQ(CONTENT_SETTING_DEFAULT, | 217 ASSERT_EQ(CONTENT_SETTING_DEFAULT, |
223 permission_context.last_permission_set_setting()); | 218 permission_context.last_permission_set_setting()); |
224 | 219 |
225 permission_context.RequestPermission( | 220 permission_context.RequestPermission( |
226 web_contents(), id, url, true /* user_gesture */, base::Bind(&DoNothing)); | 221 web_contents(), id, url, true /* user_gesture */, base::Bind(&DoNothing)); |
227 | 222 |
228 // Should be blocked after 1-2 seconds, but the timer is reset whenever the | 223 // Should be blocked after 1-2 seconds, but the timer is reset whenever the |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
274 TEST_F(NotificationPermissionContextTest, TestCancelledIncognitoRequest) { | 269 TEST_F(NotificationPermissionContextTest, TestCancelledIncognitoRequest) { |
275 TestNotificationPermissionContext permission_context( | 270 TestNotificationPermissionContext permission_context( |
276 profile()->GetOffTheRecordProfile()); | 271 profile()->GetOffTheRecordProfile()); |
277 GURL url("https://www.example.com"); | 272 GURL url("https://www.example.com"); |
278 NavigateAndCommit(url); | 273 NavigateAndCommit(url); |
279 | 274 |
280 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), | 275 const PermissionRequestID id(web_contents()->GetRenderProcessHost()->GetID(), |
281 web_contents()->GetMainFrame()->GetRoutingID(), | 276 web_contents()->GetMainFrame()->GetRoutingID(), |
282 -1); | 277 -1); |
283 | 278 |
284 scoped_refptr<base::TestMockTimeTaskRunner> task_runner(SwitchToMockTime()); | 279 base::TestMockTimeTaskRunner* task_runner = SwitchToMockTime(); |
285 | 280 |
286 content::PermissionManager* permission_manager = | 281 content::PermissionManager* permission_manager = |
287 PermissionManagerFactory::GetForProfile( | 282 PermissionManagerFactory::GetForProfile( |
288 profile()->GetOffTheRecordProfile()); | 283 profile()->GetOffTheRecordProfile()); |
289 | 284 |
290 // Request and cancel the permission via PermissionManager. That way if | 285 // Request and cancel the permission via PermissionManager. That way if |
291 // https://crbug.com/586944 regresses, then as well as the EXPECT_EQs below | 286 // https://crbug.com/586944 regresses, then as well as the EXPECT_EQs below |
292 // failing, PermissionManager::OnPermissionsRequestResponseStatus will crash. | 287 // failing, PermissionManager::OnPermissionsRequestResponseStatus will crash. |
293 int request_id = permission_manager->RequestPermission( | 288 int request_id = permission_manager->RequestPermission( |
294 content::PermissionType::NOTIFICATIONS, web_contents()->GetMainFrame(), | 289 content::PermissionType::NOTIFICATIONS, web_contents()->GetMainFrame(), |
(...skipping 16 matching lines...) Expand all Loading... |
311 NavigateAndCommit(url); | 306 NavigateAndCommit(url); |
312 web_contents()->WasShown(); | 307 web_contents()->WasShown(); |
313 | 308 |
314 const PermissionRequestID id0(web_contents()->GetRenderProcessHost()->GetID(), | 309 const PermissionRequestID id0(web_contents()->GetRenderProcessHost()->GetID(), |
315 web_contents()->GetMainFrame()->GetRoutingID(), | 310 web_contents()->GetMainFrame()->GetRoutingID(), |
316 0); | 311 0); |
317 const PermissionRequestID id1(web_contents()->GetRenderProcessHost()->GetID(), | 312 const PermissionRequestID id1(web_contents()->GetRenderProcessHost()->GetID(), |
318 web_contents()->GetMainFrame()->GetRoutingID(), | 313 web_contents()->GetMainFrame()->GetRoutingID(), |
319 1); | 314 1); |
320 | 315 |
321 scoped_refptr<base::TestMockTimeTaskRunner> task_runner(SwitchToMockTime()); | 316 base::TestMockTimeTaskRunner* task_runner = SwitchToMockTime(); |
322 | 317 |
323 ASSERT_EQ(0, permission_context.permission_set_count()); | 318 ASSERT_EQ(0, permission_context.permission_set_count()); |
324 ASSERT_FALSE(permission_context.last_permission_set_persisted()); | 319 ASSERT_FALSE(permission_context.last_permission_set_persisted()); |
325 ASSERT_EQ(CONTENT_SETTING_DEFAULT, | 320 ASSERT_EQ(CONTENT_SETTING_DEFAULT, |
326 permission_context.last_permission_set_setting()); | 321 permission_context.last_permission_set_setting()); |
327 | 322 |
328 permission_context.RequestPermission(web_contents(), id0, url, | 323 permission_context.RequestPermission(web_contents(), id0, url, |
329 true /* user_gesture */, | 324 true /* user_gesture */, |
330 base::Bind(&DoNothing)); | 325 base::Bind(&DoNothing)); |
331 permission_context.RequestPermission(web_contents(), id1, url, | 326 permission_context.RequestPermission(web_contents(), id1, url, |
(...skipping 23 matching lines...) Expand all Loading... |
355 // After another 2.5 seconds, the second permission request should also have | 350 // After another 2.5 seconds, the second permission request should also have |
356 // received a response. | 351 // received a response. |
357 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500)); | 352 task_runner->FastForwardBy(base::TimeDelta::FromMilliseconds(2500)); |
358 EXPECT_EQ(2, permission_context.permission_set_count()); | 353 EXPECT_EQ(2, permission_context.permission_set_count()); |
359 EXPECT_TRUE(permission_context.last_permission_set_persisted()); | 354 EXPECT_TRUE(permission_context.last_permission_set_persisted()); |
360 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 355 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
361 permission_context.last_permission_set_setting()); | 356 permission_context.last_permission_set_setting()); |
362 EXPECT_EQ(CONTENT_SETTING_BLOCK, | 357 EXPECT_EQ(CONTENT_SETTING_BLOCK, |
363 permission_context.GetContentSettingFromMap(url, url)); | 358 permission_context.GetContentSettingFromMap(url, url)); |
364 } | 359 } |
OLD | NEW |