Diff
Modified: trunk/Source/WebCore/ChangeLog (215990 => 215991)
--- trunk/Source/WebCore/ChangeLog 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebCore/ChangeLog 2017-04-30 20:24:05 UTC (rev 215991)
@@ -1,3 +1,14 @@
+2017-04-30 Brady Eidson <[email protected]>
+
+ Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
+ <rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483
+
+ Reviewed by Geoff Garen (and kind of Andy Estes).
+
+ No new tests (Covered by API test).
+
+ * platform/spi/cf/CFNetworkSPI.h:
+
2017-04-30 Dan Bernstein <[email protected]>
<rdar://problem/31906525> WebCore-7604.1.19 has failed to build
Modified: trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h (215990 => 215991)
--- trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebCore/platform/spi/cf/CFNetworkSPI.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -171,6 +171,13 @@
void CFHTTPCookieStorageDeleteAllCookies(CFHTTPCookieStorageRef);
+
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED <= 101200)
+void _CFHTTPCookieStorageFlushCookieStores();
+#else
+void CFHTTPCookieStorageFlushCookieStores();
+#endif
+
#if PLATFORM(COCOA)
CFDataRef _CFCachedURLResponseGetMemMappedData(CFCachedURLResponseRef);
#ifdef __BLOCKS__
Modified: trunk/Source/WebKit2/ChangeLog (215990 => 215991)
--- trunk/Source/WebKit2/ChangeLog 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-30 20:24:05 UTC (rev 215991)
@@ -1,5 +1,61 @@
2017-04-30 Brady Eidson <[email protected]>
+ Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
+ <rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483
+
+ Reviewed by Geoff Garen (and kind of Andy Estes).
+
+ Updates include:
+ -Taking a file path as the config argument instead of a directory.
+ -Proper sandbox extension handling.
+ -Proper and thorough API test.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::syncAllCookies):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+
+ * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+ (WebKit::NetworkProcess::syncAllCookies):
+
+ * NetworkProcess/mac/RemoteNetworkingContext.mm:
+ (WebKit::RemoteNetworkingContext::ensureWebsiteDataStoreSession):
+
+ * Shared/WebsiteDataStoreParameters.cpp:
+ (WebKit::WebsiteDataStoreParameters::encode):
+ (WebKit::WebsiteDataStoreParameters::decode):
+ * Shared/WebsiteDataStoreParameters.h:
+
+ * UIProcess/API/Cocoa/WKProcessPool.mm:
+ (-[WKProcessPool _syncNetworkProcessCookies]):
+ * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+
+ * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+ (-[WKWebsiteDataStore _initWithConfiguration:]):
+
+ * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h:
+ * UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm:
+ (-[_WKWebsiteDataStoreConfiguration _cookieStoragePath]):
+ (-[_WKWebsiteDataStoreConfiguration _setCookieStoragePath:]):
+ (-[_WKWebsiteDataStoreConfiguration _cookieStorageDirectory]): Deleted.
+ (-[_WKWebsiteDataStoreConfiguration _setCookieStorageDirectory:]): Deleted.
+
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::syncNetworkProcessCookies):
+ * UIProcess/WebProcessPool.h:
+
+ * UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm:
+ (WebKit::WebsiteDataStore::parameters):
+
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::resolveDirectoriesIfNecessary):
+
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+ (WebKit::WebsiteDataStore::resolvedCookieStoragePath):
+ (WebKit::WebsiteDataStore::resolvedCookieStorageDirectory): Deleted.
+
+2017-04-30 Brady Eidson <[email protected]>
+
Regression (r215941) Unexpected logging causes perf tests to fail.
<rdar://problem/31907269> and https://bugs.webkit.org/show_bug.cgi?id=171482
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (215990 => 215991)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2017-04-30 20:24:05 UTC (rev 215991)
@@ -677,6 +677,10 @@
void NetworkProcess::initializeSandbox(const ChildProcessInitializationParameters&, SandboxInitializationParameters&)
{
}
+
+void NetworkProcess::syncAllCookies()
+{
+}
#endif
} // namespace WebKit
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (215990 => 215991)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -192,6 +192,7 @@
void getNetworkProcessStatistics(uint64_t callbackID);
void clearCacheForAllOrigins(uint32_t cachesToClear);
void setAllowsAnySSLCertificateForWebSocket(bool);
+ void syncAllCookies();
void didGrantSandboxExtensionsToDatabaseProcessForBlobs(uint64_t requestID);
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in (215990 => 215991)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in 2017-04-30 20:24:05 UTC (rev 215991)
@@ -65,6 +65,8 @@
#endif
SetAllowsAnySSLCertificateForWebSocket(bool enabled) -> ()
+ SyncAllCookies() -> ()
+
AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host)
SetCanHandleHTTPSServerTrustEvaluation(bool value)
Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm (215990 => 215991)
--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -208,4 +208,15 @@
WebCore::NetworkStorageSession::setCookieStoragePartitioningEnabled(enabled);
}
+void NetworkProcess::syncAllCookies()
+{
+#if !PLATFORM(IOS)
+#if (__MAC_OS_X_VERSION_MIN_REQUIRED <= 101200)
+ _CFHTTPCookieStorageFlushCookieStores();
+#else
+ CFHTTPCookieStorageFlushCookieStores();
+#endif
+#endif
}
+
+}
Modified: trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm (215990 => 215991)
--- trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -112,17 +112,14 @@
else
base = SessionTracker::getIdentifierBase();
-#if PLATFORM(IOS)
- SandboxExtension::consumePermanently(parameters.cookieStorageDirectoryExtensionHandle);
-#endif
+ SandboxExtension::consumePermanently(parameters.cookieStoragePathExtensionHandle);
RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage;
+ if (!parameters.uiProcessCookieStorageIdentifier.isEmpty()) {
+ RetainPtr<CFDataRef> cookieStorageData = adoptCF(CFDataCreate(kCFAllocatorDefault, parameters.uiProcessCookieStorageIdentifier.data(), parameters.uiProcessCookieStorageIdentifier.size()));
+ uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
+ }
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
- RetainPtr<CFDataRef> cookieStorageData = adoptCF(CFDataCreate(kCFAllocatorDefault, parameters.uiProcessCookieStorageIdentifier.data(), parameters.uiProcessCookieStorageIdentifier.size()));
- uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
-#endif
-
NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
#if USE(NETWORK_SESSION)
Modified: trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.cpp (215990 => 215991)
--- trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.cpp 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.cpp 2017-04-30 20:24:05 UTC (rev 215991)
@@ -38,12 +38,8 @@
void WebsiteDataStoreParameters::encode(IPC::Encoder& encoder) const
{
encoder << sessionID;
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
encoder << uiProcessCookieStorageIdentifier;
-#endif
-#if PLATFORM(IOS)
- encoder << cookieStorageDirectoryExtensionHandle;
-#endif
+ encoder << cookieStoragePathExtensionHandle;
}
bool WebsiteDataStoreParameters::decode(IPC::Decoder& decoder, WebsiteDataStoreParameters& parameters)
@@ -51,15 +47,11 @@
if (!decoder.decode(parameters.sessionID))
return false;
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
if (!decoder.decode(parameters.uiProcessCookieStorageIdentifier))
return false;
-#endif
-#if PLATFORM(IOS)
- if (!decoder.decode(parameters.cookieStorageDirectoryExtensionHandle))
+ if (!decoder.decode(parameters.cookieStoragePathExtensionHandle))
return false;
-#endif
return true;
}
Modified: trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.h (215990 => 215991)
--- trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/Shared/WebsiteDataStoreParameters.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -44,13 +44,8 @@
static bool decode(IPC::Decoder&, WebsiteDataStoreParameters&);
WebCore::SessionID sessionID;
-
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
Vector<uint8_t> uiProcessCookieStorageIdentifier;
-#endif
-#if PLATFORM(IOS)
- SandboxExtension::Handle cookieStorageDirectoryExtensionHandle;
-#endif
+ SandboxExtension::Handle cookieStoragePathExtensionHandle;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPool.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -292,6 +292,11 @@
_processPool->terminateDatabaseProcess();
}
+- (void)_syncNetworkProcessCookies
+{
+ _processPool->syncNetworkProcessCookies();
+}
+
- (size_t)_webProcessCount
{
return _processPool->processes().size();
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKProcessPoolPrivate.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -71,6 +71,7 @@
// Test only.
- (size_t)_webProcessCount;
+- (void)_syncNetworkProcessCookies;
// Test only. Should be called before any web content processes are launched.
+ (void)_forceGameControllerFramework;
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -160,8 +160,8 @@
config.webSQLDatabaseDirectory = configuration._webSQLDatabaseDirectory.path;
if (configuration._indexedDBDatabaseDirectory)
config.indexedDBDatabaseDirectory = configuration._indexedDBDatabaseDirectory.path;
- if (configuration._cookieStorageDirectory)
- config.cookieStorageDirectory = configuration._cookieStorageDirectory.path;
+ if (configuration._cookieStorageFile)
+ config.cookieStorageFile = configuration._cookieStorageFile.path;
API::Object::constructInWrapper<API::WebsiteDataStore>(self, config, WebCore::SessionID::generatePersistentSessionID());
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -37,7 +37,7 @@
@property (nonatomic, copy, setter=_setWebStorageDirectory:) NSURL *_webStorageDirectory;
@property (nonatomic, copy, setter=_setIndexedDBDatabaseDirectory:) NSURL *_indexedDBDatabaseDirectory;
@property (nonatomic, copy, setter=_setWebSQLDatabaseDirectory:) NSURL *_webSQLDatabaseDirectory;
-@property (nonatomic, copy, setter=_setCookieStorageDirectory:) NSURL *_cookieStorageDirectory WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+@property (nonatomic, copy, setter=_setCookieStorageFile:) NSURL *_cookieStorageFile WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
@end
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsiteDataStoreConfiguration.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -40,7 +40,7 @@
RetainPtr<NSURL> _webStorageDirectoryURL;
RetainPtr<NSURL> _indexedDBDatabaseDirectoryURL;
RetainPtr<NSURL> _webSQLDatabaseDirectoryURL;
- RetainPtr<NSURL> _cookieStorageDirectoryURL;
+ RetainPtr<NSURL> _cookieStorageFileURL;
}
-(NSURL *)_webStorageDirectory {
@@ -70,13 +70,16 @@
_webSQLDatabaseDirectoryURL = adoptNS([url copy]);
}
--(NSURL *)_cookieStorageDirectory {
- return _cookieStorageDirectoryURL.get();
+-(NSURL *)_cookieStorageFile {
+ return _cookieStorageFileURL.get();
}
--(void)_setCookieStorageDirectory:(NSURL *)url {
+-(void)_setCookieStorageFile:(NSURL *)url {
checkURLArgument(url);
- _cookieStorageDirectoryURL = adoptNS([url copy]);
+ if ([url hasDirectoryPath])
+ [NSException raise:NSInvalidArgumentException format:@"The cookie storage path must point to a file, not a directory."];
+
+ _cookieStorageFileURL = adoptNS([url copy]);
}
@end
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.cpp 2017-04-30 20:24:05 UTC (rev 215991)
@@ -1319,6 +1319,11 @@
m_networkProcess = nullptr;
}
+void WebProcessPool::syncNetworkProcessCookies()
+{
+ sendSyncToNetworkingProcess(Messages::NetworkProcess::SyncAllCookies(), Messages::NetworkProcess::SyncAllCookies::Reply());
+}
+
void WebProcessPool::allowSpecificHTTPSCertificateForHost(const WebCertificateInfo* certificate, const String& host)
{
ensureNetworkProcess();
Modified: trunk/Source/WebKit2/UIProcess/WebProcessPool.h (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/WebProcessPool.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -264,6 +264,8 @@
void terminateDatabaseProcess();
void terminateNetworkProcess();
+ void syncNetworkProcessCookies();
+
void reportWebContentCPUTime(Seconds cpuTime, uint64_t activityState);
void allowSpecificHTTPSCertificateForHost(const WebCertificateInfo*, const String& host);
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/Cocoa/WebsiteDataStoreCocoa.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -30,6 +30,7 @@
#import "WebResourceLoadStatisticsStore.h"
#import "WebsiteDataStoreParameters.h"
#import <WebCore/CFNetworkSPI.h>
+#import <WebCore/FileSystem.h>
#import <WebCore/SearchPopupMenuCocoa.h>
#import <wtf/NeverDestroyed.h>
@@ -54,10 +55,12 @@
parameters.sessionID = m_sessionID;
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
+ auto cookieFile = resolvedCookieStorageFile();
+
+#if PLATFORM(COCOA)
if (m_uiProcessCookieStorageIdentifier.isEmpty()) {
- auto cookiePath = resolvedCookieStorageDirectory().utf8();
- auto url = "" (const UInt8 *)cookiePath.data(), (CFIndex)cookiePath.length(), true));
+ auto utf8File = cookieFile.utf8();
+ auto url = "" (const UInt8 *)utf8File.data(), (CFIndex)utf8File.length(), true));
m_cfCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromFile(kCFAllocatorDefault, url.get(), nullptr));
auto cfData = adoptCF(CFHTTPCookieStorageCreateIdentifyingData(kCFAllocatorDefault, m_cfCookieStorage.get()));
@@ -65,14 +68,11 @@
}
parameters.uiProcessCookieStorageIdentifier = m_uiProcessCookieStorageIdentifier;
-#endif // PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
-
-#if PLATFORM(IOS)
- String cookieStorageDirectory = resolvedCookieStorageDirectory();
- if (!cookieStorageDirectory.isEmpty())
- SandboxExtension::createHandleForReadWriteDirectory(cookieStorageDirectory, parameters.cookieStorageDirectoryExtensionHandle);
#endif
+ if (!cookieFile.isEmpty())
+ SandboxExtension::createHandleForReadWriteDirectory(WebCore::directoryName(cookieFile), parameters.cookieStoragePathExtensionHandle);
+
return parameters;
}
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp 2017-04-30 20:24:05 UTC (rev 215991)
@@ -40,6 +40,7 @@
#include "WebsiteDataStoreParameters.h"
#include <WebCore/ApplicationCacheStorage.h>
#include <WebCore/DatabaseTracker.h>
+#include <WebCore/FileSystem.h>
#include <WebCore/HTMLMediaElement.h>
#include <WebCore/OriginLock.h>
#include <WebCore/ResourceLoadObserver.h>
@@ -112,6 +113,7 @@
return;
m_hasResolvedDirectories = true;
+ // Resolve directory paths.
m_resolvedConfiguration.applicationCacheDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.applicationCacheDirectory);
m_resolvedConfiguration.mediaCacheDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.mediaCacheDirectory);
m_resolvedConfiguration.mediaKeysStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.mediaKeysStorageDirectory);
@@ -118,11 +120,14 @@
m_resolvedConfiguration.webSQLDatabaseDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.webSQLDatabaseDirectory);
m_resolvedConfiguration.indexedDBDatabaseDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.indexedDBDatabaseDirectory);
- if (!m_configuration.cookieStorageDirectory.isEmpty())
- m_resolvedConfiguration.cookieStorageDirectory = resolveAndCreateReadWriteDirectoryForSandboxExtension(m_configuration.cookieStorageDirectory);
-
if (!m_configuration._javascript_ConfigurationDirectory.isEmpty())
m_resolvedConfiguration._javascript_ConfigurationDirectory = resolvePathForSandboxExtension(m_configuration._javascript_ConfigurationDirectory);
+
+ // Resolve directories for file paths.
+ if (!m_configuration.cookieStorageFile.isEmpty()) {
+ m_resolvedConfiguration.cookieStorageFile = resolveAndCreateReadWriteDirectoryForSandboxExtension(WebCore::directoryName(m_configuration.cookieStorageFile));
+ m_resolvedConfiguration.cookieStorageFile = WebCore::pathByAppendingComponent(m_resolvedConfiguration.cookieStorageFile, WebCore::pathGetFileName(m_configuration.cookieStorageFile));
+ }
}
void WebsiteDataStore::cloneSessionData(WebPageProxy& sourcePage, WebPageProxy& newPage)
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (215990 => 215991)
--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h 2017-04-30 20:24:05 UTC (rev 215991)
@@ -37,7 +37,7 @@
#include <wtf/WorkQueue.h>
#include <wtf/text/WTFString.h>
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
+#if PLATFORM(COCOA)
#include <WebCore/CFNetworkSPI.h>
#endif
@@ -75,7 +75,7 @@
String mediaKeysStorageDirectory;
String resourceLoadStatisticsDirectory;
String _javascript_ConfigurationDirectory;
- String cookieStorageDirectory;
+ String cookieStorageFile;
};
static Ref<WebsiteDataStore> createNonPersistent();
static Ref<WebsiteDataStore> create(Configuration, WebCore::SessionID);
@@ -107,7 +107,7 @@
const String& resolvedMediaKeysDirectory() const { return m_resolvedConfiguration.mediaKeysStorageDirectory; }
const String& resolvedDatabaseDirectory() const { return m_resolvedConfiguration.webSQLDatabaseDirectory; }
const String& resolvedJavaScriptConfigurationDirectory() const { return m_resolvedConfiguration._javascript_ConfigurationDirectory; }
- const String& resolvedCookieStorageDirectory() const { return m_resolvedConfiguration.cookieStorageDirectory; }
+ const String& resolvedCookieStorageFile() const { return m_resolvedConfiguration.cookieStorageFile; }
const String& resolvedIndexedDatabaseDirectory() const { return m_resolvedConfiguration.indexedDBDatabaseDirectory; }
StorageManager* storageManager() { return m_storageManager.get(); }
@@ -156,7 +156,7 @@
Ref<WorkQueue> m_queue;
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
+#if PLATFORM(COCOA)
Vector<uint8_t> m_uiProcessCookieStorageIdentifier;
RetainPtr<CFHTTPCookieStorageRef> m_cfCookieStorage;
#endif
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm (215990 => 215991)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -77,16 +77,10 @@
else
base = SessionTracker::getIdentifierBase();
-#if PLATFORM(IOS)
- SandboxExtension::consumePermanently(parameters.cookieStorageDirectoryExtensionHandle);
-#endif
+ SandboxExtension::consumePermanently(parameters.cookieStoragePathExtensionHandle);
- RetainPtr<CFHTTPCookieStorageRef> uiProcessCookieStorage;
-
-#if PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101100
RetainPtr<CFDataRef> cookieStorageData = adoptCF(CFDataCreate(kCFAllocatorDefault, parameters.uiProcessCookieStorageIdentifier.data(), parameters.uiProcessCookieStorageIdentifier.size()));
- uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
-#endif
+ auto uiProcessCookieStorage = adoptCF(CFHTTPCookieStorageCreateFromIdentifyingData(kCFAllocatorDefault, cookieStorageData.get()));
NetworkStorageSession::ensureSession(parameters.sessionID, base + '.' + String::number(parameters.sessionID.sessionID()), WTFMove(uiProcessCookieStorage));
Modified: trunk/Tools/ChangeLog (215990 => 215991)
--- trunk/Tools/ChangeLog 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Tools/ChangeLog 2017-04-30 20:24:05 UTC (rev 215991)
@@ -1,3 +1,13 @@
+2017-04-30 Brady Eidson <[email protected]>
+
+ Updates to _WKWebsiteDataStoreConfiguration cookie storage location SPI.
+ <rdar://problem/31906397> and https://bugs.webkit.org/show_bug.cgi?id=171483
+
+ Reviewed by Geoff Garen (and kind of Andy Estes).
+
+ * TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
+ (TEST):
+
2017-04-30 Joanmarie Diggs <[email protected]>
[ATK] Implement support for aria-autocomplete
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm (215990 => 215991)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm 2017-04-30 19:52:24 UTC (rev 215990)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm 2017-04-30 20:24:05 UTC (rev 215991)
@@ -74,19 +74,19 @@
RetainPtr<WKWebViewConfiguration> configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
[[configuration userContentController] addScriptMessageHandler:handler.get() name:@"testHandler"];
- NSURL *sqlPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/WebSQL/" stringByExpandingTildeInPath]];
- NSURL *idbPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/IndexedDB/" stringByExpandingTildeInPath]];
- NSURL *localStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/LocalStorage/" stringByExpandingTildeInPath]];
- NSURL *cookieStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/CookieStorage/" stringByExpandingTildeInPath]];
+ NSURL *sqlPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/WebSQL/" stringByExpandingTildeInPath] isDirectory:YES];
+ NSURL *idbPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/IndexedDB/" stringByExpandingTildeInPath] isDirectory:YES];
+ NSURL *localStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/LocalStorage/" stringByExpandingTildeInPath] isDirectory:YES];
+ NSURL *cookieStorageFile = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/CustomWebsiteData/CookieStorage/Cookie.File" stringByExpandingTildeInPath] isDirectory:NO];
- NSURL *defaultSQLPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/WebSQL/" stringByExpandingTildeInPath]];
- NSURL *defaultIDBPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/IndexedDB/" stringByExpandingTildeInPath]];
- NSURL *defaultLocalStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/LocalStorage/" stringByExpandingTildeInPath]];
+ NSURL *defaultSQLPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/WebSQL/" stringByExpandingTildeInPath] isDirectory:YES];
+ NSURL *defaultIDBPath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/IndexedDB/" stringByExpandingTildeInPath] isDirectory:YES];
+ NSURL *defaultLocalStoragePath = [NSURL fileURLWithPath:[@"~/Library/WebKit/TestWebKitAPI/WebsiteData/LocalStorage/" stringByExpandingTildeInPath] isDirectory:YES];
[[NSFileManager defaultManager] removeItemAtURL:sqlPath error:nil];
[[NSFileManager defaultManager] removeItemAtURL:idbPath error:nil];
[[NSFileManager defaultManager] removeItemAtURL:localStoragePath error:nil];
- [[NSFileManager defaultManager] removeItemAtURL:cookieStoragePath error:nil];
+ [[NSFileManager defaultManager] removeItemAtURL:cookieStorageFile error:nil];
[[NSFileManager defaultManager] removeItemAtURL:defaultSQLPath error:nil];
[[NSFileManager defaultManager] removeItemAtURL:defaultIDBPath error:nil];
[[NSFileManager defaultManager] removeItemAtURL:defaultLocalStoragePath error:nil];
@@ -94,7 +94,7 @@
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:sqlPath.path]);
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:idbPath.path]);
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:localStoragePath.path]);
- EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:cookieStoragePath.path]);
+ EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:cookieStorageFile.path]);
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultSQLPath.path]);
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultIDBPath.path]);
EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:defaultLocalStoragePath.path]);
@@ -103,7 +103,7 @@
websiteDataStoreConfiguration._webSQLDatabaseDirectory = sqlPath;
websiteDataStoreConfiguration._indexedDBDatabaseDirectory = idbPath;
websiteDataStoreConfiguration._webStorageDirectory = localStoragePath;
- websiteDataStoreConfiguration._cookieStorageDirectory = cookieStoragePath;
+ websiteDataStoreConfiguration._cookieStorageFile = cookieStorageFile;
configuration.get().websiteDataStore = [[WKWebsiteDataStore alloc] _initWithConfiguration:websiteDataStoreConfiguration];
[websiteDataStoreConfiguration release];
@@ -125,9 +125,18 @@
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:idbPath.path]);
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultIDBPath.path]);
- // FIXME: This should be true, but comes up false. Possibly a CFNetwork issue. Being explored in <rdar://problem/31666275>
- EXPECT_FALSE([[NSFileManager defaultManager] fileExistsAtPath:cookieStoragePath.path]);
+ [[[webView configuration] processPool] _syncNetworkProcessCookies];
+ EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:cookieStorageFile.path]);
+ // Note: The format of the cookie file on disk is proprietary and opaque, so this is fragile to future changes.
+ // But right now, it is reliable to scan the file for the ASCII string of the cookie name we set.
+ // This helps verify that the cookie file was actually written to as we'd expect.
+ auto data = "" alloc] initWithContentsOfURL:cookieStorageFile]);
+ char bytes[] = "testkey";
+ auto cookieKeyData = adoptNS([[NSData alloc] initWithBytes:(void *)bytes length:strlen(bytes)]);
+ auto result = [data rangeOfData:cookieKeyData.get() options:0 range:NSMakeRange(0, data.get().length)];
+ EXPECT_NE((const long)result.location, NSNotFound);
+
// FIXME: The default SQL and LocalStorage paths are being used for something, but they shouldn't be. (theses should be false, not true)
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultSQLPath.path]);
EXPECT_TRUE([[NSFileManager defaultManager] fileExistsAtPath:defaultLocalStoragePath.path]);