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