Chromium Code Reviews| Index: chrome/browser/notifications/notification_browsertest.cc |
| diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc |
| index 3a693da62ab1bc75aa4622195efb5b80c72b9247..a402b498fe221f958fa843f5e9a824df6bac4a25 100644 |
| --- a/chrome/browser/notifications/notification_browsertest.cc |
| +++ b/chrome/browser/notifications/notification_browsertest.cc |
| @@ -2,25 +2,570 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include "base/basictypes.h" |
| +#include "base/compiler_specific.h" |
| +#include "base/stringprintf.h" |
| +#include "base/utf_string_conversions.h" |
| +#include "chrome/app/chrome_command_ids.h" |
| +#include "chrome/browser/api/infobars/confirm_infobar_delegate.h" |
| +#include "chrome/browser/api/infobars/infobar_delegate.h" |
| +#include "chrome/browser/browser_process.h" |
| #include "chrome/browser/infobars/infobar_tab_helper.h" |
| +#include "chrome/browser/notifications/balloon.h" |
| +#include "chrome/browser/notifications/balloon_collection.h" |
| +#include "chrome/browser/notifications/balloon_host.h" |
| +#include "chrome/browser/notifications/desktop_notification_service.h" |
| +#include "chrome/browser/notifications/desktop_notification_service_factory.h" |
| +#include "chrome/browser/notifications/notification.h" |
| +#include "chrome/browser/notifications/notification_ui_manager.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/sessions/session_tab_helper.h" |
| #include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_tabstrip.h" |
| +#include "chrome/browser/ui/browser_window.h" |
| +#include "chrome/browser/ui/tab_contents/tab_contents.h" |
| +#include "chrome/common/chrome_notification_types.h" |
| #include "chrome/test/base/in_process_browser_test.h" |
| #include "chrome/test/base/ui_test_utils.h" |
| +#include "content/public/browser/navigation_controller.h" |
| +#include "content/public/browser/notification_service.h" |
| +#include "content/public/browser/notification_types.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/test/browser_test_utils.h" |
| +#include "googleurl/src/gurl.h" |
| #include "net/base/net_util.h" |
| #include "net/test/test_server.h" |
| +#include "webkit/glue/window_open_disposition.h" |
| -class NotificationsPermissionTest : public InProcessBrowserTest { |
| +#if defined(OS_WIN) |
| +#include "base/win/windows_version.h" |
| +#endif |
| + |
| +namespace { |
| + const std::string kReference = "preference"; |
|
kkania
2012/11/15 16:29:07
don't indent stuff inside namespace, but leave new
kkania
2012/11/15 16:29:07
http://google-styleguide.googlecode.com/svn/trunk/
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + const std::string kExpectedIconUrl = "files/notifications/no_such_file.png"; |
|
kkania
2012/11/15 16:29:07
http://google-styleguide.googlecode.com/svn/trunk/
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + |
| + enum InfobarAction { |
| + DISMISS = 0, |
| + ALLOW = 1, |
| + DENY = 2, |
| + }; |
| + |
| + class BrowserOpenedNotificationObserver : |
| + public content::NotificationObserver { |
| + public: |
| + BrowserOpenedNotificationObserver(); |
| + virtual ~BrowserOpenedNotificationObserver(); |
| + |
| + void Wait(); |
| + Browser* new_browser() { return new_browser_; } |
| + |
| + virtual void Observe(int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) OVERRIDE; |
| + private: |
| + content::NotificationRegistrar registrar_; |
| + Browser* new_browser_; |
| + int new_window_id_; |
| + bool done_; |
| + bool running_; |
| + scoped_refptr<content::MessageLoopRunner> message_loop_runner_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(BrowserOpenedNotificationObserver); |
| + }; |
| +} |
| + |
| +class NotificationsPermissionTest : public InProcessBrowserTest, |
| + public content::NotificationObserver { |
| public: |
| - NotificationsPermissionTest() {} |
| + NotificationsPermissionTest(); |
| + |
| + protected: |
| + // Overriden from InProcessBrowserTest: |
| + virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; |
| + |
| + // Overriden from content::NotificationObserver: |
| + virtual void Observe(int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) OVERRIDE; |
| + |
| + DesktopNotificationService* GetDesktopNotificationService(); |
| + const std::deque<Balloon*>& GetActiveBalloons(); |
| + int GetNotificationCount(); |
| + |
| + bool CloseNotificationAndWait(const Notification& notification); |
| + bool WaitForInfoBarCount(Browser* browser, |
| + size_t count, |
| + int index, |
| + bool increasing); |
| + Browser* CreateBrowserWindow(Browser* source_browser, bool is_incognito); |
| + void CloseBrowserWindow(Browser* browser); |
| + void CrashTab(Browser* browser, int index); |
| + void CrashNotification(Balloon* balloon); |
| + |
| + void SetDefaultPermissionSetting(ContentSetting setting); |
| + ContentSetting GetDefaultPermissionSetting(); |
| + void GetDeniedOrigins(ContentSettingsForOneType* settings); |
| + void GetAllowedOrigins(ContentSettingsForOneType* settings); |
| + void SetDeniedOrigins(const std::vector<GURL>& new_origins); |
| + void SetAllowedOrigins(const std::vector<GURL>& new_origins); |
| + void DenyOrigin(const GURL& origin); |
| + void AllowOrigin(const GURL& origin); |
| + void DropOriginPreference(const GURL& origin); |
| + void AllowAllOrigins(); |
| + |
| + void VerifyInfobar(const Browser* browser, |
| + const std::string& origin, |
| + int index); |
| + std::string CreateNotification(Browser* browser, |
| + bool waiting, |
| + const char* icon, |
| + const char* title, |
| + const char* body, |
| + const char* replace_id); |
| + std::string CreateSimpleNotification(Browser* browser, bool waiting); |
| + bool RequestPermission(Browser* browser); |
| + bool CancelNotification(const char* notification_id, Browser* browser); |
| + bool PerformActionOnInfobar(Browser* browser, |
| + InfobarAction action, |
| + int infobar_index, |
| + int tab_index); |
| + bool CheckOriginInSetting(const ContentSettingsForOneType & settings, |
| + const GURL & origin); |
| + |
| + GURL EMPTY_PAGE_URL; |
|
kkania
2012/11/15 16:29:07
constants are kEmptyPageUrl style. There is no con
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + GURL TEST_PAGE_URL; |
| + |
| + private: |
| + size_t target_infobar_count_; |
| + size_t target_balloon_count_; |
| + |
| + void GetPrefsByContentSetting(ContentSetting setting, |
| + ContentSettingsForOneType* settings); |
| }; |
| -// If this flakes, use http://crbug.com/62311 and http://crbug.com/74428. |
| -IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestUserGestureInfobar) { |
| +BrowserOpenedNotificationObserver::BrowserOpenedNotificationObserver() |
| + : new_browser_(NULL), |
| + new_window_id_(-1), |
| + done_(false), |
| + running_(false) { |
| + registrar_.Add(this, chrome::NOTIFICATION_BROWSER_OPENED, |
| + content::NotificationService::AllBrowserContextsAndSources()); |
| + registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, |
| + content::NotificationService::AllBrowserContextsAndSources()); |
| +} |
| + |
| +BrowserOpenedNotificationObserver::~BrowserOpenedNotificationObserver() {} |
| + |
| +void BrowserOpenedNotificationObserver::Wait() { |
| + if (done_) |
| + return; |
| + |
| + running_ = true; |
| + message_loop_runner_ = new content::MessageLoopRunner; |
| + message_loop_runner_->Run(); |
| + EXPECT_TRUE(done_); |
| +} |
| + |
| +void BrowserOpenedNotificationObserver::Observe( |
| + int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) { |
| + if (type == chrome::NOTIFICATION_BROWSER_OPENED) { |
| + // Store the new browser ID and continue waiting for a new tab within it |
| + // to stop loading. |
| + new_browser_ = content::Source<Browser>(source).ptr(); |
| + new_window_id_ = new_browser_->session_id().id(); |
| + } else { |
| + DCHECK_EQ(content::NOTIFICATION_LOAD_STOP, type); |
| + content::NavigationController* controller = |
| + content::Source<content::NavigationController>(source).ptr(); |
| + SessionTabHelper* session_tab_helper = |
| + SessionTabHelper::FromWebContents(controller->GetWebContents()); |
| + int window_id = session_tab_helper ? session_tab_helper->window_id().id() |
| + : -1; |
| + if (window_id == new_window_id_) { |
| + registrar_.RemoveAll(); |
| + done_ = true; |
| + if (!running_) |
| + return; |
| + |
| + message_loop_runner_->Quit(); |
| + running_ = false; |
| + } |
| + } |
| +} |
| + |
| +NotificationsPermissionTest::NotificationsPermissionTest() |
| + : target_infobar_count_(0U), |
| + target_balloon_count_(0U) { |
| +} |
| + |
| +void NotificationsPermissionTest::SetUpInProcessBrowserTestFixture() { |
| + InProcessBrowserTest::SetUpInProcessBrowserTestFixture(); |
| + |
| ASSERT_TRUE(test_server()->Start()); |
| + EMPTY_PAGE_URL = test_server()->GetURL("files/empty.html"); |
| + TEST_PAGE_URL = test_server()->GetURL( |
| + "files/notifications/notification_tester.html"); |
| +} |
| + |
| +void NotificationsPermissionTest::Observe( |
| + int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) { |
| + switch (type) { |
| + case chrome::NOTIFICATION_BROWSER_CLOSED: { |
| + MessageLoopForUI::current()->Quit(); |
| + break; |
| + } |
| + case chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED: |
| + case chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED: { |
| + const InfoBarTabHelper* infoBarTabHelper = |
| + content::Source<const InfoBarTabHelper>(source).ptr(); |
| + if (infoBarTabHelper->GetInfoBarCount() == target_infobar_count_) { |
| + target_infobar_count_ = 0U; |
| + MessageLoopForUI::current()->Quit(); |
| + } |
| + break; |
| + } |
| + case chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED: |
| + case chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED: { |
| + size_t current_balloon_count = GetActiveBalloons().size(); |
| + if (current_balloon_count == target_balloon_count_) { |
| + target_balloon_count_ = 0U; |
| + MessageLoopForUI::current()->Quit(); |
| + } |
| + break; |
| + } |
| + default: |
| + break; |
| + } |
| +} |
| + |
| +DesktopNotificationService* |
| + NotificationsPermissionTest::GetDesktopNotificationService() { |
| + Profile* profile = browser()->profile(); |
| + return DesktopNotificationServiceFactory::GetForProfile(profile); |
| +} |
| + |
| +const std::deque<Balloon*>& NotificationsPermissionTest::GetActiveBalloons() { |
| + NotificationUIManager* manager = g_browser_process->notification_ui_manager(); |
| + return manager->balloon_collection()->GetActiveBalloons(); |
| +} |
| + |
| +int NotificationsPermissionTest::GetNotificationCount() { |
| + NotificationUIManager* manager = g_browser_process->notification_ui_manager(); |
| + return manager->balloon_collection()->GetActiveBalloons().size(); |
| +} |
| + |
| +bool NotificationsPermissionTest::CloseNotificationAndWait( |
| + const Notification& notification) { |
| + content::WindowedNotificationObserver observer( |
| + chrome::NOTIFICATION_NOTIFY_BALLOON_DISCONNECTED, |
| + content::NotificationService::AllSources()); |
| + NotificationUIManager* manager = g_browser_process->notification_ui_manager(); |
| + bool flag = manager->CancelById(notification.notification_id()); |
| + observer.Wait(); |
| + return flag; |
| +} |
| + |
| +bool NotificationsPermissionTest::WaitForInfoBarCount( |
| + Browser* browser, |
| + size_t count, |
| + int index, |
| + bool increasing) { |
|
kkania
2012/11/15 16:29:07
instead of passing in increasing arg, how about we
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Function removed.
|
| + size_t current_count = InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser, 0))->GetInfoBarCount(); |
|
kkania
2012/11/15 16:29:07
indent
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + if (count != current_count) { |
| + target_infobar_count_ = count; |
| + ui_test_utils::RegisterAndWait( |
|
kkania
2012/11/15 16:29:07
how about usr for loop and use content::WindowedOb
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Move logic of waiting to function RequestPermissio
|
| + this, |
| + increasing ? chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED |
| + : chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, |
| + content::NotificationService::AllSources()); |
| + } |
| + current_count = InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser, 0))->GetInfoBarCount(); |
|
kkania
2012/11/15 16:29:07
fix all indents
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + return count == current_count; |
| +} |
| + |
| +Browser* NotificationsPermissionTest::CreateBrowserWindow( |
| + Browser* source_browser, |
| + bool is_incognito) { |
| + BrowserOpenedNotificationObserver observer; |
|
kkania
2012/11/15 16:29:07
You should use option A and find the underlying pr
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Use solution A.
|
| + if (is_incognito) |
| + chrome::ExecuteCommand(source_browser, IDC_NEW_INCOGNITO_WINDOW); |
| + else |
| + chrome::ExecuteCommand(source_browser, IDC_NEW_WINDOW); |
| + observer.Wait(); |
| + return observer.new_browser(); |
| +} |
| + |
| +void NotificationsPermissionTest::CloseBrowserWindow(Browser* browser) { |
| + content::WindowedNotificationObserver observer( |
| + chrome::NOTIFICATION_BROWSER_CLOSED, |
| + content::Source<Browser>(browser)); |
| + browser->window()->Close(); |
| + observer.Wait(); |
| +} |
| + |
| +void NotificationsPermissionTest::CrashTab(Browser* browser, int index) { |
| + content::CrashTab(chrome::GetWebContentsAt(browser, index)); |
| +} |
| + |
| +void NotificationsPermissionTest::CrashNotification(Balloon* balloon) { |
| + content::CrashTab(balloon->balloon_view()->GetHost()->web_contents()); |
| +} |
| + |
| +bool NotificationsPermissionTest::CheckOriginInSetting( |
| + const ContentSettingsForOneType & settings, |
| + const GURL & origin) { |
| + ContentSettingsPattern pattern = ContentSettingsPattern::FromURLNoWildcard( |
| + origin); |
| + for (ContentSettingsForOneType::const_iterator it = settings.begin(); |
| + it != settings.end(); ++it) { |
| + if (it->primary_pattern == pattern) { |
| + return true; |
| + } |
| + } |
| + return false; |
| +} |
| + |
| +void NotificationsPermissionTest::SetDefaultPermissionSetting( |
| + ContentSetting setting) { |
| + DesktopNotificationService* service = GetDesktopNotificationService(); |
| + service->SetDefaultContentSetting(setting); |
| +} |
| + |
| +ContentSetting NotificationsPermissionTest::GetDefaultPermissionSetting() { |
| + DesktopNotificationService* service = GetDesktopNotificationService(); |
| + return service->GetDefaultContentSetting(NULL); |
| +} |
| + |
| +void NotificationsPermissionTest::GetDeniedOrigins( |
| + ContentSettingsForOneType* settings) { |
| + GetPrefsByContentSetting(CONTENT_SETTING_BLOCK, settings); |
| +} |
| + |
| +void NotificationsPermissionTest::GetAllowedOrigins( |
| + ContentSettingsForOneType* settings) { |
| + GetPrefsByContentSetting(CONTENT_SETTING_ALLOW, settings); |
| +} |
| + |
| +void NotificationsPermissionTest::SetDeniedOrigins( |
| + const std::vector<GURL>& new_origins) { |
| + // clear original denied origin list. |
| + ContentSettingsForOneType old_origins; |
| + GetDeniedOrigins(&old_origins); |
| + for (ContentSettingsForOneType::const_iterator it = old_origins.begin(); |
| + it != old_origins.end(); ++it) { |
| + GetDesktopNotificationService()->ClearSetting(it->primary_pattern); |
| + } |
| + // set new origins. |
| + for (std::vector<GURL>::const_iterator it = new_origins.begin(); |
| + it != new_origins.end(); ++it) { |
| + DenyOrigin(*it); |
| + } |
| +} |
| +void NotificationsPermissionTest::SetAllowedOrigins( |
| + const std::vector<GURL>& new_origins) { |
| + // clear original allowed origin list. |
| + ContentSettingsForOneType old_origins; |
| + GetAllowedOrigins(&old_origins); |
| + for (ContentSettingsForOneType::const_iterator it = old_origins.begin(); |
| + it != old_origins.end(); ++it) { |
| + GetDesktopNotificationService()->ClearSetting(it->primary_pattern); |
| + } |
| + // set new origins. |
| + for (std::vector<GURL>::const_iterator it = new_origins.begin(); |
| + it != new_origins.end(); ++it) { |
| + AllowOrigin(*it); |
| + } |
| +} |
| +void NotificationsPermissionTest::DenyOrigin(const GURL& origin) { |
| + DropOriginPreference(origin); |
| + GetDesktopNotificationService()->DenyPermission(origin); |
| +} |
| +void NotificationsPermissionTest::AllowOrigin(const GURL& origin) { |
| + DropOriginPreference(origin); |
| + GetDesktopNotificationService()->GrantPermission(origin); |
| +} |
| +void NotificationsPermissionTest::DropOriginPreference(const GURL& origin) { |
| + GetDesktopNotificationService()->ClearSetting( |
| + ContentSettingsPattern::FromURLNoWildcard(origin)); |
| +} |
| +void NotificationsPermissionTest::AllowAllOrigins() { |
| + GetDesktopNotificationService()->ResetAllOrigins(); |
| + GetDesktopNotificationService()->SetDefaultContentSetting( |
| + CONTENT_SETTING_ALLOW); |
| +} |
| + |
| +void NotificationsPermissionTest::VerifyInfobar( |
| + const Browser* browser, |
| + const std::string& origin, |
| + int index) { |
| + InfoBarTabHelper* infobar_helper = InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser, index)); |
| + |
| + ASSERT_EQ(1U, infobar_helper->GetInfoBarCount()); |
| + InfoBarDelegate* infobar = infobar_helper->GetInfoBarDelegateAt(0); |
| + ASSERT_TRUE(infobar->AsConfirmInfoBarDelegate()); |
| + ConfirmInfoBarDelegate* confirm_infobar = infobar->AsConfirmInfoBarDelegate(); |
| + int buttons = confirm_infobar->GetButtons(); |
| + if (buttons & ConfirmInfoBarDelegate::BUTTON_OK) { |
| + EXPECT_EQ( |
| + ASCIIToUTF16("Allow"), |
| + confirm_infobar->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_OK)); |
| + } else { |
| + EXPECT_TRUE(false); |
| + } |
| + if (buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL) { |
| + EXPECT_EQ( |
| + ASCIIToUTF16("Deny"), |
| + confirm_infobar->GetButtonLabel(ConfirmInfoBarDelegate::BUTTON_CANCEL)); |
| + } else { |
| + EXPECT_TRUE(false); |
| + } |
| + std::string text("Allow "); |
| + text.append(origin); |
| + text.append(" to show desktop notifications?"); |
| + EXPECT_EQ(UTF8ToUTF16(text), confirm_infobar->GetMessageText()); |
| +} |
| + |
| +std::string NotificationsPermissionTest::CreateNotification( |
| + Browser* browser, |
| + bool waiting, |
| + const char* icon, |
| + const char* title, |
| + const char* body, |
| + const char* replace_id) { |
| + std::string result; |
| + |
| + std::string script = base::StringPrintf( |
| + "createNotification('%s', '%s', '%s', '%s');", |
| + icon, |
| + title, |
| + body, |
| + replace_id); |
| + |
| + bool flag = false; |
| + if (!waiting) { |
| + flag = content::ExecuteJavaScriptAndExtractString( |
| + chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
| + L"", |
| + UTF8ToWide(script), |
| + &result); |
| + } else { |
| + content::WindowedNotificationObserver observer( |
| + chrome::NOTIFICATION_NOTIFY_BALLOON_CONNECTED, |
| + content::NotificationService::AllSources()); |
| + flag = content::ExecuteJavaScriptAndExtractString( |
| + chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
| + L"", |
| + UTF8ToWide(script), |
| + &result); |
| + observer.Wait(); |
| + } |
| + EXPECT_TRUE(flag); |
| + |
| + content::RunAllPendingInMessageLoop(); |
| + return result; |
| +} |
| + |
| +std::string NotificationsPermissionTest::CreateSimpleNotification( |
| + Browser* browser, |
| + bool waiting) { |
| + return CreateNotification( |
| + browser, |
| + waiting, |
| + "no_such_file.png", |
| + "My Title", |
| + "My Body", |
| + ""); |
| +} |
| + |
| +bool NotificationsPermissionTest::RequestPermission(Browser* browser) { |
| + std::string result; |
| + bool flag = content::ExecuteJavaScriptAndExtractString( |
| + chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
| + L"", |
| + L"requestPermission();", |
| + &result); |
| + return flag ? (result == "1") : false; |
| +} |
| + |
| +bool NotificationsPermissionTest::CancelNotification( |
| + const char* notification_id, |
| + Browser* browser) { |
| + std::string script = base::StringPrintf( |
| + "cancelNotification('%s');", |
| + notification_id); |
| + |
| + std::string result; |
| + bool flag = content::ExecuteJavaScriptAndExtractString( |
| + chrome::GetActiveWebContents(browser)->GetRenderViewHost(), |
| + L"", |
| + UTF8ToWide(script), |
| + &result); |
| + return flag ? (result == "1") : false; |
| +} |
| + |
| +bool NotificationsPermissionTest::PerformActionOnInfobar( |
| + Browser* browser, |
| + InfobarAction action, |
| + int infobar_index, |
| + int tab_index) { |
| + InfoBarTabHelper* infobar_helper = InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser, tab_index)); |
| + |
| + InfoBarDelegate* infobar = infobar_helper->GetInfoBarDelegateAt( |
| + infobar_index); |
| + switch (action) { |
| + case DISMISS: { |
| + infobar->InfoBarDismissed(); |
| + infobar_helper->RemoveInfoBar(infobar); |
| + return true; |
| + } |
| + case ALLOW: { |
| + ConfirmInfoBarDelegate* confirm_bar = infobar->AsConfirmInfoBarDelegate(); |
| + if (confirm_bar->Accept()) { |
| + infobar_helper->RemoveInfoBar(infobar); |
| + return true; |
| + } |
| + } |
| + case DENY: { |
| + ConfirmInfoBarDelegate* confirm_bar = infobar->AsConfirmInfoBarDelegate(); |
| + if (confirm_bar->Cancel()) { |
| + infobar_helper->RemoveInfoBar(infobar); |
| + return true; |
| + } |
| + } |
| + } |
| + |
| + return false; |
| +} |
| + |
| +void NotificationsPermissionTest::GetPrefsByContentSetting( |
| + ContentSetting setting, |
| + ContentSettingsForOneType* settings) { |
| + ASSERT_TRUE(settings != NULL); |
| + DesktopNotificationService* service = GetDesktopNotificationService(); |
| + service->GetNotificationsSettings(settings); |
| + for (ContentSettingsForOneType::iterator it = settings->begin(); |
| + it != settings->end();) { |
| + if (it->setting != setting || it->source.compare(kReference) != 0) { |
| + it = settings->erase(it); |
| + } else { |
| + ++it; |
| + } |
| + } |
| +} |
| + |
| +// If this flakes, use http://crbug.com/62311 and http://crbug.com/74428. |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestUserGestureInfobar) { |
| ui_test_utils::NavigateToURL( |
| browser(), |
| test_server()->GetURL( |
| @@ -42,8 +587,6 @@ IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestUserGestureInfobar) { |
| // If this flakes, use http://crbug.com/62311. |
| IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestNoUserGestureInfobar) { |
| - ASSERT_TRUE(test_server()->Start()); |
| - |
| // Load a page which just does a request; no user gesture should result |
| // in no infobar. |
| ui_test_utils::NavigateToURL( |
| @@ -54,3 +597,501 @@ IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestNoUserGestureInfobar) { |
| EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
| chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
| } |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestCreateSimpleNotification) { |
| + // Creates a simple notification. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
| + ASSERT_EQ(1U, balloons.size()); |
| + Balloon* balloon = balloons[0]; |
| + const Notification& notification = balloon->notification(); |
| + GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
| + EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
| + EXPECT_EQ(ASCIIToUTF16("My Title"), notification.title()); |
| + EXPECT_EQ(ASCIIToUTF16("My Body"), notification.body()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestCloseNotification) { |
| + // Creates a notification and closes it. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
| + ASSERT_EQ(1U, balloons.size()); |
| + EXPECT_TRUE(CloseNotificationAndWait(balloons[0]->notification())); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestCancelNotification) { |
| + // Creates a notification and cancels it in the origin page. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string note_id = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE(note_id, "-1"); |
| + |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + ASSERT_TRUE(CancelNotification(note_id.c_str(), browser())); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestPermissionInfobarAppears) { |
| + // Requests notification privileges and verifies the infobar appears. |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + |
| + ASSERT_EQ(0, GetNotificationCount()); |
| + VerifyInfobar(browser(), TEST_PAGE_URL.host(), 0); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestAllowOnPermissionInfobar) { |
| + // Tries to create a notification and clicks allow on the infobar. |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + // This notification should not be shown because we do not have permission. |
| + CreateSimpleNotification(browser(), false); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| + |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + ASSERT_TRUE(PerformActionOnInfobar(browser(), ALLOW, 0, 0)); |
| + |
| + CreateSimpleNotification(browser(), true); |
| + EXPECT_EQ(1, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
|
kkania
2012/11/15 16:29:07
I'm thinking we should perhaps remove this functio
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Agree. It is more like a unit test.
Removed.
On 2
|
| + NotificationsPermissionTest, |
| + TestOriginPreferencesBasic) { |
| + // Tests that we can allow and deny origins. |
| + GURL altavista("http://www.altavista.com"); |
| + GURL gmail("http://www.gmail.com"); |
| + GURL yahoo("http://www.yahoo.com"); |
| + |
| + std::vector<GURL> origins; |
| + ContentSettingsForOneType settings; |
| + |
| + origins.push_back(altavista); |
| + origins.push_back(gmail); |
| + |
| + SetDeniedOrigins(origins); |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(2U, settings.size()); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, altavista)); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, gmail)); |
| + DenyOrigin(yahoo); |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(3U, settings.size()); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, yahoo)); |
| + DropOriginPreference(gmail); |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(2U, settings.size()); |
| + EXPECT_FALSE(CheckOriginInSetting(settings, gmail)); |
| + |
| + AllowOrigin(yahoo); |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(1U, settings.size()); |
| + EXPECT_FALSE(CheckOriginInSetting(settings, yahoo)); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, yahoo)); |
| + |
| + origins.clear(); |
| + origins.push_back(altavista); |
| + origins.push_back(gmail); |
| + SetAllowedOrigins(origins); |
| + origins.clear(); |
| + SetDeniedOrigins(origins); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, altavista)); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, gmail)); |
| + AllowOrigin(yahoo); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, yahoo)); |
| + EXPECT_EQ(3U, settings.size()); |
| + DropOriginPreference(gmail); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_EQ(2U, settings.size()); |
| + EXPECT_FALSE(CheckOriginInSetting(settings, gmail)); |
| + |
| + DenyOrigin(yahoo); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_EQ(1U, settings.size()); |
| + EXPECT_FALSE(CheckOriginInSetting(settings, yahoo)); |
| + GetDeniedOrigins(&settings); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, yahoo)); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestDenyOnPermissionInfobar) { |
| + // Test that no notification is created |
| + // when Deny is chosen from permission infobar. |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + PerformActionOnInfobar(browser(), DENY, 0, 0); |
| + CreateSimpleNotification(browser(), false); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| + ContentSettingsForOneType settings; |
| + GetDeniedOrigins(&settings); |
| + EXPECT_TRUE(CheckOriginInSetting(settings, TEST_PAGE_URL)); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestClosePermissionInfobar) { |
| + // Test that no notification is created when permission infobar is dismissed. |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + PerformActionOnInfobar(browser(), DISMISS, 0, 0); |
| + CreateSimpleNotification(browser(), false); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| + ContentSettingsForOneType settings; |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(0U, settings.size()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestNotificationWithPropertyMissing) { |
| + // Test that a notification can be created if one property is missing. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
| + ASSERT_EQ(1U, balloons.size()); |
| + Balloon* balloon = balloons[0]; |
| + const Notification& notification = balloon->notification(); |
| + GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
| + EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
| + EXPECT_EQ(ASCIIToUTF16("My Title"), notification.title()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestAllowNotificationsFromAllSites) { |
| + // Verify that all domains can be allowed to show notifications. |
| + SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestDenyNotificationsFromAllSites) { |
| + // Verify that no domain can show notifications. |
| + SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), false); |
| + EXPECT_EQ("-1", result); |
| + |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestDenyDomainAndAllowAll) { |
| + // Verify that denying a domain and allowing all shouldn't show |
| + // notifications from the denied domain. |
| + DenyOrigin(TEST_PAGE_URL.GetOrigin()); |
| + SetDefaultPermissionSetting(CONTENT_SETTING_ALLOW); |
| + |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), false); |
| + EXPECT_EQ("-1", result); |
| + |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestAllowDomainAndDenyAll) { |
| + // Verify that allowing a domain and denying all others should show |
| + // notifications from the allowed domain. |
| + AllowOrigin(TEST_PAGE_URL.GetOrigin()); |
| + SetDefaultPermissionSetting(CONTENT_SETTING_BLOCK); |
| + |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + ASSERT_EQ(1, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestDenyAndThenAllowDomain) { |
| + // Verify that denying and again allowing should show notifications. |
| + DenyOrigin(TEST_PAGE_URL.GetOrigin()); |
| + |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateSimpleNotification(browser(), false); |
| + EXPECT_EQ("-1", result); |
| + |
| + ASSERT_EQ(0, GetNotificationCount()); |
| + |
| + AllowOrigin(TEST_PAGE_URL.GetOrigin()); |
| + result = CreateSimpleNotification(browser(), true); |
| + EXPECT_NE("-1", result); |
| + |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + EXPECT_EQ(0U, InfoBarTabHelper::FromWebContents( |
| + chrome::GetWebContentsAt(browser(), 0))->GetInfoBarCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestCreateDenyCloseNotifications) { |
| + // Verify able to create, deny, and close the notification. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + CreateSimpleNotification(browser(), true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + |
| + DenyOrigin(TEST_PAGE_URL.GetOrigin()); |
| + ContentSettingsForOneType settings; |
| + GetDeniedOrigins(&settings); |
| + ASSERT_TRUE(CheckOriginInSetting(settings, TEST_PAGE_URL.GetOrigin())); |
| + |
| + const std::deque<Balloon*>& balloons1 = GetActiveBalloons(); |
| + EXPECT_EQ(1U, balloons1.size()); |
| + ASSERT_TRUE(CloseNotificationAndWait(balloons1[0]->notification())); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +// Crashes on Linux/Win. See http://crbug.com/160657. |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + DISABLED_TestOriginPrefsNotSavedInIncognito) { |
| + // Verify that allow/deny origin preferences are not saved in incognito. |
| + Browser* incognito = CreateBrowserWindow(browser(), true); |
| + ui_test_utils::NavigateToURL(incognito, TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(incognito)); |
| + ASSERT_TRUE(WaitForInfoBarCount(incognito, 1, 0, true)); |
| + PerformActionOnInfobar(incognito, DENY, 0, 0); |
| + CloseBrowserWindow(incognito); |
| + |
| + incognito = CreateBrowserWindow(browser(), true); |
| + ui_test_utils::NavigateToURL(incognito, TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(incognito)); |
| + ASSERT_TRUE(WaitForInfoBarCount(incognito, 1, 0, true)); |
| + PerformActionOnInfobar(incognito, ALLOW, 0, 0); |
| + CreateSimpleNotification(incognito, true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + CloseBrowserWindow(incognito); |
| + |
| + incognito = CreateBrowserWindow(browser(), true); |
| + ui_test_utils::NavigateToURL(incognito, TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(incognito)); |
| + ASSERT_TRUE(WaitForInfoBarCount(incognito, 1, 0, true)); |
| + |
| + ContentSettingsForOneType settings; |
| + GetDeniedOrigins(&settings); |
| + EXPECT_EQ(0U, settings.size()); |
| + GetAllowedOrigins(&settings); |
| + EXPECT_EQ(0U, settings.size()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestExitBrowserWithInfobar) { |
| + // Exit the browser window, when the infobar appears. |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestCrashTabWithPermissionInfobar) { |
| + // Test crashing the tab with permission infobar doesn't crash Chrome. |
| + ui_test_utils::NavigateToURLWithDisposition( |
| + browser(), |
| + EMPTY_PAGE_URL, |
| + NEW_BACKGROUND_TAB, |
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
| + chrome::ActivateTabAt(browser(), 0, true); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + CrashTab(browser(), 0); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestKillNotificationProcess) { |
| + // Test killing a notification doesn't crash Chrome. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + CreateSimpleNotification(browser(), true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + |
| + const std::deque<Balloon*>& balloons = GetActiveBalloons(); |
| + ASSERT_EQ(1U, balloons.size()); |
| + CrashNotification(balloons[0]); |
| + ASSERT_EQ(0, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(NotificationsPermissionTest, TestIncognitoNotification) { |
| + // Test notifications in incognito window. |
| + Browser* browser = CreateIncognitoBrowser(); |
| + ui_test_utils::NavigateToURL(browser, TEST_PAGE_URL); |
| + chrome::ActivateTabAt(browser, 0, true); |
| + ASSERT_TRUE(RequestPermission(browser)); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser, 1, 0, true)); |
| + PerformActionOnInfobar(browser, ALLOW, 0, 0); |
| + CreateSimpleNotification(browser, true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestCloseTabWithPermissionInfobar) { |
| + // Test that user can close tab when infobar present. |
| + ui_test_utils::NavigateToURLWithDisposition( |
| + browser(), |
| + GURL("about:blank"), |
| + NEW_BACKGROUND_TAB, |
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
| + chrome::ActivateTabAt(browser(), 0, true); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + content::WindowedNotificationObserver observer( |
| + content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
| + content::NotificationService::AllSources()); |
| + chrome::CloseWebContents(browser(), chrome::GetWebContentsAt(browser(), 0)); |
| + observer.Wait(); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestNavigateAwayWithPermissionInfobar) { |
| + // Test navigating away when an infobar is present, |
| + // then trying to create a notification from the same page. |
| + ui_test_utils::NavigateToURLWithDisposition( |
| + browser(), |
| + GURL("about:blank"), |
| + NEW_BACKGROUND_TAB, |
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
| + chrome::ActivateTabAt(browser(), 0, true); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + ASSERT_TRUE(RequestPermission(browser())); |
| + ASSERT_TRUE(WaitForInfoBarCount(browser(), 1, 0, true)); |
| + PerformActionOnInfobar(browser(), ALLOW, 0, 0); |
| + CreateSimpleNotification(browser(), true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestCrashRendererNotificationRemain) { |
| + // Test crashing renderer does not close or crash notification. |
| + AllowAllOrigins(); |
| + ui_test_utils::NavigateToURLWithDisposition( |
| + browser(), |
| + GURL("about:blank"), |
| + NEW_BACKGROUND_TAB, |
| + ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); |
| + chrome::ActivateTabAt(browser(), 0, true); |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + CreateSimpleNotification(browser(), true); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + CrashTab(browser(), 0); |
| + ASSERT_EQ(1, GetNotificationCount()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestNotificationOrderAfterClosingOne) { |
| + // Tests that closing a notification leaves the rest |
| + // of the notifications in the correct order. |
| + // Check for Win7. |
| +#if defined(OS_WIN) |
| + if (base::win::GetVersion() == VERSION_WIN7) { |
| + return; // crbug.com/66072 |
| + } |
| +#endif |
| + |
| + AllowAllOrigins(); |
| + |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + CreateNotification(browser(), true, "", "Title1", "", "1"); |
| + CreateNotification(browser(), true, "", "Title2", "", "2"); |
| + CreateNotification(browser(), true, "", "Title3", "", "3"); |
| + |
| + ASSERT_EQ(3, GetNotificationCount()); |
| + const std::deque<Balloon*>& old_balloons = GetActiveBalloons(); |
| + |
| + ASSERT_TRUE(CloseNotificationAndWait(old_balloons[1]->notification())); |
| + |
| + const std::deque<Balloon*>& new_balloons = GetActiveBalloons(); |
| + ASSERT_EQ(2U, new_balloons.size()); |
| + EXPECT_EQ(old_balloons[0]->notification().notification_id(), |
| + new_balloons[0]->notification().notification_id()); |
| + EXPECT_EQ(old_balloons[2]->notification().notification_id(), |
| + new_balloons[1]->notification().notification_id()); |
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F( |
| + NotificationsPermissionTest, |
| + TestNotificationReplacement) { |
| + // Test that we can replace a notification using the replaceId. |
| + AllowAllOrigins(); |
| + |
| + ui_test_utils::NavigateToURL(browser(), TEST_PAGE_URL); |
| + |
| + std::string result = CreateNotification( |
| + browser(), |
|
kkania
2012/11/15 16:29:07
4, not 5
chrisgao (Use stgao instead)
2012/11/16 00:23:30
Done.
|
| + true, |
| + "", |
| + "Title2", |
| + "", |
| + "chat"); |
| + EXPECT_NE("-1", result); |
| + |
| + ASSERT_EQ(1, GetNotificationCount()); |
| + |
| + result = CreateNotification( |
|
kkania
2012/11/15 16:29:07
are we guaranteed that this func waits until the r
chrisgao (Use stgao instead)
2012/11/16 00:23:30
According to my test, Chrome supports notification
|
| + browser(), |
| + false, |
| + "no_such_file.png", |
| + "", |
| + "", |
| + "chat"); |
| + EXPECT_NE("-1", result); |
| + |
| + const std::deque<Balloon*>& balloons2 = GetActiveBalloons(); |
| + EXPECT_EQ(1U, balloons2.size()); |
| + GURL EXPECTED_ICON_URL = test_server()->GetURL(kExpectedIconUrl); |
| + const Notification& notification = balloons2[0]->notification(); |
| + EXPECT_EQ(EXPECTED_ICON_URL, notification.icon_url()); |
| +} |