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

Unified Diff: chrome/renderer/renderer_main_platform_delegate_mac.mm

Issue 27108: Temporary fix for the Cocoa-in-renderer problem. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 10 months 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
« chrome/browser/browser_main_mac.mm ('K') | « chrome/common/child_thread.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/renderer_main_platform_delegate_mac.mm
===================================================================
--- chrome/renderer/renderer_main_platform_delegate_mac.mm (revision 10214)
+++ chrome/renderer/renderer_main_platform_delegate_mac.mm (working copy)
@@ -8,6 +8,7 @@
#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>
+#import <Cocoa/Cocoa.h>
extern "C" {
#include <sandbox.h>
}
@@ -41,6 +42,30 @@
kCGBitmapByteOrder32Host);
CGColorSpaceRelease(rgb_colorspace);
CGContextRelease(tmp);
+
+#if 0
+
+ // Note: by default, Cocoa is NOT thread safe. Use of NSThreads
+ // tells Cocoa to be MT-aware and create and use locks. The
+ // renderer process only uses Cocoa from the single renderer thread,
+ // so we don't need to tell Cocoa we are using threads (even though,
+ // oddly, we are using Cocoa from the non-main thread.)
+ // The current limit of renderer processes is 20. Brett states that
+ // (despite comments to the contrary) when two tabs are using the
+ // same renderer, we do NOT create a 2nd renderer thread in that
+ // process. Thus, we don't need to MT-aware Cocoa.
+ // (Code and comments left here in case that changes.)
+ if (![NSThread isMultiThreaded]) {
Mark Mentovai 2009/02/25 14:19:39 FYI, base::InitThreading() from platform_thread_ma
+ NSString *string = @"";
+ [NSThread detachNewThreadSelector:@selector(length)
+ toTarget:string
+ withObject:nil];
+ }
+#endif
+
+ // Initialize Cocoa. Without this call, drawing of native UI
+ // elements (e.g. buttons) in WebKit will explode.
+ [NSApplication sharedApplication];
}
void RendererMainPlatformDelegate::PlatformUninitialize() {
@@ -64,7 +89,7 @@
// For the renderer, we give it a custom sandbox to lock down as tight as
// possible, but still be able to draw. If we're not a renderer process, it
// usually means we're a unittest, so we use a pure compute sandbox instead.
-
+
const char *sandbox_profile = kSBXProfilePureComputation;
uint64_t sandbox_flags = SANDBOX_NAMED;
@@ -80,7 +105,7 @@
sandbox_profile = [sandbox_profile_path fileSystemRepresentation];
sandbox_flags = SANDBOX_NAMED_EXTERNAL;
}
-
+
char* error_buff = NULL;
int error = sandbox_init(sandbox_profile, sandbox_flags,
&error_buff);
« chrome/browser/browser_main_mac.mm ('K') | « chrome/common/child_thread.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698