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

Unified Diff: chrome/browser/chrome_browser_application_mac.mm

Issue 8771028: [Mac] Remove content/ CrApplication. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to trunk for commit-queue. Created 9 years 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
Index: chrome/browser/chrome_browser_application_mac.mm
diff --git a/chrome/browser/chrome_browser_application_mac.mm b/chrome/browser/chrome_browser_application_mac.mm
index 282ecc3ddb2dcfa8e0c7a248098fa05c41149d0b..c4988324f14986a53a346e4f58857e53c9304ae4 100644
--- a/chrome/browser/chrome_browser_application_mac.mm
+++ b/chrome/browser/chrome_browser_application_mac.mm
@@ -221,6 +221,30 @@ void SwizzleInit() {
return self;
}
+// Initialize NSApplication using the custom subclass. Check whether NSApp
+// was already initialized using another class, because that would break
+// some things.
++ (NSApplication*)sharedApplication {
+ NSApplication* app = [super sharedApplication];
+
+ // +sharedApplication initializes the global NSApp, so if a specific
+ // NSApplication subclass is requested, require that to be the one
+ // delivered. The practical effect is to require a consistent NSApp
+ // across the executable.
+ CHECK([NSApp isKindOfClass:self])
+ << "NSApp must be of type " << [[self className] UTF8String]
+ << ", not " << [[NSApp className] UTF8String];
+
+ // If the message loop was initialized before NSApp is setup, the
+ // message pump will be setup incorrectly. Failing this implies
+ // that RegisterBrowserCrApp() should be called earlier.
+ CHECK(base::MessagePumpMac::UsingCrApp())
+ << "MessagePumpMac::Create() is using the wrong pump implementation"
+ << " for " << [[self className] UTF8String];
+
+ return app;
+}
+
////////////////////////////////////////////////////////////////////////////////
// HISTORICAL COMMENT (by viettrungluu, from
// http://codereview.chromium.org/1520006 with mild editing):
@@ -368,6 +392,14 @@ void SwizzleInit() {
[eventHooks_ removeObject:handler];
}
+- (BOOL)isHandlingSendEvent {
+ return handlingSendEvent_;
+}
+
+- (void)setHandlingSendEvent:(BOOL)handlingSendEvent {
+ handlingSendEvent_ = handlingSendEvent;
+}
+
- (void)sendEvent:(NSEvent*)event {
base::mac::ScopedSendingEvent sendingEventScoper;
for (id<CrApplicationEventHookProtocol> handler in eventHooks_.get()) {
@@ -396,7 +428,7 @@ void SwizzleInit() {
// sidestep scopers is setjmp/longjmp (see above). The following
// is to "fix" this while the more fundamental concern is
// addressed elsewhere.
- [self clearIsHandlingSendEvent];
+ [self setHandlingSendEvent:NO];
// If |ScopedNSExceptionEnabler| is used to allow exceptions, and an
// uncaught exception is thrown, it will throw past all of the scopers.
« no previous file with comments | « chrome/browser/chrome_browser_application_mac.h ('k') | chrome/browser/chrome_browser_application_mac_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698