Index: chrome/browser/background_mode_manager_unittest.cc |
=================================================================== |
--- chrome/browser/background_mode_manager_unittest.cc (revision 86624) |
+++ chrome/browser/background_mode_manager_unittest.cc (working copy) |
@@ -13,6 +13,7 @@ |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+using testing::_; |
using testing::AtLeast; |
using testing::InSequence; |
using testing::Return; |
@@ -29,12 +30,12 @@ |
class TestBackgroundModeManager : public BackgroundModeManager { |
public: |
- TestBackgroundModeManager(Profile* profile, CommandLine* cl) |
- : BackgroundModeManager(profile, cl), |
+ explicit TestBackgroundModeManager(CommandLine* command_line) |
+ : BackgroundModeManager(command_line), |
enabled_(true) {} |
MOCK_METHOD1(EnableLaunchOnStartup, void(bool)); |
- MOCK_METHOD0(CreateStatusTrayIcon, void()); |
- MOCK_METHOD0(RemoveStatusTrayIcon, void()); |
+ MOCK_METHOD1(CreateStatusTrayIcon, void(Profile*)); // NOLINT |
+ MOCK_METHOD1(RemoveStatusTrayIcon, void(Profile*)); // NOLINT |
virtual bool IsBackgroundModePrefEnabled() { return enabled_; } |
void SetEnabled(bool enabled) { enabled_ = enabled; } |
private: |
@@ -44,12 +45,14 @@ |
TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { |
InSequence s; |
TestingProfile profile; |
- TestBackgroundModeManager manager(&profile, command_line_.get()); |
- EXPECT_CALL(manager, CreateStatusTrayIcon()); |
- EXPECT_CALL(manager, RemoveStatusTrayIcon()); |
+ TestBackgroundModeManager manager(command_line_.get()); |
+ manager.RegisterProfile(&profile); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)); |
EXPECT_FALSE(BrowserList::WillKeepAlive()); |
- // Call to AppLoaded() will cause the status tray to be created, then call to |
- // unloaded will result in call to remove the icon. |
+ // Call to AppLoaded() will not cause the status tray to be created, |
+ // because no apps have been installed. However the call to AppUnloaded() |
+ // will result in a call RemoveStatusTrayIcon since it will try to unload |
+ // all icons now that there are no apps. |
manager.OnBackgroundAppLoaded(); |
EXPECT_TRUE(BrowserList::WillKeepAlive()); |
manager.OnBackgroundAppUnloaded(); |
@@ -59,35 +62,37 @@ |
TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstall) { |
InSequence s; |
TestingProfile profile; |
- TestBackgroundModeManager manager(&profile, command_line_.get()); |
+ TestBackgroundModeManager manager(command_line_.get()); |
+ manager.RegisterProfile(&profile); |
// Call to AppInstalled() will cause chrome to be set to launch on startup, |
// and call to AppUninstalled() set chrome to not launch on startup. |
EXPECT_CALL(manager, EnableLaunchOnStartup(true)); |
- EXPECT_CALL(manager, CreateStatusTrayIcon()); |
- EXPECT_CALL(manager, RemoveStatusTrayIcon()); |
+ EXPECT_CALL(manager, CreateStatusTrayIcon(_)); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)).Times(2); |
EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
- manager.OnBackgroundAppInstalled(NULL); |
+ manager.OnBackgroundAppInstalled(NULL, &profile); |
manager.OnBackgroundAppLoaded(); |
manager.OnBackgroundAppUnloaded(); |
- manager.OnBackgroundAppUninstalled(); |
-} |
+ manager.OnBackgroundAppUninstalled(&profile);} |
// App installs while disabled should do nothing. |
TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstallWhileDisabled) { |
InSequence s; |
TestingProfile profile; |
- TestBackgroundModeManager manager(&profile, command_line_.get()); |
+ TestBackgroundModeManager manager(command_line_.get()); |
+ manager.RegisterProfile(&profile); |
// Turn off background mode. |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)); |
manager.SetEnabled(false); |
manager.DisableBackgroundMode(); |
// Status tray icons will not be created, launch on startup status will be set |
// to "do not launch on startup". |
EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
- manager.OnBackgroundAppInstalled(NULL); |
+ manager.OnBackgroundAppInstalled(NULL, &profile); |
manager.OnBackgroundAppLoaded(); |
manager.OnBackgroundAppUnloaded(); |
- manager.OnBackgroundAppUninstalled(); |
+ manager.OnBackgroundAppUninstalled(&profile); |
// Re-enable background mode. |
manager.SetEnabled(true); |
@@ -99,29 +104,77 @@ |
TEST_F(BackgroundModeManagerTest, EnableAfterBackgroundAppInstall) { |
InSequence s; |
TestingProfile profile; |
- TestBackgroundModeManager manager(&profile, command_line_.get()); |
+ TestBackgroundModeManager manager(command_line_.get()); |
+ manager.RegisterProfile(&profile); |
EXPECT_CALL(manager, EnableLaunchOnStartup(true)); |
- EXPECT_CALL(manager, CreateStatusTrayIcon()); |
- EXPECT_CALL(manager, RemoveStatusTrayIcon()); |
+ EXPECT_CALL(manager, CreateStatusTrayIcon(_)); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)); |
EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
- EXPECT_CALL(manager, CreateStatusTrayIcon()); |
EXPECT_CALL(manager, EnableLaunchOnStartup(true)); |
- EXPECT_CALL(manager, RemoveStatusTrayIcon()); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)).Times(2); |
EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
// Install app, should show status tray icon. |
- manager.OnBackgroundAppInstalled(NULL); |
+ manager.OnBackgroundAppInstalled(NULL, &profile); |
+ // OnBackgroundAppInstalled does not actually add an app to the |
+ // BackgroundApplicationListModel which would result in another |
+ // call to CreateStatusTray. |
manager.OnBackgroundAppLoaded(); |
// Turn off background mode - should hide status tray icon. |
manager.SetEnabled(false); |
manager.DisableBackgroundMode(); |
- // Turn back on background mode - should show status tray icon. |
+ // Turn back on background mode - again, no status tray icon |
+ // will show up since we didn't actually add anything to the list. |
manager.SetEnabled(true); |
manager.EnableBackgroundMode(); |
// Uninstall app, should hide status tray icon again. |
manager.OnBackgroundAppUnloaded(); |
- manager.OnBackgroundAppUninstalled(); |
+ manager.OnBackgroundAppUninstalled(&profile); |
} |
+ |
+TEST_F(BackgroundModeManagerTest, MultiProfile) { |
+ InSequence s; |
+ TestingProfile profile1; |
+ TestingProfile profile2; |
+ TestBackgroundModeManager manager(command_line_.get()); |
+ manager.RegisterProfile(&profile1); |
+ manager.RegisterProfile(&profile2); |
+ EXPECT_CALL(manager, EnableLaunchOnStartup(true)); |
+ EXPECT_CALL(manager, CreateStatusTrayIcon(_)).Times(2); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)).Times(2); |
+ EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
+ EXPECT_CALL(manager, EnableLaunchOnStartup(true)); |
+ EXPECT_CALL(manager, RemoveStatusTrayIcon(_)).Times(4); |
+ EXPECT_CALL(manager, EnableLaunchOnStartup(false)); |
+ EXPECT_FALSE(BrowserList::WillKeepAlive()); |
+ |
+ // Install app, should show status tray icon. |
+ manager.OnBackgroundAppInstalled(NULL, &profile1); |
+ // OnBackgroundAppInstalled does not actually add an app to the |
+ // BackgroundApplicationListModel which would result in another |
+ // call to CreateStatusTray. |
+ manager.OnBackgroundAppLoaded(); |
+ |
+ // Install app for other profile, hsould show other status tray icon. |
+ manager.OnBackgroundAppInstalled(NULL, &profile2); |
+ manager.OnBackgroundAppLoaded(); |
+ |
+ // Should hide both status tray icons. |
+ manager.SetEnabled(false); |
+ manager.DisableBackgroundMode(); |
+ |
+ // Turn back on background mode - should show both status tray icons. |
+ manager.SetEnabled(true); |
+ manager.EnableBackgroundMode(); |
+ |
+ manager.OnBackgroundAppUnloaded(); |
+ manager.OnBackgroundAppUninstalled(&profile1); |
+ // There is still one background app alive |
+ EXPECT_TRUE(BrowserList::WillKeepAlive()); |
+ manager.OnBackgroundAppUnloaded(); |
+ manager.OnBackgroundAppUninstalled(&profile2); |
+ EXPECT_FALSE(BrowserList::WillKeepAlive()); |
+} |