1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 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" 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/background_mode_manager.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/ui/browser_list.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/chrome_switches.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process.h" 11dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process_test.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 18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass BackgroundModeManagerTest : public TestingBrowserProcessTest { 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick BackgroundModeManagerTest() {} 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ~BackgroundModeManagerTest() {} 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetUp() { 23731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM)); 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_ptr<CommandLine> command_line_; 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TestBackgroundModeManager : public BackgroundModeManager { 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager(Profile* profile, CommandLine* cl) 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick : BackgroundModeManager(profile, cl) { 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD1(EnableLaunchOnStartup, void(bool)); 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD0(CreateStatusTrayIcon, void()); 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick MOCK_METHOD0(RemoveStatusTrayIcon, void()); 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, RemoveStatusTrayIcon()); 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Call to AppLoaded() will cause the status tray to be created, then call to 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // unloaded will result in call to remove the icon. 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_TRUE(BrowserList::WillKeepAlive()); 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUnloaded(); 503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_FALSE(BrowserList::WillKeepAlive()); 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 533345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstall) { 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InSequence s; 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestingProfile profile; 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick TestBackgroundModeManager manager(&profile, command_line_.get()); 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Call to AppInstalled() will cause chrome to be set to launch on startup, 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // and call to AppUninstalled() set chrome to not launch on startup. 593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(true)); 603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, CreateStatusTrayIcon()); 613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick EXPECT_CALL(manager, RemoveStatusTrayIcon()); 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_CALL(manager, EnableLaunchOnStartup(false)); 63dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen manager.OnBackgroundAppInstalled(NULL); 643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppLoaded(); 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick manager.OnBackgroundAppUnloaded(); 66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick manager.OnBackgroundAppUninstalled(); 673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 68