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

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

Issue 376253005: Migrate the notification permission to the new common permission classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <deque> 5 #include <deque>
6 #include <string> 6 #include <string>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/compiler_specific.h" 11 #include "base/compiler_specific.h"
12 #include "base/memory/ref_counted.h" 12 #include "base/memory/ref_counted.h"
13 #include "base/run_loop.h" 13 #include "base/run_loop.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "base/test/simple_test_clock.h" 16 #include "base/test/simple_test_clock.h"
17 #include "base/time/clock.h" 17 #include "base/time/clock.h"
18 #include "chrome/browser/browser_process.h" 18 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/chrome_notification_types.h" 19 #include "chrome/browser/chrome_notification_types.h"
20 #include "chrome/browser/content_settings/host_content_settings_map.h" 20 #include "chrome/browser/content_settings/host_content_settings_map.h"
21 #include "chrome/browser/infobars/infobar_service.h" 21 #include "chrome/browser/infobars/infobar_service.h"
22 #include "chrome/browser/notifications/desktop_notification_service.h" 22 #include "chrome/browser/notifications/desktop_notification_profile_util.h"
23 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
24 #include "chrome/browser/notifications/notification.h" 23 #include "chrome/browser/notifications/notification.h"
25 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
26 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
27 #include "chrome/browser/ui/browser_tabstrip.h" 26 #include "chrome/browser/ui/browser_tabstrip.h"
28 #include "chrome/browser/ui/browser_window.h" 27 #include "chrome/browser/ui/browser_window.h"
29 #include "chrome/browser/ui/tabs/tab_strip_model.h" 28 #include "chrome/browser/ui/tabs/tab_strip_model.h"
30 #include "chrome/common/content_settings.h" 29 #include "chrome/common/content_settings.h"
31 #include "chrome/common/content_settings_pattern.h" 30 #include "chrome/common/content_settings_pattern.h"
32 #include "chrome/test/base/in_process_browser_test.h" 31 #include "chrome/test/base/in_process_browser_test.h"
33 #include "chrome/test/base/ui_test_utils.h" 32 #include "chrome/test/base/ui_test_utils.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 class NotificationsTest : public InProcessBrowserTest { 119 class NotificationsTest : public InProcessBrowserTest {
121 public: 120 public:
122 NotificationsTest() {} 121 NotificationsTest() {}
123 122
124 protected: 123 protected:
125 int GetNotificationCount(); 124 int GetNotificationCount();
126 125
127 void CloseBrowserWindow(Browser* browser); 126 void CloseBrowserWindow(Browser* browser);
128 void CrashTab(Browser* browser, int index); 127 void CrashTab(Browser* browser, int index);
129 128
130 void SetDefaultPermissionSetting(ContentSetting setting);
131 void DenyOrigin(const GURL& origin); 129 void DenyOrigin(const GURL& origin);
132 void AllowOrigin(const GURL& origin); 130 void AllowOrigin(const GURL& origin);
133 void AllowAllOrigins(); 131 void AllowAllOrigins();
132 void SetDefaultContentSetting(ContentSetting setting);
134 133
135 void VerifyInfoBar(const Browser* browser, int index); 134 void VerifyInfoBar(const Browser* browser, int index);
136 std::string CreateNotification(Browser* browser, 135 std::string CreateNotification(Browser* browser,
137 bool wait_for_new_balloon, 136 bool wait_for_new_balloon,
138 const char* icon, 137 const char* icon,
139 const char* title, 138 const char* title,
140 const char* body, 139 const char* body,
141 const char* replace_id); 140 const char* replace_id);
142 std::string CreateSimpleNotification(Browser* browser, 141 std::string CreateSimpleNotification(Browser* browser,
143 bool wait_for_new_balloon); 142 bool wait_for_new_balloon);
144 bool RequestPermissionAndWait(Browser* browser); 143 bool RequestPermissionAndWait(Browser* browser);
145 bool CancelNotification(const char* notification_id, Browser* browser); 144 bool CancelNotification(const char* notification_id, Browser* browser);
146 bool PerformActionOnInfoBar(Browser* browser, 145 bool PerformActionOnInfoBar(Browser* browser,
147 InfobarAction action, 146 InfobarAction action,
148 size_t infobar_index, 147 size_t infobar_index,
149 int tab_index); 148 int tab_index);
150 void GetPrefsByContentSetting(ContentSetting setting, 149 void GetPrefsByContentSetting(ContentSetting setting,
151 ContentSettingsForOneType* settings); 150 ContentSettingsForOneType* settings);
152 bool CheckOriginInSetting(const ContentSettingsForOneType& settings, 151 bool CheckOriginInSetting(const ContentSettingsForOneType& settings,
153 const GURL& origin); 152 const GURL& origin);
154 153
155 GURL GetTestPageURL() const { 154 GURL GetTestPageURL() const {
156 return embedded_test_server()->GetURL( 155 return embedded_test_server()->GetURL(
157 "/notifications/notification_tester.html"); 156 "/notifications/notification_tester.html");
158 } 157 }
159 158
160 private: 159 private:
161 void DropOriginPreference(const GURL& origin); 160 void DropOriginPreference(const GURL& origin);
162 DesktopNotificationService* GetDesktopNotificationService();
163 }; 161 };
164 162
165 int NotificationsTest::GetNotificationCount() { 163 int NotificationsTest::GetNotificationCount() {
166 return message_center::MessageCenter::Get()->NotificationCount(); 164 return message_center::MessageCenter::Get()->NotificationCount();
167 } 165 }
168 166
169 void NotificationsTest::CloseBrowserWindow(Browser* browser) { 167 void NotificationsTest::CloseBrowserWindow(Browser* browser) {
170 content::WindowedNotificationObserver observer( 168 content::WindowedNotificationObserver observer(
171 chrome::NOTIFICATION_BROWSER_CLOSED, 169 chrome::NOTIFICATION_BROWSER_CLOSED,
172 content::Source<Browser>(browser)); 170 content::Source<Browser>(browser));
173 browser->window()->Close(); 171 browser->window()->Close();
174 observer.Wait(); 172 observer.Wait();
175 } 173 }
176 174
177 void NotificationsTest::CrashTab(Browser* browser, int index) { 175 void NotificationsTest::CrashTab(Browser* browser, int index) {
178 content::CrashTab(browser->tab_strip_model()->GetWebContentsAt(index)); 176 content::CrashTab(browser->tab_strip_model()->GetWebContentsAt(index));
179 } 177 }
180 178
181 void NotificationsTest::SetDefaultPermissionSetting(ContentSetting setting) {
182 DesktopNotificationService* service = GetDesktopNotificationService();
183 service->SetDefaultContentSetting(setting);
184 }
185
186 void NotificationsTest::DenyOrigin(const GURL& origin) { 179 void NotificationsTest::DenyOrigin(const GURL& origin) {
187 DropOriginPreference(origin); 180 DropOriginPreference(origin);
188 GetDesktopNotificationService()->DenyPermission(origin); 181 DesktopNotificationProfileUtil::DenyPermission(browser()->profile(), origin);
189 } 182 }
190 183
191 void NotificationsTest::AllowOrigin(const GURL& origin) { 184 void NotificationsTest::AllowOrigin(const GURL& origin) {
192 DropOriginPreference(origin); 185 DropOriginPreference(origin);
193 GetDesktopNotificationService()->GrantPermission(origin); 186 DesktopNotificationProfileUtil::GrantPermission(browser()->profile(), origin);
194 } 187 }
195 188
196 void NotificationsTest::AllowAllOrigins() { 189 void NotificationsTest::AllowAllOrigins() {
197 GetDesktopNotificationService()->ResetAllOrigins(); 190 // Reset all origins
198 GetDesktopNotificationService()->SetDefaultContentSetting( 191 browser()->profile()->GetHostContentSettingsMap()->ClearSettingsForOneType(
199 CONTENT_SETTING_ALLOW); 192 CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
193 SetDefaultContentSetting(CONTENT_SETTING_ALLOW);
194 }
195
196 void NotificationsTest::SetDefaultContentSetting(ContentSetting setting) {
197 browser()->profile()->GetHostContentSettingsMap()->SetDefaultContentSetting(
198 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting);
200 } 199 }
201 200
202 void NotificationsTest::VerifyInfoBar(const Browser* browser, int index) { 201 void NotificationsTest::VerifyInfoBar(const Browser* browser, int index) {
203 InfoBarService* infobar_service = InfoBarService::FromWebContents( 202 InfoBarService* infobar_service = InfoBarService::FromWebContents(
204 browser->tab_strip_model()->GetWebContentsAt(index)); 203 browser->tab_strip_model()->GetWebContentsAt(index));
205 204
206 ASSERT_EQ(1U, infobar_service->infobar_count()); 205 ASSERT_EQ(1U, infobar_service->infobar_count());
207 ConfirmInfoBarDelegate* confirm_infobar = 206 ConfirmInfoBarDelegate* confirm_infobar =
208 infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate(); 207 infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
209 ASSERT_TRUE(confirm_infobar); 208 ASSERT_TRUE(confirm_infobar);
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 } 320 }
322 } 321 }
323 } 322 }
324 323
325 return false; 324 return false;
326 } 325 }
327 326
328 void NotificationsTest::GetPrefsByContentSetting( 327 void NotificationsTest::GetPrefsByContentSetting(
329 ContentSetting setting, 328 ContentSetting setting,
330 ContentSettingsForOneType* settings) { 329 ContentSettingsForOneType* settings) {
331 DesktopNotificationService* service = GetDesktopNotificationService(); 330 DesktopNotificationProfileUtil::GetNotificationsSettings(
332 service->GetNotificationsSettings(settings); 331 browser()->profile(), settings);
333 for (ContentSettingsForOneType::iterator it = settings->begin(); 332 for (ContentSettingsForOneType::iterator it = settings->begin();
334 it != settings->end(); ) { 333 it != settings->end(); ) {
335 if (it->setting != setting || it->source.compare("preference") != 0) 334 if (it->setting != setting || it->source.compare("preference") != 0)
336 it = settings->erase(it); 335 it = settings->erase(it);
337 else 336 else
338 ++it; 337 ++it;
339 } 338 }
340 } 339 }
341 340
342 bool NotificationsTest::CheckOriginInSetting( 341 bool NotificationsTest::CheckOriginInSetting(
343 const ContentSettingsForOneType& settings, 342 const ContentSettingsForOneType& settings,
344 const GURL& origin) { 343 const GURL& origin) {
345 ContentSettingsPattern pattern = 344 ContentSettingsPattern pattern =
346 ContentSettingsPattern::FromURLNoWildcard(origin); 345 ContentSettingsPattern::FromURLNoWildcard(origin);
347 for (ContentSettingsForOneType::const_iterator it = settings.begin(); 346 for (ContentSettingsForOneType::const_iterator it = settings.begin();
348 it != settings.end(); ++it) { 347 it != settings.end(); ++it) {
349 if (it->primary_pattern == pattern) 348 if (it->primary_pattern == pattern)
350 return true; 349 return true;
351 } 350 }
352 return false; 351 return false;
353 } 352 }
354 353
355 void NotificationsTest::DropOriginPreference(const GURL& origin) { 354 void NotificationsTest::DropOriginPreference(const GURL& origin) {
356 GetDesktopNotificationService()->ClearSetting( 355 DesktopNotificationProfileUtil::ClearSetting(browser()->profile(),
357 ContentSettingsPattern::FromURLNoWildcard(origin)); 356 ContentSettingsPattern::FromURLNoWildcard(origin));
358 } 357 }
359 358
360 DesktopNotificationService* NotificationsTest::GetDesktopNotificationService() {
361 Profile* profile = browser()->profile();
362 return DesktopNotificationServiceFactory::GetForProfile(profile);
363 }
364
365 // If this flakes, use http://crbug.com/62311 and http://crbug.com/74428. 359 // If this flakes, use http://crbug.com/62311 and http://crbug.com/74428.
366 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) { 360 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) {
367 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 361 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
368 362
369 ui_test_utils::NavigateToURL( 363 ui_test_utils::NavigateToURL(
370 browser(), 364 browser(),
371 embedded_test_server()->GetURL( 365 embedded_test_server()->GetURL(
372 "/notifications/notifications_request_function.html")); 366 "/notifications/notifications_request_function.html"));
373 367
374 // Request permission by calling request() while eval'ing an inline script; 368 // Request permission by calling request() while eval'ing an inline script;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
493 ASSERT_EQ(0, GetNotificationCount()); 487 ASSERT_EQ(0, GetNotificationCount());
494 ContentSettingsForOneType settings; 488 ContentSettingsForOneType settings;
495 GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); 489 GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
496 EXPECT_EQ(0U, settings.size()); 490 EXPECT_EQ(0U, settings.size());
497 } 491 }
498 492
499 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowNotificationsFromAllSites) { 493 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowNotificationsFromAllSites) {
500 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 494 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
501 495
502 // Verify that all domains can be allowed to show notifications. 496 // Verify that all domains can be allowed to show notifications.
503 SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); 497 SetDefaultContentSetting(CONTENT_SETTING_ALLOW);
504 ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); 498 ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
505 499
506 std::string result = CreateSimpleNotification(browser(), true); 500 std::string result = CreateSimpleNotification(browser(), true);
507 EXPECT_NE("-1", result); 501 EXPECT_NE("-1", result);
508 502
509 ASSERT_EQ(1, GetNotificationCount()); 503 ASSERT_EQ(1, GetNotificationCount());
510 InfoBarService* infobar_service = InfoBarService::FromWebContents( 504 InfoBarService* infobar_service = InfoBarService::FromWebContents(
511 browser()->tab_strip_model()->GetWebContentsAt(0)); 505 browser()->tab_strip_model()->GetWebContentsAt(0));
512 EXPECT_EQ(0U, infobar_service->infobar_count()); 506 EXPECT_EQ(0U, infobar_service->infobar_count());
513 } 507 }
514 508
515 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyNotificationsFromAllSites) { 509 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyNotificationsFromAllSites) {
516 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 510 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
517 511
518 // Verify that no domain can show notifications. 512 // Verify that no domain can show notifications.
519 SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); 513 SetDefaultContentSetting(CONTENT_SETTING_BLOCK);
520 ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); 514 ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
521 515
522 std::string result = CreateSimpleNotification(browser(), false); 516 std::string result = CreateSimpleNotification(browser(), false);
523 EXPECT_EQ("-1", result); 517 EXPECT_EQ("-1", result);
524 518
525 ASSERT_EQ(0, GetNotificationCount()); 519 ASSERT_EQ(0, GetNotificationCount());
526 } 520 }
527 521
528 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyDomainAndAllowAll) { 522 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyDomainAndAllowAll) {
529 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 523 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
530 524
531 // Verify that denying a domain and allowing all shouldn't show 525 // Verify that denying a domain and allowing all shouldn't show
532 // notifications from the denied domain. 526 // notifications from the denied domain.
533 DenyOrigin(GetTestPageURL().GetOrigin()); 527 DenyOrigin(GetTestPageURL().GetOrigin());
534 SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); 528 SetDefaultContentSetting(CONTENT_SETTING_ALLOW);
535 529
536 ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); 530 ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
537 531
538 std::string result = CreateSimpleNotification(browser(), false); 532 std::string result = CreateSimpleNotification(browser(), false);
539 EXPECT_EQ("-1", result); 533 EXPECT_EQ("-1", result);
540 534
541 ASSERT_EQ(0, GetNotificationCount()); 535 ASSERT_EQ(0, GetNotificationCount());
542 } 536 }
543 537
544 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowDomainAndDenyAll) { 538 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowDomainAndDenyAll) {
545 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 539 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
546 540
547 // Verify that allowing a domain and denying all others should show 541 // Verify that allowing a domain and denying all others should show
548 // notifications from the allowed domain. 542 // notifications from the allowed domain.
549 AllowOrigin(GetTestPageURL().GetOrigin()); 543 AllowOrigin(GetTestPageURL().GetOrigin());
550 SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); 544 SetDefaultContentSetting(CONTENT_SETTING_BLOCK);
551 545
552 ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); 546 ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
553 547
554 std::string result = CreateSimpleNotification(browser(), true); 548 std::string result = CreateSimpleNotification(browser(), true);
555 EXPECT_NE("-1", result); 549 EXPECT_NE("-1", result);
556 550
557 ASSERT_EQ(1, GetNotificationCount()); 551 ASSERT_EQ(1, GetNotificationCount());
558 } 552 }
559 553
560 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyAndThenAllowDomain) { 554 IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyAndThenAllowDomain) {
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 802
809 result = CreateSimpleNotification(browser(), true); 803 result = CreateSimpleNotification(browser(), true);
810 EXPECT_NE("-1", result); 804 EXPECT_NE("-1", result);
811 805
812 EXPECT_EQ(settings_map->GetLastUsage(GetTestPageURL().GetOrigin(), 806 EXPECT_EQ(settings_map->GetLastUsage(GetTestPageURL().GetOrigin(),
813 GetTestPageURL().GetOrigin(), 807 GetTestPageURL().GetOrigin(),
814 CONTENT_SETTINGS_TYPE_NOTIFICATIONS) 808 CONTENT_SETTINGS_TYPE_NOTIFICATIONS)
815 .ToDoubleT(), 809 .ToDoubleT(),
816 13); 810 13);
817 } 811 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698