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

Side by Side Diff: chrome/browser/lifetime/application_lifetime.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 unified diff | Download patch
OLDNEW
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/lifetime/application_lifetime.h" 5 #include "chrome/browser/lifetime/application_lifetime.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 if (DownloadService::NonMaliciousDownloadCountAllProfiles() > 0) 63 if (DownloadService::NonMaliciousDownloadCountAllProfiles() > 0)
64 return false; 64 return false;
65 65
66 // Check TabsNeedBeforeUnloadFired(). 66 // Check TabsNeedBeforeUnloadFired().
67 for (auto* browser : *BrowserList::GetInstance()) { 67 for (auto* browser : *BrowserList::GetInstance()) {
68 if (browser->TabsNeedBeforeUnloadFired()) 68 if (browser->TabsNeedBeforeUnloadFired())
69 return false; 69 return false;
70 } 70 }
71 return true; 71 return true;
72 } 72 }
73
74 bool g_disable_shutdown_for_testing = false;
75 #endif // !defined(OS_ANDROID) 73 #endif // !defined(OS_ANDROID)
76 74
77 #if defined(OS_CHROMEOS) 75 #if defined(OS_CHROMEOS)
78 // Whether chrome should send stop request to a session manager. 76 // Whether chrome should send stop request to a session manager.
79 bool g_send_stop_request_to_session_manager = false; 77 bool g_send_stop_request_to_session_manager = false;
80 #endif 78 #endif
81 79
82 } // namespace 80 } // namespace
83 81
84 void MarkAsCleanShutdown() { 82 void MarkAsCleanShutdown() {
(...skipping 16 matching lines...) Expand all
101 99
102 g_browser_process->platform_part()->AttemptExit(); 100 g_browser_process->platform_part()->AttemptExit();
103 } 101 }
104 102
105 #if !defined(OS_ANDROID) 103 #if !defined(OS_ANDROID)
106 void CloseAllBrowsersAndQuit() { 104 void CloseAllBrowsersAndQuit() {
107 browser_shutdown::SetTryingToQuit(true); 105 browser_shutdown::SetTryingToQuit(true);
108 CloseAllBrowsers(); 106 CloseAllBrowsers();
109 } 107 }
110 108
109 void ShutdownIfNoBrowsers() {
110 if (chrome::GetTotalBrowserCount() > 0)
111 return;
112
113 // Tell everyone that we are shutting down.
114 browser_shutdown::SetTryingToQuit(true);
115
116 #if defined(ENABLE_SESSION_SERVICE)
117 // If ShuttingDownWithoutClosingBrowsers() returns true, the session
118 // services may not get a chance to shut down normally, so explicitly shut
119 // them down here to ensure they have a chance to persist their data.
120 ProfileManager::ShutdownSessionServices();
121 #endif
122
123 chrome::NotifyAndTerminate(true);
124 chrome::OnAppExiting();
125 }
126
111 void CloseAllBrowsers() { 127 void CloseAllBrowsers() {
112 // If there are no browsers and closing the last browser would quit the 128 // If there are no browsers and closing the last browser would quit the
113 // application, send the APP_TERMINATING action here. Otherwise, it will be 129 // application, send the APP_TERMINATING action here. Otherwise, it will be
114 // sent by RemoveBrowser() when the last browser has closed. 130 // sent by RemoveBrowser() when the last browser has closed.
115 if (chrome::GetTotalBrowserCount() == 0 && 131 if (chrome::GetTotalBrowserCount() == 0 &&
116 (browser_shutdown::IsTryingToQuit() || 132 (browser_shutdown::IsTryingToQuit() ||
117 !KeepAliveRegistry::GetInstance()->IsKeepingAlive())) { 133 !KeepAliveRegistry::GetInstance()->IsKeepingAlive())) {
118 // Tell everyone that we are shutting down. 134 ShutdownIfNoBrowsers();
119 browser_shutdown::SetTryingToQuit(true);
120
121 #if defined(ENABLE_SESSION_SERVICE)
122 // If ShuttingDownWithoutClosingBrowsers() returns true, the session
123 // services may not get a chance to shut down normally, so explicitly shut
124 // them down here to ensure they have a chance to persist their data.
125 ProfileManager::ShutdownSessionServices();
126 #endif
127
128 chrome::NotifyAndTerminate(true);
129 chrome::OnAppExiting();
130 return; 135 return;
131 } 136 }
132 137
133 #if defined(OS_CHROMEOS) 138 #if defined(OS_CHROMEOS)
134 chromeos::BootTimesRecorder::Get()->AddLogoutTimeMarker( 139 chromeos::BootTimesRecorder::Get()->AddLogoutTimeMarker(
135 "StartedClosingWindows", false); 140 "StartedClosingWindows", false);
136 #endif 141 #endif
137 scoped_refptr<BrowserCloseManager> browser_close_manager = 142 scoped_refptr<BrowserCloseManager> browser_close_manager =
138 new BrowserCloseManager; 143 new BrowserCloseManager;
139 browser_close_manager->StartClosingBrowsers(); 144 browser_close_manager->StartClosingBrowsers();
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 #if defined(OS_WIN) 274 #if defined(OS_WIN)
270 base::win::SetShouldCrashOnProcessDetach(false); 275 base::win::SetShouldCrashOnProcessDetach(false);
271 #endif 276 #endif
272 // On Windows 7 and later, the system will consider the process ripe for 277 // On Windows 7 and later, the system will consider the process ripe for
273 // termination as soon as it hides or destroys its windows. Since any 278 // termination as soon as it hides or destroys its windows. Since any
274 // execution past that point will be non-deterministically cut short, we 279 // execution past that point will be non-deterministically cut short, we
275 // might as well put ourselves out of that misery deterministically. 280 // might as well put ourselves out of that misery deterministically.
276 base::Process::Current().Terminate(0, false); 281 base::Process::Current().Terminate(0, false);
277 } 282 }
278 283
279 void CloseAllBrowsersIfNeeded() { 284 void ShutdownIfNeeded() {
280 if (chrome::GetTotalBrowserCount() == 0 && 285 if (browser_shutdown::IsTryingToQuit())
281 !browser_shutdown::IsTryingToQuit() && base::MessageLoop::current() && 286 return;
282 !g_disable_shutdown_for_testing) { 287
283 CloseAllBrowsers(); 288 ShutdownIfNoBrowsers();
284 }
285 } 289 }
286 290
287 #endif // !defined(OS_ANDROID) 291 #endif // !defined(OS_ANDROID)
288 292
289 void NotifyAppTerminating() { 293 void NotifyAppTerminating() {
290 static bool notified = false; 294 static bool notified = false;
291 if (notified) 295 if (notified)
292 return; 296 return;
293 notified = true; 297 notified = true;
294 content::NotificationService::current()->Notify( 298 content::NotificationService::current()->Notify(
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 } 340 }
337 341
338 #if !defined(OS_ANDROID) 342 #if !defined(OS_ANDROID)
339 void OnAppExiting() { 343 void OnAppExiting() {
340 static bool notified = false; 344 static bool notified = false;
341 if (notified) 345 if (notified)
342 return; 346 return;
343 notified = true; 347 notified = true;
344 HandleAppExitingForPlatform(); 348 HandleAppExitingForPlatform();
345 } 349 }
346
347 void DisableShutdownForTesting(bool disable_shutdown_for_testing) {
348 g_disable_shutdown_for_testing = disable_shutdown_for_testing;
349 if (!g_disable_shutdown_for_testing &&
350 !KeepAliveRegistry::GetInstance()->IsKeepingAlive())
351 CloseAllBrowsersIfNeeded();
352 }
353 #endif // !defined(OS_ANDROID) 350 #endif // !defined(OS_ANDROID)
354 351
355 } // namespace chrome 352 } // namespace chrome
OLDNEW
« no previous file with comments | « chrome/browser/lifetime/application_lifetime.h ('k') | chrome/browser/lifetime/keep_alive_registry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698