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