Title: [128352] trunk/Source/WebKit2
Revision
128352
Author
a...@apple.com
Date
2012-09-12 13:05:36 -0700 (Wed, 12 Sep 2012)

Log Message

        <rdar://problem/12275537> REGRESSION(r127384): Non-existent directories are no longer created for sandbox paths
        https://bugs.webkit.org/show_bug.cgi?id=96442

        Reviewed by Darin Adler.

        * Shared/SandboxExtension.h:
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        * Shared/mac/SandboxExtensionMac.mm:
        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
        Added a function for read-write configuration directories. It matches
        appendReadwriteSandboxDirectory() function behavior from WebProcessMac.mm.

        * UIProcess/WebContext.cpp:
        (WebKit::WebContext::createNewWebProcess):
        * UIProcess/mac/WebContextMac.mm:
        (WebKit::WebContext::platformInitializeWebProcess):
        Use the new function for directories that need to be created if they don't exist.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (128351 => 128352)


--- trunk/Source/WebKit2/ChangeLog	2012-09-12 20:02:25 UTC (rev 128351)
+++ trunk/Source/WebKit2/ChangeLog	2012-09-12 20:05:36 UTC (rev 128352)
@@ -1,3 +1,23 @@
+2012-09-11  Alexey Proskuryakov  <a...@apple.com>
+
+        <rdar://problem/12275537> REGRESSION(r127384): Non-existent directories are no longer created for sandbox paths
+        https://bugs.webkit.org/show_bug.cgi?id=96442
+
+        Reviewed by Darin Adler.
+
+        * Shared/SandboxExtension.h:
+        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
+        * Shared/mac/SandboxExtensionMac.mm:
+        (WebKit::SandboxExtension::createHandleForReadWriteDirectory):
+        Added a function for read-write configuration directories. It matches
+        appendReadwriteSandboxDirectory() function behavior from WebProcessMac.mm.
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::createNewWebProcess):
+        * UIProcess/mac/WebContextMac.mm:
+        (WebKit::WebContext::platformInitializeWebProcess):
+        Use the new function for directories that need to be created if they don't exist.
+
 2012-09-12  Christophe Dumez  <christophe.du...@intel.com>
 
         [WK2][WKTR] TestRunner needs to implement originsWithApplicationCache

Modified: trunk/Source/WebKit2/Shared/SandboxExtension.h (128351 => 128352)


--- trunk/Source/WebKit2/Shared/SandboxExtension.h	2012-09-12 20:02:25 UTC (rev 128351)
+++ trunk/Source/WebKit2/Shared/SandboxExtension.h	2012-09-12 20:05:36 UTC (rev 128352)
@@ -92,6 +92,7 @@
     
     static PassRefPtr<SandboxExtension> create(const Handle&);
     static void createHandle(const String& path, Type type, Handle&);
+    static void createHandleForReadWriteDirectory(const String& path, Handle&); // Will attempt to create the directory.
     static String createHandleForTemporaryFile(const String& prefix, Type type, Handle&);
     ~SandboxExtension();
 
@@ -124,7 +125,8 @@
 inline void SandboxExtension::HandleArray::encode(CoreIPC::ArgumentEncoder*) const { }
 inline bool SandboxExtension::HandleArray::decode(CoreIPC::ArgumentDecoder*, HandleArray&) { return true; }
 inline PassRefPtr<SandboxExtension> SandboxExtension::create(const Handle&) { return 0; }
-inline void SandboxExtension::createHandle(const String& path, Type type, Handle&) { }
+inline void SandboxExtension::createHandle(const String&, Type, Handle&) { }
+inline void SandboxExtension::createHandleForReadWriteDirectory(const String&, Handle&) { }
 inline String SandboxExtension::createHandleForTemporaryFile(const String& prefix, Type type, Handle&) {return String();}
 inline SandboxExtension::~SandboxExtension() { }
 inline bool SandboxExtension::invalidate() { return true; }

Modified: trunk/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm (128351 => 128352)


--- trunk/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm	2012-09-12 20:02:25 UTC (rev 128351)
+++ trunk/Source/WebKit2/Shared/mac/SandboxExtensionMac.mm	2012-09-12 20:05:36 UTC (rev 128352)
@@ -219,7 +219,20 @@
     CString standardizedPath = resolveSymlinksInPath([[(NSString *)path stringByStandardizingPath] fileSystemRepresentation]);
     handle.m_sandboxExtension = WKSandboxExtensionCreate(standardizedPath.data(), wkSandboxExtensionType(type));
 }
-    
+
+void SandboxExtension::createHandleForReadWriteDirectory(const String& path, SandboxExtension::Handle& handle)
+{
+    NSError *error = nil;
+    NSString *nsPath = path;
+
+    if (![[NSFileManager defaultManager] createDirectoryAtPath:nsPath withIntermediateDirectories:YES attributes:nil error:&error]) {
+        NSLog(@"could not create \"%@\", error %@", nsPath, error);
+        return;
+    }
+
+    SandboxExtension::createHandle(path, SandboxExtension::ReadWrite, handle);
+}
+
 String SandboxExtension::createHandleForTemporaryFile(const String& prefix, Type type, Handle& handle)
 {
     ASSERT(!handle.m_sandboxExtension);

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (128351 => 128352)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-09-12 20:02:25 UTC (rev 128351)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-09-12 20:05:36 UTC (rev 128352)
@@ -319,15 +319,15 @@
 
     parameters.applicationCacheDirectory = applicationCacheDirectory();
     if (!parameters.applicationCacheDirectory.isEmpty())
-        SandboxExtension::createHandle(parameters.applicationCacheDirectory, SandboxExtension::ReadWrite, parameters.applicationCacheDirectoryExtensionHandle);
+        SandboxExtension::createHandleForReadWriteDirectory(parameters.applicationCacheDirectory, parameters.applicationCacheDirectoryExtensionHandle);
 
     parameters.databaseDirectory = databaseDirectory();
     if (!parameters.databaseDirectory.isEmpty())
-        SandboxExtension::createHandle(parameters.databaseDirectory, SandboxExtension::ReadWrite, parameters.databaseDirectoryExtensionHandle);
+        SandboxExtension::createHandleForReadWriteDirectory(parameters.databaseDirectory, parameters.databaseDirectoryExtensionHandle);
 
     parameters.localStorageDirectory = localStorageDirectory();
     if (!parameters.localStorageDirectory.isEmpty())
-        SandboxExtension::createHandle(parameters.localStorageDirectory, SandboxExtension::ReadWrite, parameters.localStorageDirectoryExtensionHandle);
+        SandboxExtension::createHandleForReadWriteDirectory(parameters.localStorageDirectory, parameters.localStorageDirectoryExtensionHandle);
 
     parameters.shouldTrackVisitedLinks = m_historyClient.shouldTrackVisitedLinks();
     parameters.cacheModel = m_cacheModel;

Modified: trunk/Source/WebKit2/UIProcess/mac/WebContextMac.mm (128351 => 128352)


--- trunk/Source/WebKit2/UIProcess/mac/WebContextMac.mm	2012-09-12 20:02:25 UTC (rev 128351)
+++ trunk/Source/WebKit2/UIProcess/mac/WebContextMac.mm	2012-09-12 20:05:36 UTC (rev 128352)
@@ -90,7 +90,7 @@
         cachePath = reinterpret_cast<CFStringRef>(NSHomeDirectory());
 
     parameters.nsURLCachePath = [(NSString *)cachePath.get() stringByStandardizingPath];
-    SandboxExtension::createHandle(parameters.nsURLCachePath, SandboxExtension::ReadWrite, parameters.nsURLCachePathExtensionHandle);
+    SandboxExtension::createHandleForReadWriteDirectory(parameters.nsURLCachePath, parameters.nsURLCachePathExtensionHandle);
     ASSERT(!parameters.nsURLCachePath.isEmpty());
 
     NSURLCache *urlCache = [NSURLCache sharedURLCache];
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to