background_mode_manager_unittest.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 53345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/command_line.h" 63345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/scoped_ptr.h" 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/background_mode_manager.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/browser_list.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/chrome_switches.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/pref_names.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/test/testing_profile.h" 133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "testing/gmock/include/gmock/gmock.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "testing/gtest/include/gtest/gtest.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickusing testing::InSequence; 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass BackgroundModeManagerTest : public testing::Test { 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BackgroundModeManagerTest() {} 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ~BackgroundModeManagerTest() {} 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetUp() { 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick command_line_.reset(new CommandLine(CommandLine::ARGUMENTS_ONLY)); 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick command_line_->AppendSwitch(switches::kEnableBackgroundMode); 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<CommandLine> command_line_; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TestBackgroundModeManager : public BackgroundModeManager { 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager(Profile* profile, CommandLine* cl) 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : BackgroundModeManager(profile, cl) { 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD1(EnableLaunchOnStartup, void(bool)); 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD0(CreateStatusTrayIcon, void()); 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD0(RemoveStatusTrayIcon, void()); 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, RemoveStatusTrayIcon()); 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Call to AppLoaded() will cause the status tray to be created, then call to 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // unloaded will result in call to remove the icon. 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(BrowserList::WillKeepAlive()); 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUnloaded(); 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstall) { 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Call to AppInstalled() will cause chrome to be set to launch on startup, 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // and call to AppUninstalling() set chrome to not launch on startup. 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(true)); 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(false)); 633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, RemoveStatusTrayIcon()); 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppInstalled(); 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUninstalled(); 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUnloaded(); 683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 703345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundPrefDisabled) { 713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile.GetPrefs()->SetBoolean(prefs::kBackgroundModeEnabled, false); 743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Should not change launch on startup status when installing/uninstalling 763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // if background mode is disabled. 773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(true)).Times(0); 783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()).Times(0); 793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppInstalled(); 803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUninstalled(); 833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUnloaded(); 843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundPrefDynamicDisable) { 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(true)); 913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(false)); 933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, RemoveStatusTrayIcon()); 943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppInstalled(); 953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(BrowserList::WillKeepAlive()); 973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Disable status on the fly. 983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile.GetPrefs()->SetBoolean(prefs::kBackgroundModeEnabled, false); 993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Manually notify background mode manager that pref has changed 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundModePrefChanged(); 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundPrefDynamicEnable) { 1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile.GetPrefs()->SetBoolean(prefs::kBackgroundModeEnabled, false); 1093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(true)); 1103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppInstalled(); 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Enable status on the fly. 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick profile.GetPrefs()->SetBoolean(prefs::kBackgroundModeEnabled, true); 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(BrowserList::WillKeepAlive()); 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 118