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" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/extension_prefs.h" 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_system.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/image/image_unittest_util.h" 270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "ui/message_center/message_center.h" 280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 290f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#if defined(OS_CHROMEOS) 306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" 310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 330f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)#endif 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Helper class that tracks state transitions in BackgroundModeManager and 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// exposes them via getters. 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass SimpleTestBackgroundModeManager : public BackgroundModeManager { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch SimpleTestBackgroundModeManager( 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine* command_line, ProfileInfoCache* cache) 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : BackgroundModeManager(command_line, cache), 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch have_status_tray_(false), 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch launch_on_startup_(false), 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_shown_balloon_(false) { 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ResumeBackgroundMode(); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void EnableLaunchOnStartup(bool launch) OVERRIDE { 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch launch_on_startup_ = launch; 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void DisplayAppInstalledNotification( 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const extensions::Extension* extension) OVERRIDE { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch has_shown_balloon_ = true; 570f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void CreateStatusTrayIcon() OVERRIDE { have_status_tray_ = true; } 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void RemoveStatusTrayIcon() OVERRIDE { have_status_tray_ = false; } 600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool HaveStatusTray() const { return have_status_tray_; } 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool IsLaunchOnStartup() const { return launch_on_startup_; } 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool HasShownBalloon() const { return has_shown_balloon_; } 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void SetHasShownBalloon(bool value) { has_shown_balloon_ = value; } 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Flags to track whether we are launching on startup/have a status tray. 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool have_status_tray_; 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool launch_on_startup_; 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool has_shown_balloon_; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(SimpleTestBackgroundModeManager); 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass TestStatusIcon : public StatusIcon { 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestStatusIcon() {} 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void SetImage(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 2715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void AddEphemeralApp(const extensions::Extension* extension, 2725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionService* service) { 2735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionPrefs* prefs = 2745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::ExtensionPrefs::Get(service->profile()); 2755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ASSERT_TRUE(prefs); 2765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) prefs->OnExtensionInstalled(extension, 2775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::Extension::ENABLED, 2785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) syncer::StringOrdinal(), 2795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::kInstallFlagIsEphemeral, 2805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) std::string()); 2815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 2825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) service->AddExtension(extension); 2835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 2845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Required for extension service. 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_CHROMEOS) 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ChromeOS needs extra services to run in the following order. 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestCrosSettings test_cros_settings_; 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch chromeos::ScopedTestUserManager test_user_manager_; 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(BackgroundModeManagerWithExtensionsTest); 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) { 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app load. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SuspendBackgroundMode(); 3131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeSuspended(manager); 3141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.ResumeBackgroundMode(); 3151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Mimic app unload. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3201e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SuspendBackgroundMode(); 3221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // Mimic app load while suspended, e.g. from sync. This should enable and 3251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // resume background mode. 3261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) manager.SetBackgroundAppCount(1); 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) AssertBackgroundModeActive(manager); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while background mode is disabled should do nothing. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, BackgroundAppInstallUninstallWhileDisabled) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Status tray icons will not be created, launch on startup status will not 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be modified. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-enable background mode. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// App installs while disabled should do nothing until background mode is 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// enabled.. 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, EnableAfterBackgroundAppInstall) { 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnBackgroundAppInstalled does not actually add an app to the 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BackgroundApplicationListModel which would result in another 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // call to CreateStatusTray. 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn off background mode - should hide status tray icon. 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - again, no status tray icon 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will show up since we didn't actually add anything to the list. 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Uninstall app, should hide status tray icon again. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, MultiProfile) { 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile, hsould show other status tray icon. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(2); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should hide both status tray icons. 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.DisableBackgroundMode(); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Turn back on background mode - should show both status tray icons. 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(true); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.EnableBackgroundMode(); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // There is still one background app alive 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeActive(manager); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(0); 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AssertBackgroundModeInactive(manager); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheStorage) { 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProfileInfoCache* cache = profile_manager_->profile_info_cache(); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app for other profile. 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(0)); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(cache->GetBackgroundStatusOfProfileAtIndex(1)); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t p1_index = cache->GetIndexOfProfileWithPath(profile_->GetPath()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p1_index)); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnApplicationListChanged(profile2); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t p2_index = cache->GetIndexOfProfileWithPath(profile_->GetPath()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(cache->GetBackgroundStatusOfProfileAtIndex(p2_index)); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Even though neither has background status on, there should still be two 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // profiles in the cache. 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2u, cache->GetNumberOfProfiles()); 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, ProfileInfoCacheObserver) { 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Install app, should show status tray icon. 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCount(1); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileNameChanged( 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetPath(), 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p1"), 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 498a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.RegisterProfile(profile2); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, manager.NumberOfBackgroundModeData()); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileAdded(profile2->GetPath()); 5045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p2"), 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.GetBackgroundModeData(profile2)->name()); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.OnProfileWillBeRemoved(profile2->GetPath()); 508a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Should still be in background mode after deleting profile. 509a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, manager.NumberOfBackgroundModeData()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the background mode data we think is in the map actually is. 5135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(base::UTF8ToUTF16("p1"), 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 517a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, DeleteBackgroundProfile) { 518a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Tests whether deleting the only profile when it is a BG profile works 519a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // or not (http://crbug.com/346214). 520a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TestBackgroundModeManager manager( 521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 523a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 524a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 525a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Install app, should show status tray icon. 526a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.OnBackgroundAppInstalled(NULL); 527a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCount(1); 528a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(1); 529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnApplicationListChanged(profile_); 530a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 531a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.OnProfileNameChanged( 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetPath(), 533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.GetBackgroundModeData(profile_)->name()); 534a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 535a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(chrome::WillKeepAlive()); 536a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCount(0); 537a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) manager.SetBackgroundAppCountForProfile(0); 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.OnProfileWillBeRemoved(profile_->GetPath()); 539a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_FALSE(chrome::WillKeepAlive()); 540a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 541a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, DisableBackgroundModeUnderTestFlag) { 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), true); 546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(manager.ShouldBeInBackgroundMode()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager.SetEnabled(false); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(BackgroundModeManagerTest, 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BackgroundModeDisabledPreventsKeepAliveOnStartup) { 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line_->AppendSwitch(switches::kKeepAliveForTest); 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestBackgroundModeManager manager( 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line_.get(), profile_manager_->profile_info_cache(), false); 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager.RegisterProfile(profile_); 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(manager.ShouldBeInBackgroundMode()); 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 561116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, BackgroundMenuGeneration) { 5620f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> component_extension( 5630f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5640f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMPONENT, 5650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Component Extension\"," 5660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5670f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5680f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]}", 5690f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-1")); 5700f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> component_extension_with_options( 5720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5730f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMPONENT, 5740f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Component Extension with Options\"," 5750f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5770f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]," 5780f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"options_page\": \"test.html\"}", 5790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-2")); 5800f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension( 5820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMMAND_LINE, 5840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Regular Extension\", " 5850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]}", 5880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-3")); 5890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 5900f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension_with_options( 5910f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CreateExtension( 5920f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) extensions::Manifest::COMMAND_LINE, 5930f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "{\"name\": \"Regular Extension with Options\"," 5940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"version\": \"1.0\"," 5950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"manifest_version\": 2," 5960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"permissions\": [\"background\"]," 5970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "\"options_page\": \"test.html\"}", 5980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) "ID-4")); 5990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 6020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CommandLine::ForCurrentProcess(), 6030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) base::FilePath(), 6040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false); 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 6070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) service->Init(); 6080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddComponentExtension(component_extension.get()); 6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddComponentExtension(component_extension_with_options.get()); 6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(regular_extension.get()); 6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(regular_extension_with_options.get()); 6130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 6140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<StatusIconMenuModel> menu(new StatusIconMenuModel(NULL)); 6150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) scoped_ptr<StatusIconMenuModel> submenu(new StatusIconMenuModel(NULL)); 6160f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) BackgroundModeManager::BackgroundModeData* bmd = 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->GetBackgroundModeData(profile_); 6180f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bmd->BuildProfileMenu(submenu.get(), menu.get()); 6190f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(0) == 6215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 6220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_FALSE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(0))); 6230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(1) == 6255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension with Options")); 6260f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(1))); 6270f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6280f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(2) == 6295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 6300f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(2))); 6310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE( 6320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) submenu->GetLabelAt(3) == 6335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 6340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) EXPECT_TRUE(submenu->IsCommandIdEnabled(submenu->GetCommandIdAt(3))); 635f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 636f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 637116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch BackgroundMenuGenerationMultipleProfile) { 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2"); 640f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> component_extension( 641f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 642f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMPONENT, 643f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Component Extension\"," 644f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 645f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 646f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]}", 647f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-1")); 648f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 649f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> component_extension_with_options( 650f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 651f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMPONENT, 652f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Component Extension with Options\"," 653f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 654f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 655f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]," 656f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"options_page\": \"test.html\"}", 657f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-2")); 658f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 659f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension( 660f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 661f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMMAND_LINE, 662f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Regular Extension\", " 663f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 664f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 665f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]}", 666f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-3")); 667f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 668f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<extensions::Extension> regular_extension_with_options( 669f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CreateExtension( 670f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::Manifest::COMMAND_LINE, 671f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "{\"name\": \"Regular Extension with Options\"," 672f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"version\": \"1.0\"," 673f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"manifest_version\": 2," 674f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"permissions\": [\"background\"]," 675f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "\"options_page\": \"test.html\"}", 676f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) "ID-4")); 677f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 678f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 680f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CommandLine::ForCurrentProcess(), 681f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), 682f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false); 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service1 = 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 685f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service1->Init(); 686f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 6871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service1->AddComponentExtension(component_extension.get()); 6881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service1->AddComponentExtension(component_extension_with_options.get()); 6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service1->AddExtension(regular_extension.get()); 6901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service1->AddExtension(regular_extension_with_options.get()); 691f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 692f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 693f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) extensions::ExtensionSystem::Get(profile2))->CreateExtensionService( 694f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) CommandLine::ForCurrentProcess(), 695f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::FilePath(), 696f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) false); 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service2 = 698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile2)->extension_service(); 699f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) service2->Init(); 700f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service2->AddComponentExtension(component_extension.get()); 7021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service2->AddExtension(regular_extension.get()); 7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service2->AddExtension(regular_extension_with_options.get()); 704f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->RegisterProfile(profile2); 706f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->status_icon_ = new TestStatusIcon(); 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->UpdateStatusTrayIconContextMenu(); 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch StatusIconMenuModel* context_menu = manager_->context_menu_; 710f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu != NULL); 711f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 712f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Background Profile Enable Checks 7135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(context_menu->GetLabelAt(3) == base::UTF8ToUTF16("p1")); 714f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 715f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_menu->IsCommandIdEnabled(context_menu->GetCommandIdAt(3))); 716f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu->GetCommandIdAt(3) == 4); 717f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(context_menu->GetLabelAt(4) == base::UTF8ToUTF16("p2")); 719f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 720f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_menu->IsCommandIdEnabled(context_menu->GetCommandIdAt(4))); 721f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(context_menu->GetCommandIdAt(4) == 8); 722f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 723f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Profile 1 Submenu Checks 724f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) StatusIconMenuModel* profile1_submenu = 725f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<StatusIconMenuModel*>(context_menu->GetSubmenuModelAt(3)); 726f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 727f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(0) == 7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 729f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE( 730f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 731f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(0))); 732f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(0) == 0); 733f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 734f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(1) == 7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension with Options")); 736f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 737f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 738f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(1))); 739f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(1) == 1); 740f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 741f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(2) == 7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 743f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 744f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 745f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(2))); 746f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(2) == 2); 747f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 748f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetLabelAt(3) == 7495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 750f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 751f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->IsCommandIdEnabled( 752f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile1_submenu->GetCommandIdAt(3))); 753f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile1_submenu->GetCommandIdAt(3) == 3); 754f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 755f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Profile 2 Submenu Checks 756f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) StatusIconMenuModel* profile2_submenu = 757f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) static_cast<StatusIconMenuModel*>(context_menu->GetSubmenuModelAt(4)); 758f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 759f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(0) == 7605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Component Extension")); 761f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE( 762f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 763f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(0))); 764f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(0) == 5); 765f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 766f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(1) == 7675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension")); 768f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 769f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 770f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(1))); 771f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(1) == 6); 772f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 773f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetLabelAt(2) == 7745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16("Regular Extension with Options")); 775f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE( 776f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->IsCommandIdEnabled( 777f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) profile2_submenu->GetCommandIdAt(2))); 778f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(profile2_submenu->GetCommandIdAt(2) == 7); 779f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 780f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Model Adapter Checks for crbug.com/315164 781f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // P1: Profile 1 Menu Item 782f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // P2: Profile 2 Menu Item 783f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // CE: Component Extension Menu Item 784f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // CEO: Component Extenison with Options Menu Item 785f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // RE: Regular Extension Menu Item 786f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // REO: Regular Extension with Options Menu Item 787f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(IsCommandEnabled(context_menu, 0)); // P1 - CE 788f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 1)); // P1 - CEO 789f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 2)); // P1 - RE 790f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 3)); // P1 - REO 791f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 4)); // P1 792f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_FALSE(IsCommandEnabled(context_menu, 5)); // P2 - CE 793f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 6)); // P2 - RE 794f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 7)); // P2 - REO 795f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) EXPECT_TRUE(IsCommandEnabled(context_menu, 8)); // P2 796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 798116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BackgroundModeManagerWithExtensionsTest, BalloonDisplay) { 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> bg_ext( 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Background Extension\", " 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"1.0\"," 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-1")); 807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> upgraded_bg_ext( 809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Background Extension\", " 812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"2.0\"," 813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-1")); 816f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> no_bg_ext( 818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Regular Extension\", " 821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"1.0\"," 822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": []}", 824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-2")); 825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_refptr<extensions::Extension> upgraded_no_bg_ext_has_bg( 827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CreateExtension( 828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::Manifest::COMMAND_LINE, 829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "{\"name\": \"Regular Extension\", " 830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"version\": \"2.0\"," 831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"manifest_version\": 2," 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "\"permissions\": [\"background\"]}", 833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "ID-2")); 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<extensions::Extension> ephemeral_app( 8365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) CreateExtension( 8375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::Manifest::COMMAND_LINE, 8385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "{\"name\": \"Ephemeral App\", " 8395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "\"version\": \"1.0\"," 8405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "\"manifest_version\": 2," 8415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "\"permissions\": [\"pushMessaging\"]}", 8425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "ID-3")); 8435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch static_cast<extensions::TestExtensionSystem*>( 845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_))->CreateExtensionService( 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine::ForCurrentProcess(), 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::FilePath(), 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch false); 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions::ExtensionSystem::Get(profile_)->extension_service(); 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(!service->is_ready()); 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service->Init(); 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(service->is_ready()); 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->status_icon_ = new TestStatusIcon(); 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->UpdateStatusTrayIconContextMenu(); 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adding a background extension should show the balloon. 859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 8601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(bg_ext.get()); 861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(manager_->HasShownBalloon()); 862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adding an extension without background should not show the balloon. 864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manager_->SetHasShownBalloon(false); 8651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(no_bg_ext.get()); 866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Upgrading an extension that has background should not reshow the balloon. 8691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(upgraded_bg_ext.get()); 870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(manager_->HasShownBalloon()); 871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Upgrading an extension that didn't have background to one that does should 873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // show the balloon. 8741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service->AddExtension(upgraded_no_bg_ext_has_bg.get()); 875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(manager_->HasShownBalloon()); 8765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Installing an ephemeral app should not show the balloon. 8785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) manager_->SetHasShownBalloon(false); 8795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) AddEphemeralApp(ephemeral_app.get(), service); 8805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(manager_->HasShownBalloon()); 8815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 8825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Promoting the ephemeral app to a regular installed app should now show 8835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // the balloon. 8845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) service->PromoteEphemeralApp(ephemeral_app.get(), false /*from sync*/); 8855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(manager_->HasShownBalloon()); 8860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 887