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