Index: chrome/browser/notifications/desktop_notifications_unittest.cc |
diff --git a/chrome/browser/notifications/desktop_notifications_unittest.cc b/chrome/browser/notifications/desktop_notifications_unittest.cc |
index 9d07c8b84e544677a8da7b920ff6991cdd04dd19..d8f4f731eb92e7a338c6edd43b15405086a2de44 100644 |
--- a/chrome/browser/notifications/desktop_notifications_unittest.cc |
+++ b/chrome/browser/notifications/desktop_notifications_unittest.cc |
@@ -18,22 +18,21 @@ |
#include "ui/base/ime/input_method_initializer.h" |
#include "ui/message_center/message_center.h" |
-#if defined(USE_ASH) |
-#include "ash/shell.h" |
-#include "ash/test/test_shell_delegate.h" |
-#include "ui/aura/env.h" |
-#include "ui/aura/root_window.h" |
-#include "ui/compositor/scoped_animation_duration_scale_mode.h" |
+#if defined(RUN_MESSAGE_CENTER_TESTS) |
+#include "chrome/browser/notifications/message_center_notification_manager.h" |
+#include "chrome/browser/notifications/message_center_settings_controller.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
#endif |
- |
using content::BrowserThread; |
// static |
-const int MockBalloonCollection::kMockBalloonSpace = 5; |
+std::string DesktopNotificationsTest::log_output_; |
+ |
+#if !defined(RUN_MESSAGE_CENTER_TESTS) |
// static |
-std::string DesktopNotificationsTest::log_output_; |
+const int MockBalloonCollection::kMockBalloonSpace = 5; |
MockBalloonCollection::MockBalloonCollection() {} |
@@ -92,49 +91,115 @@ int MockBalloonCollection::UppermostVerticalPosition() { |
return min; |
} |
+#else |
+ |
+class TestMessageCenterNotificationManager : |
+ public MessageCenterNotificationManager { |
+ public: |
+ TestMessageCenterNotificationManager( |
+ message_center::MessageCenter* message_center, |
+ PrefService* local_state, |
+ scoped_ptr<message_center::NotifierSettingsProvider> settings_provider) |
+ : MessageCenterNotificationManager(message_center, |
+ local_state, |
+ settings_provider.Pass()) { |
+ } |
+ virtual ~TestMessageCenterNotificationManager() {} |
+ |
+ virtual bool ShowNotification(const Notification& notification, |
+ Profile* profile) OVERRIDE { |
+ // Swap in a logging proxy for the purpose of logging calls that |
+ // would be made into javascript, then pass this down. |
+ Notification test_notification( |
+ notification.origin_url(), |
+ notification.content_url(), |
+ notification.display_source(), |
+ notification.replace_id(), |
+ new LoggingNotificationProxy(notification.notification_id())); |
+ return MessageCenterNotificationManager::ShowNotification( |
+ test_notification, profile); |
+ } |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(TestMessageCenterNotificationManager); |
+}; |
+ |
+#endif // !defined(RUN_MESSAGE_CENTER_TESTS) |
+ |
DesktopNotificationsTest::DesktopNotificationsTest() |
- : ui_thread_(BrowserThread::UI, &message_loop_) { |
+ : ui_thread_(BrowserThread::UI, &message_loop_), |
+ aura_test_helper_(&message_loop_) { |
} |
DesktopNotificationsTest::~DesktopNotificationsTest() { |
} |
+// static |
+void DesktopNotificationsTest::log(const std::string& message) { |
+ log_output_.append(message); |
+ base::MessageLoop::current()->PostTask(FROM_HERE, |
+ base::MessageLoop::current()->QuitClosure()); |
+} |
+ |
void DesktopNotificationsTest::SetUp() { |
ui::InitializeInputMethodForTesting(); |
-#if defined(USE_ASH) |
- ui::ScopedAnimationDurationScaleMode normal_duration_mode( |
- ui::ScopedAnimationDurationScaleMode::ZERO_DURATION); |
+ |
+#if defined(USE_AURA) |
+ aura_test_helper_.SetUp(); |
+#endif |
+ |
+ chrome::RegisterLocalState(local_state_.registry()); |
+ |
+ profile_manager_.reset( |
+ new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
+ ASSERT_TRUE(profile_manager_->SetUp()); |
+ profile_ = profile_manager_->CreateTestingProfile("notifications_test"); |
+ |
+#if defined(RUN_MESSAGE_CENTER_TESTS) |
// The message center is notmally initialized on |g_browser_process| which |
// is not created for these tests. |
message_center::MessageCenter::Initialize(); |
- // MockBalloonCollection retrieves information about the screen on creation. |
- // So it is necessary to make sure the desktop gets created first. |
- ash::Shell::CreateInstance(new ash::test::TestShellDelegate); |
+ scoped_ptr<message_center::NotifierSettingsProvider> settings_provider( |
+ new MessageCenterSettingsController( |
+ profile_manager_->profile_info_cache())); |
+ ui_manager_.reset( |
+ new TestMessageCenterNotificationManager( |
+ message_center::MessageCenter::Get(), &local_state_, |
+ settings_provider.Pass())); |
+#else |
+ BalloonNotificationUIManager* balloon_ui_manager = |
+ new BalloonNotificationUIManager(&local_state_); |
+ ui_manager_.reset(balloon_ui_manager); |
+ balloon_collection_ = new MockBalloonCollection(); |
+ balloon_ui_manager->SetBalloonCollection(balloon_collection_); |
#endif |
- chrome::RegisterLocalState(local_state_.registry()); |
- profile_.reset(new TestingProfile()); |
- ui_manager_.reset(new BalloonNotificationUIManager(&local_state_)); |
- balloon_collection_ = new MockBalloonCollection(); |
- ui_manager_->SetBalloonCollection(balloon_collection_); |
service_.reset(new DesktopNotificationService(profile(), ui_manager_.get())); |
log_output_.clear(); |
} |
void DesktopNotificationsTest::TearDown() { |
- service_.reset(NULL); |
- ui_manager_.reset(NULL); |
- profile_.reset(NULL); |
-#if defined(USE_ASH) |
- ash::Shell::DeleteInstance(); |
- // The message center is notmally shutdown on |g_browser_process| which |
- // is not created for these tests. |
+ service_.reset(); |
+ ui_manager_.reset(); |
+ profile_ = NULL; |
+ profile_manager_.reset(); |
+#if defined(RUN_MESSAGE_CENTER_TESTS) |
message_center::MessageCenter::Shutdown(); |
- aura::Env::DeleteInstance(); |
+#endif |
+#if defined(USE_AURA) |
+ aura_test_helper_.TearDown(); |
#endif |
ui::ShutdownInputMethodForTesting(); |
} |
+int DesktopNotificationsTest::GetNotificationCount() { |
+#if defined(RUN_MESSAGE_CENTER_TESTS) |
+ return message_center::MessageCenter::Get()->GetNotifications().size(); |
+#else |
+ return balloon_collection_->count(); |
+#endif |
+} |
+ |
content::ShowDesktopNotificationHostMsgParams |
DesktopNotificationsTest::StandardTestNotification() { |
content::ShowDesktopNotificationHostMsgParams params; |
@@ -155,8 +220,8 @@ TEST_F(DesktopNotificationsTest, TestShow) { |
EXPECT_TRUE(service_->ShowDesktopNotification( |
params, 0, 0, DesktopNotificationService::PageNotification)); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
- EXPECT_EQ(1, balloon_collection_->count()); |
+ base::MessageLoopForUI::current()->Run(); |
+ EXPECT_EQ(1, GetNotificationCount()); |
content::ShowDesktopNotificationHostMsgParams params2; |
params2.origin = GURL("http://www.google.com"); |
@@ -166,14 +231,15 @@ TEST_F(DesktopNotificationsTest, TestShow) { |
EXPECT_TRUE(service_->ShowDesktopNotification( |
params2, 0, 0, DesktopNotificationService::PageNotification)); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
- EXPECT_EQ(2, balloon_collection_->count()); |
+ base::MessageLoopForUI::current()->Run(); |
+ EXPECT_EQ(2, GetNotificationCount()); |
EXPECT_EQ("notification displayed\n" |
"notification displayed\n", |
log_output_); |
} |
+#if !defined(RUN_MESSAGE_CENTER_TESTS) |
TEST_F(DesktopNotificationsTest, TestClose) { |
content::ShowDesktopNotificationHostMsgParams params = |
StandardTestNotification(); |
@@ -182,7 +248,7 @@ TEST_F(DesktopNotificationsTest, TestClose) { |
// Request a notification; should open a balloon. |
EXPECT_TRUE(service_->ShowDesktopNotification( |
params, 0, 0, DesktopNotificationService::PageNotification)); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
EXPECT_EQ(1, balloon_collection_->count()); |
// Close all the open balloons. |
@@ -194,6 +260,7 @@ TEST_F(DesktopNotificationsTest, TestClose) { |
"notification closed by user\n", |
log_output_); |
} |
+#endif // !defined(RUN_MESSAGE_CENTER_TESTS) |
TEST_F(DesktopNotificationsTest, TestCancel) { |
int process_id = 0; |
@@ -208,23 +275,24 @@ TEST_F(DesktopNotificationsTest, TestCancel) { |
EXPECT_TRUE(service_->ShowDesktopNotification( |
params, process_id, route_id, |
DesktopNotificationService::PageNotification)); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
- EXPECT_EQ(1, balloon_collection_->count()); |
+ base::MessageLoopForUI::current()->Run(); |
+ EXPECT_EQ(1, GetNotificationCount()); |
// Cancel the same notification |
service_->CancelDesktopNotification(process_id, |
route_id, |
notification_id); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
// Verify that the balloon collection is now empty. |
- EXPECT_EQ(0, balloon_collection_->count()); |
+ EXPECT_EQ(0, GetNotificationCount()); |
EXPECT_EQ("notification displayed\n" |
"notification closed by script\n", |
log_output_); |
} |
-#if defined(OS_WIN) || defined(TOOLKIT_VIEWS) |
+#if (defined(OS_WIN) || defined(TOOLKIT_VIEWS)) && \ |
+ !defined(RUN_MESSAGE_CENTER_TESTS) |
TEST_F(DesktopNotificationsTest, TestPositioning) { |
content::ShowDesktopNotificationHostMsgParams params = |
StandardTestNotification(); |
@@ -293,13 +361,8 @@ TEST_F(DesktopNotificationsTest, TestCancelByProfile) { |
int process_id = 0; |
int route_id = 0; |
- TestingBrowserProcess* browser_process = |
- TestingBrowserProcess::GetGlobal(); |
- TestingProfileManager profile_manager(browser_process); |
- ASSERT_TRUE(profile_manager.SetUp()); |
- |
TestingProfile* second_profile = |
- profile_manager.CreateTestingProfile("SecondTestingProfile"); |
+ profile_manager_->CreateTestingProfile("SecondTestingProfile"); |
scoped_ptr<DesktopNotificationService> second_service( |
new DesktopNotificationService(second_profile, ui_manager_.get())); |
@@ -323,13 +386,13 @@ TEST_F(DesktopNotificationsTest, TestCancelByProfile) { |
params, process_id, route_id, |
DesktopNotificationService::PageNotification)); |
} |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
ui_manager_->CancelAllByProfile(second_profile); |
// Verify that the balloon collection only contains the single |
// notification from the first profile. |
- EXPECT_EQ(1, balloon_collection_->count()); |
+ EXPECT_EQ(1, GetNotificationCount()); |
} |
TEST_F(DesktopNotificationsTest, TestCancelBySourceOrigin) { |
@@ -360,15 +423,16 @@ TEST_F(DesktopNotificationsTest, TestCancelBySourceOrigin) { |
odd_params, process_id, route_id, |
DesktopNotificationService::PageNotification)); |
} |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
ui_manager_->CancelAllBySourceOrigin(odd_params.origin); |
// Verify that the balloon collection only contains the single |
// notification which is not from the canceled origin. |
- EXPECT_EQ(1, balloon_collection_->count()); |
+ EXPECT_EQ(1, GetNotificationCount()); |
} |
+#if !defined(RUN_MESSAGE_CENTER_TESTS) |
TEST_F(DesktopNotificationsTest, TestQueueing) { |
int process_id = 0; |
int route_id = 0; |
@@ -383,7 +447,7 @@ TEST_F(DesktopNotificationsTest, TestQueueing) { |
params, process_id, route_id, |
DesktopNotificationService::PageNotification)); |
} |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
// Build up an expected log of what should be happening. |
std::string expected_log; |
@@ -405,7 +469,7 @@ TEST_F(DesktopNotificationsTest, TestQueueing) { |
id <= kLotsOfToasts - balloon_collection_->max_balloon_count(); |
++id) { |
service_->CancelDesktopNotification(process_id, route_id, id); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
expected_log.append("notification closed by script\n"); |
expected_log.append("notification displayed\n"); |
EXPECT_EQ(balloon_collection_->max_balloon_count(), |
@@ -417,7 +481,7 @@ TEST_F(DesktopNotificationsTest, TestQueueing) { |
for (; id <= kLotsOfToasts; ++id) { |
service_->CancelDesktopNotification(process_id, route_id, id); |
expected_log.append("notification closed by script\n"); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
EXPECT_EQ(expected_log, log_output_); |
} |
} |
@@ -425,6 +489,7 @@ TEST_F(DesktopNotificationsTest, TestQueueing) { |
// Verify that the balloon collection is now empty. |
EXPECT_EQ(0, balloon_collection_->count()); |
} |
+#endif // !defined(RUN_MESSAGE_CENTER_TESTS) |
TEST_F(DesktopNotificationsTest, TestEarlyDestruction) { |
// Create some toasts and then prematurely delete the notification service, |
@@ -439,6 +504,8 @@ TEST_F(DesktopNotificationsTest, TestEarlyDestruction) { |
service_.reset(NULL); |
} |
+#if !defined(RUN_MESSAGE_CENTER_TESTS) |
+ |
TEST_F(DesktopNotificationsTest, TestUserInputEscaping) { |
// Create a test script with some HTML; assert that it doesn't get into the |
// data:// URL that's produced for the balloon. |
@@ -450,7 +517,7 @@ TEST_F(DesktopNotificationsTest, TestUserInputEscaping) { |
EXPECT_TRUE(service_->ShowDesktopNotification( |
params, 0, 0, DesktopNotificationService::PageNotification)); |
- base::MessageLoopForUI::current()->RunUntilIdle(); |
+ base::MessageLoopForUI::current()->Run(); |
EXPECT_EQ(1, balloon_collection_->count()); |
Balloon* balloon = (*balloon_collection_->balloons().begin()); |
GURL data_url = balloon->notification().content_url(); |
@@ -569,3 +636,5 @@ TEST_F(DesktopNotificationsTest, TestPositionPreference) { |
int current_x = (*balloons.begin())->GetPosition().x(); |
EXPECT_LT(current_x, last_x); |
} |
+ |
+#endif // !defined(RUN_MESSAGE_CENTER_TESTS) |