| OLD | NEW |
| 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 #import "chrome/browser/chrome_browser_application_mac.h" | 5 #import "chrome/browser/chrome_browser_application_mac.h" |
| 6 | 6 |
| 7 #import "base/auto_reset.h" | 7 #import "base/auto_reset.h" |
| 8 #import "base/logging.h" | 8 #import "base/logging.h" |
| 9 #include "base/mac/crash_logging.h" | 9 #include "base/mac/crash_logging.h" |
| 10 #import "base/mac/scoped_nsexception_enabler.h" | 10 #import "base/mac/scoped_nsexception_enabler.h" |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 324 // | 324 // |
| 325 // |-tryToTerminateApplication:| differs from the standard | 325 // |-tryToTerminateApplication:| differs from the standard |
| 326 // |-applicationShouldTerminate:| in that no special event loop is run in the | 326 // |-applicationShouldTerminate:| in that no special event loop is run in the |
| 327 // case that immediate termination is not possible (e.g., if dialog boxes | 327 // case that immediate termination is not possible (e.g., if dialog boxes |
| 328 // allowing the user to cancel have to be shown). Instead, this method sets a | 328 // allowing the user to cancel have to be shown). Instead, this method sets a |
| 329 // flag and tries to close all browsers. This flag causes the closure of the | 329 // flag and tries to close all browsers. This flag causes the closure of the |
| 330 // final browser window to begin actual tear-down of the application. | 330 // final browser window to begin actual tear-down of the application. |
| 331 // Termination is cancelled by resetting this flag. The standard | 331 // Termination is cancelled by resetting this flag. The standard |
| 332 // |-applicationShouldTerminate:| is not supported, and code paths leading to it | 332 // |-applicationShouldTerminate:| is not supported, and code paths leading to it |
| 333 // must be redirected. | 333 // must be redirected. |
| 334 // |
| 335 // When the last browser has been destroyed, the BrowserList calls |
| 336 // browser::OnAppExiting(), which is the point of no return. That will cause |
| 337 // the NSApplicationWillTerminateNotification to be posted, which ends the |
| 338 // NSApplication event loop, so final post- MessageLoop::Run() work is done |
| 339 // before exiting. |
| 334 - (void)terminate:(id)sender { | 340 - (void)terminate:(id)sender { |
| 335 AppController* appController = static_cast<AppController*>([NSApp delegate]); | 341 AppController* appController = static_cast<AppController*>([NSApp delegate]); |
| 336 if ([appController tryToTerminateApplication:self]) { | 342 [appController tryToTerminateApplication:self]; |
| 337 [[NSNotificationCenter defaultCenter] | |
| 338 postNotificationName:NSApplicationWillTerminateNotification | |
| 339 object:self]; | |
| 340 } | |
| 341 | |
| 342 // Return, don't exit. The application is responsible for exiting on its own. | 343 // Return, don't exit. The application is responsible for exiting on its own. |
| 343 } | 344 } |
| 344 | 345 |
| 345 - (void)cancelTerminate:(id)sender { | 346 - (void)cancelTerminate:(id)sender { |
| 346 AppController* appController = static_cast<AppController*>([NSApp delegate]); | 347 AppController* appController = static_cast<AppController*>([NSApp delegate]); |
| 347 [appController stopTryingToTerminateApplication:self]; | 348 [appController stopTryingToTerminateApplication:self]; |
| 348 } | 349 } |
| 349 | 350 |
| 350 - (BOOL)sendAction:(SEL)anAction to:(id)aTarget from:(id)sender { | 351 - (BOOL)sendAction:(SEL)anAction to:(id)aTarget from:(id)sender { |
| 351 // The Dock menu contains an automagic section where you can select | 352 // The Dock menu contains an automagic section where you can select |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 574 std::vector<NSWindow*>::iterator window_iterator = | 575 std::vector<NSWindow*>::iterator window_iterator = |
| 575 std::find(previousKeyWindows_.begin(), | 576 std::find(previousKeyWindows_.begin(), |
| 576 previousKeyWindows_.end(), | 577 previousKeyWindows_.end(), |
| 577 window); | 578 window); |
| 578 if (window_iterator != previousKeyWindows_.end()) { | 579 if (window_iterator != previousKeyWindows_.end()) { |
| 579 previousKeyWindows_.erase(window_iterator); | 580 previousKeyWindows_.erase(window_iterator); |
| 580 } | 581 } |
| 581 } | 582 } |
| 582 | 583 |
| 583 @end | 584 @end |
| OLD | NEW |