Title: [267042] trunk
Revision
267042
Author
[email protected]
Date
2020-09-14 14:50:38 -0700 (Mon, 14 Sep 2020)

Log Message

Move cookie flushing SPI from WKProcessPool to WKHTTPCookieStore
https://bugs.webkit.org/show_bug.cgi?id=216493

Reviewed by Chris Dumez.

Source/WebKit:

In order for https://bugs.webkit.org/show_bug.cgi?id=216041 to be possible, our interface for flushing cookies to disk can't be
on the WKProcessPool.  It should be with the other cookie operations, in WKHTTPCookieStore.
AuxiliaryProcessProxy::sendWithAsyncReply takes care of the background assertion, so we remove that code from NetworkProcessProxy::syncAllCookies.
rdar://problem/68872711 tracks adoption in Safari, which I will land within an hour of landing this to avoid cookie regressions.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::syncAllCookies):
(WebKit::NetworkProcess::didSyncAllCookies): Deleted.
* NetworkProcess/NetworkProcess.h:
* NetworkProcess/NetworkProcess.messages.in:
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::syncAllCookies):
* UIProcess/API/APIHTTPCookieStore.cpp:
(API::HTTPCookieStore::syncCookies):
* UIProcess/API/APIHTTPCookieStore.h:
* UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
(-[WKHTTPCookieStore _flushCookiesToDiskWithCompletionHandler:]):
* UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
* UIProcess/API/Cocoa/WKProcessPool.mm:
(-[WKProcessPool _syncNetworkProcessCookies]):
* UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::didClose):
(WebKit::NetworkProcessProxy::syncAllCookies):
(WebKit::NetworkProcessProxy::didSyncAllCookies): Deleted.
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/WebProcessPool.cpp:
(WebKit::WebProcessPool::syncCookies):
(WebKit::WebProcessPool::syncNetworkProcessCookies): Deleted.
* UIProcess/WebProcessPool.h:
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::syncCookies):
* UIProcess/WebsiteData/WebsiteDataStore.h:

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
(runWebsiteDataStoreCustomPaths):
(TEST):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (267041 => 267042)


--- trunk/Source/WebKit/ChangeLog	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/ChangeLog	2020-09-14 21:50:38 UTC (rev 267042)
@@ -1,3 +1,45 @@
+2020-09-14  Alex Christensen  <[email protected]>
+
+        Move cookie flushing SPI from WKProcessPool to WKHTTPCookieStore
+        https://bugs.webkit.org/show_bug.cgi?id=216493
+
+        Reviewed by Chris Dumez.
+
+        In order for https://bugs.webkit.org/show_bug.cgi?id=216041 to be possible, our interface for flushing cookies to disk can't be
+        on the WKProcessPool.  It should be with the other cookie operations, in WKHTTPCookieStore.
+        AuxiliaryProcessProxy::sendWithAsyncReply takes care of the background assertion, so we remove that code from NetworkProcessProxy::syncAllCookies.
+        rdar://problem/68872711 tracks adoption in Safari, which I will land within an hour of landing this to avoid cookie regressions.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::syncAllCookies):
+        (WebKit::NetworkProcess::didSyncAllCookies): Deleted.
+        * NetworkProcess/NetworkProcess.h:
+        * NetworkProcess/NetworkProcess.messages.in:
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::syncAllCookies):
+        * UIProcess/API/APIHTTPCookieStore.cpp:
+        (API::HTTPCookieStore::syncCookies):
+        * UIProcess/API/APIHTTPCookieStore.h:
+        * UIProcess/API/Cocoa/WKHTTPCookieStore.mm:
+        (-[WKHTTPCookieStore _flushCookiesToDiskWithCompletionHandler:]):
+        * UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h:
+        * UIProcess/API/Cocoa/WKProcessPool.mm:
+        (-[WKProcessPool _syncNetworkProcessCookies]):
+        * UIProcess/API/Cocoa/WKProcessPoolPrivate.h:
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::didClose):
+        (WebKit::NetworkProcessProxy::syncAllCookies):
+        (WebKit::NetworkProcessProxy::didSyncAllCookies): Deleted.
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/WebProcessPool.cpp:
+        (WebKit::WebProcessPool::syncCookies):
+        (WebKit::WebProcessPool::syncNetworkProcessCookies): Deleted.
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::syncCookies):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+
 2020-09-14  Fujii Hironori  <[email protected]>
 
         [WinCairo][MediaFoundation] r264188 introduced linker warning: LNK4199: /DELAYLOAD:mf.dll ignored; no imports found from mf.dll

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (267041 => 267042)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2020-09-14 21:50:38 UTC (rev 267042)
@@ -275,7 +275,9 @@
         networkSession.flushAndDestroyPersistentStore([callbackAggregator] { });
     });
 #endif
-    platformSyncAllCookies([callbackAggregator] { });
+    forEachNetworkSession([&] (auto& networkSession) {
+        platformFlushCookies(networkSession.sessionID(), [callbackAggregator] { });
+    });
 }
 
 void NetworkProcess::didCreateDownload()
@@ -2280,7 +2282,9 @@
     WebResourceLoadStatisticsStore::suspend([callbackAggregator] { });
 #endif
 
-    platformSyncAllCookies([callbackAggregator] { });
+    forEachNetworkSession([&] (auto& networkSession) {
+        platformFlushCookies(networkSession.sessionID(), [callbackAggregator] { });
+    });
 
     for (auto& connection : m_webProcessConnections.values())
         connection->cleanupForSuspension([callbackAggregator] { });
@@ -2382,11 +2386,6 @@
     LegacySchemeRegistry::registerURLSchemeAsNoAccess(scheme);
 }
 
-void NetworkProcess::didSyncAllCookies()
-{
-    parentProcessConnection()->send(Messages::NetworkProcessProxy::DidSyncAllCookies(), 0);
-}
-
 #if ENABLE(INDEXED_DATABASE)
 Ref<WebIDBServer> NetworkProcess::createWebIDBServer(PAL::SessionID sessionID)
 {
@@ -2612,11 +2611,12 @@
 {
 }
 
-void NetworkProcess::syncAllCookies()
+void NetworkProcess::flushCookies(const PAL::SessionID&, CompletionHandler<void()>&& completionHandler)
 {
+    completionHandler();
 }
 
-void NetworkProcess::platformSyncAllCookies(CompletionHandler<void()>&& completionHandler)
+void NetworkProcess::platformFlushCookies(const PAL::SessionID&, CompletionHandler<void()>&& completionHandler)
 {
     completionHandler();
 }

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (267041 => 267042)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -443,8 +443,7 @@
     void allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo&, const String& host);
     void setAllowsAnySSLCertificateForWebSocket(bool, CompletionHandler<void()>&&);
     
-    void syncAllCookies();
-    void didSyncAllCookies();
+    void flushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);
 
 #if USE(SOUP)
     void setIgnoreTLSErrors(bool);
@@ -461,7 +460,7 @@
     static void setSharedHTTPCookieStorage(const Vector<uint8_t>& identifier);
 #endif
 
-    void platformSyncAllCookies(CompletionHandler<void()>&&);
+    void platformFlushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);
     
     void registerURLSchemeAsSecure(const String&) const;
     void registerURLSchemeAsBypassingContentSecurityPolicy(const String&) const;

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (267041 => 267042)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in	2020-09-14 21:50:38 UTC (rev 267042)
@@ -67,7 +67,7 @@
 #endif
     SetAllowsAnySSLCertificateForWebSocket(bool enabled) -> () Synchronous
 
-    SyncAllCookies()
+    FlushCookies(PAL::SessionID sessionID) -> () Async
 
     AllowSpecificHTTPSCertificateForHost(WebCore::CertificateInfo certificate, String host)
 

Modified: trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm (267041 => 267042)


--- trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/NetworkProcess/cocoa/NetworkProcessCocoa.mm	2020-09-14 21:50:38 UTC (rev 267042)
@@ -223,11 +223,9 @@
     WebCore::NetworkStorageSession::setStorageAccessAPIEnabled(enabled);
 }
 
-void NetworkProcess::syncAllCookies()
+void NetworkProcess::flushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler)
 {
-    platformSyncAllCookies([this] {
-        didSyncAllCookies();
-    });
+    platformFlushCookies(sessionID, WTFMove(completionHandler));
 }
 
 #if HAVE(FOUNDATION_WITH_SAVE_COOKIES_WITH_COMPLETION_HANDLER)
@@ -234,6 +232,7 @@
 static void saveCookies(NSHTTPCookieStorage *cookieStorage, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT(RunLoop::isMain());
+    ASSERT(cookieStorage);
     [cookieStorage _saveCookies:makeBlockPtr([completionHandler = WTFMove(completionHandler)]() mutable {
         // CFNetwork may call the completion block on a background queue, so we need to redispatch to the main thread.
         RunLoop::main().dispatch(WTFMove(completionHandler));
@@ -241,21 +240,20 @@
 }
 #endif
 
-void NetworkProcess::platformSyncAllCookies(CompletionHandler<void()>&& completionHander) {
+void NetworkProcess::platformFlushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler)
+{
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
-    ALLOW_DEPRECATED_DECLARATIONS_BEGIN
-
 #if HAVE(FOUNDATION_WITH_SAVE_COOKIES_WITH_COMPLETION_HANDLER)
-    RefPtr<CallbackAggregator> callbackAggregator = CallbackAggregator::create(WTFMove(completionHander));
-    forEachNetworkStorageSession([&] (auto& networkStorageSession) {
-        saveCookies(networkStorageSession.nsCookieStorage(), [callbackAggregator] { });
-    });
+    if (auto* networkStorageSession = storageSession(sessionID))
+        saveCookies(networkStorageSession->nsCookieStorage(), WTFMove(completionHandler));
+    else
+        completionHandler();
 #else
+    ALLOW_DEPRECATED_DECLARATIONS_BEGIN
     _CFHTTPCookieStorageFlushCookieStores();
-    completionHander();
+    ALLOW_DEPRECATED_DECLARATIONS_END
+    completionHandler();
 #endif
-
-    ALLOW_DEPRECATED_DECLARATIONS_END
 }
 
 void NetworkProcess::platformProcessDidTransitionToBackground()

Modified: trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp	2020-09-14 21:50:38 UTC (rev 267042)
@@ -189,6 +189,11 @@
     });
 }
 
+void HTTPCookieStore::flushCookies(CompletionHandler<void()>&& completionHandler)
+{
+    m_owningDataStore->flushCookies(WTFMove(completionHandler));
+}
+
 class APIWebCookieManagerProxyObserver : public WebCookieManagerProxy::Observer {
     WTF_MAKE_FAST_ALLOCATED;
 public:

Modified: trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -64,6 +64,7 @@
     
     void deleteAllCookies(CompletionHandler<void()>&&);
     void setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy, CompletionHandler<void()>&&);
+    void flushCookies(CompletionHandler<void()>&&);
 
     class Observer {
     public:

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStore.mm	2020-09-14 21:50:38 UTC (rev 267042)
@@ -146,4 +146,11 @@
     });
 }
 
+- (void)_flushCookiesToDiskWithCompletionHandler:(void(^)(void))completionHandler
+{
+    _cookieStore->flushCookies([completionHandler = makeBlockPtr(completionHandler)]() {
+        completionHandler();
+    });
+}
+
 @end

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKHTTPCookieStorePrivate.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -27,5 +27,6 @@
 
 @interface WKHTTPCookieStore (WKPrivate)
 - (void)_getCookiesForURL:(NSURL *)url completionHandler:(void (^)(NSArray<NSHTTPCookie *> *))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
-- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy completionHandler:(void (^)())completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)_setCookieAcceptPolicy:(NSHTTPCookieAcceptPolicy)policy completionHandler:(void (^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)_flushCookiesToDiskWithCompletionHandler:(void(^)(void))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 @end

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPool.mm	2020-09-14 21:50:38 UTC (rev 267042)
@@ -451,7 +451,6 @@
 
 - (void)_syncNetworkProcessCookies
 {
-    _processPool->syncNetworkProcessCookies();
 }
 
 - (void)_clearWebProcessCache

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKProcessPoolPrivate.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -104,7 +104,7 @@
 - (size_t)_webProcessCountIgnoringPrewarmedAndCached WK_API_AVAILABLE(macos(10.14.4), ios(12.2));
 - (size_t)_pluginProcessCount WK_API_AVAILABLE(macos(10.13.4), ios(11.3));
 - (size_t)_serviceWorkerProcessCount WK_API_AVAILABLE(macos(10.14), ios(12.0));
-- (void)_syncNetworkProcessCookies WK_API_AVAILABLE(macos(10.13), ios(11.0));
+- (void)_syncNetworkProcessCookies WK_API_DEPRECATED_WITH_REPLACEMENT("WKHTTPCookieStore._flushCookiesToDiskWithCompletionHandler:", macos(10.13, WK_MAC_TBA), ios(11.0, WK_IOS_TBA));
 - (void)_makeNextWebProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0));
 - (void)_makeNextNetworkProcessLaunchFailForTesting WK_API_AVAILABLE(macos(10.14), ios(12.0));
 - (NSUInteger)_maximumSuspendedPageCount WK_API_AVAILABLE(macos(10.14.4), ios(12.2));

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-09-14 21:50:38 UTC (rev 267042)
@@ -283,9 +283,6 @@
 #endif
 
     m_activityForHoldingLockedFiles = nullptr;
-    
-    m_syncAllCookiesActivity = nullptr;
-    m_syncAllCookiesCounter = 0;
 
     m_uploadActivity = WTF::nullopt;
 
@@ -1250,29 +1247,11 @@
     }
 }
 
-void NetworkProcessProxy::syncAllCookies()
+void NetworkProcessProxy::flushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler)
 {
-    send(Messages::NetworkProcess::SyncAllCookies(), 0);
-    
-    ++m_syncAllCookiesCounter;
-    if (m_syncAllCookiesActivity)
-        return;
-    
-    RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is syncing cookies", this);
-    m_syncAllCookiesActivity = throttler().backgroundActivity("Syncing cookies"_s).moveToUniquePtr();
+    sendWithAsyncReply(Messages::NetworkProcess::FlushCookies(sessionID), WTFMove(completionHandler));
 }
-    
-void NetworkProcessProxy::didSyncAllCookies()
-{
-    ASSERT(m_syncAllCookiesCounter);
 
-    --m_syncAllCookiesCounter;
-    if (!m_syncAllCookiesCounter) {
-        RELEASE_LOG(ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done syncing cookies", this);
-        m_syncAllCookiesActivity = nullptr;
-    }
-}
-
 void NetworkProcessProxy::addSession(Ref<WebsiteDataStore>&& store)
 {
     m_sessionIDs.add(store->sessionID());

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -198,8 +198,7 @@
 
     void setIsHoldingLockedFiles(bool);
 
-    void syncAllCookies();
-    void didSyncAllCookies();
+    void flushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);
 
     void testProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebPageProxyIdentifier, Messages::NetworkProcessProxy::TestProcessIncomingSyncMessagesWhenWaitingForSyncReplyDelayedReply&&);
     void terminateUnresponsiveServiceWorkerProcesses(WebCore::ProcessIdentifier);
@@ -325,10 +324,7 @@
 #endif
     ProcessThrottler m_throttler;
     std::unique_ptr<ProcessThrottler::BackgroundActivity> m_activityForHoldingLockedFiles;
-    std::unique_ptr<ProcessThrottler::BackgroundActivity> m_syncAllCookiesActivity;
     ProcessThrottler::ActivityVariant m_activityFromWebProcesses;
-    
-    unsigned m_syncAllCookiesCounter { 0 };
 
 #if ENABLE(CONTENT_EXTENSIONS)
     HashSet<WebUserContentControllerProxy*> m_webUserContentControllerProxies;

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-09-14 21:50:38 UTC (rev 267042)
@@ -29,8 +29,6 @@
     DidDeleteWebsiteData(WebKit::CallbackID callbackID)
     DidDeleteWebsiteDataForOrigins(WebKit::CallbackID callbackID)
 
-    DidSyncAllCookies()
-
     TestProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebKit::WebPageProxyIdentifier pageID) -> (bool handled) Synchronous
     TerminateUnresponsiveServiceWorkerProcesses(WebCore::ProcessIdentifier processIdentifier)
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-09-14 21:50:38 UTC (rev 267042)
@@ -1833,9 +1833,9 @@
 #endif
 }
 
-void WebProcessPool::syncNetworkProcessCookies()
+void WebProcessPool::flushCookies(const PAL::SessionID& sessionID, CompletionHandler<void()>&& completionHandler)
 {
-    ensureNetworkProcess().syncAllCookies();
+    ensureNetworkProcess().flushCookies(sessionID, WTFMove(completionHandler));
 }
 
 void WebProcessPool::syncLocalStorage(CompletionHandler<void()>&& completionHandler)

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -328,7 +328,7 @@
     void sendNetworkProcessDidResume();
     void terminateServiceWorkers();
 
-    void syncNetworkProcessCookies();
+    void flushCookies(const PAL::SessionID&, CompletionHandler<void()>&&);
     void syncLocalStorage(CompletionHandler<void()>&& callback);
     void clearLegacyPrivateBrowsingLocalStorage(CompletionHandler<void()>&& callback);
 

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2020-09-14 21:50:38 UTC (rev 267042)
@@ -2254,6 +2254,13 @@
     m_pendingCookies.clear();
 }
 
+void WebsiteDataStore::flushCookies(CompletionHandler<void()>&& completionHandler)
+{
+    auto callbackAggregator = CallbackAggregator::create(WTFMove(completionHandler));
+    for (auto processPool : WebProcessPool::allProcessPools())
+        processPool->flushCookies(sessionID(), [callbackAggregator] { });
+}
+
 void WebsiteDataStore::dispatchOnQueue(Function<void()>&& function)
 {
     m_queue->dispatch(WTFMove(function));

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (267041 => 267042)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2020-09-14 21:50:38 UTC (rev 267042)
@@ -238,6 +238,7 @@
     void addPendingCookie(const WebCore::Cookie&);
     void removePendingCookie(const WebCore::Cookie&);
     void clearPendingCookies();
+    void flushCookies(CompletionHandler<void()>&&);
 
     void dispatchOnQueue(Function<void()>&&);
 

Modified: trunk/Tools/ChangeLog (267041 => 267042)


--- trunk/Tools/ChangeLog	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Tools/ChangeLog	2020-09-14 21:50:38 UTC (rev 267042)
@@ -1,3 +1,14 @@
+2020-09-14  Alex Christensen  <[email protected]>
+
+        Move cookie flushing SPI from WKProcessPool to WKHTTPCookieStore
+        https://bugs.webkit.org/show_bug.cgi?id=216493
+
+        Reviewed by Chris Dumez.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm:
+        (runWebsiteDataStoreCustomPaths):
+        (TEST):
+
 2020-09-14  Jonathan Bedard  <[email protected]>
 
         [webkitcorepy] Disable AutoInstaller with environment variable (Follow-up fix)

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm (267041 => 267042)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm	2020-09-14 21:40:37 UTC (rev 267041)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsiteDataStoreCustomPaths.mm	2020-09-14 21:50:38 UTC (rev 267042)
@@ -32,6 +32,7 @@
 #import "TestNavigationDelegate.h"
 #import "TestWKWebView.h"
 #import <_javascript_Core/JSCConfig.h>
+#import <WebKit/WKHTTPCookieStorePrivate.h>
 #import <WebKit/WKPreferencesRef.h>
 #import <WebKit/WKProcessPoolPrivate.h>
 #import <WebKit/WKUserContentControllerPrivate.h>
@@ -148,7 +149,11 @@
     EXPECT_STREQ([getNextMessage().body UTF8String], "Exception: QuotaExceededError: The quota has been exceeded.");
     EXPECT_STREQ([getNextMessage().body UTF8String], "Success opening indexed database");
 
-    [[[webView configuration] processPool] _syncNetworkProcessCookies];
+    __block bool flushed = false;
+    [configuration.get().websiteDataStore.httpCookieStore _flushCookiesToDiskWithCompletionHandler:^{
+        flushed = true;
+    }];
+    TestWebKitAPI::Util::run(&flushed);
 
     // Forcibly shut down everything of WebKit that we can.
     auto pid = [webView _webProcessIdentifier];
@@ -418,7 +423,11 @@
     NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"WebsiteDataStoreCustomPaths" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     [webView loadRequest:request];
 
-    [[[webView configuration] processPool] _syncNetworkProcessCookies];
+    __block bool flushed = false;
+    [configuration.get().websiteDataStore.httpCookieStore _flushCookiesToDiskWithCompletionHandler:^{
+        flushed = true;
+    }];
+    TestWebKitAPI::Util::run(&flushed);
 
     // Forcibly shut down everything of WebKit that we can.
     auto pid = [webView _webProcessIdentifier];
@@ -493,7 +502,11 @@
     NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"WebsiteDataStoreCustomPaths" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     [webView loadRequest:request];
 
-    [[[webView configuration] processPool] _syncNetworkProcessCookies];
+    __block bool flushed = false;
+    [configuration.get().websiteDataStore.httpCookieStore _flushCookiesToDiskWithCompletionHandler:^{
+        flushed = true;
+    }];
+    TestWebKitAPI::Util::run(&flushed);
 
     // Forcibly shut down everything of WebKit that we can.
     auto pid = [webView _webProcessIdentifier];
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to