summaryrefslogtreecommitdiff
path: root/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/WebProcess/mac/WebProcessMac.mm')
-rw-r--r--Source/WebKit2/WebProcess/mac/WebProcessMac.mm39
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)