Title: [294947] trunk/Source
Revision
294947
Author
achristen...@apple.com
Date
2022-05-27 12:20:27 -0700 (Fri, 27 May 2022)

Log Message

Move disk operations when deleting cookies off from the main thread
https://bugs.webkit.org/show_bug.cgi?id=240981
<rdar://92415240>

Reviewed by Geoff Garen.

This should reduce hangs and increase responsiveness.

* Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h:
* Source/WebCore/inspector/agents/InspectorPageAgent.cpp:
(WebCore::InspectorPageAgent::deleteCookie):
* Source/WebCore/loader/CookieJar.cpp:
(WebCore::CookieJar::deleteCookie):
* Source/WebCore/loader/CookieJar.h:
* Source/WebCore/platform/network/NetworkStorageSession.h:
* Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm:
(WebCore::NetworkStorageSession::deleteCookie):
(WebCore::NetworkStorageSession::setAllCookiesToSameSiteStrict):
(WebCore::NetworkStorageSession::deleteHTTPCookie const):
(WebCore::NetworkStorageSession::deleteCookie const):
(WebCore::NetworkStorageSession::deleteAllCookies):
(WebCore::NetworkStorageSession::deleteCookiesForHostnames):
(WebCore::NetworkStorageSession::deleteAllCookiesModifiedSince):
(WebCore::NetworkStorageSession::flushCookieStore): Deleted.
(WebCore::deleteAllHTTPCookies): Deleted.
* Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp:
(WebKit::WebCookieManager::deleteCookiesForHostnames):
(WebKit::WebCookieManager::deleteAllCookies):
(WebKit::WebCookieManager::deleteCookie):
(WebKit::WebCookieManager::deleteAllCookiesModifiedSince):
* Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h:
* Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::deleteCookie):
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h:
* Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in:
* Source/WebKit/NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::deleteWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
(WebKit::NetworkProcess::deleteAndRestrictWebsiteDataForRegistrableDomains):
* Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp:
(API::HTTPCookieStore::deleteAllCookies):
* Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::WebAutomationSession::deleteAllCookies):
* Source/WebKit/UIProcess/WebCookieManagerProxy.cpp:
(WebKit::WebCookieManagerProxy::deleteCookiesForHostnames):
(WebKit::WebCookieManagerProxy::deleteAllCookies):
* Source/WebKit/UIProcess/WebCookieManagerProxy.h:
* Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp:
(WebKit::WebAutomationSessionProxy::deleteCookie):
* Source/WebKit/WebProcess/WebPage/WebCookieCache.cpp:
(WebKit::WebCookieCache::cookiesDeleted):
(WebKit::WebCookieCache::clearForHost):
* Source/WebKit/WebProcess/WebPage/WebCookieJar.cpp:
(WebKit::WebCookieJar::deleteCookie):
* Source/WebKit/WebProcess/WebPage/WebCookieJar.h:
* Source/WebKitLegacy/mac/WebView/WebPreferences.mm:
(+[WebPreferences _clearNetworkLoaderSession]):

Canonical link: https://commits.webkit.org/251055@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h (294946 => 294947)


--- trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/PAL/pal/spi/cf/CFNetworkSPI.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -168,7 +168,6 @@
 - (void)removeCookiesSinceDate:(NSDate *)date;
 - (id)_initWithCFHTTPCookieStorage:(CFHTTPCookieStorageRef)cfStorage;
 - (CFHTTPCookieStorageRef)_cookieStorage;
-- (void)_saveCookies;
 - (void)_saveCookies:(dispatch_block_t) completionHandler;
 #if HAVE(CFNETWORK_OVERRIDE_SESSION_COOKIE_ACCEPT_POLICY)
 @property (nonatomic, readwrite) BOOL _overrideSessionCookieAcceptPolicy;

Modified: trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp (294946 => 294947)


--- trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/inspector/agents/InspectorPageAgent.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -674,7 +674,7 @@
     for (Frame* frame = &m_inspectedPage.mainFrame(); frame; frame = frame->tree().traverseNext()) {
         if (auto* document = frame->document()) {
             if (auto* page = document->page())
-                page->cookieJar().deleteCookie(*document, parsedURL, cookieName);
+                page->cookieJar().deleteCookie(*document, parsedURL, cookieName, [] { });
         }
     }
 

Modified: trunk/Source/WebCore/loader/CookieJar.cpp (294946 => 294947)


--- trunk/Source/WebCore/loader/CookieJar.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/loader/CookieJar.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -186,12 +186,14 @@
         ASSERT_NOT_REACHED();
 }
 
-void CookieJar::deleteCookie(const Document&, const URL& url, const String& cookieName)
+void CookieJar::deleteCookie(const Document&, const URL& url, const String& cookieName, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* session = m_storageSessionProvider->storageSession())
-        session->deleteCookie(url, cookieName);
-    else
+        session->deleteCookie(url, cookieName, WTFMove(completionHandler));
+    else {
         ASSERT_NOT_REACHED();
+        completionHandler();
+    }
 }
 
 }

Modified: trunk/Source/WebCore/loader/CookieJar.h (294946 => 294947)


--- trunk/Source/WebCore/loader/CookieJar.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/loader/CookieJar.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -60,7 +60,7 @@
     virtual std::pair<String, SecureCookiesAccessed> cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, IncludeSecureCookies) const;
     virtual bool getRawCookies(const Document&, const URL&, Vector<Cookie>&) const;
     virtual void setRawCookie(const Document&, const Cookie&);
-    virtual void deleteCookie(const Document&, const URL&, const String& cookieName);
+    virtual void deleteCookie(const Document&, const URL&, const String& cookieName, CompletionHandler<void()>&&);
 
     // Cookie Cache.
     virtual void clearCache() { }

Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp (294946 => 294947)


--- trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -27,6 +27,7 @@
 #include "NetworkStorageSession.h"
 
 #include "Cookie.h"
+#include "CookieJar.h"
 #include "HTTPCookieAcceptPolicy.h"
 #include "RuntimeApplicationChecks.h"
 #include <wtf/NeverDestroyed.h>
@@ -431,4 +432,9 @@
 
 #endif // ENABLE(INTELLIGENT_TRACKING_PREVENTION)
 
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames, CompletionHandler<void()>&& completionHandler)
+{
+    deleteCookiesForHostnames(cookieHostNames, IncludeHttpOnlyCookies::Yes, WTFMove(completionHandler));
 }
+
+}

Modified: trunk/Source/WebCore/platform/network/NetworkStorageSession.h (294946 => 294947)


--- trunk/Source/WebCore/platform/network/NetworkStorageSession.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/NetworkStorageSession.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -159,17 +159,16 @@
     WEBCORE_EXPORT void setCookie(const Cookie&);
     WEBCORE_EXPORT void setCookies(const Vector<Cookie>&, const URL&, const URL& mainDocumentURL);
     WEBCORE_EXPORT void setCookiesFromDOM(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, ShouldAskITP, const String&, ShouldRelaxThirdPartyCookieBlocking) const;
-    WEBCORE_EXPORT void deleteCookie(const Cookie&);
-    WEBCORE_EXPORT void deleteCookie(const URL&, const String&) const;
-    WEBCORE_EXPORT void deleteAllCookies();
-    WEBCORE_EXPORT void deleteAllCookiesModifiedSince(WallTime);
-    WEBCORE_EXPORT void deleteCookiesForHostnames(const Vector<String>& cookieHostNames);
-    WEBCORE_EXPORT void deleteCookiesForHostnames(const Vector<String>& cookieHostNames, IncludeHttpOnlyCookies);
+    WEBCORE_EXPORT void deleteCookie(const Cookie&, CompletionHandler<void()>&&);
+    WEBCORE_EXPORT void deleteCookie(const URL&, const String&, CompletionHandler<void()>&&) const;
+    WEBCORE_EXPORT void deleteAllCookies(CompletionHandler<void()>&&);
+    WEBCORE_EXPORT void deleteAllCookiesModifiedSince(WallTime, CompletionHandler<void()>&&);
+    WEBCORE_EXPORT void deleteCookiesForHostnames(const Vector<String>& cookieHostNames, CompletionHandler<void()>&&);
+    WEBCORE_EXPORT void deleteCookiesForHostnames(const Vector<String>& cookieHostNames, IncludeHttpOnlyCookies, CompletionHandler<void()>&&);
     WEBCORE_EXPORT Vector<Cookie> getAllCookies();
     WEBCORE_EXPORT Vector<Cookie> getCookies(const URL&);
     WEBCORE_EXPORT void hasCookies(const RegistrableDomain&, CompletionHandler<void(bool)>&&) const;
     WEBCORE_EXPORT bool getRawCookies(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, ShouldAskITP, ShouldRelaxThirdPartyCookieBlocking, Vector<Cookie>&) const;
-    WEBCORE_EXPORT void flushCookieStore();
     WEBCORE_EXPORT void getHostnamesWithCookies(HashSet<String>& hostnames);
     WEBCORE_EXPORT std::pair<String, bool> cookiesForDOM(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, IncludeSecureCookies, ShouldAskITP, ShouldRelaxThirdPartyCookieBlocking) const;
     WEBCORE_EXPORT std::pair<String, bool> cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, IncludeSecureCookies, ShouldAskITP, ShouldRelaxThirdPartyCookieBlocking) const;
@@ -237,7 +236,7 @@
     RetainPtr<NSArray> httpCookiesForURL(CFHTTPCookieStorageRef, NSURL *firstParty, const std::optional<SameSiteInfo>&, NSURL *) const;
     RetainPtr<NSArray> cookiesForURL(const URL& firstParty, const SameSiteInfo&, const URL&, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, ShouldAskITP, ShouldRelaxThirdPartyCookieBlocking) const;
     void setHTTPCookiesForURL(CFHTTPCookieStorageRef, NSArray *cookies, NSURL *, NSURL *mainDocumentURL, const SameSiteInfo&) const;
-    void deleteHTTPCookie(CFHTTPCookieStorageRef, NSHTTPCookie *) const;
+    void deleteHTTPCookie(CFHTTPCookieStorageRef, NSHTTPCookie *, CompletionHandler<void()>&&) const;
 #endif
 
 #if HAVE(COOKIE_CHANGE_LISTENER_API)
@@ -250,7 +249,7 @@
 #if PLATFORM(COCOA) || USE(CFURLCONNECTION)
     RetainPtr<CFURLStorageSessionRef> m_platformSession;
     RetainPtr<CFHTTPCookieStorageRef> m_platformCookieStorage;
-    bool m_isInMemoryCookieStore { false };
+    const bool m_isInMemoryCookieStore { false };
 #elif USE(SOUP)
     static void cookiesDidChange(NetworkStorageSession*);
 

Modified: trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNetWin.cpp (294946 => 294947)


--- trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNetWin.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNetWin.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -347,7 +347,7 @@
     return true;
 }
 
-void NetworkStorageSession::deleteCookie(const URL& url, const String& name) const
+void NetworkStorageSession::deleteCookie(const URL& url, const String& name, CompletionHandler<void()>&& completionHandler) const
 {
     RetainPtr<CFHTTPCookieStorageRef> cookieStorage = this->cookieStorage();
     
@@ -364,6 +364,7 @@
             break;
         }
     }
+    completionHandler();
 }
 
 void NetworkStorageSession::getHostnamesWithCookies(HashSet<String>& hostnames)
@@ -380,17 +381,20 @@
     }
 }
 
-void NetworkStorageSession::deleteAllCookies()
+void NetworkStorageSession::deleteAllCookies(CompletionHandler<void()>&& completionHandler)
 {
     CFHTTPCookieStorageDeleteAllCookies(cookieStorage().get());
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames)
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>&, IncludeHttpOnlyCookies, CompletionHandler<void()>&& completionHandler)
 {
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime)
+void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime, CompletionHandler<void()>&& completionHandler)
 {
+    completionHandler();
 }
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm (294946 => 294947)


--- trunk/Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/cocoa/NetworkStorageSessionCocoa.mm	2022-05-27 19:20:27 UTC (rev 294947)
@@ -34,6 +34,7 @@
 #import <pal/spi/cf/CFNetworkSPI.h>
 #import <wtf/BlockObjCExceptions.h>
 #import <wtf/BlockPtr.h>
+#import <wtf/CallbackAggregator.h>
 #import <wtf/ProcessPrivilege.h>
 #import <wtf/URL.h>
 #import <wtf/cocoa/VectorCocoa.h>
@@ -75,10 +76,18 @@
     END_BLOCK_OBJC_EXCEPTIONS
 }
 
-void NetworkStorageSession::deleteCookie(const Cookie& cookie)
+void NetworkStorageSession::deleteCookie(const Cookie& cookie, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies) || m_isInMemoryCookieStore);
-    [nsCookieStorage() deleteCookie:(NSHTTPCookie *)cookie];
+
+    auto work = [completionHandler = WTFMove(completionHandler), cookieStorage = RetainPtr { nsCookieStorage() }, cookie = RetainPtr { (NSHTTPCookie *)cookie }] () mutable {
+        [cookieStorage deleteCookie:cookie.get()];
+        ensureOnMainThread(WTFMove(completionHandler));
+    };
+
+    if (m_isInMemoryCookieStore)
+        return work();
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr(WTFMove(work)).get());
 }
 
 static Vector<Cookie> nsCookiesToCookieVector(NSArray<NSHTTPCookie *> *nsCookies, const Function<bool(NSHTTPCookie *)>& filter = { })
@@ -137,23 +146,20 @@
         }
     }
 
+    auto aggregator = CallbackAggregator::create([completionHandler = WTFMove(completionHandler), newCookiesToAdd = WTFMove(newCookiesToAdd), cookieStorage = RetainPtr { nsCookieStorage() }] () mutable {
+        BEGIN_BLOCK_OBJC_EXCEPTIONS
+        for (NSHTTPCookie *newCookie in newCookiesToAdd.get())
+            [cookieStorage setCookie:newCookie];
+        END_BLOCK_OBJC_EXCEPTIONS
+        completionHandler();
+    });
+
     BEGIN_BLOCK_OBJC_EXCEPTIONS
     for (NSHTTPCookie *oldCookie in oldCookiesToDelete.get())
-        deleteHTTPCookie(cookieStorage().get(), oldCookie);
-
-    for (NSHTTPCookie *newCookie in newCookiesToAdd.get())
-        [nsCookieStorage() setCookie:newCookie];
+        deleteHTTPCookie(cookieStorage().get(), oldCookie, [aggregator] { });
     END_BLOCK_OBJC_EXCEPTIONS
-
-    completionHandler();
 }
 
-void NetworkStorageSession::flushCookieStore()
-{
-    ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
-    [nsCookieStorage() _saveCookies];
-}
-
 NSHTTPCookieStorage *NetworkStorageSession::nsCookieStorage() const
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies) || m_isInMemoryCookieStore);
@@ -234,16 +240,22 @@
     return [NSHTTPCookie _cf2nsCookies:cookies.get()];
 }
 
-void NetworkStorageSession::deleteHTTPCookie(CFHTTPCookieStorageRef cookieStorage, NSHTTPCookie *cookie) const
+void NetworkStorageSession::deleteHTTPCookie(CFHTTPCookieStorageRef cookieStorage, NSHTTPCookie *cookie, CompletionHandler<void()>&& completionHandler) const
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies) || m_isInMemoryCookieStore);
-    if (!cookieStorage) {
-        RELEASE_ASSERT(!m_isInMemoryCookieStore);
-        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
-        return;
-    }
     
-    CFHTTPCookieStorageDeleteCookie(cookieStorage, [cookie _GetInternalCFHTTPCookie]);
+    auto work = [completionHandler = WTFMove(completionHandler), cookieStorage = RetainPtr { cookieStorage }, cookie = RetainPtr { cookie }, isInMemoryCookieStore = m_isInMemoryCookieStore] () mutable {
+        if (!cookieStorage) {
+            RELEASE_ASSERT(!isInMemoryCookieStore);
+            [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie.get()];
+        } else
+            CFHTTPCookieStorageDeleteCookie(cookieStorage.get(), [cookie _GetInternalCFHTTPCookie]);
+        ensureOnMainThread(WTFMove(completionHandler));
+    };
+
+    if (m_isInMemoryCookieStore)
+        return work();
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr(WTFMove(work)).get());
 }
 
 #if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV)
@@ -381,24 +393,6 @@
     return { String(), false };
 }
 
-static void deleteAllHTTPCookies(CFHTTPCookieStorageRef cookieStorage)
-{
-    ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
-
-    if (!cookieStorage) {
-        NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
-        NSArray *cookies = [cookieStorage cookies];
-        if (!cookies)
-            return;
-
-        for (NSHTTPCookie *cookie in cookies)
-            [cookieStorage deleteCookie:cookie];
-        return;
-    }
-
-    CFHTTPCookieStorageDeleteAllCookies(cookieStorage);
-}
-
 std::pair<String, bool> NetworkStorageSession::cookiesForDOM(const URL& firstParty, const SameSiteInfo& sameSiteInfo, const URL& url, std::optional<FrameIdentifier> frameID, std::optional<PageIdentifier> pageID, IncludeSecureCookies includeSecureCookies, ShouldAskITP shouldAskITP, ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking) const
 {
     return cookiesForSession(firstParty, sameSiteInfo, url, frameID, pageID, DoNotIncludeHTTPOnly, includeSecureCookies, shouldAskITP, shouldRelaxThirdPartyCookieBlocking);
@@ -514,10 +508,12 @@
     return true;
 }
 
-void NetworkStorageSession::deleteCookie(const URL& url, const String& cookieName) const
+void NetworkStorageSession::deleteCookie(const URL& url, const String& cookieName, CompletionHandler<void()>&& completionHandler) const
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
 
+    auto aggregator = CallbackAggregator::create(WTFMove(completionHandler));
+    
     BEGIN_BLOCK_OBJC_EXCEPTIONS
 
     RetainPtr<CFHTTPCookieStorageRef> cookieStorage = this->cookieStorage();
@@ -529,7 +525,7 @@
     for (NSUInteger i = 0; i < count; ++i) {
         NSHTTPCookie *cookie = (NSHTTPCookie *)[cookies objectAtIndex:i];
         if ([[cookie name] isEqualToString:cookieNameString])
-            deleteHTTPCookie(cookieStorage.get(), cookie);
+            deleteHTTPCookie(cookieStorage.get(), cookie, [aggregator] { });
     }
 
     END_BLOCK_OBJC_EXCEPTIONS
@@ -551,20 +547,36 @@
     END_BLOCK_OBJC_EXCEPTIONS
 }
 
-void NetworkStorageSession::deleteAllCookies()
+void NetworkStorageSession::deleteAllCookies(CompletionHandler<void()>&& completionHandler)
 {
-    deleteAllHTTPCookies(cookieStorage().get());
-}
+    ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames)
-{
-    deleteCookiesForHostnames(hostnames, IncludeHttpOnlyCookies::Yes);
+    auto work = [completionHandler = WTFMove(completionHandler), cookieStorage = RetainPtr { cookieStorage() }] () mutable {
+        if (!cookieStorage) {
+            NSHTTPCookieStorage *cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
+            NSArray *cookies = [cookieStorage cookies];
+            for (NSHTTPCookie *cookie in cookies)
+                [cookieStorage deleteCookie:cookie];
+        } else
+            CFHTTPCookieStorageDeleteAllCookies(cookieStorage.get());
+        ensureOnMainThread(WTFMove(completionHandler));
+    };
+    
+    if (m_isInMemoryCookieStore)
+        return work();
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr(WTFMove(work)).get());
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames, IncludeHttpOnlyCookies includeHttpOnlyCookies)
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames, IncludeHttpOnlyCookies includeHttpOnlyCookies, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies) || m_isInMemoryCookieStore);
 
+    auto aggregator = CallbackAggregator::create([completionHandler = WTFMove(completionHandler), cookieStorage = RetainPtr { nsCookieStorage() }] () mutable {
+        [cookieStorage _saveCookies:makeBlockPtr([completionHandler = WTFMove(completionHandler)] () mutable {
+            ensureOnMainThread(WTFMove(completionHandler));
+        }).get()];
+    });
+    
     BEGIN_BLOCK_OBJC_EXCEPTIONS
 
     RetainPtr<CFHTTPCookieStorageRef> cookieStorage = this->cookieStorage();
@@ -587,28 +599,31 @@
             continue;
 
         for (auto& cookie : it->value)
-            deleteHTTPCookie(cookieStorage.get(), cookie.get());
+            deleteHTTPCookie(cookieStorage.get(), cookie.get(), [aggregator] { });
     }
 
-    [nsCookieStorage() _saveCookies];
-
     END_BLOCK_OBJC_EXCEPTIONS
 }
 
-void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime timePoint)
+void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime timePoint, CompletionHandler<void()>&& completionHandler)
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanAccessRawCookies));
 
+    // FIXME: Do we still need this check? Probably not.
     if (![NSHTTPCookieStorage instancesRespondToSelector:@selector(removeCookiesSinceDate:)])
-        return;
+        return completionHandler();
 
     NSTimeInterval timeInterval = timePoint.secondsSinceEpoch().seconds();
-    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timeInterval];
+    auto work = [completionHandler = WTFMove(completionHandler), storage = RetainPtr { nsCookieStorage() }, date = RetainPtr { [NSDate dateWithTimeIntervalSince1970:timeInterval] }] () mutable {
+        [storage removeCookiesSinceDate:date.get()];
+        [storage _saveCookies:makeBlockPtr([completionHandler = WTFMove(completionHandler)] () mutable {
+            ensureOnMainThread(WTFMove(completionHandler));
+        }).get()];
+    };
 
-    auto *storage = nsCookieStorage();
-
-    [storage removeCookiesSinceDate:date];
-    [storage _saveCookies];
+    if (m_isInMemoryCookieStore)
+        return work();
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), makeBlockPtr(WTFMove(work)).get());
 }
 
 Vector<Cookie> NetworkStorageSession::domCookiesForHost(const String& host)

Modified: trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp (294946 => 294947)


--- trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/curl/NetworkStorageSessionCurl.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -152,38 +152,38 @@
     cookieDatabase().setCookie(cookie);
 }
 
-void NetworkStorageSession::deleteCookie(const Cookie& cookie)
+void NetworkStorageSession::deleteCookie(const Cookie& cookie, CompletionHandler<void()>&& completionHandler)
 {
     String url = "" ? "https"_s : "http"_s, "://"_s, cookie.domain, cookie.path);
     cookieDatabase().deleteCookie(url, cookie.name);
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookie(const URL& url, const String& name) const
+void NetworkStorageSession::deleteCookie(const URL& url, const String& name, CompletionHandler<void()>&& completionHandler) const
 {
     cookieDatabase().deleteCookie(url.string(), name);
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteAllCookies()
+void NetworkStorageSession::deleteAllCookies(CompletionHandler<void()>&& completionHandler)
 {
     cookieDatabase().deleteAllCookies();
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime)
+void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime, CompletionHandler<void()>&& completionHandler)
 {
     // FIXME: Not yet implemented
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames, IncludeHttpOnlyCookies includeHttpOnlyCookies)
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames, IncludeHttpOnlyCookies includeHttpOnlyCookies, CompletionHandler<void()>&& completionHandler)
 {
     for (auto hostname : cookieHostNames)
         cookieDatabase().deleteCookiesForHostname(hostname, includeHttpOnlyCookies);
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& cookieHostNames)
-{
-    deleteCookiesForHostnames(cookieHostNames, IncludeHttpOnlyCookies::Yes);
-}
-
 Vector<Cookie> NetworkStorageSession::getAllCookies()
 {
     return cookieDatabase().getAllCookies();
@@ -216,11 +216,6 @@
     return true;
 }
 
-void NetworkStorageSession::flushCookieStore()
-{
-    // FIXME: Implement for WebKit to use.
-}
-
 std::pair<String, bool> NetworkStorageSession::cookieRequestHeaderFieldValue(const URL& firstParty, const SameSiteInfo&, const URL& url, std::optional<FrameIdentifier>, std::optional<PageIdentifier>, IncludeSecureCookies, ShouldAskITP, ShouldRelaxThirdPartyCookieBlocking) const
 {
     // FIXME: This should filter secure cookies out if the caller requests it.

Modified: trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp (294946 => 294947)


--- trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebCore/platform/network/soup/NetworkStorageSessionSoup.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -410,22 +410,23 @@
     soup_cookie_jar_add_cookie(cookieStorage(), cookie.toSoupCookie());
 }
 
-void NetworkStorageSession::deleteCookie(const Cookie& cookie)
+void NetworkStorageSession::deleteCookie(const Cookie& cookie, CompletionHandler<void()>&& completionHandler)
 {
     GUniquePtr<SoupCookie> targetCookie(cookie.toSoupCookie());
     soup_cookie_jar_delete_cookie(cookieStorage(), targetCookie.get());
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookie(const URL& url, const String& name) const
+void NetworkStorageSession::deleteCookie(const URL& url, const String& name, CompletionHandler<void()>&& completionHandler) const
 {
     auto uri = urlToSoupURI(url);
     if (!uri)
-        return;
+        return completionHandler();
 
     SoupCookieJar* jar = cookieStorage();
     GUniquePtr<GSList> cookies(soup_cookie_jar_get_cookie_list(jar, uri.get(), TRUE));
     if (!cookies)
-        return;
+        return completionHandler();
 
     CString cookieName = name.utf8();
     bool wasDeleted = false;
@@ -437,9 +438,10 @@
         }
         soup_cookie_free(cookie);
     }
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteAllCookies()
+void NetworkStorageSession::deleteAllCookies(CompletionHandler<void()>&& completionHandler)
 {
     SoupCookieJar* cookieJar = cookieStorage();
     GUniquePtr<GSList> cookies(soup_cookie_jar_all_cookies(cookieJar));
@@ -448,18 +450,21 @@
         soup_cookie_jar_delete_cookie(cookieJar, cookie);
         soup_cookie_free(cookie);
     }
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime timestamp)
+void NetworkStorageSession::deleteAllCookiesModifiedSince(WallTime timestamp, CompletionHandler<void()>&& completionHandler)
 {
     // FIXME: Add support for deleting cookies modified since the given timestamp. It should probably be added to libsoup.
     if (timestamp == WallTime::fromRawSeconds(0))
-        deleteAllCookies();
-    else
+        deleteAllCookies(WTFMove(completionHandler));
+    else {
         g_warning("Deleting cookies modified since a given time span is not supported yet");
+        completionHandler();
+    }
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames, IncludeHttpOnlyCookies includeHttpOnlyCookies)
+void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames, IncludeHttpOnlyCookies includeHttpOnlyCookies, CompletionHandler<void()>&& completionHandler)
 {
     SoupCookieJar* cookieJar = cookieStorage();
     for (const auto& hostname : hostnames) {
@@ -475,13 +480,9 @@
                 soup_cookie_jar_delete_cookie(cookieJar, cookie.get());
         }
     }
+    completionHandler();
 }
 
-void NetworkStorageSession::deleteCookiesForHostnames(const Vector<String>& hostnames)
-{
-    deleteCookiesForHostnames(hostnames, IncludeHttpOnlyCookies::Yes);
-}
-
 void NetworkStorageSession::getHostnamesWithCookies(HashSet<String>& hostnames)
 {
     GUniquePtr<GSList> cookies(soup_cookie_jar_all_cookies(cookieStorage()));
@@ -648,11 +649,6 @@
     return cookieRequestHeaderFieldValue(headerFieldProxy.firstParty, headerFieldProxy.sameSiteInfo, headerFieldProxy.url, headerFieldProxy.frameID, headerFieldProxy.pageID, headerFieldProxy.includeSecureCookies, ShouldAskITP::Yes, ShouldRelaxThirdPartyCookieBlocking::No);
 }
 
-void NetworkStorageSession::flushCookieStore()
-{
-    // FIXME: Implement for WK2 to use.
-}
-
 } // namespace WebCore
 
 #endif // USE(SOUP)

Modified: trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -63,30 +63,36 @@
     completionHandler(copyToVector(hostnames));
 }
 
-void WebCookieManager::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames)
+void WebCookieManager::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* storageSession = m_process.storageSession(sessionID))
-        storageSession->deleteCookiesForHostnames(hostnames);
+        storageSession->deleteCookiesForHostnames(hostnames, WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
-void WebCookieManager::deleteAllCookies(PAL::SessionID sessionID)
+void WebCookieManager::deleteAllCookies(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* storageSession = m_process.storageSession(sessionID))
-        storageSession->deleteAllCookies();
+        storageSession->deleteAllCookies(WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
 void WebCookieManager::deleteCookie(PAL::SessionID sessionID, const Cookie& cookie, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* storageSession = m_process.storageSession(sessionID))
-        storageSession->deleteCookie(cookie);
-    completionHandler();
+        storageSession->deleteCookie(cookie, WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
 void WebCookieManager::deleteAllCookiesModifiedSince(PAL::SessionID sessionID, WallTime time, CompletionHandler<void()>&& completionHandler)
 {
     if (auto* storageSession = m_process.storageSession(sessionID))
-        storageSession->deleteAllCookiesModifiedSince(time);
-    completionHandler();
+        storageSession->deleteAllCookiesModifiedSince(time, WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
 void WebCookieManager::getAllCookies(PAL::SessionID sessionID, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&& completionHandler)

Modified: trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -72,8 +72,8 @@
     void getHostnamesWithCookies(PAL::SessionID, CompletionHandler<void(Vector<String>&&)>&&);
 
     void deleteCookie(PAL::SessionID, const WebCore::Cookie&, CompletionHandler<void()>&&);
-    void deleteCookiesForHostnames(PAL::SessionID, const Vector<String>&);
-    void deleteAllCookies(PAL::SessionID);
+    void deleteCookiesForHostnames(PAL::SessionID, const Vector<String>&, CompletionHandler<void()>&&);
+    void deleteAllCookies(PAL::SessionID, CompletionHandler<void()>&&);
     void deleteAllCookiesModifiedSince(PAL::SessionID, WallTime, CompletionHandler<void()>&&);
 
     void setCookie(PAL::SessionID, const Vector<WebCore::Cookie>&, CompletionHandler<void()>&&);

Modified: trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/Cookies/WebCookieManager.messages.in	2022-05-27 19:20:27 UTC (rev 294947)
@@ -25,8 +25,8 @@
  
 messages -> WebCookieManager NotRefCounted {
     void GetHostnamesWithCookies(PAL::SessionID sessionID) -> (Vector<String> hostnames)
-    void DeleteCookiesForHostnames(PAL::SessionID sessionID, Vector<String> hostnames)
-    void DeleteAllCookies(PAL::SessionID sessionID)
+    void DeleteCookiesForHostnames(PAL::SessionID sessionID, Vector<String> hostnames) -> ()
+    void DeleteAllCookies(PAL::SessionID sessionID) -> ()
 
     void SetCookie(PAL::SessionID sessionID, Vector<WebCore::Cookie> cookie) -> ()
     void SetCookies(PAL::SessionID sessionID, Vector<WebCore::Cookie> cookies, URL url, URL mainDocumentURL) -> ()

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -837,12 +837,12 @@
     networkStorageSession->setCookie(cookie);
 }
 
-void NetworkConnectionToWebProcess::deleteCookie(const URL& url, const String& cookieName)
+void NetworkConnectionToWebProcess::deleteCookie(const URL& url, const String& cookieName, CompletionHandler<void()>&& completionHandler)
 {
     auto* networkStorageSession = storageSession();
     if (!networkStorageSession)
-        return;
-    networkStorageSession->deleteCookie(url, cookieName);
+        return completionHandler();
+    networkStorageSession->deleteCookie(url, cookieName, WTFMove(completionHandler));
 }
 
 void NetworkConnectionToWebProcess::domCookiesForHost(const String& host, bool subscribeToCookieChangeNotifications, CompletionHandler<void(const Vector<WebCore::Cookie>&)>&& completionHandler)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -244,7 +244,7 @@
     void cookieRequestHeaderFieldValue(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, std::optional<WebCore::FrameIdentifier>, std::optional<WebCore::PageIdentifier>, WebCore::IncludeSecureCookies, WebCore::ShouldAskITP, WebCore::ShouldRelaxThirdPartyCookieBlocking, CompletionHandler<void(String cookieString, bool secureCookiesAccessed)>&&);
     void getRawCookies(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, std::optional<WebCore::FrameIdentifier>, std::optional<WebCore::PageIdentifier>, WebCore::ShouldAskITP, WebCore::ShouldRelaxThirdPartyCookieBlocking, CompletionHandler<void(Vector<WebCore::Cookie>&&)>&&);
     void setRawCookie(const WebCore::Cookie&);
-    void deleteCookie(const URL&, const String& cookieName);
+    void deleteCookie(const URL&, const String& cookieName, CompletionHandler<void()>&&);
 
     void registerFileBlobURL(const URL&, const String& path, const String& replacementPath, SandboxExtension::Handle&&, const String& contentType);
     void registerBlobURL(const URL&, Vector<WebCore::BlobPart>&&, const String& contentType);

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in	2022-05-27 19:20:27 UTC (rev 294947)
@@ -42,7 +42,7 @@
     CookieRequestHeaderFieldValue(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, std::optional<WebCore::FrameIdentifier> frameID, std::optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::IncludeSecureCookies includeSecureCookies, enum:bool WebCore::ShouldAskITP shouldAskITP, enum:bool WebCore::ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking) -> (String cookieString, bool didAccessSecureCookies) Synchronous
     GetRawCookies(URL firstParty, struct WebCore::SameSiteInfo sameSiteInfo, URL url, std::optional<WebCore::FrameIdentifier> frameID, std::optional<WebCore::PageIdentifier> pageID, enum:bool WebCore::ShouldAskITP shouldAskITP, enum:bool WebCore::ShouldRelaxThirdPartyCookieBlocking shouldRelaxThirdPartyCookieBlocking) -> (Vector<WebCore::Cookie> cookies) Synchronous
     SetRawCookie(struct WebCore::Cookie cookie)
-    DeleteCookie(URL url, String cookieName)
+    DeleteCookie(URL url, String cookieName) -> ()
     DomCookiesForHost(String host, bool subscribeToCookieChangeNotifications) -> (Vector<WebCore::Cookie> cookies) Synchronous
 #if HAVE(COOKIE_CHANGE_LISTENER_API)
     UnsubscribeFromCookieChangeNotifications(HashSet<String> hosts)

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (294946 => 294947)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -1501,6 +1501,11 @@
 
 void NetworkProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, WallTime modifiedSince, CompletionHandler<void()>&& completionHandler)
 {
+    auto clearTasksHandler = WTF::CallbackAggregator::create([completionHandler = WTFMove(completionHandler)]() mutable {
+        completionHandler();
+        RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteData finished deleting modified data");
+    });
+
     RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteData started to delete data modified since %f for session %" PRIu64, modifiedSince.secondsSinceEpoch().value(), sessionID.toUInt64());
     auto* session = networkSession(sessionID);
 
@@ -1511,7 +1516,7 @@
 
     if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
         if (auto* networkStorageSession = storageSession(sessionID))
-            networkStorageSession->deleteAllCookiesModifiedSince(modifiedSince);
+            networkStorageSession->deleteAllCookiesModifiedSince(modifiedSince, [clearTasksHandler] { });
     }
 
     if (websiteDataTypes.contains(WebsiteDataType::Credentials)) {
@@ -1520,11 +1525,6 @@
         WebCore::CredentialStorage::clearSessionCredentials();
     }
 
-    auto clearTasksHandler = WTF::CallbackAggregator::create([completionHandler = WTFMove(completionHandler)]() mutable {
-        completionHandler();
-        RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteData finished deleting modified data");
-    });
-
     if (websiteDataTypes.contains(WebsiteDataType::DOMCache) && session)
         CacheStorage::Engine::clearAllCaches(*session, [clearTasksHandler] { });
 
@@ -1597,12 +1597,17 @@
 
 void NetworkProcess::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, const Vector<SecurityOriginData>& originDatas, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostNames, const Vector<RegistrableDomain>& registrableDomains, CompletionHandler<void()>&& completionHandler)
 {
+    auto clearTasksHandler = WTF::CallbackAggregator::create([completionHandler = WTFMove(completionHandler)]() mutable {
+        completionHandler();
+        RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteDataForOrigins finished deleting data");
+    });
+
     RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteDataForOrigins started to delete data for session %" PRIu64, sessionID.toUInt64());
     auto* session = networkSession(sessionID);
 
     if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
         if (auto* networkStorageSession = storageSession(sessionID))
-            networkStorageSession->deleteCookiesForHostnames(cookieHostNames);
+            networkStorageSession->deleteCookiesForHostnames(cookieHostNames, [clearTasksHandler] { });
     }
 
 #if PLATFORM(COCOA) || USE(SOUP)
@@ -1617,11 +1622,6 @@
     }
 #endif
 
-    auto clearTasksHandler = WTF::CallbackAggregator::create([completionHandler = WTFMove(completionHandler)]() mutable {
-        completionHandler();
-        RELEASE_LOG(Storage, "NetworkProcess::deleteWebsiteDataForOrigins finished deleting data");
-    });
-
     if (websiteDataTypes.contains(WebsiteDataType::PrivateClickMeasurements) && session) {
         for (auto& originData : originDatas)
             session->clearPrivateClickMeasurementForRegistrableDomain(RegistrableDomain::uncheckedCreateFromHost(originData.host), [clearTasksHandler] { });
@@ -1768,13 +1768,13 @@
             networkStorageSession->getHostnamesWithCookies(hostNamesWithCookies);
 
             hostnamesWithCookiesToDelete = filterForRegistrableDomains(domains.domainsToDeleteAllCookiesFor, hostNamesWithCookies);
-            networkStorageSession->deleteCookiesForHostnames(hostnamesWithCookiesToDelete, WebCore::IncludeHttpOnlyCookies::Yes);
+            networkStorageSession->deleteCookiesForHostnames(hostnamesWithCookiesToDelete, WebCore::IncludeHttpOnlyCookies::Yes, [callbackAggregator] { });
 
             for (const auto& host : hostnamesWithCookiesToDelete)
                 callbackAggregator->m_domains.add(RegistrableDomain::uncheckedCreateFromHost(host));
 
             hostnamesWithCookiesToDelete = filterForRegistrableDomains(domains.domainsToDeleteAllButHttpOnlyCookiesFor, hostNamesWithCookies);
-            networkStorageSession->deleteCookiesForHostnames(hostnamesWithCookiesToDelete, WebCore::IncludeHttpOnlyCookies::No);
+            networkStorageSession->deleteCookiesForHostnames(hostnamesWithCookiesToDelete, WebCore::IncludeHttpOnlyCookies::No, [callbackAggregator] { });
 
             for (const auto& host : hostnamesWithCookiesToDelete)
                 callbackAggregator->m_domains.add(RegistrableDomain::uncheckedCreateFromHost(host));

Modified: trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp (294946 => 294947)


--- trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/UIProcess/API/APIHTTPCookieStore.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -119,9 +119,7 @@
     if (!m_owningDataStore)
         return completionHandler();
     auto& cookieManager = m_owningDataStore->networkProcess().cookieManager();
-    cookieManager.deleteAllCookies(m_owningDataStore->sessionID());
-    // FIXME: The CompletionHandler should be passed to WebCookieManagerProxy::deleteAllCookies.
-    RunLoop::main().dispatch(WTFMove(completionHandler));
+    cookieManager.deleteAllCookies(m_owningDataStore->sessionID(), WTFMove(completionHandler));
 }
 
 void HTTPCookieStore::setHTTPCookieAcceptPolicy(WebCore::HTTPCookieAcceptPolicy policy, CompletionHandler<void()>&& completionHandler)

Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (294946 => 294947)


--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -1489,7 +1489,7 @@
     String host = activeURL.host().toString();
 
     WebCookieManagerProxy& cookieManager = page->websiteDataStore().networkProcess().cookieManager();
-    cookieManager.deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) });
+    cookieManager.deleteCookiesForHostnames(page->websiteDataStore().sessionID(), { host, domainByAddingDotPrefixIfNeeded(host) }, [] { });
 
     return { };
 }

Modified: trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp (294946 => 294947)


--- trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -61,16 +61,20 @@
         callbackFunction({ });
 }
 
-void WebCookieManagerProxy::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames)
+void WebCookieManagerProxy::deleteCookiesForHostnames(PAL::SessionID sessionID, const Vector<String>& hostnames, CompletionHandler<void()>&& completionHandler)
 {
     if (m_networkProcess)
-        m_networkProcess->send(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames), 0);
+        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteCookiesForHostnames(sessionID, hostnames), WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
-void WebCookieManagerProxy::deleteAllCookies(PAL::SessionID sessionID)
+void WebCookieManagerProxy::deleteAllCookies(PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)
 {
     if (m_networkProcess)
-        m_networkProcess->send(Messages::WebCookieManager::DeleteAllCookies(sessionID), 0);
+        m_networkProcess->sendWithAsyncReply(Messages::WebCookieManager::DeleteAllCookies(sessionID), WTFMove(completionHandler));
+    else
+        completionHandler();
 }
 
 void WebCookieManagerProxy::deleteCookie(PAL::SessionID sessionID, const Cookie& cookie, CompletionHandler<void()>&& callbackFunction)

Modified: trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h (294946 => 294947)


--- trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/UIProcess/WebCookieManagerProxy.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -60,8 +60,8 @@
 
     void getHostnamesWithCookies(PAL::SessionID, CompletionHandler<void(Vector<String>&&)>&&);
     void deleteCookie(PAL::SessionID, const WebCore::Cookie&, CompletionHandler<void()>&&);
-    void deleteCookiesForHostnames(PAL::SessionID, const Vector<String>&);
-    void deleteAllCookies(PAL::SessionID);
+    void deleteCookiesForHostnames(PAL::SessionID, const Vector<String>&, CompletionHandler<void()>&&);
+    void deleteAllCookies(PAL::SessionID, CompletionHandler<void()>&&);
     void deleteAllCookiesModifiedSince(PAL::SessionID, WallTime, CompletionHandler<void()>&&);
 
     void setCookies(PAL::SessionID, const Vector<WebCore::Cookie>&, CompletionHandler<void()>&&);

Modified: trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp (294946 => 294947)


--- trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -953,9 +953,9 @@
     }
 
     auto& document = *frame->coreFrame()->document();
-    page->corePage()->cookieJar().deleteCookie(document, document.cookieURL(), cookieName);
-
-    completionHandler(std::nullopt);
+    page->corePage()->cookieJar().deleteCookie(document, document.cookieURL(), cookieName, [completionHandler = WTFMove(completionHandler)] () mutable {
+        completionHandler(std::nullopt);
+    });
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebCookieCache.cpp (294946 => 294947)


--- trunk/Source/WebKit/WebProcess/WebPage/WebCookieCache.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebCookieCache.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -81,7 +81,7 @@
         return;
 
     for (auto& cookie : cookies)
-        inMemoryStorageSession().deleteCookie(cookie);
+        inMemoryStorageSession().deleteCookie(cookie, [] { });
 }
 
 void WebCookieCache::allCookiesDeleted()
@@ -105,7 +105,7 @@
     if (removedHost.isNull())
         return;
 
-    inMemoryStorageSession().deleteCookiesForHostnames(Vector<String> { removedHost });
+    inMemoryStorageSession().deleteCookiesForHostnames(Vector<String> { removedHost }, [] { });
 #if HAVE(COOKIE_CHANGE_LISTENER_API)
     WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::UnsubscribeFromCookieChangeNotifications(HashSet<String> { removedHost }), 0);
 #endif

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.cpp (294946 => 294947)


--- trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -251,9 +251,9 @@
     WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::SetRawCookie(cookie), 0);
 }
 
-void WebCookieJar::deleteCookie(const WebCore::Document& document, const URL& url, const String& cookieName)
+void WebCookieJar::deleteCookie(const WebCore::Document& document, const URL& url, const String& cookieName, CompletionHandler<void()>&& completionHandler)
 {
-    WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::DeleteCookie(url, cookieName), 0);
+    WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::DeleteCookie(url, cookieName), WTFMove(completionHandler));
 }
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.h (294946 => 294947)


--- trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.h	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebCookieJar.h	2022-05-27 19:20:27 UTC (rev 294947)
@@ -46,7 +46,7 @@
     std::pair<String, WebCore::SecureCookiesAccessed> cookieRequestHeaderFieldValue(const URL& firstParty, const WebCore::SameSiteInfo&, const URL&, std::optional<WebCore::FrameIdentifier>, std::optional<WebCore::PageIdentifier>, WebCore::IncludeSecureCookies) const final;
     bool getRawCookies(const WebCore::Document&, const URL&, Vector<WebCore::Cookie>&) const final;
     void setRawCookie(const WebCore::Document&, const WebCore::Cookie&) final;
-    void deleteCookie(const WebCore::Document&, const URL&, const String& cookieName) final;
+    void deleteCookie(const WebCore::Document&, const URL&, const String& cookieName, CompletionHandler<void()>&&) final;
 
     void cookiesAdded(const String& host, const Vector<WebCore::Cookie>&);
     void cookiesDeleted(const String& host, const Vector<WebCore::Cookie>&);

Modified: trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm (294946 => 294947)


--- trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKitLegacy/mac/WebView/WebPreferences.mm	2022-05-27 19:20:27 UTC (rev 294947)
@@ -2931,7 +2931,7 @@
 
 + (void)_clearNetworkLoaderSession
 {
-    NetworkStorageSessionMap::defaultStorageSession().deleteAllCookies();
+    NetworkStorageSessionMap::defaultStorageSession().deleteAllCookies([] { });
 }
 
 - (void)_setBoolPreferenceForTestingWithValue:(BOOL)value forKey:(NSString *)key

Modified: trunk/Source/WebKitLegacy/win/WebPreferences.cpp (294946 => 294947)


--- trunk/Source/WebKitLegacy/win/WebPreferences.cpp	2022-05-27 18:58:43 UTC (rev 294946)
+++ trunk/Source/WebKitLegacy/win/WebPreferences.cpp	2022-05-27 19:20:27 UTC (rev 294947)
@@ -2179,7 +2179,7 @@
 
 HRESULT WebPreferences::clearNetworkLoaderSession()
 {
-    NetworkStorageSessionMap::defaultStorageSession().deleteAllCookies();
+    NetworkStorageSessionMap::defaultStorageSession().deleteAllCookies([] { });
     return S_OK;
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to