Index: chrome/browser/download/notification/download_notification_item_unittest.cc |
diff --git a/chrome/browser/download/notification/download_notification_item_unittest.cc b/chrome/browser/download/notification/download_notification_item_unittest.cc |
index 693ee03dc6064ce0c6d9be0aa566508ed70934d0..43be8a9ea01a7ffcc22b80741108550467304694 100644 |
--- a/chrome/browser/download/notification/download_notification_item_unittest.cc |
+++ b/chrome/browser/download/notification/download_notification_item_unittest.cc |
@@ -4,11 +4,18 @@ |
#include "chrome/browser/download/notification/download_notification_item.h" |
+#include "base/message_loop/message_loop.h" |
#include "base/run_loop.h" |
#include "base/test/test_simple_task_runner.h" |
#include "base/thread_task_runner_handle.h" |
+#include "chrome/browser/notifications/notification_test_util.h" |
+#include "chrome/browser/notifications/platform_notification_service_impl.h" |
+#include "chrome/test/base/testing_browser_process.h" |
+#include "chrome/test/base/testing_profile.h" |
+#include "chrome/test/base/testing_profile_manager.h" |
#include "content/public/test/mock_download_item.h" |
#include "content/public/test/mock_download_manager.h" |
+#include "content/public/test/test_browser_thread.h" |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
#include "ui/message_center/fake_message_center.h" |
@@ -64,12 +71,22 @@ namespace test { |
class DownloadNotificationItemTest : public testing::Test { |
public: |
DownloadNotificationItemTest() |
- : runner_(new base::TestSimpleTaskRunner), runner_handler_(runner_) {} |
+ : ui_thread_(content::BrowserThread::UI, &message_loop_), |
+ profile_(nullptr) {} |
void SetUp() override { |
testing::Test::SetUp(); |
message_center::MessageCenter::Initialize(); |
+ profile_manager_.reset( |
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
+ ASSERT_TRUE(profile_manager_->SetUp()); |
+ profile_ = profile_manager_->CreateTestingProfile("test-user"); |
+ |
+ ui_manager_.reset(new StubNotificationUIManager); |
+ DownloadNotificationItem::SetStubNotificationUIManagerForTesting( |
+ ui_manager_.get()); |
+ |
download_item_.reset(new NiceMock<content::MockDownloadItem>()); |
ON_CALL(*download_item_, GetId()).WillByDefault(Return(12345)); |
ON_CALL(*download_item_, GetState()) |
@@ -84,6 +101,7 @@ class DownloadNotificationItemTest : public testing::Test { |
void TearDown() override { |
download_notification_item_.reset(); |
+ profile_manager_.reset(); |
message_center::MessageCenter::Shutdown(); |
testing::Test::TearDown(); |
} |
@@ -93,12 +111,29 @@ class DownloadNotificationItemTest : public testing::Test { |
return message_center::MessageCenter::Get(); |
} |
- std::string notification_id() { |
+ std::string notification_id() const { |
return download_notification_item_->notification_->id(); |
} |
- message_center::Notification* notification() { |
- return message_center()->FindVisibleNotificationById(notification_id()); |
+ const Notification* notification() const { |
+ return ui_manager_->FindById(download_notification_item_->watcher_->id(), |
+ NotificationUIManager::GetProfileID(profile_)); |
+ } |
+ |
+ size_t NotificationCount() const { |
+ return ui_manager_ |
+ ->GetAllIdsByProfileAndSourceOrigin( |
+ profile_, |
+ GURL(DownloadNotificationItem::kDownloadNotificationOrigin)) |
+ .size(); |
+ } |
+ |
+ void RemoveNotification() { |
+ ui_manager_->CancelById(download_notification_item_->watcher_->id(), |
+ NotificationUIManager::GetProfileID(profile_)); |
+ |
+ // Waits, since removing a notification may cause an async job. |
+ base::RunLoop().RunUntilIdle(); |
} |
// Trampoline methods to access a private method in DownloadNotificationItem. |
@@ -109,24 +144,22 @@ class DownloadNotificationItemTest : public testing::Test { |
return download_notification_item_->OnNotificationButtonClick(index); |
} |
- bool IsPopupNotification(const std::string& notification_id) { |
- message_center::NotificationList::PopupNotifications popups = |
- message_center()->GetPopupNotifications(); |
- for (auto it = popups.begin(); it != popups.end(); it++) { |
- if ((*it)->id() == notification_id) { |
- return true; |
- } |
- } |
- return false; |
+ bool ShownAsPopUp() { |
+ return !download_notification_item_->notification_->shown_as_popup(); |
Randy Smith (Not in Mondays)
2015/04/15 19:16:31
Why the inversion? I don't see anything in the co
|
} |
void CreateDownloadNotificationItem() { |
- download_notification_item_.reset( |
- new DownloadNotificationItem(download_item_.get(), &delegate_)); |
+ download_notification_item_.reset(new DownloadNotificationItem( |
+ download_item_.get(), profile_, &delegate_)); |
} |
- scoped_refptr<base::TestSimpleTaskRunner> runner_; |
- base::ThreadTaskRunnerHandle runner_handler_; |
+ base::MessageLoopForUI message_loop_; |
+ content::TestBrowserThread ui_thread_; |
+ |
+ scoped_ptr<StubNotificationUIManager> ui_manager_; |
+ |
+ scoped_ptr<TestingProfileManager> profile_manager_; |
+ Profile* profile_; |
MockDownloadNotificationItemDelegate delegate_; |
scoped_ptr<NiceMock<content::MockDownloadItem>> download_item_; |
@@ -134,32 +167,26 @@ class DownloadNotificationItemTest : public testing::Test { |
}; |
TEST_F(DownloadNotificationItemTest, ShowAndCloseNotification) { |
- EXPECT_EQ(0u, message_center()->NotificationCount()); |
+ EXPECT_EQ(0u, NotificationCount()); |
// Shows a notification |
CreateDownloadNotificationItem(); |
download_item_->NotifyObserversDownloadOpened(); |
// Confirms that the notification is shown as a popup. |
- EXPECT_EQ(1u, message_center()->NotificationCount()); |
- EXPECT_TRUE(IsPopupNotification(notification_id())); |
+ EXPECT_TRUE(ShownAsPopUp()); |
+ EXPECT_EQ(1u, NotificationCount()); |
// Makes sure the DownloadItem::Cancel() is not called. |
EXPECT_CALL(*download_item_, Cancel(_)).Times(0); |
// Closes it once. |
- message_center()->RemoveNotification(notification_id(), true); |
- |
- // Confirms that the notification is shown but is not a popup. |
- EXPECT_EQ(1u, message_center()->NotificationCount()); |
- EXPECT_FALSE(IsPopupNotification(notification_id())); |
- |
- // Makes sure the DownloadItem::Cancel() is called once. |
- EXPECT_CALL(*download_item_, Cancel(_)).Times(1); |
- // Closes it again. |
- message_center()->RemoveNotification(notification_id(), true); |
+ RemoveNotification(); |
// Confirms that the notification is closed. |
- EXPECT_EQ(0u, message_center()->NotificationCount()); |
+ EXPECT_EQ(0u, NotificationCount()); |
+ |
+ // Makes sure the DownloadItem::Cancel() is never called. |
+ EXPECT_CALL(*download_item_, Cancel(_)).Times(0); |
} |
TEST_F(DownloadNotificationItemTest, PauseAndResumeNotification) { |
@@ -168,8 +195,7 @@ TEST_F(DownloadNotificationItemTest, PauseAndResumeNotification) { |
download_item_->NotifyObserversDownloadOpened(); |
// Confirms that the notification is shown as a popup. |
- EXPECT_EQ(message_center()->NotificationCount(), 1u); |
- EXPECT_TRUE(IsPopupNotification(notification_id())); |
+ EXPECT_EQ(1u, NotificationCount()); |
// Pauses and makes sure the DownloadItem::Pause() is called. |
EXPECT_CALL(*download_item_, Pause()).Times(1); |