diff options
author | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 16:23:10 +0000 |
---|---|---|
committer | jeremy@chromium.org <jeremy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-09 16:23:10 +0000 |
commit | 810d6408e8553435b97151805a9ed48ffe8d610e (patch) | |
tree | d62eb1b03094529dcf216d489d566ff0d71a5a39 /chrome/renderer | |
parent | 20a4a446ecc18a143d396f6cb7b16414df59cef3 (diff) | |
download | chromium_src-810d6408e8553435b97151805a9ed48ffe8d610e.zip chromium_src-810d6408e8553435b97151805a9ed48ffe8d610e.tar.gz chromium_src-810d6408e8553435b97151805a9ed48ffe8d610e.tar.bz2 |
Some fixes to the OS X Sandbox:
* Added a command line option to enable verbose logging in the Sandbox. This will be useful when we start looking at the information in ChromeBot.
* Modified the code that splices the homedir path into the Sandbox file. This code is now only used on 10.6 and no longer uses a regex.
* Moved sandbox code out into a sandbox_mac file.
* Changed 10.6 seed release references -> 10.6 .
BUG=21483
TEST=Browser should launch and display NTP correctly on OS X 10.5 & 10.6
Review URL: http://codereview.chromium.org/242165
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@28541 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/renderer.sb | 12 | ||||
-rw-r--r-- | chrome/renderer/renderer_main_platform_delegate_mac.mm | 103 |
2 files changed, 10 insertions, 105 deletions
diff --git a/chrome/renderer/renderer.sb b/chrome/renderer/renderer.sb index 42ca75d..e9f6094 100644 --- a/chrome/renderer/renderer.sb +++ b/chrome/renderer/renderer.sb @@ -5,6 +5,8 @@ ;; (version 1) (deny default) +; Support for programmatically enabling verbose debugging. +;ENABLE_LOGGING (debug deny) ; Allow sending signals to self - http://crbug.com/20370 (allow signal (target self)) @@ -14,7 +16,7 @@ ; Each line is marked with the System version that needs it. ; This profile is tested with the following system versions: -; 10.5.6, 10.6 seed release +; 10.5.6, 10.6 ; Allow following symlinks (allow file-read-metadata) ; 10.5.6 @@ -26,12 +28,12 @@ ; Needed for Fonts. (allow file-read-data (regex #"^/System/Library/Fonts")) ; 10.5.6 -(allow file-read-data (regex #"^/Library/Fonts")) ; 10.6 seed release +;10.6_ONLY (allow file-read-data (regex #"^/Library/Fonts")) ; 10.6 (allow mach-lookup (global-name "com.apple.FontObjectsServer")) ; 10.5.6 -(allow mach-lookup (global-name "com.apple.FontServer")) ; 10.6 seed release +;10.6_ONLY (allow mach-lookup (global-name "com.apple.FontServer")) ; 10.6 ; USER_HOMEDIR is substitued at runtime - http://crbug.com/11269 -(allow file-read-data (regex #"^USER_HOMEDIR/Library/Fonts")) ; 10.6 seed release +;10.6_ONLY (allow file-read-data (subpath "USER_HOMEDIR/Library/Fonts")) ; 10.6 ; Needed for IPC on 10.6 -(allow ipc-posix-shm) +;10.6_ONLY (allow ipc-posix-shm) diff --git a/chrome/renderer/renderer_main_platform_delegate_mac.mm b/chrome/renderer/renderer_main_platform_delegate_mac.mm index 247c261..4a5475e 100644 --- a/chrome/renderer/renderer_main_platform_delegate_mac.mm +++ b/chrome/renderer/renderer_main_platform_delegate_mac.mm @@ -4,20 +4,9 @@ #include "chrome/renderer/renderer_main_platform_delegate.h" -#include "base/debug_util.h" - -#import <Foundation/Foundation.h> -#import <ApplicationServices/ApplicationServices.h> #import <Cocoa/Cocoa.h> -extern "C" { -#include <sandbox.h> -} -#include "base/mac_util.h" -#include "base/scoped_cftyperef.h" -#include "base/scoped_nsautorelease_pool.h" -#include "base/sys_info.h" -#include "chrome/common/chrome_switches.h" +#include "chrome/common/sandbox_mac.h" #include "third_party/WebKit/WebKit/mac/WebCoreSupport/WebSystemInterface.h" RendererMainPlatformDelegate::RendererMainPlatformDelegate( @@ -28,65 +17,6 @@ RendererMainPlatformDelegate::RendererMainPlatformDelegate( RendererMainPlatformDelegate::~RendererMainPlatformDelegate() { } -// Warmup System APIs that empirically need to be accessed before the Sandbox -// is turned on. -// This method is layed out in blocks, each one containing a separate function -// that needs to be warmed up. The OS version on which we found the need to -// enable the function is also noted. -// This function is tested on the following OS versions: -// 10.5.6, 10.6 seed release -void SandboxWarmup() { - base::ScopedNSAutoreleasePool scoped_pool; - - { // CGColorSpaceCreateWithName(), CGBitmapContextCreate() - 10.5.6 - scoped_cftyperef<CGColorSpaceRef> rgb_colorspace( - CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB)); - - // Allocate a 1x1 image. - char data[4]; - scoped_cftyperef<CGContextRef> context( - CGBitmapContextCreate(data, 1, 1, 8, 1 * 4, - rgb_colorspace, - kCGImageAlphaPremultipliedFirst | - kCGBitmapByteOrder32Host)); - - // Load in the color profiles we'll need (as a side effect). - (void) mac_util::GetSRGBColorSpace(); - (void) mac_util::GetSystemColorSpace(); - - // CGColorSpaceCreateSystemDefaultCMYK - 10.6 - scoped_cftyperef<CGColorSpaceRef> cmyk_colorspace( - CGColorSpaceCreateWithName(kCGColorSpaceGenericCMYK)); - } - - { // [-NSColor colorUsingColorSpaceName] - 10.5.6 - NSColor* color = [NSColor controlTextColor]; - [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace]; - } - - { // localtime() - 10.5.6 - time_t tv = {0}; - localtime(&tv); - } - - { // Gestalt() tries to read /System/Library/CoreServices/SystemVersion.plist - // on 10.5.6 - int32 tmp; - base::SysInfo::OperatingSystemVersionNumbers(&tmp, &tmp, &tmp); - } - - { // CGImageSourceGetStatus() - 10.6 seed release. - // Create a png with just enough data to get everything warmed up... - char png_header[] = {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A}; - NSData* data = [NSData dataWithBytes:png_header - length:arraysize(png_header)]; - scoped_cftyperef<CGImageSourceRef> img( - CGImageSourceCreateWithData((CFDataRef)data, - NULL)); - CGImageSourceGetStatus(img); - } -} - // TODO(mac-port): Any code needed to initialize a process for // purposes of running a renderer needs to also be reflected in // chrome_dll_main.cc for --single-process support. @@ -95,7 +25,7 @@ void RendererMainPlatformDelegate::PlatformInitialize() { InitWebCoreSystemInterface(); // Warmup APIs before turning on the Sandbox. - SandboxWarmup(); + sandbox::SandboxWarmup(); if (![NSThread isMultiThreaded]) { NSString* string = @""; @@ -117,34 +47,7 @@ bool RendererMainPlatformDelegate::InitSandboxTests(bool no_sandbox) { } bool RendererMainPlatformDelegate::EnableSandbox() { - // For the renderer, we give it a custom sandbox to lock things down as - // tightly as possible, while still enabling drawing. - NSString* sandbox_profile_path = - [mac_util::MainAppBundle() pathForResource:@"renderer" ofType:@"sb"]; - NSString* sandbox_data = [NSString - stringWithContentsOfFile:sandbox_profile_path - encoding:NSUTF8StringEncoding - error:nil]; - - if (!sandbox_data) { - LOG(ERROR) << "Failed to find the sandbox profile on disk"; - return false; - } - - // Splice the path of the user's home directory into the sandbox profile - // (see renderer.sb for details). - sandbox_data = [sandbox_data - stringByReplacingOccurrencesOfString:@"USER_HOMEDIR" - withString:NSHomeDirectory()]; - - char* error_buff = NULL; - int error = sandbox_init([sandbox_data UTF8String], 0, &error_buff); - bool success = (error == 0 && error_buff == NULL); - if (error == -1) { - LOG(ERROR) << "Failed to Initialize Sandbox: " << error_buff; - } - sandbox_free_error(error_buff); - return success; + return sandbox::EnableSandbox(); } void RendererMainPlatformDelegate::RunSandboxTests() { |