| Index: chrome/browser/notifications/notification_interactive_uitest.cc
|
| diff --git a/chrome/browser/notifications/notification_interactive_uitest.cc b/chrome/browser/notifications/notification_interactive_uitest.cc
|
| index 483c74ed923b571bc535e31d5607e9d3e0ee51de..52e0d2597fa16303f9b1e9a5756963b3eb75581b 100644
|
| --- a/chrome/browser/notifications/notification_interactive_uitest.cc
|
| +++ b/chrome/browser/notifications/notification_interactive_uitest.cc
|
| @@ -11,22 +11,17 @@
|
| #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/scoped_feature_list.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/notifications/notification_interactive_uitest_support.h"
|
| #include "chrome/browser/notifications/notification_test_util.h"
|
| -#include "chrome/browser/notifications/web_notification_delegate.h"
|
| -#include "chrome/browser/permissions/permission_request_manager.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| @@ -34,12 +29,8 @@
|
| #include "chrome/browser/ui/exclusive_access/exclusive_access_context.h"
|
| #include "chrome/browser/ui/exclusive_access/exclusive_access_manager.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "chrome/common/chrome_features.h"
|
| -#include "chrome/test/base/in_process_browser_test.h"
|
| #include "chrome/test/base/interactive_test_utils.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"
|
| @@ -97,327 +88,8 @@ 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 PermissionRequestManager::Observer {
|
| - public:
|
| - explicit PermissionRequestObserver(content::WebContents* web_contents)
|
| - : request_manager_(
|
| - PermissionRequestManager::FromWebContents(web_contents)),
|
| - request_shown_(false),
|
| - message_loop_runner_(new content::MessageLoopRunner) {
|
| - request_manager_->AddObserver(this);
|
| - }
|
| - ~PermissionRequestObserver() override {
|
| - // Safe to remove twice if it happens.
|
| - request_manager_->RemoveObserver(this);
|
| - }
|
| -
|
| - void Wait() { message_loop_runner_->Run(); }
|
| -
|
| - bool request_shown() { return request_shown_; }
|
| -
|
| - private:
|
| - // PermissionRequestManager::Observer
|
| - void OnBubbleAdded() override {
|
| - request_shown_ = true;
|
| - request_manager_->RemoveObserver(this);
|
| - message_loop_runner_->Quit();
|
| - }
|
| -
|
| - PermissionRequestManager* request_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();
|
| - }
|
| -
|
| - protected:
|
| - void EnableFullscreenNotifications() {
|
| - feature_list_.InitWithFeatures({
|
| - features::kPreferHtmlOverPlugins,
|
| - features::kAllowFullscreenWebNotificationsFeature}, {});
|
| - }
|
| -
|
| - void DisableFullscreenNotifications() {
|
| - feature_list_.InitWithFeatures(
|
| - {features::kPreferHtmlOverPlugins},
|
| - {features::kAllowFullscreenWebNotificationsFeature});
|
| - }
|
| -
|
| - private:
|
| - void DropOriginPreference(const GURL& origin);
|
| - std::string RequestAndRespondToPermission(
|
| - Browser* browser,
|
| - PermissionRequestManager::AutoResponseType bubble_response);
|
| -
|
| - base::test::ScopedFeatureList feature_list_;
|
| -};
|
| -
|
| -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,
|
| - PermissionRequestManager::AutoResponseType bubble_response) {
|
| - std::string result;
|
| - content::WebContents* web_contents = GetActiveWebContents(browser);
|
| - PermissionRequestManager::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, PermissionRequestManager::ACCEPT_ALL);
|
| - return "request-callback-granted" == result;
|
| -}
|
| -
|
| -bool NotificationsTest::RequestAndDenyPermission(Browser* browser) {
|
| - std::string result = RequestAndRespondToPermission(
|
| - browser, PermissionRequestManager::DENY_ALL);
|
| - return "request-callback-denied" == result;
|
| -}
|
| -
|
| -bool NotificationsTest::RequestAndDismissPermission(Browser* browser) {
|
| - std::string result =
|
| - RequestAndRespondToPermission(browser, PermissionRequestManager::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());
|
|
|