- 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];