WebProcess should use private temporary and cache directories
https://bugs.webkit.org/show_bug.cgi?id=80876
Reviewed by Sam Weinig.
* Shared/WebProcessCreationParameters.cpp:
(WebKit::WebProcessCreationParameters::encode):
(WebKit::WebProcessCreationParameters::decode):
* Shared/WebProcessCreationParameters.h: (WebProcessCreationParameters):
* UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformInitializeWebProcess):
Always pass uiProcessBundleIdentifier to WebProcess on Mac, it's now used for more than
CFURL sessions.
* WebProcess/com.apple.WebProcess.sb.in: Limit old workaround to platforms that need it.
* WebProcess/mac/WebProcessMac.mm: (WebKit::initializeSandbox): Tell confstr to use a suffix
on user directories.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@111413 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index 04fb1db..29ca4e4 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,23 @@
+2012-03-20 Alexey Proskuryakov <ap@apple.com>
+
+ WebProcess should use private temporary and cache directories
+ https://bugs.webkit.org/show_bug.cgi?id=80876
+
+ Reviewed by Sam Weinig.
+
+ * Shared/WebProcessCreationParameters.cpp:
+ (WebKit::WebProcessCreationParameters::encode):
+ (WebKit::WebProcessCreationParameters::decode):
+ * Shared/WebProcessCreationParameters.h: (WebProcessCreationParameters):
+ * UIProcess/mac/WebContextMac.mm: (WebKit::WebContext::platformInitializeWebProcess):
+ Always pass uiProcessBundleIdentifier to WebProcess on Mac, it's now used for more than
+ CFURL sessions.
+
+ * WebProcess/com.apple.WebProcess.sb.in: Limit old workaround to platforms that need it.
+
+ * WebProcess/mac/WebProcessMac.mm: (WebKit::initializeSandbox): Tell confstr to use a suffix
+ on user directories.
+
2012-03-20 Anders Carlsson <andersca@apple.com>
Graphic distortion effect when launching with empty page Safari after reset
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
index 323a351..acbfb3e 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
@@ -70,7 +70,7 @@
encoder->encode(textCheckerState);
encoder->encode(fullKeyboardAccessEnabled);
encoder->encode(defaultRequestTimeoutInterval);
-#if USE(CFURLSTORAGESESSIONS)
+#if PLATFORM(MAC) || USE(CFURLSTORAGESESSIONS)
encoder->encode(uiProcessBundleIdentifier);
#endif
#if PLATFORM(MAC)
@@ -147,7 +147,7 @@
return false;
if (!decoder->decode(parameters.defaultRequestTimeoutInterval))
return false;
-#if USE(CFURLSTORAGESESSIONS)
+#if PLATFORM(MAC) || USE(CFURLSTORAGESESSIONS)
if (!decoder->decode(parameters.uiProcessBundleIdentifier))
return false;
#endif
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.h b/Source/WebKit2/Shared/WebProcessCreationParameters.h
index 6781b04..68ff58c 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.h
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.h
@@ -85,7 +85,7 @@
double defaultRequestTimeoutInterval;
-#if USE(CFURLSTORAGESESSIONS)
+#if PLATFORM(MAC) || USE(CFURLSTORAGESESSIONS)
String uiProcessBundleIdentifier;
#endif
diff --git a/Source/WebKit2/UIProcess/mac/WebContextMac.mm b/Source/WebKit2/UIProcess/mac/WebContextMac.mm
index 785b95e..2430279 100644
--- a/Source/WebKit2/UIProcess/mac/WebContextMac.mm
+++ b/Source/WebKit2/UIProcess/mac/WebContextMac.mm
@@ -111,9 +111,7 @@
// FIXME: This should really be configurable; we shouldn't just blindly allow read access to the UI process bundle.
parameters.uiProcessBundleResourcePath = [[NSBundle mainBundle] resourcePath];
-#if USE(CFURLSTORAGESESSIONS)
parameters.uiProcessBundleIdentifier = String([[NSBundle mainBundle] bundleIdentifier]);
-#endif
// Listen for enhanced accessibility changes and propagate them to the WebProcess.
m_enhancedAccessibilityObserver = [[NSNotificationCenter defaultCenter] addObserverForName:WebKitApplicationDidChangeAccessibilityEnhancedUserInterfaceNotification object:nil queue:[NSOperationQueue currentQueue] usingBlock:^(NSNotification *note) {
diff --git a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb.in b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb.in
index 68b073b..b38c23c 100644
--- a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb.in
+++ b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb.in
@@ -93,11 +93,14 @@
(allow file*
(subpath "/private/var/db/mds/system"))
-;; FIXME: <rdar://problem/10792047> Use private user cache directory
+#if !defined(BUILDING_ON_LION)
+(if (positive? (string-length (param "DARWIN_USER_CACHE_DIR")))
+ (allow file* (subpath (param "DARWIN_USER_CACHE_DIR"))))
+#else
(if (positive? (string-length (param "DARWIN_USER_CACHE_DIR")))
(allow file* (subpath (string-append (param "DARWIN_USER_CACHE_DIR") "/mds"))))
+#endif
-;; FIXME: <rdar://problem/10785457> Use private temporary directory
(if (positive? (string-length (param "DARWIN_USER_TEMP_DIR")))
(allow file* (subpath (param "DARWIN_USER_TEMP_DIR"))))
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
index b5658d8..2aa8d5c 100644
--- a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
+++ b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
@@ -179,6 +179,18 @@
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);
+ static char temporaryDirectory[PATH_MAX];
+ if (!confstr(_CS_DARWIN_USER_TEMP_DIR, temporaryDirectory, sizeof(temporaryDirectory))) {
+ fprintf(stderr, "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.