| Index: content/renderer/renderer_main_platform_delegate_mac.mm
|
| diff --git a/content/renderer/renderer_main_platform_delegate_mac.mm b/content/renderer/renderer_main_platform_delegate_mac.mm
|
| index 96cde257a140cdd4d6fff91e16b08c3f552ff061..42f8abcc01ef9930f5f3c8ffca05f051ef928dd3 100644
|
| --- a/content/renderer/renderer_main_platform_delegate_mac.mm
|
| +++ b/content/renderer/renderer_main_platform_delegate_mac.mm
|
| @@ -11,6 +11,7 @@
|
| #include "base/command_line.h"
|
| #include "base/logging.h"
|
| #import "base/mac/foundation_util.h"
|
| +#import "base/mac/mac_util.h"
|
| #include "base/mac/scoped_cftyperef.h"
|
| #include "base/sys_string_conversions.h"
|
| #include "content/common/sandbox_mac.h"
|
| @@ -126,9 +127,8 @@ bool RendererMainPlatformDelegate::InitSandboxTests(bool no_sandbox) {
|
| }
|
|
|
| bool RendererMainPlatformDelegate::EnableSandbox() {
|
| + // http://openradar.appspot.com/radar?id=1156410 is fixed on OS X 10.9+.
|
| // See http://crbug.com/31225 and http://crbug.com/152566
|
| - // TODO: Don't do this on newer OS X revisions that have a fix for
|
| - // http://openradar.appspot.com/radar?id=1156410
|
| // To check if this is broken:
|
| // 1. Enable Multi language input (simplified chinese)
|
| // 2. Ensure "Show/Hide Trackpad Handwriting" shortcut works.
|
| @@ -140,32 +140,38 @@ bool RendererMainPlatformDelegate::EnableSandbox() {
|
| // and then kill that pid to make it go away.)
|
| //
|
| // Chinese Handwriting was introduced in 10.6 and is confirmed broken on
|
| - // 10.6, 10.7, and 10.8.
|
| - mach_error_t err = mach_override_ptr(
|
| - (void*)&TISCreateInputSourceList,
|
| - (void*)&CrTISCreateInputSourceList,
|
| - NULL);
|
| - CHECK_EQ(err_none, err);
|
| -
|
| - // Override the private CFLog function so that the console is not spammed
|
| - // by TIS failing to connect to HIServices over XPC.
|
| - err = mach_override_ptr((void*)&CFLog, (void*)&CrRendererCFLog, NULL);
|
| - CHECK_EQ(err_none, err);
|
| + // 10.6, 10.7, and 10.8. It's reportedly fixed on 10.9.
|
| + bool needs_ime_hack = !base::mac::IsOSLaterThanMountainLion_DontCallThis();
|
| +
|
| + if (needs_ime_hack) {
|
| + mach_error_t err = mach_override_ptr(
|
| + (void*)&TISCreateInputSourceList,
|
| + (void*)&CrTISCreateInputSourceList,
|
| + NULL);
|
| + CHECK_EQ(err_none, err);
|
| +
|
| + // Override the private CFLog function so that the console is not spammed
|
| + // by TIS failing to connect to HIServices over XPC.
|
| + err = mach_override_ptr((void*)&CFLog, (void*)&CrRendererCFLog, NULL);
|
| + CHECK_EQ(err_none, err);
|
| + }
|
|
|
| // Enable the sandbox.
|
| bool sandbox_initialized = InitializeSandbox();
|
|
|
| - // After the sandbox is initialized, call into TIS. Doing this before
|
| - // the sandbox is in place will open up renderer access to the
|
| - // pasteboard and an XPC connection to "com.apple.hiservices-xpcservice".
|
| - base::mac::ScopedCFTypeRef<TISInputSourceRef> layout_source(
|
| - TISCopyCurrentKeyboardLayoutInputSource());
|
| - base::mac::ScopedCFTypeRef<TISInputSourceRef> input_source(
|
| - TISCopyCurrentKeyboardInputSource());
|
| -
|
| - CFTypeRef source_list[] = { layout_source.get(), input_source.get() };
|
| - g_text_input_services_source_list_ = CFArrayCreate(kCFAllocatorDefault,
|
| - source_list, arraysize(source_list), &kCFTypeArrayCallBacks);
|
| + if (needs_ime_hack) {
|
| + // After the sandbox is initialized, call into TIS. Doing this before
|
| + // the sandbox is in place will open up renderer access to the
|
| + // pasteboard and an XPC connection to "com.apple.hiservices-xpcservice".
|
| + base::mac::ScopedCFTypeRef<TISInputSourceRef> layout_source(
|
| + TISCopyCurrentKeyboardLayoutInputSource());
|
| + base::mac::ScopedCFTypeRef<TISInputSourceRef> input_source(
|
| + TISCopyCurrentKeyboardInputSource());
|
| +
|
| + CFTypeRef source_list[] = { layout_source.get(), input_source.get() };
|
| + g_text_input_services_source_list_ = CFArrayCreate(kCFAllocatorDefault,
|
| + source_list, arraysize(source_list), &kCFTypeArrayCallBacks);
|
| + }
|
|
|
| return sandbox_initialized;
|
| }
|
|
|