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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROME_BROWSER_APPLICATION_MAC_H_ 6 #define CHROME_BROWSER_CHROME_BROWSER_APPLICATION_MAC_H_ 7 8 #ifdef __OBJC__ 9 10 #import <AppKit/AppKit.h> 11 12 #include <vector> 13 14 #import "base/mac/scoped_sending_event.h" 15 #import "base/message_loop/message_pump_mac.h" 16 #include "base/synchronization/lock.h" 17 18 @interface BrowserCrApplication : NSApplication<CrAppProtocol, 19 CrAppControlProtocol> { 20 @private 21 BOOL handlingSendEvent_; 22 BOOL cyclingWindows_; 23 24 // App's previous key windows. Most recent key window is last. 25 // Does not include current key window. Elements of this vector are weak 26 // references. 27 std::vector<NSWindow*> previousKeyWindows_; 28 29 // Guards previousKeyWindows_. 30 base::Lock previousKeyWindowsLock_; 31 } 32 33 // Our implementation of |-terminate:| only attempts to terminate the 34 // application, i.e., begins a process which may lead to termination. This 35 // method cancels that process. 36 - (void)cancelTerminate:(id)sender; 37 38 // Keep track of the previous key windows and whether windows are being 39 // cycled for use in determining whether a Panel window can become the 40 // key window. 41 - (NSWindow*)previousKeyWindow; 42 - (BOOL)isCyclingWindows; 43 @end 44 45 namespace chrome_browser_application_mac { 46 47 // Bin for unknown exceptions. Exposed for testing purposes. 48 extern const size_t kUnknownNSException; 49 50 // Returns the histogram bin for |exception| if it is one we track 51 // specifically, or |kUnknownNSException| if unknown. Exposed for testing 52 // purposes. 53 size_t BinForException(NSException* exception); 54 55 // Use UMA to track exception occurance. Exposed for testing purposes. 56 void RecordExceptionWithUma(NSException* exception); 57 58 } // namespace chrome_browser_application_mac 59 60 #endif // __OBJC__ 61 62 namespace chrome_browser_application_mac { 63 64 // To be used to instantiate BrowserCrApplication from C++ code. 65 void RegisterBrowserCrApp(); 66 67 // Calls -[NSApp terminate:]. 68 void Terminate(); 69 70 // Cancels a termination started by |Terminate()|. 71 void CancelTerminate(); 72 73 } // namespace chrome_browser_application_mac 74 75 #endif // CHROME_BROWSER_CHROME_BROWSER_APPLICATION_MAC_H_ 76