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])); |