| Index: chrome/browser/notifications/notification_browsertest.cc
|
| diff --git a/chrome/browser/notifications/notification_browsertest.cc b/chrome/browser/notifications/notification_browsertest.cc
|
| index 0da4987c58428d34acc37f6ad1f96f65085ec5e1..187731312634547960385e9317b9990062068721 100644
|
| --- a/chrome/browser/notifications/notification_browsertest.cc
|
| +++ b/chrome/browser/notifications/notification_browsertest.cc
|
| @@ -26,6 +26,7 @@
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| #include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| +#include "chrome/browser/ui/website_settings/permission_bubble_manager.h"
|
| #include "chrome/common/content_settings.h"
|
| #include "chrome/common/content_settings_pattern.h"
|
| #include "chrome/test/base/in_process_browser_test.h"
|
| @@ -51,7 +52,7 @@ namespace {
|
|
|
| const char kExpectedIconUrl[] = "/notifications/no_such_file.png";
|
|
|
| -enum InfobarAction {
|
| +enum PromptAction {
|
| DISMISS = 0,
|
| ALLOW,
|
| DENY,
|
| @@ -114,6 +115,64 @@ class MessageCenterChangeObserver
|
| DISALLOW_COPY_AND_ASSIGN(MessageCenterChangeObserver);
|
| };
|
|
|
| +class MockView : public PermissionBubbleView {
|
| + public:
|
| + MockView() : shown_(false), can_accept_updates_(true), delegate_(NULL) {}
|
| + virtual ~MockView() {}
|
| +
|
| + void Clear() {
|
| + shown_ = false;
|
| + can_accept_updates_ = true;
|
| + delegate_ = NULL;
|
| + permission_requests_.clear();
|
| + permission_states_.clear();
|
| + }
|
| +
|
| + // PermissionBubbleView:
|
| + virtual void SetDelegate(Delegate* delegate) OVERRIDE {
|
| + delegate_ = delegate;
|
| + }
|
| +
|
| + virtual void Show(
|
| + const std::vector<PermissionBubbleRequest*>& requests,
|
| + const std::vector<bool>& accept_state,
|
| + bool customization_state_) OVERRIDE {
|
| + shown_ = true;
|
| + permission_requests_ = requests;
|
| + permission_states_ = accept_state;
|
| + }
|
| +
|
| + virtual void Hide() OVERRIDE {
|
| + shown_ = false;
|
| + }
|
| +
|
| + virtual bool IsVisible() OVERRIDE {
|
| + return shown_;
|
| + }
|
| +
|
| + virtual bool CanAcceptRequestUpdate() OVERRIDE {
|
| + return can_accept_updates_;
|
| + }
|
| +
|
| + void Accept() {
|
| + delegate_->Accept();
|
| + }
|
| +
|
| + void Deny() {
|
| + delegate_->Deny();
|
| + }
|
| +
|
| + void Close() {
|
| + delegate_->Closing();
|
| + }
|
| +
|
| + bool shown_;
|
| + bool can_accept_updates_;
|
| + Delegate* delegate_;
|
| + std::vector<PermissionBubbleRequest*> permission_requests_;
|
| + std::vector<bool> permission_states_;
|
| +};
|
| +
|
| } // namespace
|
|
|
| class NotificationsTest : public InProcessBrowserTest {
|
| @@ -132,7 +191,7 @@ class NotificationsTest : public InProcessBrowserTest {
|
| void AllowAllOrigins();
|
| void SetDefaultContentSetting(ContentSetting setting);
|
|
|
| - void VerifyInfoBar(const Browser* browser, int index);
|
| + void VerifyPrompt(const Browser* browser, int index);
|
| std::string CreateNotification(Browser* browser,
|
| bool wait_for_new_balloon,
|
| const char* icon,
|
| @@ -143,10 +202,10 @@ class NotificationsTest : public InProcessBrowserTest {
|
| bool wait_for_new_balloon);
|
| bool RequestPermissionAndWait(Browser* browser);
|
| bool CancelNotification(const char* notification_id, Browser* browser);
|
| - bool PerformActionOnInfoBar(Browser* browser,
|
| - InfobarAction action,
|
| - size_t infobar_index,
|
| - int tab_index);
|
| + bool PerformAction(Browser* browser,
|
| + PromptAction action,
|
| + size_t index,
|
| + int tab_index);
|
| void GetPrefsByContentSetting(ContentSetting setting,
|
| ContentSettingsForOneType* settings);
|
| bool CheckOriginInSetting(const ContentSettingsForOneType& settings,
|
| @@ -157,8 +216,11 @@ class NotificationsTest : public InProcessBrowserTest {
|
| "/notifications/notification_tester.html");
|
| }
|
|
|
| + int GetBubblesQueueSize(PermissionBubbleManager* mgr);
|
| +
|
| private:
|
| void DropOriginPreference(const GURL& origin);
|
| + MockView mock_bubble_view_;
|
| };
|
|
|
| int NotificationsTest::GetNotificationCount() {
|
| @@ -203,17 +265,25 @@ void NotificationsTest::SetDefaultContentSetting(ContentSetting setting) {
|
| CONTENT_SETTINGS_TYPE_NOTIFICATIONS, setting);
|
| }
|
|
|
| -void NotificationsTest::VerifyInfoBar(const Browser* browser, int index) {
|
| - InfoBarService* infobar_service = InfoBarService::FromWebContents(
|
| - browser->tab_strip_model()->GetWebContentsAt(index));
|
| -
|
| - ASSERT_EQ(1U, infobar_service->infobar_count());
|
| - ConfirmInfoBarDelegate* confirm_infobar =
|
| - infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| - ASSERT_TRUE(confirm_infobar);
|
| - int buttons = confirm_infobar->GetButtons();
|
| - EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_OK);
|
| - EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL);
|
| +void NotificationsTest::VerifyPrompt(const Browser* browser, int index) {
|
| + if (!PermissionBubbleManager::Enabled()) {
|
| + InfoBarService* infobar_service = InfoBarService::FromWebContents(
|
| + browser->tab_strip_model()->GetWebContentsAt(index));
|
| +
|
| + ASSERT_EQ(1U, infobar_service->infobar_count());
|
| + ConfirmInfoBarDelegate* confirm_infobar =
|
| + infobar_service->infobar_at(0)->delegate()->AsConfirmInfoBarDelegate();
|
| + ASSERT_TRUE(confirm_infobar);
|
| + int buttons = confirm_infobar->GetButtons();
|
| + EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_OK);
|
| + EXPECT_TRUE(buttons & ConfirmInfoBarDelegate::BUTTON_CANCEL);
|
| + } else {
|
| + PermissionBubbleManager* permission_manager =
|
| + PermissionBubbleManager::FromWebContents(
|
| + browser->tab_strip_model()->GetWebContentsAt(0));
|
| +LOG(INFO) << "Get queue size";
|
| + ASSERT_EQ(1, GetBubblesQueueSize(permission_manager));
|
| + }
|
| }
|
|
|
| std::string NotificationsTest::CreateNotification(
|
| @@ -251,18 +321,36 @@ std::string NotificationsTest::CreateSimpleNotification(
|
| bool NotificationsTest::RequestPermissionAndWait(Browser* browser) {
|
| InfoBarService* infobar_service = InfoBarService::FromWebContents(
|
| browser->tab_strip_model()->GetActiveWebContents());
|
| - content::WindowedNotificationObserver observer(
|
| - chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
|
| - content::Source<InfoBarService>(infobar_service));
|
| - std::string result;
|
| - bool success = content::ExecuteScriptAndExtractString(
|
| - browser->tab_strip_model()->GetActiveWebContents(),
|
| - "requestPermission();",
|
| - &result);
|
| - if (!success || result != "1")
|
| - return false;
|
| - observer.Wait();
|
| - return true;
|
| + PermissionBubbleManager* permission_manager =
|
| + PermissionBubbleManager::FromWebContents(
|
| + browser->tab_strip_model()->GetWebContentsAt(0));
|
| + permission_manager->SetView(&mock_bubble_view_);
|
| + if (!PermissionBubbleManager::Enabled()) {
|
| + content::WindowedNotificationObserver observer(
|
| + chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_ADDED,
|
| + content::Source<InfoBarService>(infobar_service));
|
| + std::string result;
|
| + bool success = content::ExecuteScriptAndExtractString(
|
| + browser->tab_strip_model()->GetActiveWebContents(),
|
| + "requestPermission();",
|
| + &result);
|
| + if (!success || result != "1")
|
| + return false;
|
| + observer.Wait();
|
| + return true;
|
| + } else {
|
| + std::string result;
|
| + bool success = content::ExecuteScriptAndExtractString(
|
| + browser->tab_strip_model()->GetActiveWebContents(),
|
| + "requestPermission();",
|
| + &result);
|
| + if (!success || result != "1")
|
| + return false;
|
| + while (!mock_bubble_view_.shown_) {
|
| + (new content::MessageLoopRunner())->Run();
|
| + }
|
| + return true;
|
| + }
|
| }
|
|
|
| bool NotificationsTest::CancelNotification(
|
| @@ -283,47 +371,71 @@ bool NotificationsTest::CancelNotification(
|
| return observer.Wait();
|
| }
|
|
|
| -bool NotificationsTest::PerformActionOnInfoBar(
|
| +bool NotificationsTest::PerformAction(
|
| Browser* browser,
|
| - InfobarAction action,
|
| - size_t infobar_index,
|
| + PromptAction action,
|
| + size_t index,
|
| int tab_index) {
|
| InfoBarService* infobar_service = InfoBarService::FromWebContents(
|
| browser->tab_strip_model()->GetWebContentsAt(tab_index));
|
| - if (infobar_index >= infobar_service->infobar_count()) {
|
| - ADD_FAILURE();
|
| - return false;
|
| + PermissionBubbleManager* permission_manager =
|
| + PermissionBubbleManager::FromWebContents(
|
| + browser->tab_strip_model()->GetWebContentsAt(0));
|
| + if (!PermissionBubbleManager::Enabled()) {
|
| + if (index >= infobar_service->infobar_count()) {
|
| + ADD_FAILURE();
|
| + return false;
|
| + }
|
| + } else {
|
| + if (static_cast<int>(index) >= GetBubblesQueueSize(permission_manager)) {
|
| + ADD_FAILURE();
|
| + return false;
|
| + }
|
| }
|
|
|
| - infobars::InfoBar* infobar = infobar_service->infobar_at(infobar_index);
|
| - infobars::InfoBarDelegate* infobar_delegate = infobar->delegate();
|
| - switch (action) {
|
| - case DISMISS:
|
| - infobar_delegate->InfoBarDismissed();
|
| - infobar_service->RemoveInfoBar(infobar);
|
| - return true;
|
| -
|
| - case ALLOW: {
|
| - ConfirmInfoBarDelegate* confirm_infobar_delegate =
|
| - infobar_delegate->AsConfirmInfoBarDelegate();
|
| - if (!confirm_infobar_delegate) {
|
| - ADD_FAILURE();
|
| - } else if (confirm_infobar_delegate->Accept()) {
|
| + if (!PermissionBubbleManager::Enabled()) {
|
| + infobars::InfoBar* infobar = infobar_service->infobar_at(index);
|
| + infobars::InfoBarDelegate* infobar_delegate = infobar->delegate();
|
| + switch (action) {
|
| + case DISMISS:
|
| + infobar_delegate->InfoBarDismissed();
|
| infobar_service->RemoveInfoBar(infobar);
|
| return true;
|
| +
|
| + case ALLOW: {
|
| + ConfirmInfoBarDelegate* confirm_infobar_delegate =
|
| + infobar_delegate->AsConfirmInfoBarDelegate();
|
| + if (!confirm_infobar_delegate) {
|
| + ADD_FAILURE();
|
| + } else if (confirm_infobar_delegate->Accept()) {
|
| + infobar_service->RemoveInfoBar(infobar);
|
| + return true;
|
| + }
|
| }
|
| - }
|
|
|
| - case DENY: {
|
| - ConfirmInfoBarDelegate* confirm_infobar_delegate =
|
| - infobar_delegate->AsConfirmInfoBarDelegate();
|
| - if (!confirm_infobar_delegate) {
|
| - ADD_FAILURE();
|
| - } else if (confirm_infobar_delegate->Cancel()) {
|
| - infobar_service->RemoveInfoBar(infobar);
|
| - return true;
|
| + case DENY: {
|
| + ConfirmInfoBarDelegate* confirm_infobar_delegate =
|
| + infobar_delegate->AsConfirmInfoBarDelegate();
|
| + if (!confirm_infobar_delegate) {
|
| + ADD_FAILURE();
|
| + } else if (confirm_infobar_delegate->Cancel()) {
|
| + infobar_service->RemoveInfoBar(infobar);
|
| + return true;
|
| + }
|
| }
|
| }
|
| + } else {
|
| + switch (action) {
|
| + case DISMISS:
|
| + mock_bubble_view_.Close();
|
| + return true;
|
| + case ALLOW:
|
| + mock_bubble_view_.Accept();
|
| + return true;
|
| + case DENY:
|
| + mock_bubble_view_.Deny();
|
| + return true;
|
| + }
|
| }
|
|
|
| return false;
|
| @@ -361,8 +473,14 @@ void NotificationsTest::DropOriginPreference(const GURL& origin) {
|
| ContentSettingsPattern::FromURLNoWildcard(origin));
|
| }
|
|
|
| +int NotificationsTest::GetBubblesQueueSize(
|
| + PermissionBubbleManager* mgr) {
|
| +LOG(INFO) << "Have " << mgr->requests_.size();
|
| + return static_cast<int>(mgr->requests_.size());
|
| +}
|
| +
|
| // If this flakes, use http://crbug.com/62311 and http://crbug.com/74428.
|
| -IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) {
|
| +IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGesture) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| ui_test_utils::NavigateToURL(
|
| @@ -381,7 +499,13 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestUserGestureInfobar) {
|
|
|
| InfoBarService* infobar_service = InfoBarService::FromWebContents(
|
| browser()->tab_strip_model()->GetWebContentsAt(0));
|
| - EXPECT_EQ(1U, infobar_service->infobar_count());
|
| + PermissionBubbleManager* permission_manager =
|
| + PermissionBubbleManager::FromWebContents(
|
| + browser()->tab_strip_model()->GetWebContentsAt(0));
|
| + if (!PermissionBubbleManager::Enabled())
|
| + EXPECT_EQ(1U, infobar_service->infobar_count());
|
| + else
|
| + EXPECT_EQ(1, GetBubblesQueueSize(permission_manager));
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCreateSimpleNotification) {
|
| @@ -439,7 +563,7 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCancelNotification) {
|
| ASSERT_EQ(0, GetNotificationCount());
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionInfobarAppears) {
|
| +IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionPromptAppears) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| // Requests notification privileges and verifies the infobar appears.
|
| @@ -447,10 +571,11 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestPermissionInfobarAppears) {
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
|
|
| ASSERT_EQ(0, GetNotificationCount());
|
| - ASSERT_NO_FATAL_FAILURE(VerifyInfoBar(browser(), 0));
|
| +LOG(INFO) << "VerifyPrompt";
|
| + ASSERT_NO_FATAL_FAILURE(VerifyPrompt(browser(), 0));
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermissionInfobar) {
|
| +IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermission) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| // Tries to create a notification and clicks allow on the infobar.
|
| @@ -460,20 +585,20 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestAllowOnPermissionInfobar) {
|
| ASSERT_EQ(0, GetNotificationCount());
|
|
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
| - ASSERT_TRUE(PerformActionOnInfoBar(browser(), ALLOW, 0, 0));
|
| + ASSERT_TRUE(PerformAction(browser(), ALLOW, 0, 0));
|
|
|
| CreateSimpleNotification(browser(), true);
|
| EXPECT_EQ(1, GetNotificationCount());
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermissionInfobar) {
|
| +IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermission) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| // Test that no notification is created
|
| // when Deny is chosen from permission infobar.
|
| ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
| - PerformActionOnInfoBar(browser(), DENY, 0, 0);
|
| + PerformAction(browser(), DENY, 0, 0);
|
| CreateSimpleNotification(browser(), false);
|
| ASSERT_EQ(0, GetNotificationCount());
|
| ContentSettingsForOneType settings;
|
| @@ -481,13 +606,13 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestDenyOnPermissionInfobar) {
|
| EXPECT_TRUE(CheckOriginInSetting(settings, GetTestPageURL()));
|
| }
|
|
|
| -IN_PROC_BROWSER_TEST_F(NotificationsTest, TestClosePermissionInfobar) {
|
| +IN_PROC_BROWSER_TEST_F(NotificationsTest, TestClosePermission) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| // Test that no notification is created when permission infobar is dismissed.
|
| ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
| - PerformActionOnInfoBar(browser(), DISMISS, 0, 0);
|
| + PerformAction(browser(), DISMISS, 0, 0);
|
| CreateSimpleNotification(browser(), false);
|
| ASSERT_EQ(0, GetNotificationCount());
|
| ContentSettingsForOneType settings;
|
| @@ -612,13 +737,13 @@ IN_PROC_BROWSER_TEST_F(
|
| Browser* incognito = CreateIncognitoBrowser();
|
| ui_test_utils::NavigateToURL(incognito, GetTestPageURL());
|
| ASSERT_TRUE(RequestPermissionAndWait(incognito));
|
| - PerformActionOnInfoBar(incognito, DENY, 0, 0);
|
| + PerformAction(incognito, DENY, 0, 0);
|
| CloseBrowserWindow(incognito);
|
|
|
| incognito = CreateIncognitoBrowser();
|
| ui_test_utils::NavigateToURL(incognito, GetTestPageURL());
|
| ASSERT_TRUE(RequestPermissionAndWait(incognito));
|
| - PerformActionOnInfoBar(incognito, ALLOW, 0, 0);
|
| + PerformAction(incognito, ALLOW, 0, 0);
|
| CreateSimpleNotification(incognito, true);
|
| ASSERT_EQ(1, GetNotificationCount());
|
| CloseBrowserWindow(incognito);
|
| @@ -674,7 +799,7 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestIncognitoNotification) {
|
| ui_test_utils::NavigateToURL(browser, GetTestPageURL());
|
| browser->tab_strip_model()->ActivateTabAt(0, true);
|
| ASSERT_TRUE(RequestPermissionAndWait(browser));
|
| - PerformActionOnInfoBar(browser, ALLOW, 0, 0);
|
| + PerformAction(browser, ALLOW, 0, 0);
|
| CreateSimpleNotification(browser, true);
|
| ASSERT_EQ(1, GetNotificationCount());
|
| }
|
| @@ -700,7 +825,7 @@ IN_PROC_BROWSER_TEST_F(NotificationsTest, TestCloseTabWithPermissionInfobar) {
|
|
|
| IN_PROC_BROWSER_TEST_F(
|
| NotificationsTest,
|
| - TestNavigateAwayWithPermissionInfobar) {
|
| + TestNavigateAwayWithPermission) {
|
| ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
|
|
| // Test navigating away when an infobar is present,
|
| @@ -715,7 +840,7 @@ IN_PROC_BROWSER_TEST_F(
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
| ui_test_utils::NavigateToURL(browser(), GetTestPageURL());
|
| ASSERT_TRUE(RequestPermissionAndWait(browser()));
|
| - PerformActionOnInfoBar(browser(), ALLOW, 0, 0);
|
| + PerformAction(browser(), ALLOW, 0, 0);
|
| CreateSimpleNotification(browser(), true);
|
| ASSERT_EQ(1, GetNotificationCount());
|
| }
|
|
|