Index: chrome/browser/notifications/notification_browsertest.cc |
diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc |
index 67792ad3ed7478aecad7c335d87648447e1f76a1..3a693da62ab1bc75aa4622195efb5b80c72b9247 100644 |
--- a/chrome/browser/notifications/notification_browsertest.cc |
+++ b/chrome/browser/notifications/notification_browsertest.cc |
@@ -2,408 +2,25 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include <deque> |
-#include <string> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/compiler_specific.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/run_loop.h" |
-#include "base/stringprintf.h" |
-#include "base/utf_string_conversions.h" |
-#include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
-#include "chrome/browser/api/infobars/infobar_delegate.h" |
-#include "chrome/browser/browser_process.h" |
#include "chrome/browser/infobars/infobar_tab_helper.h" |
-#include "chrome/browser/notifications/balloon.h" |
-#include "chrome/browser/notifications/balloon_collection.h" |
-#include "chrome/browser/notifications/balloon_host.h" |
-#include "chrome/browser/notifications/desktop_notification_service.h" |
-#include "chrome/browser/notifications/desktop_notification_service_factory.h" |
-#include "chrome/browser/notifications/notification.h" |
-#include "chrome/browser/notifications/notification_ui_manager.h" |
-#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_tabstrip.h" |
-#include "chrome/browser/ui/browser_window.h" |
-#include "chrome/browser/ui/tab_contents/tab_contents.h" |
-#include "chrome/common/chrome_notification_types.h" |
-#include "chrome/common/content_settings.h" |
-#include "chrome/common/content_settings_pattern.h" |
#include "chrome/test/base/in_process_browser_test.h" |
#include "chrome/test/base/ui_test_utils.h" |
-#include "content/public/browser/notification_service.h" |
-#include "content/public/browser/notification_source.h" |
-#include "content/public/browser/notification_types.h" |
-#include "content/public/browser/render_view_host.h" |
#include "content/public/browser/web_contents.h" |
#include "content/public/test/browser_test_utils.h" |
-#include "content/public/test/test_utils.h" |
-#include "googleurl/src/gurl.h" |
#include "net/base/net_util.h" |
#include "net/test/test_server.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "webkit/glue/window_open_disposition.h" |
- |
-namespace { |
- |
-const char kExpectedIconUrl[] = "files/notifications/no_such_file.png"; |
- |
-enum InfobarAction { |
- DISMISS = 0, |
- ALLOW, |
- DENY, |
-}; |
- |
-class NotificationBalloonChangeObserver : public content::NotificationObserver { |
- public: |
- NotificationBalloonChangeObserver() |
- : collection_( |
- g_browser_process->notification_ui_manager()->balloon_collection()), |
- collection_changed_(false), |
- notification_received_(false), |
- running_(false), |
- done_(false) { |
- registrar_.Add(this, chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED, |
- content::NotificationService::AllSources()); |
- registrar_.Add(this, chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED, |
- content::NotificationService::AllSources()); |
- collection_->set_on_collection_changed_callback( |
- base::Bind(&NotificationBalloonChangeObserver::OnCollectionChanged, |
- base::Unretained(this))); |
- } |
- |
- virtual ~NotificationBalloonChangeObserver() { |
- collection_->set_on_collection_changed_callback(base::Closure()); |
- } |
- |
- bool Wait() { |
- if (!Check()) { |
- running_ = true; |
- message_loop_runner_ = new content::MessageLoopRunner; |
- message_loop_runner_->Run(); |
- EXPECT_TRUE(done_); |
- } |
- return done_; |
- } |
- |
- bool Check() { |
- if (done_) |
- return true; |
- |
- if (collection_changed_ && notification_received_) { |
- done_ = true; |
- if (running_) { |
- message_loop_runner_->Quit(); |
- running_ = false; |
- } |
- } |
- return done_; |
- } |
- void OnCollectionChanged() { |
- collection_changed_ = true; |
- Check(); |
- } |
- |
- // Overridden from content::NotificationObserver: |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE { |
- DCHECK(type == chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED || |
- type == chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED); |
- notification_received_ = true; |
- Check(); |
- } |
- |
- private: |
- content::NotificationRegistrar registrar_; |
- BalloonCollection* collection_; |
- |
- bool collection_changed_; |
- bool notification_received_; |
- bool running_; |
- bool done_; |
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(NotificationBalloonChangeObserver); |
-}; |
- |
-} // namespace |
- |
-class NotificationsTest : public InProcessBrowserTest { |
+class NotificationsPermissionTest : public InProcessBrowserTest { |
public: |
- NotificationsTest() {} |
- |
- protected: |
- // Overriden from InProcessBrowserTest: |
- virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; |
- |
- const std::deque<Balloon*>& GetActiveBalloons(); |
- int GetNotificationCount(); |
- |
- bool CloseNotificationAndWait(const Notification& notification); |
- void CloseBrowserWindow(Browser* browser); |
- void CrashTab(Browser* browser, int index); |
- void CrashNotification(Balloon* balloon); |
- |
- void SetDefaultPermissionSetting(ContentSetting setting); |
- void DenyOrigin(const GURL& origin); |
- void AllowOrigin(const GURL& origin); |
- void AllowAllOrigins(); |
- |
- void VerifyInfobar(const Browser* browser, int index); |
- std::string CreateNotification(Browser* browser, |
- bool wait_for_new_balloon, |
- const char* icon, |
- const char* title, |
- const char* body, |
- const char* replace_id); |
- std::string CreateSimpleNotification(Browser* browser, |
- bool wait_for_new_balloon); |
- bool RequestPermissionAndWait(Browser* browser); |
- bool CancelNotification(const char* notification_id, Browser* browser); |
- bool PerformActionOnInfobar(Browser* browser, |
- InfobarAction action, |
- int infobar_index, |
- int tab_index); |
- void GetPrefsByContentSetting(ContentSetting setting, |
- ContentSettingsForOneType* settings); |
- bool CheckOriginInSetting(const ContentSettingsForOneType& settings, |
- const GURL& origin); |
- |
- GURL empty_page_url_; |
- GURL test_page_url_; |
- |
- private: |
- void DropOriginPreference(const GURL& origin); |
- DesktopNotificationService* GetDesktopNotificationService(); |
+ NotificationsPermissionTest() {} |
}; |
-void NotificationsTest::SetUpInProcessBrowserTestFixture() { |
- InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
- |
+// If this flakes, use http://crbug.com/62311 and http://crbug.com/74428. |
+IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestUserGestureInfobar) { |
ASSERT_TRUE(test_server()->Start()); |
- empty_page_url_ = test_server()->GetURL("files/empty.html"); |
- test_page_url_ = test_server()->GetURL( |
- "files/notifications/notification_tester.html"); |
-} |
- |
-const std::deque<Balloon*>& NotificationsTest::GetActiveBalloons() { |
- return g_browser_process->notification_ui_manager()-> |
- balloon_collection()->GetActiveBalloons(); |
-} |
- |
-int NotificationsTest::GetNotificationCount() { |
- return g_browser_process->notification_ui_manager()-> |
- balloon_collection()->GetActiveBalloons().size(); |
-} |
- |
-bool NotificationsTest::CloseNotificationAndWait( |
- const Notification& notification) { |
- NotificationBalloonChangeObserver observer; |
- bool success = g_browser_process->notification_ui_manager()-> |
- CancelById(notification.notification_id()); |
- if (success) |
- return observer.Wait(); |
- return false; |
-} |
- |
-void NotificationsTest::CloseBrowserWindow(Browser* browser) { |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_BROWSER_CLOSED, |
- content::Source<Browser>(browser)); |
- browser->window()->Close(); |
- observer.Wait(); |
-} |
- |
-void NotificationsTest::CrashTab(Browser* browser, int index) { |
- content::CrashTab(chrome::GetWebContentsAt(browser, index)); |
-} |
- |
-void NotificationsTest::CrashNotification(Balloon* balloon) { |
- content::CrashTab(balloon->balloon_view()->GetHost()->web_contents()); |
-} |
- |
-void NotificationsTest::SetDefaultPermissionSetting(ContentSetting setting) { |
- DesktopNotificationService* service = GetDesktopNotificationService(); |
- service->SetDefaultContentSetting(setting); |
-} |
- |
-void NotificationsTest::DenyOrigin(const GURL& origin) { |
- DropOriginPreference(origin); |
- GetDesktopNotificationService()->DenyPermission(origin); |
-} |
-void NotificationsTest::AllowOrigin(const GURL& origin) { |
- DropOriginPreference(origin); |
- GetDesktopNotificationService()->GrantPermission(origin); |
-} |
- |
-void NotificationsTest::AllowAllOrigins() { |
- GetDesktopNotificationService()->ResetAllOrigins(); |
- GetDesktopNotificationService()->SetDefaultContentSetting( |
- CONTENT_SETTING_ALLOW); |
-} |
- |
-void NotificationsTest::VerifyInfobar(const Browser* browser, int index) { |
- InfoBarTabHelper* infobar_helper = InfoBarTabHelper::FromWebContents( |
- chrome::GetWebContentsAt(browser, index)); |
- |
- ASSERT_EQ(1U, infobar_helper->GetInfoBarCount()); |
- InfoBarDelegate* infobar = infobar_helper->GetInfoBarDelegateAt(0); |
- ConfirmInfoBarDelegate* confirm_infobar = infobar->AsConfirmInfoBarDelegate(); |
- ASSERT_TRUE(confirm_infobar); |
- int buttons = confirm_infobar->GetButtons(); |
- EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_OK); |
- EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL); |
-} |
- |
-std::string NotificationsTest::CreateNotification( |
- Browser* browser, |
- bool wait_for_new_balloon, |
- const char* icon, |
- const char* title, |
- const char* body, |
- const char* replace_id) { |
- std::string script = base::StringPrintf( |
- "createNotification('%s', '%s', '%s', '%s');", |
- icon, title, body, replace_id); |
- |
- NotificationBalloonChangeObserver observer; |
- std::string result; |
- bool success = content::ExecuteJavaScriptAndExtractString( |
- chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
- L"", |
- UTF8ToWide(script), |
- &result); |
- if (success && result != "-1" && wait_for_new_balloon) |
- success = observer.Wait(); |
- EXPECT_TRUE(success); |
- |
- return result; |
-} |
- |
-std::string NotificationsTest::CreateSimpleNotification( |
- Browser* browser, |
- bool wait_for_new_balloon) { |
- return CreateNotification( |
- browser, wait_for_new_balloon, |
- "no_such_file.png", "My Title", "My Body", ""); |
-} |
- |
-bool NotificationsTest::RequestPermissionAndWait(Browser* browser) { |
- InfoBarTabHelper* infobar_helper = InfoBarTabHelper::FromWebContents( |
- chrome::GetActiveWebContents(browser)); |
- content::WindowedNotificationObserver observer( |
- chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED, |
- content::Source<InfoBarTabHelper>(infobar_helper)); |
- std::string result; |
- bool success = content::ExecuteJavaScriptAndExtractString( |
- chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
- L"", |
- L"requestPermission();", |
- &result); |
- if (!success || result != "1") |
- return false; |
- observer.Wait(); |
- return true; |
-} |
- |
-bool NotificationsTest::CancelNotification( |
- const char* notification_id, |
- Browser* browser) { |
- std::string script = base::StringPrintf( |
- "cancelNotification('%s');", |
- notification_id); |
- |
- NotificationBalloonChangeObserver observer; |
- std::string result; |
- bool success = content::ExecuteJavaScriptAndExtractString( |
- chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
- L"", |
- UTF8ToWide(script), |
- &result); |
- if (!success || result != "1") |
- return false; |
- return observer.Wait(); |
-} |
- |
-bool NotificationsTest::PerformActionOnInfobar( |
- Browser* browser, |
- InfobarAction action, |
- int infobar_index, |
- int tab_index) { |
- InfoBarTabHelper* infobar_helper = InfoBarTabHelper::FromWebContents( |
- chrome::GetWebContentsAt(browser, tab_index)); |
- |
- InfoBarDelegate* infobar = infobar_helper->GetInfoBarDelegateAt( |
- infobar_index); |
- switch (action) { |
- case DISMISS: { |
- infobar->InfoBarDismissed(); |
- infobar_helper->RemoveInfoBar(infobar); |
- return true; |
- } |
- case ALLOW: { |
- ConfirmInfoBarDelegate* confirm_bar = infobar->AsConfirmInfoBarDelegate(); |
- if (confirm_bar->Accept()) { |
- infobar_helper->RemoveInfoBar(infobar); |
- return true; |
- } |
- } |
- case DENY: { |
- ConfirmInfoBarDelegate* confirm_bar = infobar->AsConfirmInfoBarDelegate(); |
- if (confirm_bar->Cancel()) { |
- infobar_helper->RemoveInfoBar(infobar); |
- return true; |
- } |
- } |
- } |
- |
- return false; |
-} |
- |
-void NotificationsTest::GetPrefsByContentSetting( |
- ContentSetting setting, |
- ContentSettingsForOneType* settings) { |
- DesktopNotificationService* service = GetDesktopNotificationService(); |
- service->GetNotificationsSettings(settings); |
- for (ContentSettingsForOneType::iterator it = settings->begin(); |
- it != settings->end(); ) { |
- if (it->setting != setting || it->source.compare("preference") != 0) |
- it = settings->erase(it); |
- else |
- ++it; |
- } |
-} |
- |
-bool NotificationsTest::CheckOriginInSetting( |
- const ContentSettingsForOneType& settings, |
- const GURL& origin) { |
- ContentSettingsPattern pattern = |
- ContentSettingsPattern::FromURLNoWildcard(origin); |
- for (ContentSettingsForOneType::const_iterator it = settings.begin(); |
- it != settings.end(); ++it) { |
- if (it->primary_pattern == pattern) |
- return true; |
- } |
- return false; |
-} |
- |
-void NotificationsTest::DropOriginPreference(const GURL& origin) { |
- GetDesktopNotificationService()->ClearSetting( |
- ContentSettingsPattern::FromURLNoWildcard(origin)); |
-} |
- |
-DesktopNotificationService* NotificationsTest::GetDesktopNotificationService() { |
- Profile* profile = browser()->profile(); |
- return DesktopNotificationServiceFactory::GetForProfile(profile); |
-} |
- |
-// If this flakes, use http://crbug.com/62311 and http://crbug.com/74428. |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) { |
ui_test_utils::NavigateToURL( |
browser(), |
test_server()->GetURL( |
@@ -424,7 +41,9 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) { |
} |
// If this flakes, use http://crbug.com/62311. |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNoUserGestureInfobar) { |
+IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestNoUserGestureInfobar) { |
+ ASSERT_TRUE(test_server()->Start()); |
+ |
// Load a page which just does a request; no user gesture should result |
// in no infobar. |
ui_test_utils::NavigateToURL( |
@@ -435,359 +54,3 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNoUserGestureInfobar) { |
EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
} |
- |
-// Disable new testcases on Chrome OS due to failure on creating notification. |
-#if !defined(OS_CHROMEOS) |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateSimpleNotification) { |
- // Creates a simple notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
- ASSERT_EQ(1U, balloons.size()); |
- Balloon* balloon = balloons[0]; |
- const Notification& notification = balloon->notification(); |
- GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
- EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
- EXPECT_EQ(ASCIIToUTF16("My Title"), notification.title()); |
- EXPECT_EQ(ASCIIToUTF16("My Body"), notification.body()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseNotification) { |
- // Creates a notification and closes it. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
- ASSERT_EQ(1U, balloons.size()); |
- EXPECT_TRUE(CloseNotificationAndWait(balloons[0]->notification())); |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCancelNotification) { |
- // Creates a notification and cancels it in the origin page. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string note_id = CreateSimpleNotification(browser(), true); |
- EXPECT_NE(note_id, "-1"); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- ASSERT_TRUE(CancelNotification(note_id.c_str(), browser())); |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionInfobarAppears) { |
- // Requests notification privileges and verifies the infobar appears. |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
- VerifyInfobar(browser(), 0); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermissionInfobar) { |
- // Tries to create a notification and clicks allow on the infobar. |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- // This notification should not be shown because we do not have permission. |
- CreateSimpleNotification(browser(), false); |
- ASSERT_EQ(0, GetNotificationCount()); |
- |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- ASSERT_TRUE(PerformActionOnInfobar(browser(), ALLOW, 0, 0)); |
- |
- CreateSimpleNotification(browser(), true); |
- EXPECT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermissionInfobar) { |
- // Test that no notification is created |
- // when Deny is chosen from permission infobar. |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- PerformActionOnInfobar(browser(), DENY, 0, 0); |
- CreateSimpleNotification(browser(), false); |
- ASSERT_EQ(0, GetNotificationCount()); |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- EXPECT_TRUE(CheckOriginInSetting(settings, test_page_url_)); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestClosePermissionInfobar) { |
- // Test that no notification is created when permission infobar is dismissed. |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- PerformActionOnInfobar(browser(), DISMISS, 0, 0); |
- CreateSimpleNotification(browser(), false); |
- ASSERT_EQ(0, GetNotificationCount()); |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- EXPECT_EQ(0U, settings.size()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationWithPropertyMissing) { |
- // Test that a notification can be created if one property is missing. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
- ASSERT_EQ(1U, balloons.size()); |
- Balloon* balloon = balloons[0]; |
- const Notification& notification = balloon->notification(); |
- GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
- EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
- EXPECT_EQ(ASCIIToUTF16("My Title"), notification.title()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowNotificationsFromAllSites) { |
- // Verify that all domains can be allowed to show notifications. |
- SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
- chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyNotificationsFromAllSites) { |
- // Verify that no domain can show notifications. |
- SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyDomainAndAllowAll) { |
- // Verify that denying a domain and allowing all shouldn't show |
- // notifications from the denied domain. |
- DenyOrigin(test_page_url_.GetOrigin()); |
- SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); |
- |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowDomainAndDenyAll) { |
- // Verify that allowing a domain and denying all others should show |
- // notifications from the allowed domain. |
- AllowOrigin(test_page_url_.GetOrigin()); |
- SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); |
- |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyAndThenAllowDomain) { |
- // Verify that denying and again allowing should show notifications. |
- DenyOrigin(test_page_url_.GetOrigin()); |
- |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
- |
- AllowOrigin(test_page_url_.GetOrigin()); |
- result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
- chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateDenyCloseNotifications) { |
- // Verify able to create, deny, and close the notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- |
- DenyOrigin(test_page_url_.GetOrigin()); |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- ASSERT_TRUE(CheckOriginInSetting(settings, test_page_url_.GetOrigin())); |
- |
- const std::deque<Balloon*>& balloons1 = GetActiveBalloons(); |
- EXPECT_EQ(1U, balloons1.size()); |
- ASSERT_TRUE(CloseNotificationAndWait(balloons1[0]->notification())); |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-// Crashes on Linux/Win. See http://crbug.com/160657. |
-IN_PROC_BROWSER_TEST_F( |
- NotificationsTest, |
- DISABLED_TestOriginPrefsNotSavedInIncognito) { |
- // Verify that allow/deny origin preferences are not saved in incognito. |
- Browser* incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(incognito)); |
- PerformActionOnInfobar(incognito, DENY, 0, 0); |
- CloseBrowserWindow(incognito); |
- |
- incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(incognito)); |
- PerformActionOnInfobar(incognito, ALLOW, 0, 0); |
- CreateSimpleNotification(incognito, true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- CloseBrowserWindow(incognito); |
- |
- incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(incognito)); |
- |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- EXPECT_EQ(0U, settings.size()); |
- GetPrefsByContentSetting(CONTENT_SETTING_ALLOW, &settings); |
- EXPECT_EQ(0U, settings.size()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestExitBrowserWithInfobar) { |
- // Exit the browser window, when the infobar appears. |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCrashTabWithPermissionInfobar) { |
- // Test crashing the tab with permission infobar doesn't crash Chrome. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- empty_page_url_, |
- NEW_BACKGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- chrome::ActivateTabAt(browser(), 0, true); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- CrashTab(browser(), 0); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestKillNotificationProcess) { |
- // Test killing a notification doesn't crash Chrome. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- |
- const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
- ASSERT_EQ(1U, balloons.size()); |
- CrashNotification(balloons[0]); |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestIncognitoNotification) { |
- // Test notifications in incognito window. |
- Browser* browser = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(browser, test_page_url_); |
- chrome::ActivateTabAt(browser, 0, true); |
- ASSERT_TRUE(RequestPermissionAndWait(browser)); |
- PerformActionOnInfobar(browser, ALLOW, 0, 0); |
- CreateSimpleNotification(browser, true); |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseTabWithPermissionInfobar) { |
- // Test that user can close tab when infobar present. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL("about:blank"), |
- NEW_BACKGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- chrome::ActivateTabAt(browser(), 0, true); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- content::WindowedNotificationObserver observer( |
- content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
- content::NotificationService::AllSources()); |
- chrome::CloseWebContents(browser(), chrome::GetWebContentsAt(browser(), 0)); |
- observer.Wait(); |
-} |
- |
-IN_PROC_BROWSER_TEST_F( |
- NotificationsTest, |
- TestNavigateAwayWithPermissionInfobar) { |
- // Test navigating away when an infobar is present, |
- // then trying to create a notification from the same page. |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL("about:blank"), |
- NEW_BACKGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- chrome::ActivateTabAt(browser(), 0, true); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- ASSERT_TRUE(RequestPermissionAndWait(browser())); |
- PerformActionOnInfobar(browser(), ALLOW, 0, 0); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCrashRendererNotificationRemain) { |
- // Test crashing renderer does not close or crash notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURLWithDisposition( |
- browser(), |
- GURL("about:blank"), |
- NEW_BACKGROUND_TAB, |
- ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
- chrome::ActivateTabAt(browser(), 0, true); |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- CrashTab(browser(), 0); |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationReplacement) { |
- // Test that we can replace a notification using the replaceId. |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL(browser(), test_page_url_); |
- |
- std::string result = CreateNotification( |
- browser(), true, "abc.png", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- |
- result = CreateNotification( |
- browser(), false, "no_such_file.png", "Title2", "Body2", "chat"); |
- EXPECT_NE("-1", result); |
- |
- const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
- EXPECT_EQ(1U, balloons.size()); |
- const Notification& notification = balloons[0]->notification(); |
- GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
- EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
- EXPECT_EQ(ASCIIToUTF16("Title2"), notification.title()); |
- EXPECT_EQ(ASCIIToUTF16("Body2"), notification.body()); |
-} |
- |
-#endif // !defined(OS_CHROMEOS) |