2011-05-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2: Media files cannot be saved in the Application Cache due to a sandbox violation
        https://bugs.webkit.org/show_bug.cgi?id=61199

        Instead of using a sandbox extension to give permission to the application cache directory,
        initialize the sandbox with access to it like we do for other databases.

        * Shared/WebProcessCreationParameters.cpp:
        (WebKit::WebProcessCreationParameters::encode):
        (WebKit::WebProcessCreationParameters::decode):
        * Shared/WebProcessCreationParameters.h:
        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::ensureWebProcess):
        * WebProcess/WebProcess.cpp:
        (WebKit::WebProcess::initializeWebProcess):
        * WebProcess/com.apple.WebProcess.sb:
        * WebProcess/mac/WebProcessMac.mm:
        (WebKit::initializeSandbox):


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@86967 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index 706a0d0..2dd3709 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,25 @@
+2011-05-20  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        WebKit2: Media files cannot be saved in the Application Cache due to a sandbox violation
+        https://bugs.webkit.org/show_bug.cgi?id=61199
+
+        Instead of using a sandbox extension to give permission to the application cache directory,
+        initialize the sandbox with access to it like we do for other databases.
+
+        * Shared/WebProcessCreationParameters.cpp:
+        (WebKit::WebProcessCreationParameters::encode):
+        (WebKit::WebProcessCreationParameters::decode):
+        * Shared/WebProcessCreationParameters.h:
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::ensureWebProcess):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::initializeWebProcess):
+        * WebProcess/com.apple.WebProcess.sb:
+        * WebProcess/mac/WebProcessMac.mm:
+        (WebKit::initializeSandbox):
+
 2011-05-20  Jer Noble  <jer.noble@apple.com>
 
         Reviewed by Maciej Stachowiak.
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
index 001fa3c..4265125 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.cpp
@@ -51,7 +51,6 @@
     encoder->encode(injectedBundlePath);
     encoder->encode(injectedBundlePathExtensionHandle);
     encoder->encode(applicationCacheDirectory);
-    encoder->encode(applicationCacheDirectoryExtensionHandle);
     encoder->encode(databaseDirectory);
     encoder->encode(localStorageDirectory);
     encoder->encode(urlSchemesRegistererdAsEmptyDocument);
@@ -99,8 +98,6 @@
         return false;
     if (!decoder->decode(parameters.applicationCacheDirectory))
         return false;
-    if (!decoder->decode(parameters.applicationCacheDirectoryExtensionHandle))
-        return false;
     if (!decoder->decode(parameters.databaseDirectory))
         return false;
     if (!decoder->decode(parameters.localStorageDirectory))
diff --git a/Source/WebKit2/Shared/WebProcessCreationParameters.h b/Source/WebKit2/Shared/WebProcessCreationParameters.h
index e00ca556..7c8bb16 100644
--- a/Source/WebKit2/Shared/WebProcessCreationParameters.h
+++ b/Source/WebKit2/Shared/WebProcessCreationParameters.h
@@ -53,9 +53,7 @@
     String injectedBundlePath;
     SandboxExtension::Handle injectedBundlePathExtensionHandle;
 
-    String applicationCacheDirectory;
-    SandboxExtension::Handle applicationCacheDirectoryExtensionHandle;
-    
+    String applicationCacheDirectory;    
     String databaseDirectory;
     String localStorageDirectory;
     Vector<String> urlSchemesRegistererdAsEmptyDocument;
diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp
index f9aeea2..6cd64b1 100644
--- a/Source/WebKit2/UIProcess/WebContext.cpp
+++ b/Source/WebKit2/UIProcess/WebContext.cpp
@@ -221,13 +221,8 @@
 
     WebProcessCreationParameters parameters;
 
-    parameters.applicationCacheDirectory = applicationCacheDirectory();
-    if (!parameters.applicationCacheDirectory.isEmpty())
-        SandboxExtension::createHandle(parameters.applicationCacheDirectory, SandboxExtension::ReadWrite, parameters.applicationCacheDirectoryExtensionHandle);
-
     if (!injectedBundlePath().isEmpty()) {
         parameters.injectedBundlePath = injectedBundlePath();
-
         SandboxExtension::createHandle(parameters.injectedBundlePath, SandboxExtension::ReadOnly, parameters.injectedBundlePathExtensionHandle);
     }
 
@@ -240,7 +235,7 @@
 #if PLATFORM(MAC)
     parameters.presenterApplicationPid = getpid();
 #endif
-    
+
     copyToVector(m_schemesToRegisterAsEmptyDocument, parameters.urlSchemesRegistererdAsEmptyDocument);
     copyToVector(m_schemesToRegisterAsSecure, parameters.urlSchemesRegisteredAsSecure);
     copyToVector(m_schemesToSetDomainRelaxationForbiddenFor, parameters.urlSchemesForWhichDomainRelaxationIsForbidden);
diff --git a/Source/WebKit2/WebProcess/WebProcess.cpp b/Source/WebKit2/WebProcess/WebProcess.cpp
index 8b670ae..4c61eb9 100644
--- a/Source/WebKit2/WebProcess/WebProcess.cpp
+++ b/Source/WebKit2/WebProcess/WebProcess.cpp
@@ -194,12 +194,8 @@
 #endif
     
 #if ENABLE(OFFLINE_WEB_APPLICATIONS)
-    if (!parameters.applicationCacheDirectory.isEmpty()) {
-        m_applicationCachePathExtension = SandboxExtension::create(parameters.applicationCacheDirectoryExtensionHandle);
-        m_applicationCachePathExtension->consume();
-
+    if (!parameters.applicationCacheDirectory.isEmpty())
         cacheStorage().setCacheDirectory(parameters.applicationCacheDirectory);
-    }
 #endif
 
     setShouldTrackVisitedLinks(parameters.shouldTrackVisitedLinks);
diff --git a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
index 101435d..2f38604 100644
--- a/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
+++ b/Source/WebKit2/WebProcess/com.apple.WebProcess.sb
@@ -105,14 +105,18 @@
 (if (positive? (string-length (param "DARWIN_USER_TEMP_DIR")))
     (allow file* (subpath (param "DARWIN_USER_TEMP_DIR"))))
 
-;; Database dir
+;; Database directory.
 (if (positive? (string-length (param "WEBKIT_DATABASE_DIR")))
     (allow file* (subpath (param "WEBKIT_DATABASE_DIR"))))
 
-;; LocalStorage dir
+;; LocalStorage directory.
 (if (positive? (string-length (param "WEBKIT_LOCALSTORAGE_DIR")))
     (allow file* (subpath (param "WEBKIT_LOCALSTORAGE_DIR"))))
 
+;; ApplicationCache directory.
+(if (positive? (string-length (param "WEBKIT_APPLICATION_CACHE_DIR")))
+    (allow file* (subpath (param "WEBKIT_APPLICATION_CACHE_DIR"))))
+
 ;; The NSURLCache directory.
 (if (positive? (string-length (param "NSURL_CACHE_DIR")))
     (allow file* (subpath (param "NSURL_CACHE_DIR"))))
diff --git a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
index 07238f6..6912ccb 100644
--- a/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
+++ b/Source/WebKit2/WebProcess/mac/WebProcessMac.mm
@@ -187,6 +187,7 @@
     appendReadwriteSandboxDirectory(sandboxParameters, "HOME_DIR", NSHomeDirectory());
     appendReadwriteSandboxDirectory(sandboxParameters, "WEBKIT_DATABASE_DIR", parameters.databaseDirectory);
     appendReadwriteSandboxDirectory(sandboxParameters, "WEBKIT_LOCALSTORAGE_DIR", parameters.localStorageDirectory);
+    appendReadwriteSandboxDirectory(sandboxParameters, "WEBKIT_APPLICATION_CACHE_DIR", parameters.applicationCacheDirectory);
     appendReadwriteSandboxDirectory(sandboxParameters, "NSURL_CACHE_DIR", parameters.nsURLCachePath);
 
     sandboxParameters.append(static_cast<const char*>(0));