Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(420)

Unified Diff: chrome/browser/browser_process_impl.cc

Issue 1803143002: Replace BrowserProces::AddRefModule/RemoveModule by ScopedKeepAlive (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/browser_process_impl.cc
diff --git a/chrome/browser/browser_process_impl.cc b/chrome/browser/browser_process_impl.cc
index 6417c8e046d6eb0001975f42885efefe22181433..73855a51060648bdcaebef3bc60d4ef39d69f85f 100644
--- a/chrome/browser/browser_process_impl.cc
+++ b/chrome/browser/browser_process_impl.cc
@@ -46,7 +46,6 @@
#include "chrome/browser/intranet_redirect_detector.h"
#include "chrome/browser/io_thread.h"
#include "chrome/browser/lifetime/application_lifetime.h"
-#include "chrome/browser/lifetime/keep_alive_registry.h"
#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
#include "chrome/browser/metrics/chrome_metrics_services_manager_client.h"
#include "chrome/browser/metrics/thread_watcher.h"
@@ -122,6 +121,7 @@
#endif
#if !defined(OS_ANDROID)
+#include "chrome/browser/lifetime/keep_alive_registry.h"
#include "chrome/browser/ui/user_manager.h"
#include "components/gcm_driver/gcm_client_factory.h"
#include "components/gcm_driver/gcm_desktop_utils.h"
@@ -190,8 +190,7 @@ BrowserProcessImpl::BrowserProcessImpl(
created_icon_manager_(false),
created_notification_ui_manager_(false),
created_safe_browsing_service_(false),
- module_ref_count_(0),
- did_start_(false),
+ shutting_down_(false),
tearing_down_(false),
download_status_updater_(new DownloadStatusUpdater),
local_state_task_runner_(local_state_task_runner),
@@ -243,9 +242,17 @@ BrowserProcessImpl::BrowserProcessImpl(
update_client::UpdateQueryParams::SetDelegate(
ChromeUpdateQueryParamsDelegate::GetInstance());
+
+#if !defined(OS_ANDROID)
+ KeepAliveRegistry::GetInstance()->AddObserver(this);
+#endif // !defined(OS_ANDROID)
}
BrowserProcessImpl::~BrowserProcessImpl() {
+#if !defined(OS_ANDROID)
+ KeepAliveRegistry::GetInstance()->RemoveObserver(this);
+#endif // !defined(OS_ANDROID)
+
tracked_objects::ThreadData::EnsureCleanupWasCalled(4);
g_browser_process = NULL;
@@ -362,57 +369,6 @@ void BrowserProcessImpl::PostDestroyThreads() {
}
#endif // !defined(OS_ANDROID)
-unsigned int BrowserProcessImpl::AddRefModule() {
- DCHECK(CalledOnValidThread());
-
- // CHECK(!IsShuttingDown());
- if (IsShuttingDown()) {
- // Copy the stacktrace which released the final reference onto our stack so
- // it will be available in the crash report for inspection.
- base::debug::StackTrace callstack = release_last_reference_callstack_;
- base::debug::Alias(&callstack);
- CHECK(false);
- }
-
- did_start_ = true;
- module_ref_count_++;
- return module_ref_count_;
-}
-
-unsigned int BrowserProcessImpl::ReleaseModule() {
- DCHECK(CalledOnValidThread());
- DCHECK_NE(0u, module_ref_count_);
- module_ref_count_--;
- if (0 == module_ref_count_) {
- release_last_reference_callstack_ = base::debug::StackTrace();
-
-#if defined(ENABLE_PRINTING)
- // Wait for the pending print jobs to finish. Don't do this later, since
- // this might cause a nested message loop to run, and we don't want pending
- // tasks to run once teardown has started.
- print_job_manager_->Shutdown();
-#endif
-
-#if defined(LEAK_SANITIZER)
- // Check for memory leaks now, before we start shutting down threads. Doing
- // this early means we won't report any shutdown-only leaks (as they have
- // not yet happened at this point).
- // If leaks are found, this will make the process exit immediately.
- __lsan_do_leak_check();
-#endif
-
- CHECK(base::MessageLoop::current()->is_running());
-
-#if defined(OS_MACOSX)
- base::MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(ChromeBrowserMainPartsMac::DidEndMainMessageLoop));
-#endif
- base::MessageLoop::current()->QuitWhenIdle();
- }
- return module_ref_count_;
-}
-
namespace {
// Used at the end of session to block the UI thread for completion of sentinel
@@ -689,7 +645,7 @@ bool BrowserProcessImpl::IsShuttingDown() {
DCHECK(CalledOnValidThread());
// TODO(crbug.com/560486): Fix the tests that make the check of
// |tearing_down_| necessary here.
- return (did_start_ && 0 == module_ref_count_) || tearing_down_;
+ return shutting_down_ || tearing_down_;
}
printing::PrintJobManager* BrowserProcessImpl::print_job_manager() {
@@ -976,6 +932,16 @@ void BrowserProcessImpl::ResourceDispatcherHostCreated() {
ApplyAllowCrossOriginAuthPromptPolicy();
}
+void BrowserProcessImpl::OnKeepAliveStateChanged(bool is_keeping_alive) {
+ if (is_keeping_alive)
+ Pin();
+ else
+ Unpin();
+}
+
+void BrowserProcessImpl::OnKeepAliveRestartStateChanged(bool can_restart){
+}
+
void BrowserProcessImpl::CreateWatchdogThread() {
DCHECK(!created_watchdog_thread_ && watchdog_thread_.get() == NULL);
created_watchdog_thread_ = true;
@@ -1237,6 +1203,52 @@ void BrowserProcessImpl::CacheDefaultWebClientState() {
#endif
}
+void BrowserProcessImpl::Pin() {
+ DCHECK(CalledOnValidThread());
+
+ // CHECK(!IsShuttingDown());
+ if (IsShuttingDown()) {
+ // Copy the stacktrace which released the final reference onto our stack so
+ // it will be available in the crash report for inspection.
+ base::debug::StackTrace callstack = release_last_reference_callstack_;
+ base::debug::Alias(&callstack);
+ CHECK(false);
+ }
+}
+
+void BrowserProcessImpl::Unpin() {
+ DCHECK(CalledOnValidThread());
+ release_last_reference_callstack_ = base::debug::StackTrace();
+
+ shutting_down_ = true;
+#if defined(ENABLE_PRINTING)
+ // Wait for the pending print jobs to finish. Don't do this later, since
+ // this might cause a nested message loop to run, and we don't want pending
+ // tasks to run once teardown has started.
+ print_job_manager_->Shutdown();
+#endif
+
+#if defined(LEAK_SANITIZER)
+ // Check for memory leaks now, before we start shutting down threads. Doing
+ // this early means we won't report any shutdown-only leaks (as they have
+ // not yet happened at this point).
+ // If leaks are found, this will make the process exit immediately.
+ __lsan_do_leak_check();
+#endif
+
+ CHECK(base::MessageLoop::current()->is_running());
+
+#if defined(OS_MACOSX)
+ base::MessageLoop::current()->PostTask(
+ FROM_HERE, base::Bind(ChromeBrowserMainPartsMac::DidEndMainMessageLoop));
+#endif
+ base::MessageLoop::current()->QuitWhenIdle();
+
+#if !defined(OS_ANDROID)
+ chrome::ShutdownIfNeeded();
+#endif // !defined(OS_ANDROID)
+}
+
// Mac is currently not supported.
#if (defined(OS_WIN) || defined(OS_LINUX)) && !defined(OS_CHROMEOS)
« no previous file with comments | « chrome/browser/browser_process_impl.h ('k') | chrome/browser/extensions/api/content_settings/content_settings_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698