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

Unified Diff: chrome/browser/app_controller_mac.mm

Issue 2866034: Refactor shutdown code to allow win/linux to run after last browser closes. (Closed) Base URL: http://src.chromium.org/git/chromium.git
Patch Set: Uploaded patch that resolves merge issue Created 10 years, 5 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
« no previous file with comments | « no previous file | chrome/browser/automation/automation_provider.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/app_controller_mac.mm
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm
index 6214edd096a9ae76ecf03662773df0150a5904c1..1ebff27dd29e1290bb57dafd5fb365a16e9acf21 100644
--- a/chrome/browser/app_controller_mac.mm
+++ b/chrome/browser/app_controller_mac.mm
@@ -232,21 +232,18 @@ void RecordLastRunAppBundlePath() {
![self shouldQuitWithInProgressDownloads])
return NO;
- // Set the state to "trying to quit", so that closing all browser windows will
- // lead to termination.
- browser_shutdown::SetTryingToQuit(true);
-
// TODO(viettrungluu): Remove Apple Event handlers here? (It's safe to leave
// them in, but I'm not sure about UX; we'd also want to disable other things
// though.) http://crbug.com/40861
- if (!BrowserList::size())
- return YES;
+ size_t num_browsers = BrowserList::size();
- // Try to close all the windows.
- BrowserList::CloseAllBrowsers(true);
+ // Initiate a shutdown (via BrowserList::CloseAllBrowsers()) if we aren't
+ // already shutting down.
+ if (!browser_shutdown::IsTryingToQuit())
+ BrowserList::CloseAllBrowsers(true);
- return NO;
+ return num_browsers == 0 ? YES : NO;
}
- (void)stopTryingToTerminateApplication:(NSApplication*)app {
@@ -271,9 +268,9 @@ void RecordLastRunAppBundlePath() {
// There better be no browser windows left at this point.
CHECK_EQ(BrowserList::size(), 0u);
- // Release the reference to the browser process. Once all the browsers get
- // dealloc'd, it will stop the RunLoop and fall back into main().
- g_browser_process->ReleaseModule();
+ // Tell BrowserList not to keep the browser process alive. Once all the
+ // browsers get dealloc'd, it will stop the RunLoop and fall back into main().
+ BrowserList::EndKeepAlive();
// Close these off if they have open windows.
[prefsController_ close];
@@ -455,11 +452,9 @@ void RecordLastRunAppBundlePath() {
// This is called after profiles have been loaded and preferences registered.
// It is safe to access the default profile here.
- (void)applicationDidFinishLaunching:(NSNotification*)notify {
- // Hold an extra ref to the BrowserProcess singleton so it doesn't go away
- // when all the browser windows get closed. We'll release it on quit which
- // will be the signal to exit.
- DCHECK(g_browser_process);
- g_browser_process->AddRefModule();
+ // Notify BrowserList to keep the application running so it doesn't go away
+ // when all the browser windows get closed.
+ BrowserList::StartKeepAlive();
bookmarkMenuBridge_.reset(new BookmarkMenuBridge([self defaultProfile]));
historyMenuBridge_.reset(new HistoryMenuBridge([self defaultProfile]));
« no previous file with comments | « no previous file | chrome/browser/automation/automation_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698