OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/logging.h" | 7 #import "base/logging.h" |
8 #import "base/mac/mac_util.h" | |
9 #import "base/mac/scoped_nsexception_enabler.h" | 8 #import "base/mac/scoped_nsexception_enabler.h" |
10 #import "base/metrics/histogram.h" | 9 #import "base/metrics/histogram.h" |
11 #import "base/memory/scoped_nsobject.h" | 10 #import "base/memory/scoped_nsobject.h" |
12 #import "base/sys_string_conversions.h" | 11 #import "base/sys_string_conversions.h" |
13 #import "chrome/app/breakpad_mac.h" | 12 #import "chrome/app/breakpad_mac.h" |
14 #import "chrome/browser/app_controller_mac.h" | 13 #import "chrome/browser/app_controller_mac.h" |
15 #include "chrome/browser/ui/browser_list.h" | 14 #include "chrome/browser/ui/browser_list.h" |
16 #import "chrome/browser/ui/cocoa/objc_method_swizzle.h" | 15 #import "chrome/browser/ui/cocoa/objc_method_swizzle.h" |
17 #import "chrome/browser/ui/cocoa/objc_zombie.h" | 16 #import "chrome/browser/ui/cocoa/objc_zombie.h" |
18 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" | 17 #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 << base::SysNSStringToUTF8(value); | 114 << base::SysNSStringToUTF8(value); |
116 DCHECK(allow); | 115 DCHECK(allow); |
117 } | 116 } |
118 } | 117 } |
119 | 118 |
120 // Forward to the original version. | 119 // Forward to the original version. |
121 return gOriginalInitIMP(self, _cmd, aName, aReason, someUserInfo); | 120 return gOriginalInitIMP(self, _cmd, aName, aReason, someUserInfo); |
122 } | 121 } |
123 @end | 122 @end |
124 | 123 |
125 static IMP gOriginalNSBundleLoadIMP = NULL; | |
126 | |
127 @interface NSBundle (CrNSBundleSwizzle) | |
128 - (BOOL)crLoad; | |
129 @end | |
130 | |
131 @implementation NSBundle (CrNSBundleSwizzle) | |
132 - (BOOL)crLoad { | |
133 // Method only called when swizzled. | |
134 DCHECK(_cmd == @selector(load)); | |
135 | |
136 // MultiClutchInputManager is broken in Chrome on Lion. | |
137 // http://crbug.com/90075. | |
138 if (base::mac::IsOSLionOrLater() && | |
139 [[self bundleIdentifier] | |
140 isEqualToString:@"net.wonderboots.multiclutchinputmanager"]) { | |
141 return NO; | |
142 } | |
143 | |
144 return gOriginalNSBundleLoadIMP(self, _cmd) != nil; | |
145 } | |
146 @end | |
147 | |
148 namespace chrome_browser_application_mac { | 124 namespace chrome_browser_application_mac { |
149 | 125 |
150 // Maximum number of known named exceptions we'll support. There is | 126 // Maximum number of known named exceptions we'll support. There is |
151 // no central registration, but I only find about 75 possibilities in | 127 // no central registration, but I only find about 75 possibilities in |
152 // the system frameworks, and many of them are probably not | 128 // the system frameworks, and many of them are probably not |
153 // interesting to track in aggregate (those relating to distributed | 129 // interesting to track in aggregate (those relating to distributed |
154 // objects, for instance). | 130 // objects, for instance). |
155 const size_t kKnownNSExceptionCount = 25; | 131 const size_t kKnownNSExceptionCount = 25; |
156 | 132 |
157 const size_t kUnknownNSException = kKnownNSExceptionCount; | 133 const size_t kUnknownNSException = kKnownNSExceptionCount; |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 namespace { | 194 namespace { |
219 | 195 |
220 void SwizzleInit() { | 196 void SwizzleInit() { |
221 // Do-nothing wrapper so that we can arrange to only swizzle | 197 // Do-nothing wrapper so that we can arrange to only swizzle |
222 // -[NSException raise] when DCHECK() is turned on (as opposed to | 198 // -[NSException raise] when DCHECK() is turned on (as opposed to |
223 // replicating the preprocess logic which turns DCHECK() on). | 199 // replicating the preprocess logic which turns DCHECK() on). |
224 gOriginalInitIMP = ObjcEvilDoers::SwizzleImplementedInstanceMethods( | 200 gOriginalInitIMP = ObjcEvilDoers::SwizzleImplementedInstanceMethods( |
225 [NSException class], | 201 [NSException class], |
226 @selector(initWithName:reason:userInfo:), | 202 @selector(initWithName:reason:userInfo:), |
227 @selector(crInitWithName:reason:userInfo:)); | 203 @selector(crInitWithName:reason:userInfo:)); |
228 | |
229 // Avoid loading broken input managers. | |
230 gOriginalNSBundleLoadIMP = | |
231 ObjcEvilDoers::SwizzleImplementedInstanceMethods( | |
232 [NSBundle class], | |
233 @selector(load), | |
234 @selector(crLoad)); | |
235 } | 204 } |
236 | 205 |
237 } // namespace | 206 } // namespace |
238 | 207 |
239 @implementation BrowserCrApplication | 208 @implementation BrowserCrApplication |
240 | 209 |
241 + (void)initialize { | 210 + (void)initialize { |
242 // Turn all deallocated Objective-C objects into zombies, keeping | 211 // Turn all deallocated Objective-C objects into zombies, keeping |
243 // the most recent 10,000 of them on the treadmill. | 212 // the most recent 10,000 of them on the treadmill. |
244 ObjcEvilDoers::ZombieEnable(YES, 10000); | 213 ObjcEvilDoers::ZombieEnable(YES, 10000); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 if (RenderViewHost* rvh = contents->render_view_host()) { | 429 if (RenderViewHost* rvh = contents->render_view_host()) { |
461 rvh->EnableRendererAccessibility(); | 430 rvh->EnableRendererAccessibility(); |
462 } | 431 } |
463 } | 432 } |
464 } | 433 } |
465 } | 434 } |
466 return [super accessibilitySetValue:value forAttribute:attribute]; | 435 return [super accessibilitySetValue:value forAttribute:attribute]; |
467 } | 436 } |
468 | 437 |
469 @end | 438 @end |
OLD | NEW |