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.