Index: chrome/browser/ui/cocoa/browser_window_controller.mm |
diff --git a/chrome/browser/ui/cocoa/browser_window_controller.mm b/chrome/browser/ui/cocoa/browser_window_controller.mm |
index 90bb3720fdddb1777435f91faee83e6ee207740f..7dcf8de0c9aaeeb1a0f5f7836d13b2d7524466bd 100644 |
--- a/chrome/browser/ui/cocoa/browser_window_controller.mm |
+++ b/chrome/browser/ui/cocoa/browser_window_controller.mm |
@@ -550,23 +550,26 @@ enum { |
gfx::ScopedNSDisableScreenUpdates disabler; |
// Give beforeunload handlers the chance to cancel the close before we hide |
// the window below. |
- if (!browser_->ShouldCloseWindow()) |
+ if (!browser_->ShouldCloseWindow()) { |
+ if (browser_->tab_strip_model()->empty()) { |
+ // saveWindowPositionIfNeeded: only works if we are the last active |
+ // window, but orderOut: ends up activating another window, so we |
+ // have to save the window position before we call orderOut:. |
+ [self saveWindowPositionIfNeeded]; |
+ |
+ // The browser needs to finish running unload handlers. |
+ // Hide the window (so it appears to have closed immediately), and |
+ // the browser will call us back again when it is ready to close. |
+ [[self window] orderOut:self]; |
+ } |
return NO; |
+ } |
// saveWindowPositionIfNeeded: only works if we are the last active |
// window, but orderOut: ends up activating another window, so we |
// have to save the window position before we call orderOut:. |
[self saveWindowPositionIfNeeded]; |
- if (!browser_->tab_strip_model()->empty()) { |
- // Tab strip isn't empty. Hide the frame (so it appears to have closed |
- // immediately) and close all the tabs, allowing the renderers to shut |
- // down. When the tab strip is empty we'll be called back again. |
- [[self window] orderOut:self]; |
- browser_->OnWindowClosing(); |
- return NO; |
- } |
- |
// the tab strip is empty, it's ok to close the window |
return YES; |
} |