Index: chrome/browser/ui/cocoa/browser_frame_view.mm |
diff --git a/chrome/browser/ui/cocoa/browser_frame_view.mm b/chrome/browser/ui/cocoa/browser_frame_view.mm |
index 41d78385354df3ae072b4cda6980950d584a6c19..28bd181b404881225392ef3dc4eb0eb4a503fa15 100644 |
--- a/chrome/browser/ui/cocoa/browser_frame_view.mm |
+++ b/chrome/browser/ui/cocoa/browser_frame_view.mm |
@@ -8,6 +8,7 @@ |
#import <Carbon/Carbon.h> |
#include "base/logging.h" |
+#include "base/mac/mac_util.h" |
#include "base/mac/scoped_nsautorelease_pool.h" |
#import "chrome/browser/themes/theme_service.h" |
#import "chrome/browser/ui/cocoa/framed_browser_window.h" |
@@ -46,22 +47,27 @@ static BOOL gCanGetCornerRadius = NO; |
// roll overs for our close widgets, but things should still function |
// correctly. |
base::mac::ScopedNSAutoreleasePool pool; |
- Class grayFrameClass = NSClassFromString(@"NSGrayFrame"); |
- DCHECK(grayFrameClass); |
- if (!grayFrameClass) return; |
+ |
+ // On 10.8+ the background for textured windows are no longer drawn by |
+ // NSGrayFrame, and NSThemeFrame is used instead <http://crbug.com/114745>. |
+ Class borderViewClass = NSClassFromString( |
+ base::mac::IsOSMountainLionOrLater() ? @"NSThemeFrame" : @"NSGrayFrame"); |
+ DCHECK(borderViewClass); |
+ if (!borderViewClass) return; |
// Exchange draw rect. |
Method m0 = class_getInstanceMethod([self class], @selector(drawRect:)); |
DCHECK(m0); |
if (m0) { |
- BOOL didAdd = class_addMethod(grayFrameClass, |
+ BOOL didAdd = class_addMethod(borderViewClass, |
@selector(drawRectOriginal:), |
method_getImplementation(m0), |
method_getTypeEncoding(m0)); |
DCHECK(didAdd); |
if (didAdd) { |
- Method m1 = class_getInstanceMethod(grayFrameClass, @selector(drawRect:)); |
- Method m2 = class_getInstanceMethod(grayFrameClass, |
+ Method m1 = class_getInstanceMethod(borderViewClass, |
+ @selector(drawRect:)); |
+ Method m2 = class_getInstanceMethod(borderViewClass, |
@selector(drawRectOriginal:)); |
DCHECK(m1 && m2); |
if (m1 && m2) { |
@@ -71,12 +77,12 @@ static BOOL gCanGetCornerRadius = NO; |
} |
gCanDrawTitle = |
- [grayFrameClass |
+ [borderViewClass |
instancesRespondToSelector:@selector(_titlebarTitleRect)] && |
- [grayFrameClass |
+ [borderViewClass |
instancesRespondToSelector:@selector(_drawTitleStringIn:withColor:)]; |
gCanGetCornerRadius = |
- [grayFrameClass |
+ [borderViewClass |
instancesRespondToSelector:@selector(roundedCornerRadius)]; |
// Add _shadowFlags. This is a method on NSThemeFrame, not on NSGrayFrame. |