| Index: chrome/browser/background/background_mode_manager_unittest.cc
 | 
| diff --git a/chrome/browser/background/background_mode_manager_unittest.cc b/chrome/browser/background/background_mode_manager_unittest.cc
 | 
| index c1f3de763fbabbc919f1676cb7d5c8b54264461c..9c9fe871b4eb268e9ea5244d8b9abe7beb571721 100644
 | 
| --- a/chrome/browser/background/background_mode_manager_unittest.cc
 | 
| +++ b/chrome/browser/background/background_mode_manager_unittest.cc
 | 
| @@ -22,6 +22,9 @@
 | 
|  #include "chrome/browser/extensions/extension_service.h"
 | 
|  #include "chrome/browser/extensions/test_extension_system.h"
 | 
|  #include "chrome/browser/lifetime/application_lifetime.h"
 | 
| +#include "chrome/browser/lifetime/keep_alive_registry.h"
 | 
| +#include "chrome/browser/lifetime/keep_alive_types.h"
 | 
| +#include "chrome/browser/lifetime/scoped_keep_alive.h"
 | 
|  #include "chrome/browser/profiles/profile_attributes_entry.h"
 | 
|  #include "chrome/browser/profiles/profile_attributes_storage.h"
 | 
|  #include "chrome/browser/status_icons/status_icon_menu_model.h"
 | 
| @@ -139,12 +142,12 @@ class TestStatusIcon : public StatusIcon {
 | 
|  };
 | 
|  
 | 
|  void AssertBackgroundModeActive(const TestBackgroundModeManager& manager) {
 | 
| -  EXPECT_TRUE(chrome::WillKeepAlive());
 | 
| +  EXPECT_TRUE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    EXPECT_TRUE(manager.HaveStatusTray());
 | 
|  }
 | 
|  
 | 
|  void AssertBackgroundModeInactive(const TestBackgroundModeManager& manager) {
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    EXPECT_FALSE(manager.HaveStatusTray());
 | 
|  }
 | 
|  
 | 
| @@ -236,18 +239,9 @@ class BackgroundModeManagerWithExtensionsTest : public testing::Test {
 | 
|      // Aura clears notifications from the message center at shutdown.
 | 
|      message_center::MessageCenter::Initialize();
 | 
|  
 | 
| -    // BackgroundModeManager actually affects Chrome start/stop state,
 | 
| -    // tearing down our thread bundle before we've had chance to clean
 | 
| -    // everything up. Keeping Chrome alive prevents this.
 | 
| -    // We aren't interested in if the keep alive works correctly in this test.
 | 
| -    chrome::IncrementKeepAliveCount();
 | 
| -
 | 
| -#if defined(OS_CHROMEOS)
 | 
| -    // On ChromeOS shutdown, HandleAppExitingForPlatform will call
 | 
| -    // chrome::DecrementKeepAliveCount because it assumes the aura shell
 | 
| -    // called chrome::IncrementKeepAliveCount. Simulate the call here.
 | 
| -    chrome::IncrementKeepAliveCount();
 | 
| -#endif
 | 
| +    test_keep_alive_.reset(
 | 
| +        new ScopedKeepAlive(KeepAliveOrigin::BACKGROUND_MODE_MANAGER,
 | 
| +                            KeepAliveRestartOption::DISABLED));
 | 
|  
 | 
|      // Create our test BackgroundModeManager.
 | 
|      manager_.reset(new TestBackgroundModeManager(
 | 
| @@ -274,8 +268,8 @@ class BackgroundModeManagerWithExtensionsTest : public testing::Test {
 | 
|  
 | 
|      // We're getting ready to shutdown the message loop. Clear everything out!
 | 
|      base::MessageLoop::current()->RunUntilIdle();
 | 
| -    // Matching the call to IncrementKeepAliveCount in SetUp().
 | 
| -    chrome::DecrementKeepAliveCount();
 | 
| +
 | 
| +    test_keep_alive_.reset();
 | 
|  
 | 
|      // TestBackgroundModeManager has dependencies on the infrastructure.
 | 
|      // It should get cleared first.
 | 
| @@ -288,9 +282,8 @@ class BackgroundModeManagerWithExtensionsTest : public testing::Test {
 | 
|      // before tearing down the Message Center.
 | 
|      profile_manager_.reset();
 | 
|  
 | 
| -    // Message Center shutdown must occur after the DecrementKeepAliveCount
 | 
| -    // because DecrementKeepAliveCount will end up referencing the message
 | 
| -    // center during cleanup.
 | 
| +    // Message Center shutdown must occur after the KeepAlive is released
 | 
| +    // because clearing it will end up referencing the message center.
 | 
|      message_center::MessageCenter::Shutdown();
 | 
|  
 | 
|      // Clear the shutdown flag to isolate the remaining effect of this test.
 | 
| @@ -329,6 +322,12 @@ class BackgroundModeManagerWithExtensionsTest : public testing::Test {
 | 
|    // Required for extension service.
 | 
|    content::TestBrowserThreadBundle thread_bundle_;
 | 
|  
 | 
| +  // BackgroundModeManager actually affects Chrome start/stop state,
 | 
| +  // tearing down our thread bundle before we've had chance to clean
 | 
| +  // everything up. Keeping Chrome alive prevents this.
 | 
| +  // We aren't interested in if the keep alive works correctly in this test.
 | 
| +  scoped_ptr<ScopedKeepAlive> test_keep_alive_;
 | 
| +
 | 
|  #if defined(OS_CHROMEOS)
 | 
|    // ChromeOS needs extra services to run in the following order.
 | 
|    chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
 | 
| @@ -344,7 +343,7 @@ TEST_F(BackgroundModeManagerTest, BackgroundAppLoadUnload) {
 | 
|    AdvancedTestBackgroundModeManager manager(
 | 
|        *command_line_, profile_manager_->profile_attributes_storage(), true);
 | 
|    manager.RegisterProfile(profile_);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|  
 | 
|    // Mimic app load.
 | 
|    EXPECT_CALL(manager, EnableLaunchOnStartup(true)).Times(Exactly(1));
 | 
| @@ -477,7 +476,7 @@ TEST_F(BackgroundModeManagerTest, MultiProfile) {
 | 
|        *command_line_, profile_manager_->profile_attributes_storage(), true);
 | 
|    manager.RegisterProfile(profile_);
 | 
|    manager.RegisterProfile(profile2);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|  
 | 
|    // Install app, should show status tray icon.
 | 
|    EXPECT_CALL(manager, EnableLaunchOnStartup(true)).Times(Exactly(1));
 | 
| @@ -528,7 +527,7 @@ TEST_F(BackgroundModeManagerTest, ProfileAttributesStorage) {
 | 
|    AdvancedTestBackgroundModeManager manager(*command_line_, storage, true);
 | 
|    manager.RegisterProfile(profile_);
 | 
|    manager.RegisterProfile(profile2);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    EXPECT_EQ(2u, storage->GetNumberOfProfiles());
 | 
|  
 | 
|    ProfileAttributesEntry* entry1;
 | 
| @@ -577,7 +576,7 @@ TEST_F(BackgroundModeManagerTest, ProfileAttributesStorageObserver) {
 | 
|    AdvancedTestBackgroundModeManager manager(
 | 
|        *command_line_, profile_manager_->profile_attributes_storage(), true);
 | 
|    manager.RegisterProfile(profile_);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|  
 | 
|    // Install app, should show status tray icon.
 | 
|    EXPECT_CALL(manager, EnableLaunchOnStartup(true)).Times(Exactly(1));
 | 
| @@ -595,7 +594,7 @@ TEST_F(BackgroundModeManagerTest, ProfileAttributesStorageObserver) {
 | 
|    EXPECT_EQ(base::UTF8ToUTF16("p1"),
 | 
|              manager.GetBackgroundModeData(profile_)->name());
 | 
|  
 | 
| -  EXPECT_TRUE(chrome::WillKeepAlive());
 | 
| +  EXPECT_TRUE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    TestingProfile* profile2 = profile_manager_->CreateTestingProfile("p2");
 | 
|    manager.RegisterProfile(profile2);
 | 
|    EXPECT_EQ(2, manager.NumberOfBackgroundModeData());
 | 
| @@ -606,7 +605,7 @@ TEST_F(BackgroundModeManagerTest, ProfileAttributesStorageObserver) {
 | 
|  
 | 
|    manager.OnProfileWillBeRemoved(profile2->GetPath());
 | 
|    // Should still be in background mode after deleting profile.
 | 
| -  EXPECT_TRUE(chrome::WillKeepAlive());
 | 
| +  EXPECT_TRUE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    EXPECT_EQ(1, manager.NumberOfBackgroundModeData());
 | 
|  
 | 
|    // Check that the background mode data we think is in the map actually is.
 | 
| @@ -620,7 +619,7 @@ TEST_F(BackgroundModeManagerTest, DeleteBackgroundProfile) {
 | 
|    AdvancedTestBackgroundModeManager manager(
 | 
|        *command_line_, profile_manager_->profile_attributes_storage(), true);
 | 
|    manager.RegisterProfile(profile_);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|  
 | 
|    // Install app, should show status tray icon.
 | 
|    EXPECT_CALL(manager, EnableLaunchOnStartup(true)).Times(Exactly(1));
 | 
| @@ -634,11 +633,11 @@ TEST_F(BackgroundModeManagerTest, DeleteBackgroundProfile) {
 | 
|        manager.GetBackgroundModeData(profile_)->name());
 | 
|  
 | 
|    EXPECT_CALL(manager, EnableLaunchOnStartup(false)).Times(Exactly(1));
 | 
| -  EXPECT_TRUE(chrome::WillKeepAlive());
 | 
| +  EXPECT_TRUE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|    manager.SetBackgroundClientCountForProfile(profile_, 0);
 | 
|    manager.OnProfileWillBeRemoved(profile_->GetPath());
 | 
|    Mock::VerifyAndClearExpectations(&manager);
 | 
| -  EXPECT_FALSE(chrome::WillKeepAlive());
 | 
| +  EXPECT_FALSE(KeepAliveRegistry::GetInstance()->IsKeepingAlive());
 | 
|  }
 | 
|  
 | 
|  TEST_F(BackgroundModeManagerTest, DisableBackgroundModeUnderTestFlag) {
 | 
| 
 |