Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/background/background_mode_manager.h" | 5 #include "chrome/browser/background/background_mode_manager.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 #include "chrome/common/extensions/extension_constants.h" | 43 #include "chrome/common/extensions/extension_constants.h" |
| 44 #include "chrome/common/pref_names.h" | 44 #include "chrome/common/pref_names.h" |
| 45 #include "chrome/grit/chromium_strings.h" | 45 #include "chrome/grit/chromium_strings.h" |
| 46 #include "chrome/grit/generated_resources.h" | 46 #include "chrome/grit/generated_resources.h" |
| 47 #include "content/public/browser/notification_service.h" | 47 #include "content/public/browser/notification_service.h" |
| 48 #include "content/public/browser/user_metrics.h" | 48 #include "content/public/browser/user_metrics.h" |
| 49 #include "extensions/browser/extension_system.h" | 49 #include "extensions/browser/extension_system.h" |
| 50 #include "extensions/common/constants.h" | 50 #include "extensions/common/constants.h" |
| 51 #include "extensions/common/extension.h" | 51 #include "extensions/common/extension.h" |
| 52 #include "extensions/common/manifest_handlers/options_page_info.h" | 52 #include "extensions/common/manifest_handlers/options_page_info.h" |
| 53 #include "extensions/common/one_shot_event.h" | |
| 53 #include "extensions/common/permissions/permission_set.h" | 54 #include "extensions/common/permissions/permission_set.h" |
| 54 #include "grit/chrome_unscaled_resources.h" | 55 #include "grit/chrome_unscaled_resources.h" |
| 55 #include "ui/base/l10n/l10n_util.h" | 56 #include "ui/base/l10n/l10n_util.h" |
| 56 #include "ui/base/resource/resource_bundle.h" | 57 #include "ui/base/resource/resource_bundle.h" |
| 57 | 58 |
| 58 #if defined(OS_WIN) | 59 #if defined(OS_WIN) |
| 59 #include "components/browser_watcher/exit_funnel_win.h" | 60 #include "components/browser_watcher/exit_funnel_win.h" |
| 60 #endif | 61 #endif |
| 61 | 62 |
| 62 using base::UserMetricsAction; | 63 using base::UserMetricsAction; |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 246 const base::CommandLine& command_line, | 247 const base::CommandLine& command_line, |
| 247 ProfileInfoCache* profile_cache) | 248 ProfileInfoCache* profile_cache) |
| 248 : profile_cache_(profile_cache), | 249 : profile_cache_(profile_cache), |
| 249 status_tray_(NULL), | 250 status_tray_(NULL), |
| 250 status_icon_(NULL), | 251 status_icon_(NULL), |
| 251 context_menu_(NULL), | 252 context_menu_(NULL), |
| 252 in_background_mode_(false), | 253 in_background_mode_(false), |
| 253 keep_alive_for_startup_(false), | 254 keep_alive_for_startup_(false), |
| 254 keep_alive_for_test_(false), | 255 keep_alive_for_test_(false), |
| 255 background_mode_suspended_(false), | 256 background_mode_suspended_(false), |
| 256 keeping_alive_(false) { | 257 keeping_alive_(false), |
| 258 weak_factory_(this) { | |
| 257 // We should never start up if there is no browser process or if we are | 259 // We should never start up if there is no browser process or if we are |
| 258 // currently quitting. | 260 // currently quitting. |
| 259 CHECK(g_browser_process != NULL); | 261 CHECK(g_browser_process != NULL); |
| 260 CHECK(!browser_shutdown::IsTryingToQuit()); | 262 CHECK(!browser_shutdown::IsTryingToQuit()); |
| 261 | 263 |
| 262 // Add self as an observer for the profile info cache so we know when profiles | 264 // Add self as an observer for the profile info cache so we know when profiles |
| 263 // are deleted and their names change. | 265 // are deleted and their names change. |
| 264 profile_cache_->AddObserver(this); | 266 profile_cache_->AddObserver(this); |
| 265 | 267 |
| 266 RecordAutoLaunchState(command_line); | 268 RecordAutoLaunchState(command_line); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 343 // Initially set the name for this background mode data. | 345 // Initially set the name for this background mode data. |
| 344 size_t index = profile_cache_->GetIndexOfProfileWithPath(profile->GetPath()); | 346 size_t index = profile_cache_->GetIndexOfProfileWithPath(profile->GetPath()); |
| 345 base::string16 name = l10n_util::GetStringUTF16(IDS_PROFILES_DEFAULT_NAME); | 347 base::string16 name = l10n_util::GetStringUTF16(IDS_PROFILES_DEFAULT_NAME); |
| 346 if (index != std::string::npos) | 348 if (index != std::string::npos) |
| 347 name = profile_cache_->GetNameOfProfileAtIndex(index); | 349 name = profile_cache_->GetNameOfProfileAtIndex(index); |
| 348 bmd->SetName(name); | 350 bmd->SetName(name); |
| 349 | 351 |
| 350 // Check for the presence of background apps after all extensions have been | 352 // Check for the presence of background apps after all extensions have been |
| 351 // loaded, to handle the case where an extension has been manually removed | 353 // loaded, to handle the case where an extension has been manually removed |
| 352 // while Chrome was not running. | 354 // while Chrome was not running. |
| 353 registrar_.Add(this, | 355 extensions::ExtensionSystem::Get(profile)->ready().Post( |
| 354 extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED, | 356 FROM_HERE, |
| 355 content::Source<Profile>(profile)); | 357 base::Bind(&BackgroundModeManager::OnExtensionsReady, |
| 358 weak_factory_.GetWeakPtr())); | |
| 356 | 359 |
| 357 bmd->applications_->AddObserver(this); | 360 bmd->applications_->AddObserver(this); |
| 358 | 361 |
| 359 // If we're adding a new profile and running in multi-profile mode, this new | 362 // If we're adding a new profile and running in multi-profile mode, this new |
| 360 // profile should be added to the status icon if one currently exists. | 363 // profile should be added to the status icon if one currently exists. |
| 361 if (in_background_mode_ && status_icon_) | 364 if (in_background_mode_ && status_icon_) |
| 362 UpdateStatusTrayIconContextMenu(); | 365 UpdateStatusTrayIconContextMenu(); |
| 363 } | 366 } |
| 364 | 367 |
| 365 // static | 368 // static |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 378 return background_mode_data_.size(); | 381 return background_mode_data_.size(); |
| 379 } | 382 } |
| 380 | 383 |
| 381 /////////////////////////////////////////////////////////////////////////////// | 384 /////////////////////////////////////////////////////////////////////////////// |
| 382 // BackgroundModeManager, content::NotificationObserver overrides | 385 // BackgroundModeManager, content::NotificationObserver overrides |
| 383 void BackgroundModeManager::Observe( | 386 void BackgroundModeManager::Observe( |
| 384 int type, | 387 int type, |
| 385 const content::NotificationSource& source, | 388 const content::NotificationSource& source, |
| 386 const content::NotificationDetails& details) { | 389 const content::NotificationDetails& details) { |
| 387 switch (type) { | 390 switch (type) { |
| 388 case extensions::NOTIFICATION_EXTENSIONS_READY_DEPRECATED: | |
| 389 // Extensions are loaded, so we don't need to manually keep the browser | |
|
Lei Zhang
2015/05/06 21:35:49
Can you preseve the comment in the new code?
Pranay
2015/05/07 03:24:46
Done.
| |
| 390 // process alive any more when running in no-startup-window mode. | |
| 391 DecrementKeepAliveCountForStartup(); | |
| 392 break; | |
| 393 case chrome::NOTIFICATION_APP_TERMINATING: | 391 case chrome::NOTIFICATION_APP_TERMINATING: |
| 394 // Make sure we aren't still keeping the app alive (only happens if we | 392 // Make sure we aren't still keeping the app alive (only happens if we |
| 395 // don't receive an EXTENSIONS_READY notification for some reason). | 393 // don't receive an EXTENSIONS_READY notification for some reason). |
| 396 DecrementKeepAliveCountForStartup(); | 394 DecrementKeepAliveCountForStartup(); |
| 397 // Performing an explicit shutdown, so exit background mode (does nothing | 395 // Performing an explicit shutdown, so exit background mode (does nothing |
| 398 // if we aren't in background mode currently). | 396 // if we aren't in background mode currently). |
| 399 EndBackgroundMode(); | 397 EndBackgroundMode(); |
| 400 // Shutting down, so don't listen for any more notifications so we don't | 398 // Shutting down, so don't listen for any more notifications so we don't |
| 401 // try to re-enter/exit background mode again. | 399 // try to re-enter/exit background mode again. |
| 402 registrar_.RemoveAll(); | 400 registrar_.RemoveAll(); |
| 403 for (BackgroundModeInfoMap::iterator it = | 401 for (BackgroundModeInfoMap::iterator it = |
| 404 background_mode_data_.begin(); | 402 background_mode_data_.begin(); |
| 405 it != background_mode_data_.end(); | 403 it != background_mode_data_.end(); |
| 406 ++it) { | 404 ++it) { |
| 407 it->second->applications_->RemoveObserver(this); | 405 it->second->applications_->RemoveObserver(this); |
| 408 } | 406 } |
| 409 break; | 407 break; |
| 410 default: | 408 default: |
| 411 NOTREACHED(); | 409 NOTREACHED(); |
| 412 break; | 410 break; |
| 413 } | 411 } |
| 414 } | 412 } |
| 415 | 413 |
| 414 void BackgroundModeManager::OnExtensionsReady() { | |
| 415 DecrementKeepAliveCountForStartup(); | |
| 416 } | |
| 417 | |
| 416 void BackgroundModeManager::OnBackgroundModeEnabledPrefChanged() { | 418 void BackgroundModeManager::OnBackgroundModeEnabledPrefChanged() { |
| 417 if (IsBackgroundModePrefEnabled()) | 419 if (IsBackgroundModePrefEnabled()) |
| 418 EnableBackgroundMode(); | 420 EnableBackgroundMode(); |
| 419 else | 421 else |
| 420 DisableBackgroundMode(); | 422 DisableBackgroundMode(); |
| 421 } | 423 } |
| 422 | 424 |
| 423 /////////////////////////////////////////////////////////////////////////////// | 425 /////////////////////////////////////////////////////////////////////////////// |
| 424 // BackgroundModeManager, BackgroundApplicationListModel::Observer overrides | 426 // BackgroundModeManager, BackgroundApplicationListModel::Observer overrides |
| 425 void BackgroundModeManager::OnApplicationDataChanged( | 427 void BackgroundModeManager::OnApplicationDataChanged( |
| (...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 900 } | 902 } |
| 901 } | 903 } |
| 902 return profile_it; | 904 return profile_it; |
| 903 } | 905 } |
| 904 | 906 |
| 905 bool BackgroundModeManager::IsBackgroundModePrefEnabled() const { | 907 bool BackgroundModeManager::IsBackgroundModePrefEnabled() const { |
| 906 PrefService* service = g_browser_process->local_state(); | 908 PrefService* service = g_browser_process->local_state(); |
| 907 DCHECK(service); | 909 DCHECK(service); |
| 908 return service->GetBoolean(prefs::kBackgroundModeEnabled); | 910 return service->GetBoolean(prefs::kBackgroundModeEnabled); |
| 909 } | 911 } |
| OLD | NEW |