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

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

Issue 2581213002: Force HostContentSettingsMap to be destroyed on its owning thread. (Closed)
Patch Set: s/STRH comparison/RunsTasksOnCurrentThread/ Created 4 years 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/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
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
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
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
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
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 }
OLDNEW
« no previous file with comments | « base/threading/sequenced_worker_pool.cc ('k') | components/content_settings/core/browser/cookie_settings_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698