Index: chrome/browser/notifications/notification_browsertest.cc |
diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc |
deleted file mode 100644 |
index 454830e484ab881e8e6a9ab8d9c5773ddda263f8..0000000000000000000000000000000000000000 |
--- a/chrome/browser/notifications/notification_browsertest.cc |
+++ /dev/null |
@@ -1,884 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// 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/command_line.h" |
-#include "base/compiler_specific.h" |
-#include "base/macros.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/run_loop.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/test/simple_test_clock.h" |
-#include "base/time/clock.h" |
-#include "build/build_config.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
-#include "chrome/browser/infobars/infobar_service.h" |
-#include "chrome/browser/notifications/desktop_notification_profile_util.h" |
-#include "chrome/browser/notifications/notification.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/tabs/tab_strip_model.h" |
-#include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
-#include "chrome/test/base/in_process_browser_test.h" |
-#include "chrome/test/base/ui_test_utils.h" |
-#include "components/content_settings/core/browser/host_content_settings_map.h" |
-#include "components/content_settings/core/common/content_settings.h" |
-#include "components/content_settings/core/common/content_settings_pattern.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 "net/test/embedded_test_server/embedded_test_server.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "ui/base/window_open_disposition.h" |
-#include "ui/message_center/message_center.h" |
-#include "ui/message_center/message_center_observer.h" |
-#include "ui/message_center/message_center_style.h" |
-#include "ui/message_center/notification_blocker.h" |
-#include "url/gurl.h" |
- |
-namespace { |
- |
-class ToggledNotificationBlocker : public message_center::NotificationBlocker { |
- public: |
- ToggledNotificationBlocker() |
- : message_center::NotificationBlocker( |
- message_center::MessageCenter::Get()), |
- notifications_enabled_(true) {} |
- ~ToggledNotificationBlocker() override {} |
- |
- void SetNotificationsEnabled(bool enabled) { |
- if (notifications_enabled_ != enabled) { |
- notifications_enabled_ = enabled; |
- NotifyBlockingStateChanged(); |
- } |
- } |
- |
- // NotificationBlocker overrides: |
- bool ShouldShowNotificationAsPopup( |
- const message_center::NotifierId& notifier_id) const override { |
- return notifications_enabled_; |
- } |
- |
- private: |
- bool notifications_enabled_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ToggledNotificationBlocker); |
-}; |
- |
-} // namespace |
- |
-namespace { |
- |
-const char kExpectedIconUrl[] = "/notifications/no_such_file.png"; |
- |
-class NotificationChangeObserver { |
-public: |
- virtual ~NotificationChangeObserver() {} |
- virtual bool Wait() = 0; |
-}; |
- |
-class MessageCenterChangeObserver |
- : public message_center::MessageCenterObserver, |
- public NotificationChangeObserver { |
- public: |
- MessageCenterChangeObserver() |
- : notification_received_(false) { |
- message_center::MessageCenter::Get()->AddObserver(this); |
- } |
- |
- ~MessageCenterChangeObserver() override { |
- message_center::MessageCenter::Get()->RemoveObserver(this); |
- } |
- |
- // NotificationChangeObserver: |
- bool Wait() override { |
- if (notification_received_) |
- return true; |
- |
- message_loop_runner_ = new content::MessageLoopRunner; |
- message_loop_runner_->Run(); |
- return notification_received_; |
- } |
- |
- // message_center::MessageCenterObserver: |
- void OnNotificationAdded(const std::string& notification_id) override { |
- OnMessageCenterChanged(); |
- } |
- |
- void OnNotificationRemoved(const std::string& notification_id, |
- bool by_user) override { |
- OnMessageCenterChanged(); |
- } |
- |
- void OnNotificationUpdated(const std::string& notification_id) override { |
- OnMessageCenterChanged(); |
- } |
- |
- void OnMessageCenterChanged() { |
- notification_received_ = true; |
- if (message_loop_runner_.get()) |
- message_loop_runner_->Quit(); |
- } |
- |
- bool notification_received_; |
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MessageCenterChangeObserver); |
-}; |
- |
-// Used to observe the creation of permission prompt without responding. |
-class PermissionRequestObserver : public PermissionBubbleManager::Observer { |
- public: |
- explicit PermissionRequestObserver(content::WebContents* web_contents) |
- : bubble_manager_(PermissionBubbleManager::FromWebContents(web_contents)), |
- request_shown_(false), |
- message_loop_runner_(new content::MessageLoopRunner) { |
- bubble_manager_->AddObserver(this); |
- } |
- ~PermissionRequestObserver() override { |
- // Safe to remove twice if it happens. |
- bubble_manager_->RemoveObserver(this); |
- } |
- |
- void Wait() { message_loop_runner_->Run(); } |
- |
- bool request_shown() { return request_shown_; } |
- |
- private: |
- // PermissionBubbleManager::Observer |
- void OnBubbleAdded() override { |
- request_shown_ = true; |
- bubble_manager_->RemoveObserver(this); |
- message_loop_runner_->Quit(); |
- } |
- |
- PermissionBubbleManager* bubble_manager_; |
- bool request_shown_; |
- scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PermissionRequestObserver); |
-}; |
- |
-} // namespace |
- |
-class NotificationsTest : public InProcessBrowserTest { |
- public: |
- NotificationsTest() {} |
- |
- protected: |
- int GetNotificationCount(); |
- int GetNotificationPopupCount(); |
- |
- void CloseBrowserWindow(Browser* browser); |
- void CrashTab(Browser* browser, int index); |
- |
- void DenyOrigin(const GURL& origin); |
- void AllowOrigin(const GURL& origin); |
- void AllowAllOrigins(); |
- void SetDefaultContentSetting(ContentSetting setting); |
- |
- 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 RequestAndAcceptPermission(Browser* browser); |
- bool RequestAndDenyPermission(Browser* browser); |
- bool RequestAndDismissPermission(Browser* browser); |
- bool RequestPermissionAndWait(Browser* browser); |
- bool CancelNotification(const char* notification_id, Browser* browser); |
- void GetPrefsByContentSetting(ContentSetting setting, |
- ContentSettingsForOneType* settings); |
- bool CheckOriginInSetting(const ContentSettingsForOneType& settings, |
- const GURL& origin); |
- |
- GURL GetTestPageURLForFile(const std::string& file) const { |
- return embedded_test_server()->GetURL( |
- std::string("/notifications/") + file); |
- } |
- |
- GURL GetTestPageURL() const { |
- return GetTestPageURLForFile("notification_tester.html"); |
- } |
- |
- content::WebContents* GetActiveWebContents(Browser* browser) { |
- return browser->tab_strip_model()->GetActiveWebContents(); |
- } |
- |
- private: |
- void DropOriginPreference(const GURL& origin); |
- std::string RequestAndRespondToPermission( |
- Browser* browser, |
- PermissionBubbleManager::AutoResponseType bubble_response); |
-}; |
- |
-int NotificationsTest::GetNotificationCount() { |
- return message_center::MessageCenter::Get()->NotificationCount(); |
-} |
- |
-int NotificationsTest::GetNotificationPopupCount() { |
- return message_center::MessageCenter::Get()->GetPopupNotifications().size(); |
-} |
- |
-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(browser->tab_strip_model()->GetWebContentsAt(index)); |
-} |
- |
-void NotificationsTest::DenyOrigin(const GURL& origin) { |
- DropOriginPreference(origin); |
- DesktopNotificationProfileUtil::DenyPermission(browser()->profile(), origin); |
-} |
- |
-void NotificationsTest::AllowOrigin(const GURL& origin) { |
- DropOriginPreference(origin); |
- DesktopNotificationProfileUtil::GrantPermission(browser()->profile(), origin); |
-} |
- |
-void NotificationsTest::AllowAllOrigins() { |
- // Reset all origins |
- HostContentSettingsMapFactory::GetForProfile(browser()->profile()) |
- ->ClearSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
- SetDefaultContentSetting(CONTENT_SETTING_ALLOW); |
- } |
- |
-void NotificationsTest::SetDefaultContentSetting(ContentSetting setting) { |
- HostContentSettingsMapFactory::GetForProfile(browser()->profile()) |
- ->SetDefaultContentSetting(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting); |
-} |
- |
-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); |
- |
- MessageCenterChangeObserver observer; |
- std::string result; |
- bool success = content::ExecuteScriptAndExtractString( |
- GetActiveWebContents(browser), 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", ""); |
-} |
- |
-std::string NotificationsTest::RequestAndRespondToPermission( |
- Browser* browser, |
- PermissionBubbleManager::AutoResponseType bubble_response) { |
- std::string result; |
- content::WebContents* web_contents = GetActiveWebContents(browser); |
- PermissionBubbleManager::FromWebContents(web_contents) |
- ->set_auto_response_for_test(bubble_response); |
- EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
- web_contents, "requestPermission();", &result)); |
- return result; |
-} |
- |
-bool NotificationsTest::RequestAndAcceptPermission(Browser* browser) { |
- std::string result = RequestAndRespondToPermission( |
- browser, PermissionBubbleManager::ACCEPT_ALL); |
- return "request-callback-granted" == result; |
-} |
- |
-bool NotificationsTest::RequestAndDenyPermission(Browser* browser) { |
- std::string result = |
- RequestAndRespondToPermission(browser, PermissionBubbleManager::DENY_ALL); |
- return "request-callback-denied" == result; |
-} |
- |
-bool NotificationsTest::RequestAndDismissPermission(Browser* browser) { |
- std::string result = |
- RequestAndRespondToPermission(browser, PermissionBubbleManager::DISMISS); |
- return "request-callback-default" == result; |
-} |
- |
-bool NotificationsTest::RequestPermissionAndWait(Browser* browser) { |
- content::WebContents* web_contents = GetActiveWebContents(browser); |
- ui_test_utils::NavigateToURL(browser, GetTestPageURL()); |
- PermissionRequestObserver observer(web_contents); |
- std::string result; |
- EXPECT_TRUE(content::ExecuteScriptAndExtractString( |
- web_contents, "requestPermissionAndRespond();", &result)); |
- EXPECT_EQ("requested", result); |
- observer.Wait(); |
- return observer.request_shown(); |
-} |
- |
-bool NotificationsTest::CancelNotification( |
- const char* notification_id, |
- Browser* browser) { |
- std::string script = base::StringPrintf( |
- "cancelNotification('%s');", |
- notification_id); |
- |
- MessageCenterChangeObserver observer; |
- std::string result; |
- bool success = content::ExecuteScriptAndExtractString( |
- GetActiveWebContents(browser), script, &result); |
- if (!success || result != "1") |
- return false; |
- return observer.Wait(); |
-} |
- |
-void NotificationsTest::GetPrefsByContentSetting( |
- ContentSetting setting, |
- ContentSettingsForOneType* settings) { |
- DesktopNotificationProfileUtil::GetNotificationsSettings( |
- browser()->profile(), 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) { |
- DesktopNotificationProfileUtil::ClearSetting(browser()->profile(), origin); |
-} |
- |
-// Flaky on Windows, Mac, Linux: http://crbug.com/437414. |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, DISABLED_TestUserGestureInfobar) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- ui_test_utils::NavigateToURL( |
- browser(), |
- embedded_test_server()->GetURL( |
- "/notifications/notifications_request_function.html")); |
- |
- // Request permission by calling request() while eval'ing an inline script; |
- // That's considered a user gesture to webkit, and should produce an infobar. |
- bool result; |
- ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
- GetActiveWebContents(browser()), |
- "window.domAutomationController.send(request());", &result)); |
- EXPECT_TRUE(result); |
- |
- InfoBarService* infobar_service = InfoBarService::FromWebContents( |
- browser()->tab_strip_model()->GetWebContentsAt(0)); |
- EXPECT_EQ(1U, infobar_service->infobar_count()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateSimpleNotification) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Creates a simple notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- GURL EXPECTED_ICON_URL = embedded_test_server()->GetURL(kExpectedIconUrl); |
- ASSERT_EQ(1, GetNotificationCount()); |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- EXPECT_EQ(base::ASCIIToUTF16("My Title"), |
- (*notifications.rbegin())->title()); |
- EXPECT_EQ(base::ASCIIToUTF16("My Body"), |
- (*notifications.rbegin())->message()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, NotificationBlockerTest) { |
- ToggledNotificationBlocker blocker; |
- |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Creates a simple notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- blocker.SetNotificationsEnabled(false); |
- EXPECT_EQ(0, GetNotificationPopupCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseNotification) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Creates a notification and closes it. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- ASSERT_EQ(1, GetNotificationCount()); |
- |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- message_center::MessageCenter::Get()->RemoveNotification( |
- (*notifications.rbegin())->id(), |
- true); // by_user |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCancelNotification) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Creates a notification and cancels it in the origin page. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- 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()); |
-} |
- |
-// Requests notification privileges and verifies the prompt appears. |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionRequestUIAppears) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- EXPECT_TRUE(RequestPermissionAndWait(browser())); |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermissionRequestUI) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Tries to create a notification & clicks 'allow' on the prompt. |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- // This notification should not be shown because we do not have permission. |
- CreateSimpleNotification(browser(), false); |
- ASSERT_EQ(0, GetNotificationCount()); |
- |
- ASSERT_TRUE(RequestAndAcceptPermission(browser())); |
- |
- CreateSimpleNotification(browser(), true); |
- EXPECT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermissionRequestUI) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Test that no notification is created when Deny is chosen from prompt. |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- ASSERT_TRUE(RequestAndDenyPermission(browser())); |
- CreateSimpleNotification(browser(), false); |
- ASSERT_EQ(0, GetNotificationCount()); |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- EXPECT_TRUE(CheckOriginInSetting(settings, GetTestPageURL())); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestClosePermissionRequestUI) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Test that no notification is created when prompt is dismissed. |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- ASSERT_TRUE(RequestAndDismissPermission(browser())); |
- 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, TestAllowNotificationsFromAllSites) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that all domains can be allowed to show notifications. |
- SetDefaultContentSetting(CONTENT_SETTING_ALLOW); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyNotificationsFromAllSites) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that no domain can show notifications. |
- SetDefaultContentSetting(CONTENT_SETTING_BLOCK); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyDomainAndAllowAll) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that denying a domain and allowing all shouldn't show |
- // notifications from the denied domain. |
- DenyOrigin(GetTestPageURL().GetOrigin()); |
- SetDefaultContentSetting(CONTENT_SETTING_ALLOW); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowDomainAndDenyAll) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that allowing a domain and denying all others should show |
- // notifications from the allowed domain. |
- AllowOrigin(GetTestPageURL().GetOrigin()); |
- SetDefaultContentSetting(CONTENT_SETTING_BLOCK); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyAndThenAllowDomain) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that denying and again allowing should show notifications. |
- DenyOrigin(GetTestPageURL().GetOrigin()); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), false); |
- EXPECT_EQ("-1", result); |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
- |
- AllowOrigin(GetTestPageURL().GetOrigin()); |
- result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateDenyCloseNotifications) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify able to create, deny, and close the notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- |
- DenyOrigin(GetTestPageURL().GetOrigin()); |
- ContentSettingsForOneType settings; |
- GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings); |
- ASSERT_TRUE(CheckOriginInSetting(settings, GetTestPageURL().GetOrigin())); |
- |
- EXPECT_EQ(1, GetNotificationCount()); |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- message_center::MessageCenter::Get()->RemoveNotification( |
- (*notifications.rbegin())->id(), |
- true); // by_user |
- ASSERT_EQ(0, GetNotificationCount()); |
-} |
- |
-// Crashes on Linux/Win. See http://crbug.com/160657. |
-IN_PROC_BROWSER_TEST_F( |
- NotificationsTest, |
- DISABLED_TestOriginPrefsNotSavedInIncognito) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Verify that allow/deny origin preferences are not saved in incognito. |
- Browser* incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, GetTestPageURL()); |
- ASSERT_TRUE(RequestAndDenyPermission(incognito)); |
- CloseBrowserWindow(incognito); |
- |
- incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, GetTestPageURL()); |
- ASSERT_TRUE(RequestAndAcceptPermission(incognito)); |
- CreateSimpleNotification(incognito, true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- CloseBrowserWindow(incognito); |
- |
- incognito = CreateIncognitoBrowser(); |
- ui_test_utils::NavigateToURL(incognito, GetTestPageURL()); |
- 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, TestCloseTabWithPermissionRequestUI) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Test that user can close tab when bubble present. |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- EXPECT_TRUE(RequestPermissionAndWait(browser())); |
- content::WebContentsDestroyedWatcher destroyed_watcher( |
- browser()->tab_strip_model()->GetWebContentsAt(0)); |
- browser()->tab_strip_model()->CloseWebContentsAt(0, |
- TabStripModel::CLOSE_NONE); |
- destroyed_watcher.Wait(); |
-} |
- |
-// See crbug.com/248470 |
-#if defined(OS_LINUX) |
-#define MAYBE_TestCrashRendererNotificationRemain \ |
- DISABLED_TestCrashRendererNotificationRemain |
-#else |
-#define MAYBE_TestCrashRendererNotificationRemain \ |
- TestCrashRendererNotificationRemain |
-#endif |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, |
- MAYBE_TestCrashRendererNotificationRemain) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // 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); |
- browser()->tab_strip_model()->ActivateTabAt(0, true); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- CreateSimpleNotification(browser(), true); |
- ASSERT_EQ(1, GetNotificationCount()); |
- CrashTab(browser(), 0); |
- ASSERT_EQ(1, GetNotificationCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationReplacement) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Test that we can replace a notification using the replaceId. |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- 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); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- EXPECT_EQ(base::ASCIIToUTF16("Title2"), (*notifications.rbegin())->title()); |
- EXPECT_EQ(base::ASCIIToUTF16("Body2"), |
- (*notifications.rbegin())->message()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestLastUsage) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- HostContentSettingsMap* settings_map = |
- HostContentSettingsMapFactory::GetForProfile(browser()->profile()); |
- base::SimpleTestClock* clock = new base::SimpleTestClock(); |
- settings_map->SetPrefClockForTesting(std::unique_ptr<base::Clock>(clock)); |
- clock->SetNow(base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(10)); |
- |
- // Creates a simple notification. |
- AllowAllOrigins(); |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- std::string result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- EXPECT_EQ(settings_map->GetLastUsage(GetTestPageURL().GetOrigin(), |
- GetTestPageURL().GetOrigin(), |
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- .ToDoubleT(), |
- 10); |
- |
- clock->Advance(base::TimeDelta::FromSeconds(3)); |
- |
- result = CreateSimpleNotification(browser(), true); |
- EXPECT_NE("-1", result); |
- |
- EXPECT_EQ(settings_map->GetLastUsage(GetTestPageURL().GetOrigin(), |
- GetTestPageURL().GetOrigin(), |
- CONTENT_SETTINGS_TYPE_NOTIFICATIONS) |
- .ToDoubleT(), |
- 13); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, |
- TestNotificationReplacementReappearance) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- |
- // Test that we can replace a notification using the tag, and that it will |
- // cause the notification to reappear as a popup again. |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- |
- ASSERT_EQ(0, GetNotificationPopupCount()); |
- |
- std::string result = CreateNotification( |
- browser(), true, "abc.png", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationPopupCount()); |
- |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- message_center::MessageCenter::Get()->ClickOnNotification( |
- (*notifications.rbegin())->id()); |
- |
-#if defined(OS_CHROMEOS) |
- ASSERT_EQ(0, GetNotificationPopupCount()); |
-#else |
- ASSERT_EQ(1, GetNotificationPopupCount()); |
-#endif |
- |
- result = CreateNotification( |
- browser(), true, "abc.png", "Title2", "Body2", "chat"); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationPopupCount()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationValidIcon) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- ASSERT_EQ(0, GetNotificationPopupCount()); |
- |
- std::string result = CreateNotification( |
- browser(), true, "icon.png", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- message_center::NotificationList::PopupNotifications notifications = |
- message_center::MessageCenter::Get()->GetPopupNotifications(); |
- ASSERT_EQ(1u, notifications.size()); |
- |
- auto* notification = *notifications.rbegin(); |
- |
- EXPECT_EQ(100, notification->icon().Width()); |
- EXPECT_EQ(100, notification->icon().Height()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationInvalidIcon) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL(browser(), GetTestPageURL()); |
- ASSERT_EQ(0, GetNotificationPopupCount()); |
- |
- // Not supplying an icon URL. |
- std::string result = CreateNotification( |
- browser(), true, "", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- message_center::NotificationList::PopupNotifications notifications = |
- message_center::MessageCenter::Get()->GetPopupNotifications(); |
- ASSERT_EQ(1u, notifications.size()); |
- |
- auto* notification = *notifications.rbegin(); |
- EXPECT_TRUE(notification->icon().IsEmpty()); |
- |
- // Supplying an invalid icon URL. |
- result = CreateNotification( |
- browser(), true, "invalid.png", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- notifications = message_center::MessageCenter::Get()->GetPopupNotifications(); |
- ASSERT_EQ(1u, notifications.size()); |
- |
- notification = *notifications.rbegin(); |
- EXPECT_TRUE(notification->icon().IsEmpty()); |
-} |
- |
-IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationDoubleClose) { |
- ASSERT_TRUE(embedded_test_server()->Start()); |
- AllowAllOrigins(); |
- |
- ui_test_utils::NavigateToURL( |
- browser(), GetTestPageURLForFile("notification-double-close.html")); |
- ASSERT_EQ(0, GetNotificationPopupCount()); |
- |
- std::string result = CreateNotification( |
- browser(), true, "", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
- |
- ASSERT_EQ(1, GetNotificationCount()); |
- message_center::NotificationList::Notifications notifications = |
- message_center::MessageCenter::Get()->GetVisibleNotifications(); |
- message_center::MessageCenter::Get()->RemoveNotification( |
- (*notifications.rbegin())->id(), |
- true); // by_user |
- |
- ASSERT_EQ(0, GetNotificationCount()); |
- |
- // Calling WebContents::IsCrashed() will return FALSE here, even if the WC did |
- // crash. Work around this timing issue by creating another notification, |
- // which requires interaction with the renderer process. |
- result = CreateNotification(browser(), true, "", "Title1", "Body1", "chat"); |
- EXPECT_NE("-1", result); |
-} |