15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/background/background_mode_manager.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_unittest_util.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BackgroundModeManagerTest : public testing::Test { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundModeManagerTest() 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : profile_manager_(TestingBrowserProcess::GetGlobal()) {} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~BackgroundModeManagerTest() {} 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM)); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(profile_manager_.SetUp()); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CommandLine> command_line_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfileManager profile_manager_; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestBackgroundModeManager : public BackgroundModeManager { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager( 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, ProfileInfoCache* cache, bool enabled) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : BackgroundModeManager(command_line, cache), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_(enabled), 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_count_(0), 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_app_count_(0), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) have_status_tray_(false), 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) launch_on_startup_(false) {} 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void EnableLaunchOnStartup(bool launch) OVERRIDE { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) launch_on_startup_ = launch; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CreateStatusTrayIcon() OVERRIDE { have_status_tray_ = true; } 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RemoveStatusTrayIcon() OVERRIDE { have_status_tray_ = false; } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBackgroundAppCount() const OVERRIDE { return app_count_; } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBackgroundAppCountForProfile( 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* const profile) const OVERRIDE { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_app_count_; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsBackgroundModePrefEnabled() const OVERRIDE { return enabled_; } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBackgroundAppCount(int count) { app_count_ = count; } 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBackgroundAppCountForProfile(int count) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_app_count_ = count; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetEnabled(bool enabled) { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_ = enabled; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnBackgroundModeEnabledPrefChanged(); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HaveStatusTray() const { return have_status_tray_; } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsLaunchOnStartup() const { return launch_on_startup_; } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled_; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int app_count_; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int profile_app_count_; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Flags to track whether we are launching on startup/have a status tray. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool have_status_tray_; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool launch_on_startup_; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void AssertBackgroundModeActive( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestBackgroundModeManager& manager) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.HaveStatusTray()); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.IsLaunchOnStartup()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static void AssertBackgroundModeInactive( 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestBackgroundModeManager& manager) { 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.HaveStatusTray()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.IsLaunchOnStartup()); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile = profile_manager_.CreateTestingProfile("p1"); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app load. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app unload. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while background mode is disabled should do nothing. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstallWhileDisabled) { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile = profile_manager_.CreateTestingProfile("p1"); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status tray icons will not be created, launch on startup status will not 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be modified. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-enable background mode. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while disabled should do nothing until background mode is 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// enabled.. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, EnableAfterBackgroundAppInstall) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile = profile_manager_.CreateTestingProfile("p1"); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnBackgroundAppInstalled does not actually add an app to the 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BackgroundApplicationListModel which would result in another 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // call to CreateStatusTray. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode - should hide status tray icon. 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - again, no status tray icon 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will show up since we didn't actually add anything to the list. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uninstall app, should hide status tray icon again. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, MultiProfile) { 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = profile_manager_.CreateTestingProfile("p1"); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = profile_manager_.CreateTestingProfile("p2"); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile1); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile1); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile, hsould show other status tray icon. 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(2); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide both status tray icons. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - should show both status tray icons. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There is still one background app alive 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile1); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheStorage) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = profile_manager_.CreateTestingProfile("p1"); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = profile_manager_.CreateTestingProfile("p2"); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile1); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProfileInfoCache* cache = profile_manager_.profile_info_cache(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile1); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile1); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t p1_index = cache->GetIndexOfProfileWithPath(profile1->GetPath()); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p1_index)); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t p2_index = cache->GetIndexOfProfileWithPath(profile1->GetPath()); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p2_index)); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even though neither has background status on, there should still be two 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profiles in the cache. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheObserver) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = profile_manager_.CreateTestingProfile("p1"); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile1); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile1); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileNameChanged( 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile1->GetPath(), 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile1)->name()); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("p1"), 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile1)->name()); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile2 = profile_manager_.CreateTestingProfile("p2"); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, manager.NumberOfBackgroundModeData()); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileAdded(profile2->GetPath()); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("p2"), 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile2)->name()); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileWillBeRemoved(profile2->GetPath()); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, manager.NumberOfBackgroundModeData()); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the background mode data we think is in the map actually is. 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(UTF8ToUTF16("p1"), 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile1)->name()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, DisableBackgroundModeUnderTestFlag) { 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = profile_manager_.CreateTestingProfile("p1"); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), true); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile1); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.ShouldBeInBackgroundMode()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundModeDisabledPreventsKeepAliveOnStartup) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestingProfile* profile1 = profile_manager_.CreateTestingProfile("p1"); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_.get(), profile_manager_.profile_info_cache(), false); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile1); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 313