1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/command_line.h" 6 #include "base/memory/scoped_ptr.h" 7 #include "chrome/browser/background_mode_manager.h" 8 #include "chrome/browser/ui/browser_list.h" 9 #include "chrome/common/chrome_switches.h" 10 #include "chrome/test/testing_browser_process.h" 11 #include "chrome/test/testing_browser_process_test.h" 12 #include "chrome/test/testing_profile.h" 13 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gtest/include/gtest/gtest.h" 15 16 using testing::InSequence; 17 18 class BackgroundModeManagerTest : public TestingBrowserProcessTest { 19 public: 20 BackgroundModeManagerTest() {} 21 ~BackgroundModeManagerTest() {} 22 void SetUp() { 23 command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM)); 24 } 25 scoped_ptr<CommandLine> command_line_; 26 }; 27 28 class TestBackgroundModeManager : public BackgroundModeManager { 29 public: 30 TestBackgroundModeManager(Profile* profile, CommandLine* cl) 31 : BackgroundModeManager(profile, cl) { 32 } 33 MOCK_METHOD1(EnableLaunchOnStartup, void(bool)); 34 MOCK_METHOD0(CreateStatusTrayIcon, void()); 35 MOCK_METHOD0(RemoveStatusTrayIcon, void()); 36 }; 37 38 TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 39 InSequence s; 40 TestingProfile profile; 41 TestBackgroundModeManager manager(&profile, command_line_.get()); 42 EXPECT_CALL(manager, CreateStatusTrayIcon()); 43 EXPECT_CALL(manager, RemoveStatusTrayIcon()); 44 EXPECT_FALSE(BrowserList::WillKeepAlive()); 45 // Call to AppLoaded() will cause the status tray to be created, then call to 46 // unloaded will result in call to remove the icon. 47 manager.OnBackgroundAppLoaded(); 48 EXPECT_TRUE(BrowserList::WillKeepAlive()); 49 manager.OnBackgroundAppUnloaded(); 50 EXPECT_FALSE(BrowserList::WillKeepAlive()); 51 } 52 53 TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstall) { 54 InSequence s; 55 TestingProfile profile; 56 TestBackgroundModeManager manager(&profile, command_line_.get()); 57 // Call to AppInstalled() will cause chrome to be set to launch on startup, 58 // and call to AppUninstalled() set chrome to not launch on startup. 59 EXPECT_CALL(manager, EnableLaunchOnStartup(true)); 60 EXPECT_CALL(manager, CreateStatusTrayIcon()); 61 EXPECT_CALL(manager, RemoveStatusTrayIcon()); 62 EXPECT_CALL(manager, EnableLaunchOnStartup(false)); 63 manager.OnBackgroundAppInstalled(NULL); 64 manager.OnBackgroundAppLoaded(); 65 manager.OnBackgroundAppUnloaded(); 66 manager.OnBackgroundAppUninstalled(); 67 } 68