notification_browsertest.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <deque>
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h"
10a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "base/command_line.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h"
14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/confirm_infobar_delegate.h"
19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/infobars/infobar.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/notifications/desktop_notification_service_factory.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/notifications/notification.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_tabstrip.h"
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_window.h"
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h"
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/content_settings.h"
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/content_settings_pattern.h"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_service.h"
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_source.h"
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/notification_types.h"
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_view_host.h"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/browser_test_utils.h"
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h"
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h"
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/window_open_disposition.h"
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center.h"
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "ui/message_center/message_center_observer.h"
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/message_center/message_center_switches.h"
47a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)#include "ui/message_center/message_center_util.h"
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochconst char kExpectedIconUrl[] = "/notifications/no_such_file.png";
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)enum InfobarAction {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISMISS = 0,
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ALLOW,
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DENY,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
60a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)class NotificationChangeObserver {
61a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)public:
62a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual ~NotificationChangeObserver() {}
63a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual bool Wait() = 0;
64a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)};
65a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MessageCenterChangeObserver
67a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)    : public message_center::MessageCenterObserver,
68a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)      public NotificationChangeObserver {
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  MessageCenterChangeObserver()
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      : notification_received_(false) {
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    message_center::MessageCenter::Get()->AddObserver(this);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~MessageCenterChangeObserver() {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    message_center::MessageCenter::Get()->RemoveObserver(this);
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
79a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // NotificationChangeObserver:
80a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  virtual bool Wait() OVERRIDE {
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (notification_received_)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    message_loop_runner_ = new content::MessageLoopRunner;
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    message_loop_runner_->Run();
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return notification_received_;
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
89a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)  // message_center::MessageCenterObserver:
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnNotificationAdded(
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& notification_id) OVERRIDE {
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnMessageCenterChanged();
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
94a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnNotificationRemoved(const std::string& notification_id,
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                     bool by_user) OVERRIDE {
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnMessageCenterChanged();
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
99a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void OnNotificationUpdated(
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& notification_id) OVERRIDE {
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnMessageCenterChanged();
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void OnMessageCenterChanged() {
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    notification_received_ = true;
107868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    if (message_loop_runner_.get())
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      message_loop_runner_->Quit();
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool notification_received_;
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(MessageCenterChangeObserver);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NotificationsTest : public InProcessBrowserTest {
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NotificationsTest() {}
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int GetNotificationCount();
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CloseBrowserWindow(Browser* browser);
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void CrashTab(Browser* browser, int index);
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetDefaultPermissionSetting(ContentSetting setting);
1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DenyOrigin(const GURL& origin);
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AllowOrigin(const GURL& origin);
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AllowAllOrigins();
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
134bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  void VerifyInfoBar(const Browser* browser, int index);
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string CreateNotification(Browser* browser,
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 bool wait_for_new_balloon,
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const char* icon,
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const char* title,
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const char* body,
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                 const char* replace_id);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string CreateSimpleNotification(Browser* browser,
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                       bool wait_for_new_balloon);
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool RequestPermissionAndWait(Browser* browser);
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool CancelNotification(const char* notification_id, Browser* browser);
145bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  bool PerformActionOnInfoBar(Browser* browser,
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              InfobarAction action,
147bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch                              size_t infobar_index,
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              int tab_index);
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void GetPrefsByContentSetting(ContentSetting setting,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                ContentSettingsForOneType* settings);
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool CheckOriginInSetting(const ContentSettingsForOneType& settings,
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            const GURL& origin);
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GURL GetTestPageURL() const {
155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return embedded_test_server()->GetURL(
156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      "/notifications/notification_tester.html");
157eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void DropOriginPreference(const GURL& origin);
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DesktopNotificationService* GetDesktopNotificationService();
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int NotificationsTest::GetNotificationCount() {
165a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return message_center::MessageCenter::Get()->NotificationCount();
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::CloseBrowserWindow(Browser* browser) {
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WindowedNotificationObserver observer(
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::NOTIFICATION_BROWSER_CLOSED,
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::Source<Browser>(browser));
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser->window()->Close();
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observer.Wait();
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::CrashTab(Browser* browser, int index) {
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::CrashTab(browser->tab_strip_model()->GetWebContentsAt(index));
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::SetDefaultPermissionSetting(ContentSetting setting) {
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DesktopNotificationService* service = GetDesktopNotificationService();
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service->SetDefaultContentSetting(setting);
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::DenyOrigin(const GURL& origin) {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DropOriginPreference(origin);
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetDesktopNotificationService()->DenyPermission(origin);
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::AllowOrigin(const GURL& origin) {
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DropOriginPreference(origin);
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetDesktopNotificationService()->GrantPermission(origin);
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::AllowAllOrigins() {
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetDesktopNotificationService()->ResetAllOrigins();
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetDesktopNotificationService()->SetDefaultContentSetting(
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CONTENT_SETTING_ALLOW);
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
201bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochvoid NotificationsTest::VerifyInfoBar(const Browser* browser, int index) {
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  InfoBarService* infobar_service = InfoBarService::FromWebContents(
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetWebContentsAt(index));
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
205a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ASSERT_EQ(1U, infobar_service->infobar_count());
206bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ConfirmInfoBarDelegate* confirm_infobar =
207a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(confirm_infobar);
2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int buttons = confirm_infobar->GetButtons();
2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_OK);
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL);
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string NotificationsTest::CreateNotification(
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Browser* browser,
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool wait_for_new_balloon,
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* icon,
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* title,
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* body,
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* replace_id) {
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string script = base::StringPrintf(
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "createNotification('%s', '%s', '%s', '%s');",
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      icon, title, body, replace_id);
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
225a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  MessageCenterChangeObserver observer;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result;
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool success = content::ExecuteScriptAndExtractString(
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetActiveWebContents(),
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      script,
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &result);
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (success && result != "-1" && wait_for_new_balloon)
232a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch    success = observer.Wait();
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(success);
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return result;
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string NotificationsTest::CreateSimpleNotification(
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Browser* browser,
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    bool wait_for_new_balloon) {
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return CreateNotification(
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser, wait_for_new_balloon,
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "no_such_file.png", "My Title", "My Body", "");
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NotificationsTest::RequestPermissionAndWait(Browser* browser) {
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  InfoBarService* infobar_service = InfoBarService::FromWebContents(
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetActiveWebContents());
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::WindowedNotificationObserver observer(
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      content::Source<InfoBarService>(infobar_service));
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result;
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool success = content::ExecuteScriptAndExtractString(
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetActiveWebContents(),
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "requestPermission();",
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &result);
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!success || result != "1")
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return false;
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observer.Wait();
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NotificationsTest::CancelNotification(
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const char* notification_id,
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Browser* browser) {
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string script = base::StringPrintf(
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "cancelNotification('%s');",
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      notification_id);
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
270a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  MessageCenterChangeObserver observer;
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result;
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool success = content::ExecuteScriptAndExtractString(
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetActiveWebContents(),
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      script,
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &result);
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!success || result != "1")
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return false;
278a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  return observer.Wait();
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
281bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdochbool NotificationsTest::PerformActionOnInfoBar(
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Browser* browser,
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    InfobarAction action,
284bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    size_t infobar_index,
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    int tab_index) {
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  InfoBarService* infobar_service = InfoBarService::FromWebContents(
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser->tab_strip_model()->GetWebContentsAt(tab_index));
288a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  if (infobar_index >= infobar_service->infobar_count()) {
289bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    ADD_FAILURE();
290bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch    return false;
291bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  }
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
293a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  InfoBar* infobar = infobar_service->infobar_at(infobar_index);
294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  InfoBarDelegate* infobar_delegate = infobar->delegate();
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  switch (action) {
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case DISMISS:
297bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      infobar_delegate->InfoBarDismissed();
298a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      infobar_service->RemoveInfoBar(infobar);
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case ALLOW: {
302bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      ConfirmInfoBarDelegate* confirm_infobar_delegate =
303bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch          infobar_delegate->AsConfirmInfoBarDelegate();
304bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      if (!confirm_infobar_delegate) {
305bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch        ADD_FAILURE();
306bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      } else if (confirm_infobar_delegate->Accept()) {
307a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        infobar_service->RemoveInfoBar(infobar);
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return true;
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    case DENY: {
313bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      ConfirmInfoBarDelegate* confirm_infobar_delegate =
314bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch          infobar_delegate->AsConfirmInfoBarDelegate();
315bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      if (!confirm_infobar_delegate) {
316bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch        ADD_FAILURE();
317bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch      } else if (confirm_infobar_delegate->Cancel()) {
318a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch        infobar_service->RemoveInfoBar(infobar);
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        return true;
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      }
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::GetPrefsByContentSetting(
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ContentSetting setting,
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ContentSettingsForOneType* settings) {
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DesktopNotificationService* service = GetDesktopNotificationService();
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  service->GetNotificationsSettings(settings);
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (ContentSettingsForOneType::iterator it = settings->begin();
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       it != settings->end(); ) {
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (it->setting != setting || it->source.compare("preference") != 0)
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      it = settings->erase(it);
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    else
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ++it;
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool NotificationsTest::CheckOriginInSetting(
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const ContentSettingsForOneType& settings,
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const GURL& origin) {
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentSettingsPattern pattern =
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ContentSettingsPattern::FromURLNoWildcard(origin);
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (ContentSettingsForOneType::const_iterator it = settings.begin();
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       it != settings.end(); ++it) {
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    if (it->primary_pattern == pattern)
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return true;
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NotificationsTest::DropOriginPreference(const GURL& origin) {
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetDesktopNotificationService()->ClearSetting(
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ContentSettingsPattern::FromURLNoWildcard(origin));
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)DesktopNotificationService* NotificationsTest::GetDesktopNotificationService() {
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Profile* profile = browser()->profile();
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return DesktopNotificationServiceFactory::GetForProfile(profile);
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// If this flakes, use http://crbug.com/62311 and http://crbug.com/74428.
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) {
366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
367eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(),
370eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      embedded_test_server()->GetURL(
371eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          "/notifications/notifications_request_function.html"));
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Request permission by calling request() while eval'ing an inline script;
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // That's considered a user gesture to webkit, and should produce an infobar.
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool result;
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(content::ExecuteScriptAndExtractBool(
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser()->tab_strip_model()->GetActiveWebContents(),
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "window.domAutomationController.send(request());",
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &result));
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(result);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
382e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  InfoBarService* infobar_service = InfoBarService::FromWebContents(
383e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      browser()->tab_strip_model()->GetWebContentsAt(0));
384a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(1U, infobar_service->infobar_count());
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// If this flakes, use http://crbug.com/62311.
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNoUserGestureInfobar) {
389eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
390eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Load a page which just does a request; no user gesture should result
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // in no infobar.
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ui_test_utils::NavigateToURL(
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      browser(),
395eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      embedded_test_server()->GetURL(
396eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          "/notifications/notifications_request_inline.html"));
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
398e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  InfoBarService* infobar_service = InfoBarService::FromWebContents(
399e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      browser()->tab_strip_model()->GetWebContentsAt(0));
400a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(0U, infobar_service->infobar_count());
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateSimpleNotification) {
404eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
405eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a simple notification.
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
408eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), true);
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
413eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  GURL EXPECTED_ICON_URL = embedded_test_server()->GetURL(kExpectedIconUrl);
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
415a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::NotificationList::Notifications notifications =
416a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      message_center::MessageCenter::Get()->GetVisibleNotifications();
417a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("My Title"),
418a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            (*notifications.rbegin())->title());
419a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("My Body"),
420a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            (*notifications.rbegin())->message());
4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseNotification) {
424eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
425eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a notification and closes it.
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), true);
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
434a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::NotificationList::Notifications notifications =
435a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      message_center::MessageCenter::Get()->GetVisibleNotifications();
436a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::MessageCenter::Get()->RemoveNotification(
437a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      (*notifications.rbegin())->id(),
438a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      true);  // by_user
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCancelNotification) {
444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
445eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Creates a notification and cancels it in the origin page.
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
448eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string note_id = CreateSimpleNotification(browser(), true);
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE(note_id, "-1");
4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(CancelNotification(note_id.c_str(), browser()));
4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionInfobarAppears) {
459eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
460eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Requests notification privileges and verifies the infobar appears.
462eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
466bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_NO_FATAL_FAILURE(VerifyInfoBar(browser(), 0));
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermissionInfobar) {
470eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
471eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Tries to create a notification and clicks allow on the infobar.
473eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // This notification should not be shown because we do not have permission.
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), false);
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
479bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  ASSERT_TRUE(PerformActionOnInfoBar(browser(), ALLOW, 0, 0));
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), true);
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, GetNotificationCount());
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermissionInfobar) {
486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that no notification is created
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // when Deny is chosen from permission infobar.
490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
492bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(browser(), DENY, 0, 0);
4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), false);
4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentSettingsForOneType settings;
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
497eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_TRUE(CheckOriginInSetting(settings, GetTestPageURL()));
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestClosePermissionInfobar) {
501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that no notification is created when permission infobar is dismissed.
504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
506bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(browser(), DISMISS, 0, 0);
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), false);
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentSettingsForOneType settings;
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0U, settings.size());
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowNotificationsFromAllSites) {
515eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
516eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that all domains can be allowed to show notifications.
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW);
519eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), true);
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
525e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  InfoBarService* infobar_service = InfoBarService::FromWebContents(
526e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      browser()->tab_strip_model()->GetWebContentsAt(0));
527a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(0U, infobar_service->infobar_count());
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyNotificationsFromAllSites) {
531eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
532eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that no domain can show notifications.
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK);
535eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), false);
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("-1", result);
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyDomainAndAllowAll) {
544eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
545eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that denying a domain and allowing all shouldn't show
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // notifications from the denied domain.
548eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DenyOrigin(GetTestPageURL().GetOrigin());
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW);
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), false);
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("-1", result);
5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowDomainAndDenyAll) {
560eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
561eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that allowing a domain and denying all others should show
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // notifications from the allowed domain.
564eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AllowOrigin(GetTestPageURL().GetOrigin());
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK);
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
567eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), true);
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyAndThenAllowDomain) {
576eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
577eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that denying and again allowing should show notifications.
579eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DenyOrigin(GetTestPageURL().GetOrigin());
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateSimpleNotification(browser(), false);
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("-1", result);
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
588eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  AllowOrigin(GetTestPageURL().GetOrigin());
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  result = CreateSimpleNotification(browser(), true);
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
593e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  InfoBarService* infobar_service = InfoBarService::FromWebContents(
594e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      browser()->tab_strip_model()->GetWebContentsAt(0));
595a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(0U, infobar_service->infobar_count());
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateDenyCloseNotifications) {
599eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify able to create, deny, and close the notification.
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
603eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), true);
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
607eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DenyOrigin(GetTestPageURL().GetOrigin());
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentSettingsForOneType settings;
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
610eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(CheckOriginInSetting(settings, GetTestPageURL().GetOrigin()));
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, GetNotificationCount());
613a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::NotificationList::Notifications notifications =
614a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      message_center::MessageCenter::Get()->GetVisibleNotifications();
615a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::MessageCenter::Get()->RemoveNotification(
616a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      (*notifications.rbegin())->id(),
617a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      true);  // by_user
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(0, GetNotificationCount());
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Crashes on Linux/Win. See http://crbug.com/160657.
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(
6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NotificationsTest,
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DISABLED_TestOriginPrefsNotSavedInIncognito) {
625eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Verify that allow/deny origin preferences are not saved in incognito.
6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Browser* incognito = CreateIncognitoBrowser();
629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(incognito, GetTestPageURL());
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(incognito));
631bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(incognito, DENY, 0, 0);
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CloseBrowserWindow(incognito);
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  incognito = CreateIncognitoBrowser();
635eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(incognito, GetTestPageURL());
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(incognito));
637bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(incognito, ALLOW, 0, 0);
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(incognito, true);
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CloseBrowserWindow(incognito);
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  incognito = CreateIncognitoBrowser();
643eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(incognito, GetTestPageURL());
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(incognito));
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ContentSettingsForOneType settings;
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, &settings);
6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0U, settings.size());
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GetPrefsByContentSetting(CONTENT_SETTING_ALLOW, &settings);
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(0U, settings.size());
6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestExitBrowserWithInfobar) {
654eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
655eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit the browser window, when the infobar appears.
657eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Times out on Windows and Linux. http://crbug.com/168976
6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_LINUX)
6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_TestCrashTabWithPermissionInfobar \
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DISABLED_TestCrashTabWithPermissionInfobar
6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_TestCrashTabWithPermissionInfobar \
6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TestCrashTabWithPermissionInfobar
6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest,
6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       MAYBE_TestCrashTabWithPermissionInfobar) {
671eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
672eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test crashing the tab with permission infobar doesn't crash Chrome.
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(),
676eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      embedded_test_server()->GetURL("/empty.html"),
6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NEW_BACKGROUND_TAB,
6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
680eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CrashTab(browser(), 0);
6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestIncognitoNotification) {
686eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
687eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test notifications in incognito window.
6892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Browser* browser = CreateIncognitoBrowser();
690eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser, GetTestPageURL());
6912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser->tab_strip_model()->ActivateTabAt(0, true);
6922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser));
693bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(browser, ALLOW, 0, 0);
6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser, true);
6952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
6962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseTabWithPermissionInfobar) {
699eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
700eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that user can close tab when infobar present.
7022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
7032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(),
7042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("about:blank"),
7052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NEW_BACKGROUND_TAB,
7062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
7072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
708eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
7092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
7108bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  content::WebContentsDestroyedWatcher destroyed_watcher(
7118bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)      browser()->tab_strip_model()->GetWebContentsAt(0));
7122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->CloseWebContentsAt(0,
7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                   TabStripModel::CLOSE_NONE);
7148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  destroyed_watcher.Wait();
7152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(
7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NotificationsTest,
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TestNavigateAwayWithPermissionInfobar) {
720eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
721eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test navigating away when an infobar is present,
7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // then trying to create a notification from the same page.
7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(),
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("about:blank"),
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NEW_BACKGROUND_TAB,
7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
730eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
732eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RequestPermissionAndWait(browser()));
734bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch  PerformActionOnInfoBar(browser(), ALLOW, 0, 0);
7352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), true);
7362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
7372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7395e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)// See crbug.com/248470
7405e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#if defined(OS_LINUX)
7415e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_TestCrashRendererNotificationRemain \
7425e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)    DISABLED_TestCrashRendererNotificationRemain
7435e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#else
7445e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#define MAYBE_TestCrashRendererNotificationRemain \
7455e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)    TestCrashRendererNotificationRemain
7465e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#endif
7475e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)
7485e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest,
7495e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)                       MAYBE_TestCrashRendererNotificationRemain) {
750eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
751eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test crashing renderer does not close or crash notification.
7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ui_test_utils::NavigateToURLWithDisposition(
7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(),
7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GURL("about:blank"),
7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NEW_BACKGROUND_TAB,
7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB);
7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->tab_strip_model()->ActivateTabAt(0, true);
760eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CreateSimpleNotification(browser(), true);
7622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
7632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  CrashTab(browser(), 0);
7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(NotificationsTest, TestNotificationReplacement) {
768eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
769eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
7702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Test that we can replace a notification using the replaceId.
7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AllowAllOrigins();
7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
773eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
7742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string result = CreateNotification(
7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(), true, "abc.png", "Title1", "Body1", "chat");
7772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
7782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, GetNotificationCount());
7802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  result = CreateNotification(
7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      browser(), false, "no_such_file.png", "Title2", "Body2", "chat");
7832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_NE("-1", result);
7842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
785a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  ASSERT_EQ(1, GetNotificationCount());
786a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  message_center::NotificationList::Notifications notifications =
787a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch      message_center::MessageCenter::Get()->GetVisibleNotifications();
788a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("Title2"), (*notifications.rbegin())->title());
789a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch  EXPECT_EQ(base::ASCIIToUTF16("Body2"),
790a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch            (*notifications.rbegin())->message());
7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
792