background_mode_manager_unittest.cc revision 116680a4aac90f2aa7413d9095a592090648e557
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" 70f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "base/message_loop/message_loop.h" 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/background/background_mode_manager.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/browser_shutdown.h" 110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/extensions/extension_function_test_utils.h" 120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/lifetime/application_lifetime.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h" 160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/status_icons/status_icon_menu_model.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 210f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "content/public/test/test_browser_thread_bundle.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_system.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_unittest_util.h" 260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/message_center/message_center.h" 270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/user_manager.h" 300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class that tracks state transitions in BackgroundModeManager and 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// exposes them via getters. 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SimpleTestBackgroundModeManager : public BackgroundModeManager { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SimpleTestBackgroundModeManager( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine* command_line, ProfileInfoCache* cache) 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : BackgroundModeManager(command_line, cache), 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch have_status_tray_(false), 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch launch_on_startup_(false), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_shown_balloon_(false) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ResumeBackgroundMode(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void EnableLaunchOnStartup(bool launch) OVERRIDE { 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch launch_on_startup_ = launch; 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DisplayAppInstalledNotification( 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const extensions::Extension* extension) OVERRIDE { 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_shown_balloon_ = true; 560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void CreateStatusTrayIcon() OVERRIDE { have_status_tray_ = true; } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RemoveStatusTrayIcon() OVERRIDE { have_status_tray_ = false; } 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool HaveStatusTray() const { return have_status_tray_; } 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsLaunchOnStartup() const { return launch_on_startup_; } 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool HasShownBalloon() const { return has_shown_balloon_; } 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetHasShownBalloon(bool value) { has_shown_balloon_ = value; } 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Flags to track whether we are launching on startup/have a status tray. 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool have_status_tray_; 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool launch_on_startup_; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool has_shown_balloon_; 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(SimpleTestBackgroundModeManager); 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestStatusIcon : public StatusIcon { 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestStatusIcon() {} 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetImage(const gfx::ImageSkia& image) OVERRIDE {} 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetPressedImage(const gfx::ImageSkia& image) OVERRIDE {} 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetToolTip(const base::string16& tool_tip) OVERRIDE {} 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DisplayBalloon(const gfx::ImageSkia& icon, 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& title, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::string16& contents) OVERRIDE {} 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void UpdatePlatformContextMenu( 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StatusIconMenuModel* menu) OVERRIDE {} 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) private: 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TestStatusIcon); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// More complex test helper that exposes APIs for fine grained control of 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// things like the number of background applications. This allows writing 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// smaller tests that don't have to install/uninstall extensions. 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestBackgroundModeManager : public SimpleTestBackgroundModeManager { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* command_line, ProfileInfoCache* cache, bool enabled) 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : SimpleTestBackgroundModeManager(command_line, cache), 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_(enabled), 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) app_count_(0), 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_app_count_(0) { 1031e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) ResumeBackgroundMode(); 1041e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) } 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBackgroundAppCount() const OVERRIDE { return app_count_; } 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual int GetBackgroundAppCountForProfile( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* const profile) const OVERRIDE { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return profile_app_count_; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBackgroundAppCount(int count) { app_count_ = count; } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBackgroundAppCountForProfile(int count) { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_app_count_ = count; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetEnabled(bool enabled) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enabled_ = enabled; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnBackgroundModeEnabledPrefChanged(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsBackgroundModePrefEnabled() const OVERRIDE { return enabled_; } 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled_; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int app_count_; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int profile_app_count_; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(TestBackgroundModeManager); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid AssertBackgroundModeActive( 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestBackgroundModeManager& manager) { 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.HaveStatusTray()); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.IsLaunchOnStartup()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid AssertBackgroundModeInactive( 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestBackgroundModeManager& manager) { 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.HaveStatusTray()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.IsLaunchOnStartup()); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid AssertBackgroundModeSuspended( 1461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const TestBackgroundModeManager& manager) { 1471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 1481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_FALSE(manager.HaveStatusTray()); 1491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) EXPECT_TRUE(manager.IsLaunchOnStartup()); 1501e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 1511e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BackgroundModeManagerTest : public testing::Test { 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BackgroundModeManagerTest() {} 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~BackgroundModeManagerTest() {} 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUp() OVERRIDE { 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.reset(new CommandLine(CommandLine::NO_PROGRAM)); 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_manager_ = CreateTestingProfileManager(); 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_ = profile_manager_->CreateTestingProfile("p1"); 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<CommandLine> command_line_; 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> CreateExtension( 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::Location location, 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& data, 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& id) { 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::DictionaryValue> parsed_manifest( 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extension_function_test_utils::ParseDictionary(data)); 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return extension_function_test_utils::CreateExtension( 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch location, 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch parsed_manifest.get(), 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch id); 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // From views::MenuModelAdapter::IsCommandEnabled with modification. 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsCommandEnabled(ui::MenuModel* model, int id) const { 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int index = 0; 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (ui::MenuModel::GetModelAndIndexForCommandId(id, &model, &index)) 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return model->IsEnabledAt(index); 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return false; 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TestingProfileManager> profile_manager_; 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Test profile used by all tests - this is owned by profile_manager_. 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile_; 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TestingProfileManager> CreateTestingProfileManager() { 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<TestingProfileManager> profile_manager 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch (new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(profile_manager->SetUp()); 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return profile_manager.Pass(); 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundModeManagerTest); 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BackgroundModeManagerWithExtensionsTest 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : public BackgroundModeManagerTest { 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BackgroundModeManagerWithExtensionsTest() {} 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~BackgroundModeManagerWithExtensionsTest() {} 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetUp() OVERRIDE { 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BackgroundModeManagerTest::SetUp(); 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Aura clears notifications from the message center at shutdown. 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch message_center::MessageCenter::Initialize(); 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // BackgroundModeManager actually affects Chrome start/stop state, 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // tearing down our thread bundle before we've had chance to clean 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // everything up. Keeping Chrome alive prevents this. 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We aren't interested in if the keep alive works correctly in this test. 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::IncrementKeepAliveCount(); 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS) 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // On ChromeOS shutdown, HandleAppExitingForPlatform will call 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // chrome::DecrementKeepAliveCount because it assumes the aura shell 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // called chrome::IncrementKeepAliveCount. Simulate the call here. 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::IncrementKeepAliveCount(); 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create our test BackgroundModeManager. 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_.reset(new SimpleTestBackgroundModeManager( 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache())); 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->RegisterProfile(profile_); 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void TearDown() { 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Clean up the status icon. If this is not done before profile deletes, 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // the context menu updates will DCHECK with the now deleted profiles. 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StatusIcon* status_icon = manager_->status_icon_; 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->status_icon_ = NULL; 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch delete status_icon; 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We have to destroy the profiles now because we created them with real 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // thread state. This causes a lot of machinery to spin up that stops 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // working when we tear down our thread state at the end of the test. 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_manager_->DeleteAllTestingProfiles(); 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // We're getting ready to shutdown the message loop. Clear everything out! 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::MessageLoop::current()->RunUntilIdle(); 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Matching the call to IncrementKeepAliveCount in SetUp(). 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chrome::DecrementKeepAliveCount(); 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // SimpleTestBackgroundModeManager has dependencies on the infrastructure. 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // It should get cleared first. 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_.reset(); 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The Profile Manager references the Browser Process. 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The Browser Process references the Notification UI Manager. 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The Notification UI Manager references the Message Center. 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // As a result, we have to clear the browser process state here 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // before tearing down the Message Center. 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_manager_.reset(); 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Message Center shutdown must occur after the DecrementKeepAliveCount 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // because DecrementKeepAliveCount will end up referencing the message 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // center during cleanup. 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch message_center::MessageCenter::Shutdown(); 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Clear the shutdown flag to isolate the remaining effect of this test. 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch browser_shutdown::SetTryingToQuit(false); 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch protected: 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<SimpleTestBackgroundModeManager> manager_; 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Required for extension service. 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS) 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ChromeOS needs extra services to run in the following order. 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestCrosSettings test_cros_settings_; 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestUserManager test_user_manager_; 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundModeManagerWithExtensionsTest); 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app load. 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2981e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SuspendBackgroundMode(); 2991e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeSuspended(manager); 3001e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.ResumeBackgroundMode(); 3011e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app unload. 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3061e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3071e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SuspendBackgroundMode(); 3081e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3091e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Mimic app load while suspended, e.g. from sync. This should enable and 3111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // resume background mode. 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SetBackgroundAppCount(1); 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeActive(manager); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while background mode is disabled should do nothing. 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstallWhileDisabled) { 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode. 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status tray icons will not be created, launch on startup status will not 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be modified. 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-enable background mode. 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while disabled should do nothing until background mode is 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// enabled.. 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, EnableAfterBackgroundAppInstall) { 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnBackgroundAppInstalled does not actually add an app to the 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BackgroundApplicationListModel which would result in another 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // call to CreateStatusTray. 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode - should hide status tray icon. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - again, no status tray icon 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will show up since we didn't actually add anything to the list. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uninstall app, should hide status tray icon again. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, MultiProfile) { 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile, hsould show other status tray icon. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(2); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide both status tray icons. 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - should show both status tray icons. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There is still one background app alive 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheStorage) { 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileInfoCache* cache = profile_manager_->profile_info_cache(); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t p1_index = cache->GetIndexOfProfileWithPath(profile_->GetPath()); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p1_index)); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t p2_index = cache->GetIndexOfProfileWithPath(profile_->GetPath()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p2_index)); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even though neither has background status on, there should still be two 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profiles in the cache. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheObserver) { 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileNameChanged( 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetPath(), 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p1"), 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 484a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, manager.NumberOfBackgroundModeData()); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileAdded(profile2->GetPath()); 4905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p2"), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile2)->name()); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileWillBeRemoved(profile2->GetPath()); 494a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Should still be in background mode after deleting profile. 495a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, manager.NumberOfBackgroundModeData()); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the background mode data we think is in the map actually is. 4995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p1"), 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 503a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, DeleteBackgroundProfile) { 504a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Tests whether deleting the only profile when it is a BG profile works 505a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // or not (http://crbug.com/346214). 506a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TestBackgroundModeManager manager( 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 510a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 511a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Install app, should show status tray icon. 512a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 513a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCount(1); 514a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 516a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.OnProfileNameChanged( 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetPath(), 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 521a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 522a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCount(0); 523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnProfileWillBeRemoved(profile_->GetPath()); 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, DisableBackgroundModeUnderTestFlag) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.ShouldBeInBackgroundMode()); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundModeDisabledPreventsKeepAliveOnStartup) { 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), false); 543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5460f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 547116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, BackgroundMenuGeneration) { 5480f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> component_extension( 5490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMPONENT, 5510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Component Extension\"," 5520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5540f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]}", 5550f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-1")); 5560f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> component_extension_with_options( 5580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMPONENT, 5600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Component Extension with Options\"," 5610f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]," 5640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"options_page\": \"test.html\"}", 5650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-2")); 5660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension( 5680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMMAND_LINE, 5700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Regular Extension\", " 5710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]}", 5740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-3")); 5750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension_with_options( 5770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMMAND_LINE, 5790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Regular Extension with Options\"," 5800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]," 5830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"options_page\": \"test.html\"}", 5840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-4")); 5850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 5880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CommandLine::ForCurrentProcess(), 5890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::FilePath(), 5900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false); 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 5930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->Init(); 5940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->AddComponentExtension(component_extension); 5960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->AddComponentExtension(component_extension_with_options); 5970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->AddExtension(regular_extension); 5980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->AddExtension(regular_extension_with_options); 5990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<StatusIconMenuModel> menu(new StatusIconMenuModel(NULL)); 6010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<StatusIconMenuModel> submenu(new StatusIconMenuModel(NULL)); 6020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) BackgroundModeManager::BackgroundModeData* bmd = 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->GetBackgroundModeData(profile_); 6040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bmd->BuildProfileMenu(submenu.get(), menu.get()); 6050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(0) == 6075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 6080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_FALSE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(0))); 6090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(1) == 6115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension with Options")); 6120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(1))); 6130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(2) == 6155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 6160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(2))); 6170f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(3) == 6195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 6200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(3))); 621f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 622f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 623116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BackgroundMenuGenerationMultipleProfile) { 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 626f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> component_extension( 627f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 628f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMPONENT, 629f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Component Extension\"," 630f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 631f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 632f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]}", 633f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-1")); 634f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> component_extension_with_options( 636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 637f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMPONENT, 638f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Component Extension with Options\"," 639f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]," 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"options_page\": \"test.html\"}", 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-2")); 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension( 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMMAND_LINE, 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Regular Extension\", " 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]}", 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-3")); 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension_with_options( 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMMAND_LINE, 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Regular Extension with Options\"," 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]," 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"options_page\": \"test.html\"}", 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-4")); 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CommandLine::ForCurrentProcess(), 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false); 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service1 = 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->Init(); 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->AddComponentExtension(component_extension); 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->AddComponentExtension(component_extension_with_options); 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->AddExtension(regular_extension); 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->AddExtension(regular_extension_with_options); 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 679f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionSystem::Get(profile2))->CreateExtensionService( 680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CommandLine::ForCurrentProcess(), 681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false); 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service2 = 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile2)->extension_service(); 685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service2->Init(); 686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 687f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service2->AddComponentExtension(component_extension); 688f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service2->AddExtension(regular_extension); 689f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service2->AddExtension(regular_extension_with_options); 690f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->RegisterProfile(profile2); 692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->status_icon_ = new TestStatusIcon(); 694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->UpdateStatusTrayIconContextMenu(); 695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StatusIconMenuModel* context_menu = manager_->context_menu_; 696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu != NULL); 697f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 698f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Background Profile Enable Checks 6995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(context_menu->GetLabelAt(3) == base::UTF8ToUTF16("p1")); 700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 701f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_menu->IsCommandIdEnabled(context_menu->GetCommandIdAt(3))); 702f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu->GetCommandIdAt(3) == 4); 703f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(context_menu->GetLabelAt(4) == base::UTF8ToUTF16("p2")); 705f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_menu->IsCommandIdEnabled(context_menu->GetCommandIdAt(4))); 707f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu->GetCommandIdAt(4) == 8); 708f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 709f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Profile 1 Submenu Checks 710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) StatusIconMenuModel* profile1_submenu = 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<StatusIconMenuModel*>(context_menu->GetSubmenuModelAt(3)); 712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 713f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(0) == 7145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE( 716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(0))); 718f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(0) == 0); 719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(1) == 7215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension with Options")); 722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(1))); 725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(1) == 1); 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(2) == 7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(2))); 732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(2) == 2); 733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(3) == 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(3))); 739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(3) == 3); 740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Profile 2 Submenu Checks 742f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) StatusIconMenuModel* profile2_submenu = 743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<StatusIconMenuModel*>(context_menu->GetSubmenuModelAt(4)); 744f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(0) == 7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE( 748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 749f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(0))); 750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(0) == 5); 751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(1) == 7535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(1))); 757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(1) == 6); 758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(2) == 7605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(2))); 764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(2) == 7); 765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Model Adapter Checks for crbug.com/315164 767f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // P1: Profile 1 Menu Item 768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // P2: Profile 2 Menu Item 769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // CE: Component Extension Menu Item 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // CEO: Component Extenison with Options Menu Item 771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // RE: Regular Extension Menu Item 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // REO: Regular Extension with Options Menu Item 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(IsCommandEnabled(context_menu, 0)); // P1 - CE 774f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 1)); // P1 - CEO 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 2)); // P1 - RE 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 3)); // P1 - REO 777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 4)); // P1 778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(IsCommandEnabled(context_menu, 5)); // P2 - CE 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 6)); // P2 - RE 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 7)); // P2 - REO 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 8)); // P2 782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 784116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, BalloonDisplay) { 785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> bg_ext( 786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Background Extension\", " 789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"1.0\"," 790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-1")); 793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> upgraded_bg_ext( 795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Background Extension\", " 798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"2.0\"," 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-1")); 802f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> no_bg_ext( 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Regular Extension\", " 807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"1.0\"," 808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": []}", 810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-2")); 811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> upgraded_no_bg_ext_has_bg( 813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Regular Extension\", " 816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"2.0\"," 817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-2")); 820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static_cast<extensions::TestExtensionSystem*>( 822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess(), 824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath(), 825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = 828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service->is_ready()); 830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->Init(); 831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(service->is_ready()); 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->status_icon_ = new TestStatusIcon(); 833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->UpdateStatusTrayIconContextMenu(); 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adding a background extension should show the balloon. 836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->AddExtension(bg_ext); 838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(manager_->HasShownBalloon()); 839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adding an extension without background should not show the balloon. 841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->SetHasShownBalloon(false); 842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->AddExtension(no_bg_ext); 843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Upgrading an extension that has background should not reshow the balloon. 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->AddExtension(upgraded_bg_ext); 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Upgrading an extension that didn't have background to one that does should 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // show the balloon. 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->AddExtension(upgraded_no_bg_ext_has_bg); 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(manager_->HasShownBalloon()); 8530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 854