| Index: chrome/browser/background/background_mode_manager.cc
|
| diff --git a/chrome/browser/background/background_mode_manager.cc b/chrome/browser/background/background_mode_manager.cc
|
| index 5bd2c6c5fa8186d2801aa1bd30ec1263283e66fd..117da57f8ae2147e02706c2163d56e44d18b2bb0 100644
|
| --- a/chrome/browser/background/background_mode_manager.cc
|
| +++ b/chrome/browser/background/background_mode_manager.cc
|
| @@ -28,6 +28,7 @@
|
| #include "chrome/browser/chrome_notification_types.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/lifetime/application_lifetime.h"
|
| +#include "chrome/browser/lifetime/browser_keep_alive.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_info_cache.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| @@ -121,6 +122,14 @@ void RecordMenuItemClick(MenuItem item) {
|
| UMA_HISTOGRAM_ENUMERATION("BackgroundMode.MenuItemClick", item,
|
| MENU_ITEM_NUM_STATES);
|
| }
|
| +
|
| +// Helper function for DecrementKeepAliveCountForStartup() to actually decrement
|
| +// the keep alive.
|
| +void DoDecrementKeepAliveCountForStartup(
|
| + scoped_ptr<browser_lifetime::ScopedKeepAlive> keep_alive) {
|
| + keep_alive.reset(); // Explicitly reset().
|
| +}
|
| +
|
| } // namespace
|
|
|
| BackgroundModeManager::BackgroundModeData::BackgroundModeData(
|
| @@ -310,10 +319,8 @@ BackgroundModeManager::BackgroundModeManager(
|
| status_icon_(NULL),
|
| context_menu_(NULL),
|
| in_background_mode_(false),
|
| - keep_alive_for_startup_(false),
|
| keep_alive_for_test_(false),
|
| background_mode_suspended_(false),
|
| - keeping_alive_(false),
|
| weak_factory_(this) {
|
| // We should never start up if there is no browser process or if we are
|
| // currently quitting.
|
| @@ -342,8 +349,7 @@ BackgroundModeManager::BackgroundModeManager(
|
| // extensions, at which point we should either run in background mode (if
|
| // there are background apps) or exit if there are none.
|
| if (command_line.HasSwitch(switches::kNoStartupWindow)) {
|
| - keep_alive_for_startup_ = true;
|
| - chrome::IncrementKeepAliveCount();
|
| + keep_alive_for_startup_.reset(new browser_lifetime::ScopedKeepAlive);
|
| } else {
|
| // Otherwise, start with background mode suspended in case we're launching
|
| // in a mode that doesn't open a browser window. It will be resumed when the
|
| @@ -680,7 +686,7 @@ void BackgroundModeManager::ExecuteCommand(int command_id, int event_flags) {
|
| // Background mode must already be enabled (as otherwise this menu would
|
| // not be visible).
|
| DCHECK(IsBackgroundModePrefEnabled());
|
| - DCHECK(chrome::WillKeepAlive());
|
| + DCHECK(browser_lifetime::WillKeepAlive());
|
|
|
| RecordMenuItemClick(MENU_ITEM_KEEP_RUNNING);
|
|
|
| @@ -708,12 +714,13 @@ void BackgroundModeManager::ExecuteCommand(int command_id, int event_flags) {
|
| // BackgroundModeManager, private
|
| void BackgroundModeManager::DecrementKeepAliveCountForStartup() {
|
| if (keep_alive_for_startup_) {
|
| - keep_alive_for_startup_ = false;
|
| // We call this via the message queue to make sure we don't try to end
|
| // keep-alive (which can shutdown Chrome) before the message loop has
|
| // started.
|
| base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::Bind(&chrome::DecrementKeepAliveCount));
|
| + FROM_HERE,
|
| + base::Bind(&DoDecrementKeepAliveCountForStartup,
|
| + base::Passed(&keep_alive_for_startup_)));
|
| }
|
| }
|
|
|
| @@ -792,9 +799,9 @@ void BackgroundModeManager::ResumeBackgroundMode() {
|
|
|
| void BackgroundModeManager::UpdateKeepAliveAndTrayIcon() {
|
| if (in_background_mode_ && !background_mode_suspended_) {
|
| - if (!keeping_alive_) {
|
| - keeping_alive_ = true;
|
| - chrome::IncrementKeepAliveCount();
|
| + if (!keep_alive_for_background_mode_) {
|
| + keep_alive_for_background_mode_.reset(
|
| + new browser_lifetime::ScopedKeepAlive);
|
|
|
| #if defined(OS_WIN)
|
| browser_watcher::ExitFunnel::RecordSingleEvent(
|
| @@ -806,9 +813,8 @@ void BackgroundModeManager::UpdateKeepAliveAndTrayIcon() {
|
| }
|
|
|
| RemoveStatusTrayIcon();
|
| - if (keeping_alive_) {
|
| - keeping_alive_ = false;
|
| - chrome::DecrementKeepAliveCount();
|
| + if (keep_alive_for_background_mode_) {
|
| + keep_alive_for_background_mode_.reset();
|
|
|
| #if defined(OS_WIN)
|
| browser_watcher::ExitFunnel::RecordSingleEvent(
|
| @@ -867,7 +873,7 @@ int BackgroundModeManager::GetBackgroundClientCount() const {
|
| // clients.
|
| for (const auto& it : background_mode_data_)
|
| count += it.second->GetBackgroundClientCount();
|
| - DCHECK(count >= 0);
|
| + DCHECK_GE(count, 0);
|
| return count;
|
| }
|
|
|
|
|