diff options
Diffstat (limited to 'Source/WebKit2/WebProcess/mac/WebProcessMac.mm')
| -rw-r--r-- | Source/WebKit2/WebProcess/mac/WebProcessMac.mm | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm index 7d0d69c26..69f4fb10b 100644 --- a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm +++ b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm @@ -130,7 +130,13 @@ void WebProcess::platformClearResourceCaches(ResourceCachesToClear cachesToClear { if (cachesToClear == InMemoryResourceCachesOnly) return; - [[NSURLCache sharedURLCache] removeAllCachedResponses]; + + if (!m_clearResourceCachesDispatchGroup) + m_clearResourceCachesDispatchGroup = dispatch_group_create(); + + dispatch_group_async(m_clearResourceCachesDispatchGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + [[NSURLCache sharedURLCache] removeAllCachedResponses]; + }); } #if ENABLE(WEB_PROCESS_SANDBOX) @@ -175,10 +181,22 @@ static void initializeSandbox(const WebProcessCreationParameters& parameters) { #if ENABLE(WEB_PROCESS_SANDBOX) if ([[NSUserDefaults standardUserDefaults] boolForKey:@"DisableSandbox"]) { - fprintf(stderr, "Bypassing sandbox due to DisableSandbox user default.\n"); + WTFLogAlways("Bypassing sandbox due to DisableSandbox user default.\n"); return; } +#if !defined(BUILDING_ON_LION) + // Use private temporary and cache directories. + String systemDirectorySuffix = "com.apple.WebProcess+" + parameters.uiProcessBundleIdentifier; + setenv("DIRHELPER_USER_DIR_SUFFIX", fileSystemRepresentation(systemDirectorySuffix).data(), 0); + char temporaryDirectory[PATH_MAX]; + if (!confstr(_CS_DARWIN_USER_TEMP_DIR, temporaryDirectory, sizeof(temporaryDirectory))) { + WTFLogAlways("WebProcess: couldn't retrieve private temporary directory path: %d\n", errno); + exit(EX_NOPERM); + } + setenv("TMPDIR", temporaryDirectory, 1); +#endif + Vector<const char*> sandboxParameters; // These are read-only. @@ -203,9 +221,9 @@ static void initializeSandbox(const WebProcessCreationParameters& parameters) char* errorBuf; if (sandbox_init_with_parameters(profilePath, SANDBOX_NAMED_EXTERNAL, sandboxParameters.data(), &errorBuf)) { - fprintf(stderr, "WebProcess: couldn't initialize sandbox profile [%s]\n", profilePath); + WTFLogAlways("WebProcess: couldn't initialize sandbox profile [%s] error '%s'\n", profilePath, errorBuf); for (size_t i = 0; sandboxParameters[i]; i += 2) - fprintf(stderr, "%s=%s\n", sandboxParameters[i], sandboxParameters[i + 1]); + WTFLogAlways("%s=%s\n", sandboxParameters[i], sandboxParameters[i + 1]); exit(EX_NOPERM); } @@ -215,7 +233,7 @@ static void initializeSandbox(const WebProcessCreationParameters& parameters) // This will override LSFileQuarantineEnabled from Info.plist unless sandbox quarantine is globally disabled. OSStatus error = WKEnableSandboxStyleFileQuarantine(); if (error) { - fprintf(stderr, "WebProcess: couldn't enable sandbox style file quarantine: %ld\n", (long)error); + WTFLogAlways("WebProcess: couldn't enable sandbox style file quarantine: %ld\n", (long)error); exit(EX_NOPERM); } #endif @@ -249,11 +267,9 @@ void WebProcess::platformInitializeWebProcess(const WebProcessCreationParameters [NSURLCache setSharedURLCache:parentProcessURLCache.get()]; } - WebInspector::setLocalizedStringsPath(parameters.webInspectorLocalizedStringsPath); - m_compositingRenderServerPort = parameters.acceleratedCompositingPort.port(); - -#if ENABLE(NOTIFICATIONS) + +#if ENABLE(NOTIFICATIONS) || ENABLE(LEGACY_NOTIFICATIONS) m_notificationManager.initialize(parameters.notificationPermissions); #endif @@ -274,6 +290,11 @@ void WebProcess::initializeShim() void WebProcess::platformTerminate() { + if (m_clearResourceCachesDispatchGroup) { + dispatch_group_wait(m_clearResourceCachesDispatchGroup, DISPATCH_TIME_FOREVER); + dispatch_release(m_clearResourceCachesDispatchGroup); + m_clearResourceCachesDispatchGroup = 0; + } } void WebProcess::secItemResponse(CoreIPC::Connection*, uint64_t requestID, const SecItemResponseData& response) |
