Title: [215991] trunk
Revision
215991
Author
[email protected]
Date
2017-04-30 13:24:05 -0700 (Sun, 30 Apr 2017)

Log Message

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).
Source/WebCore:

No new tests (Covered by API test).

* platform/spi/cf/CFNetworkSPI.h:

Source/WebKit2:

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.

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsiteDataStoreCustomPaths.mm:
(TEST):

Modified Paths

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]);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to