diff options
author | Ben Murdoch <benm@google.com> | 2011-06-02 12:07:03 +0100 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-06-10 10:47:21 +0100 |
commit | 2daae5fd11344eaa88a0d92b0f6d65f8d2255c00 (patch) | |
tree | e4964fbd1cb70599f7718ff03e50ea1dab33890b /Source/WebKit2/WebProcess/mac/WebProcessMac.mm | |
parent | 87bdf0060a247bfbe668342b87e0874182e0ffa9 (diff) | |
download | external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.zip external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.gz external_webkit-2daae5fd11344eaa88a0d92b0f6d65f8d2255c00.tar.bz2 |
Merge WebKit at r84325: Initial merge by git.
Change-Id: Ic1a909300ecc0a13ddc6b4e784371d2ac6e3d59b
Diffstat (limited to 'Source/WebKit2/WebProcess/mac/WebProcessMac.mm')
-rw-r--r-- | Source/WebKit2/WebProcess/mac/WebProcessMac.mm | 51 |
1 files changed, 37 insertions, 14 deletions
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm index 88ef834..4c23daf 100644 --- a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm +++ b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm @@ -30,6 +30,7 @@ #import "SandboxExtension.h" #import "WebPage.h" #import "WebProcessCreationParameters.h" +#import <WebCore/FileSystem.h> #import <WebCore/MemoryCache.h> #import <WebCore/PageCache.h> #import <WebKitSystemInterface.h> @@ -122,7 +123,7 @@ bool WebProcess::fullKeyboardAccessEnabled() } #if ENABLE(WEB_PROCESS_SANDBOX) -static void appendSandboxParameterPath(Vector<const char*>& vector, const char* name, const char* path) +static void appendSandboxParameterPathInternal(Vector<const char*>& vector, const char* name, const char* path) { char normalizedPath[PATH_MAX]; if (!realpath(path, normalizedPath)) @@ -132,14 +133,31 @@ static void appendSandboxParameterPath(Vector<const char*>& vector, const char* vector.append(fastStrDup(normalizedPath)); } -static void appendSandboxParameterConfPath(Vector<const char*>& vector, const char* name, int confID) +static void appendReadwriteConfDirectory(Vector<const char*>& vector, const char* name, int confID) { char path[PATH_MAX]; if (confstr(confID, path, PATH_MAX) <= 0) path[0] = '\0'; - appendSandboxParameterPath(vector, name, path); + appendSandboxParameterPathInternal(vector, name, path); } + +static void appendReadonlySandboxDirectory(Vector<const char*>& vector, const char* name, NSString *path) +{ + appendSandboxParameterPathInternal(vector, name, [(NSString *)path fileSystemRepresentation]); +} + +static void appendReadwriteSandboxDirectory(Vector<const char*>& vector, const char* name, NSString *path) +{ + NSError *error = nil; + + // This is very unlikely to fail, but in case it actually happens, we'd like some sort of output in the console. + if (![[NSFileManager defaultManager] createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:&error]) + NSLog(@"could not create \"%@\", error %@", path, error); + + appendSandboxParameterPathInternal(vector, name, [(NSString *)path fileSystemRepresentation]); +} + #endif static void initializeSandbox(const WebProcessCreationParameters& parameters) @@ -152,14 +170,20 @@ static void initializeSandbox(const WebProcessCreationParameters& parameters) Vector<const char*> sandboxParameters; - appendSandboxParameterPath(sandboxParameters, "HOME_DIR", [NSHomeDirectory() fileSystemRepresentation]); - appendSandboxParameterPath(sandboxParameters, "WEBKIT2_FRAMEWORK_DIR", [[[[NSBundle bundleForClass:NSClassFromString(@"WKView")] bundlePath] stringByDeletingLastPathComponent] fileSystemRepresentation]); - appendSandboxParameterConfPath(sandboxParameters, "DARWIN_USER_TEMP_DIR", _CS_DARWIN_USER_TEMP_DIR); - appendSandboxParameterConfPath(sandboxParameters, "DARWIN_USER_CACHE_DIR", _CS_DARWIN_USER_CACHE_DIR); - appendSandboxParameterPath(sandboxParameters, "WEBKIT_DATABASE_DIR", [(NSString *)parameters.databaseDirectory fileSystemRepresentation]); - appendSandboxParameterPath(sandboxParameters, "WEBKIT_LOCALSTORAGE_DIR", [(NSString *)parameters.localStorageDirectory fileSystemRepresentation]); - appendSandboxParameterPath(sandboxParameters, "NSURL_CACHE_DIR", parameters.nsURLCachePath.data()); - appendSandboxParameterPath(sandboxParameters, "UI_PROCESS_BUNDLE_RESOURCE_DIR", parameters.uiProcessBundleResourcePath.data()); + // These are read-only. + appendReadonlySandboxDirectory(sandboxParameters, "WEBKIT2_FRAMEWORK_DIR", [[[NSBundle bundleForClass:NSClassFromString(@"WKView")] bundlePath] stringByDeletingLastPathComponent]); + appendReadonlySandboxDirectory(sandboxParameters, "UI_PROCESS_BUNDLE_RESOURCE_DIR", parameters.uiProcessBundleResourcePath); + + // These are read-write getconf paths. + appendReadwriteConfDirectory(sandboxParameters, "DARWIN_USER_TEMP_DIR", _CS_DARWIN_USER_TEMP_DIR); + appendReadwriteConfDirectory(sandboxParameters, "DARWIN_USER_CACHE_DIR", _CS_DARWIN_USER_CACHE_DIR); + + // These are read-write paths. + appendReadwriteSandboxDirectory(sandboxParameters, "HOME_DIR", NSHomeDirectory()); + appendReadwriteSandboxDirectory(sandboxParameters, "WEBKIT_DATABASE_DIR", parameters.databaseDirectory); + appendReadwriteSandboxDirectory(sandboxParameters, "WEBKIT_LOCALSTORAGE_DIR", parameters.localStorageDirectory); + appendReadwriteSandboxDirectory(sandboxParameters, "NSURL_CACHE_DIR", parameters.nsURLCachePath); + sandboxParameters.append(static_cast<const char*>(0)); const char* profilePath = [[[NSBundle mainBundle] pathForResource:@"com.apple.WebProcess" ofType:@"sb"] fileSystemRepresentation]; @@ -193,7 +217,7 @@ void WebProcess::platformInitializeWebProcess(const WebProcessCreationParameters initializeSandbox(parameters); if (!parameters.parentProcessName.isNull()) { - NSString *applicationName = [NSString stringWithFormat:UI_STRING("%@ Web Content", "Visible name of the web process. The argument is the application name."), (NSString *)parameters.parentProcessName]; + NSString *applicationName = [NSString stringWithFormat:WEB_UI_STRING("%@ Web Content", "Visible name of the web process. The argument is the application name."), (NSString *)parameters.parentProcessName]; WKSetVisibleApplicationName((CFStringRef)applicationName); } @@ -201,8 +225,7 @@ void WebProcess::platformInitializeWebProcess(const WebProcessCreationParameters NSUInteger cacheMemoryCapacity = parameters.nsURLCacheMemoryCapacity; NSUInteger cacheDiskCapacity = parameters.nsURLCacheDiskCapacity; - NSString *nsCachePath = [[NSFileManager defaultManager] stringWithFileSystemRepresentation:parameters.nsURLCachePath.data() length:strlen(parameters.nsURLCachePath.data())]; - RetainPtr<NSURLCache> parentProcessURLCache(AdoptNS, [[NSURLCache alloc] initWithMemoryCapacity:cacheMemoryCapacity diskCapacity:cacheDiskCapacity diskPath:nsCachePath]); + RetainPtr<NSURLCache> parentProcessURLCache(AdoptNS, [[NSURLCache alloc] initWithMemoryCapacity:cacheMemoryCapacity diskCapacity:cacheDiskCapacity diskPath:parameters.nsURLCachePath]); [NSURLCache setSharedURLCache:parentProcessURLCache.get()]; } |