Diff
Modified: trunk/Source/WebKit/ChangeLog (275364 => 275365)
--- trunk/Source/WebKit/ChangeLog 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/ChangeLog 2021-04-01 17:17:26 UTC (rev 275365)
@@ -1,3 +1,31 @@
+2021-04-01 Alex Christensen <[email protected]>
+
+ Use sendWithAsyncReply for NetworkProcess messages with async replies
+ https://bugs.webkit.org/show_bug.cgi?id=224025
+
+ Reviewed by Youenn Fablet.
+
+ This will prevent us from having to manually store and handle the callback IDs and other things.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::fetchWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
+ (WebKit::NetworkProcessProxy::fetchWebsiteData):
+ (WebKit::NetworkProcessProxy::deleteWebsiteData):
+ (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
+ (WebKit::NetworkProcessProxy::networkProcessCrashed):
+ (WebKit::NetworkProcessProxy::clearCallbackStates): Deleted.
+ (WebKit::NetworkProcessProxy::didFetchWebsiteData): Deleted.
+ (WebKit::NetworkProcessProxy::didDeleteWebsiteData): Deleted.
+ (WebKit::NetworkProcessProxy::didDeleteWebsiteDataForOrigins): Deleted.
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/Network/NetworkProcessProxy.messages.in:
+
2021-04-01 Commit Queue <[email protected]>
Unreviewed, reverting r275350.
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (275364 => 275365)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2021-04-01 17:17:26 UTC (rev 275365)
@@ -1442,10 +1442,10 @@
});
}
-void NetworkProcess::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, CallbackID callbackID)
+void NetworkProcess::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, CompletionHandler<void(WebsiteData&&)>&& completionHandler)
{
struct CallbackAggregator final : public ThreadSafeRefCounted<CallbackAggregator> {
- explicit CallbackAggregator(Function<void (WebsiteData)>&& completionHandler)
+ explicit CallbackAggregator(CompletionHandler<void(WebsiteData&&)>&& completionHandler)
: m_completionHandler(WTFMove(completionHandler))
{
}
@@ -1453,17 +1453,15 @@
~CallbackAggregator()
{
RunLoop::main().dispatch([completionHandler = WTFMove(m_completionHandler), websiteData = WTFMove(m_websiteData)] () mutable {
- completionHandler(websiteData);
+ completionHandler(WTFMove(websiteData));
});
}
- CompletionHandler<void(WebsiteData)> m_completionHandler;
+ CompletionHandler<void(WebsiteData&&)> m_completionHandler;
WebsiteData m_websiteData;
};
- auto callbackAggregator = adoptRef(*new CallbackAggregator([this, callbackID] (WebsiteData websiteData) {
- parentProcessConnection()->send(Messages::NetworkProcessProxy::DidFetchWebsiteData(callbackID, websiteData), 0);
- }));
+ auto callbackAggregator = adoptRef(*new CallbackAggregator(WTFMove(completionHandler)));
if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
if (auto* networkStorageSession = storageSession(sessionID))
@@ -1554,7 +1552,7 @@
#endif
}
-void NetworkProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, WallTime modifiedSince, CallbackID callbackID)
+void NetworkProcess::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> websiteDataTypes, WallTime modifiedSince, CompletionHandler<void()>&& completionHandler)
{
#if PLATFORM(COCOA) || USE(SOUP)
if (websiteDataTypes.contains(WebsiteDataType::HSTSCache))
@@ -1572,9 +1570,7 @@
WebCore::CredentialStorage::clearSessionCredentials();
}
- auto clearTasksHandler = WTF::CallbackAggregator::create([this, callbackID] {
- parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteData(callbackID), 0);
- });
+ auto clearTasksHandler = WTF::CallbackAggregator::create(WTFMove(completionHandler));
if (websiteDataTypes.contains(WebsiteDataType::DOMCache))
CacheStorage::Engine::clearAllCaches(*this, sessionID, [clearTasksHandler] { });
@@ -1651,7 +1647,7 @@
});
}
-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, CallbackID callbackID)
+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)
{
if (websiteDataTypes.contains(WebsiteDataType::Cookies)) {
if (auto* networkStorageSession = storageSession(sessionID))
@@ -1682,9 +1678,7 @@
}
}
- auto clearTasksHandler = WTF::CallbackAggregator::create([this, callbackID] {
- parentProcessConnection()->send(Messages::NetworkProcessProxy::DidDeleteWebsiteDataForOrigins(callbackID), 0);
- });
+ auto clearTasksHandler = WTF::CallbackAggregator::create(WTFMove(completionHandler));
if (websiteDataTypes.contains(WebsiteDataType::DOMCache)) {
for (auto& originData : originDatas)
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (275364 => 275365)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2021-04-01 17:17:26 UTC (rev 275365)
@@ -423,9 +423,9 @@
void initializeNetworkProcess(NetworkProcessCreationParameters&&);
void createNetworkConnectionToWebProcess(WebCore::ProcessIdentifier, PAL::SessionID, CompletionHandler<void(Optional<IPC::Attachment>&&, WebCore::HTTPCookieAcceptPolicy)>&&);
- void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CallbackID);
- void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CallbackID);
- void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostnames, const Vector<RegistrableDomain>&, CallbackID);
+ void fetchWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, CompletionHandler<void(WebsiteData&&)>&&);
+ void deleteWebsiteData(PAL::SessionID, OptionSet<WebsiteDataType>, WallTime modifiedSince, CompletionHandler<void()>&&);
+ void deleteWebsiteDataForOrigins(PAL::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostnames, const Vector<RegistrableDomain>&, CompletionHandler<void()>&&);
void clearCachedCredentials(PAL::SessionID);
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (275364 => 275365)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2021-04-01 17:17:26 UTC (rev 275365)
@@ -42,9 +42,9 @@
AddWebsiteDataStore(struct WebKit::WebsiteDataStoreParameters websiteDataStoreParameters);
DestroySession(PAL::SessionID sessionID)
- FetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, OptionSet<WebKit::WebsiteDataFetchOption> fetchOptions, WebKit::CallbackID callbackID)
- DeleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, WallTime modifiedSince, WebKit::CallbackID callbackID)
- DeleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, Vector<WebCore::SecurityOriginData> origins, Vector<String> cookieHostNames, Vector<String> HSTSCacheHostNames, Vector<WebCore::RegistrableDomain> registrableDomains, WebKit::CallbackID callbackID)
+ FetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, OptionSet<WebKit::WebsiteDataFetchOption> fetchOptions) -> (struct WebKit::WebsiteData websiteData) Async
+ DeleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, WallTime modifiedSince) -> () Async
+ DeleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebKit::WebsiteDataType> websiteDataTypes, Vector<WebCore::SecurityOriginData> origins, Vector<String> cookieHostNames, Vector<String> HSTSCacheHostNames, Vector<WebCore::RegistrableDomain> registrableDomains) -> () Async
RenameOriginInWebsiteData(PAL::SessionID sessionID, URL oldDomain, URL newDomain, OptionSet<WebKit::WebsiteDataType> websiteDataTypes) -> () Async
DownloadRequest(PAL::SessionID sessionID, WebKit::DownloadID downloadID, WebCore::ResourceRequest request, enum:bool Optional<WebKit::NavigatingToAppBoundDomain> isNavigatingToAppBoundDomain, String suggestedFilename)
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (275364 => 275365)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2021-04-01 17:17:26 UTC (rev 275365)
@@ -207,9 +207,6 @@
NetworkProcessProxy::~NetworkProcessProxy()
{
- ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
- ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty());
- ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty());
#if ENABLE(CONTENT_EXTENSIONS)
for (auto* proxy : m_webUserContentControllerProxies)
proxy->removeNetworkProcess(*this);
@@ -287,58 +284,19 @@
return m_downloadProxyMap->createDownloadProxy(dataStore, processPool, resourceRequest, frameInfo, originatingPage);
}
-void NetworkProcessProxy::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, CompletionHandler<void (WebsiteData)>&& completionHandler)
+void NetworkProcessProxy::fetchWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, OptionSet<WebsiteDataFetchOption> fetchOptions, CompletionHandler<void(WebsiteData)>&& completionHandler)
{
- ASSERT(canSendMessage());
-
- auto callbackID = CallbackID::generateID();
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is fetching Website data", this);
-
- m_pendingFetchWebsiteDataCallbacks.add(callbackID, [this, activity = throttler().backgroundActivity("NetworkProcessProxy::fetchWebsiteData"_s), completionHandler = WTFMove(completionHandler), sessionID] (WebsiteData websiteData) mutable {
-#if RELEASE_LOG_DISABLED
- UNUSED_PARAM(this);
- UNUSED_PARAM(sessionID);
-#endif
- completionHandler(WTFMove(websiteData));
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done fetching Website data", this);
- });
-
- send(Messages::NetworkProcess::FetchWebsiteData(sessionID, dataTypes, fetchOptions, callbackID), 0);
+ sendWithAsyncReply(Messages::NetworkProcess::FetchWebsiteData(sessionID, dataTypes, fetchOptions), WTFMove(completionHandler));
}
-void NetworkProcessProxy::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, WallTime modifiedSince, CompletionHandler<void ()>&& completionHandler)
+void NetworkProcessProxy::deleteWebsiteData(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, WallTime modifiedSince, CompletionHandler<void()>&& completionHandler)
{
- auto callbackID = CallbackID::generateID();
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is deleting Website data", this);
-
- m_pendingDeleteWebsiteDataCallbacks.add(callbackID, [this, activity = throttler().backgroundActivity("NetworkProcessProxy::deleteWebsiteData"_s), completionHandler = WTFMove(completionHandler), sessionID] () mutable {
-#if RELEASE_LOG_DISABLED
- UNUSED_PARAM(this);
- UNUSED_PARAM(sessionID);
-#endif
- completionHandler();
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done deleting Website data", this);
- });
- send(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
+ sendWithAsyncReply(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince), WTFMove(completionHandler));
}
void NetworkProcessProxy::deleteWebsiteDataForOrigins(PAL::SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, const Vector<String>& HSTSCacheHostNames, const Vector<RegistrableDomain>& registrableDomains, CompletionHandler<void()>&& completionHandler)
{
- ASSERT(canSendMessage());
-
- auto callbackID = CallbackID::generateID();
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is taking a background assertion because the Network process is deleting Website data for several origins", this);
-
- m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, [this, activity = throttler().backgroundActivity("NetworkProcessProxy::deleteWebsiteDataForOrigins"_s), completionHandler = WTFMove(completionHandler), sessionID] () mutable {
-#if RELEASE_LOG_DISABLED
- UNUSED_PARAM(this);
- UNUSED_PARAM(sessionID);
-#endif
- completionHandler();
- RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done deleting Website data for several origins", this);
- });
-
- send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains, callbackID), 0);
+ sendWithAsyncReply(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, cookieHostNames, HSTSCacheHostNames, registrableDomains), WTFMove(completionHandler));
}
void NetworkProcessProxy::renameOriginInWebsiteData(PAL::SessionID sessionID, const URL& oldName, const URL& newName, OptionSet<WebsiteDataType> dataTypes, CompletionHandler<void()>&& completionHandler)
@@ -351,8 +309,6 @@
if (defaultProcess() == this)
defaultProcess() = nullptr;
- clearCallbackStates();
-
Ref<NetworkProcessProxy> protectedThis(*this);
for (auto* processPool : WebProcessPool::allProcessPools())
processPool->networkProcessCrashed(*this);
@@ -360,18 +316,6 @@
websiteDataStore.networkProcessCrashed(*this);
}
-void NetworkProcessProxy::clearCallbackStates()
-{
- while (!m_pendingFetchWebsiteDataCallbacks.isEmpty())
- m_pendingFetchWebsiteDataCallbacks.take(m_pendingFetchWebsiteDataCallbacks.begin()->key)(WebsiteData { });
-
- while (!m_pendingDeleteWebsiteDataCallbacks.isEmpty())
- m_pendingDeleteWebsiteDataCallbacks.take(m_pendingDeleteWebsiteDataCallbacks.begin()->key)();
-
- while (!m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty())
- m_pendingDeleteWebsiteDataForOriginsCallbacks.take(m_pendingDeleteWebsiteDataForOriginsCallbacks.begin()->key)();
-}
-
void NetworkProcessProxy::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
{
if (dispatchMessage(connection, decoder))
@@ -477,27 +421,6 @@
page->didNegotiateModernTLS(challenge);
}
-void NetworkProcessProxy::didFetchWebsiteData(CallbackID callbackID, const WebsiteData& websiteData)
-{
- MESSAGE_CHECK(m_pendingFetchWebsiteDataCallbacks.isValidKey(callbackID));
- auto callback = m_pendingFetchWebsiteDataCallbacks.take(callbackID);
- callback(websiteData);
-}
-
-void NetworkProcessProxy::didDeleteWebsiteData(CallbackID callbackID)
-{
- MESSAGE_CHECK(m_pendingDeleteWebsiteDataCallbacks.isValidKey(callbackID));
- auto callback = m_pendingDeleteWebsiteDataCallbacks.take(callbackID);
- callback();
-}
-
-void NetworkProcessProxy::didDeleteWebsiteDataForOrigins(CallbackID callbackID)
-{
- MESSAGE_CHECK(m_pendingDeleteWebsiteDataForOriginsCallbacks.isValidKey(callbackID));
- auto callback = m_pendingDeleteWebsiteDataForOriginsCallbacks.take(callbackID);
- callback();
-}
-
void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
{
AuxiliaryProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (275364 => 275365)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2021-04-01 17:17:26 UTC (rev 275365)
@@ -279,8 +279,6 @@
void connectionWillOpen(IPC::Connection&) override;
void processWillShutDown(IPC::Connection&) override;
- void clearCallbackStates();
-
// IPC::Connection::Client
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
bool didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, UniqueRef<IPC::Encoder>&) override;
@@ -293,9 +291,6 @@
void didReceiveAuthenticationChallenge(PAL::SessionID, WebPageProxyIdentifier, const Optional<WebCore::SecurityOriginData>&, WebCore::AuthenticationChallenge&&, bool, uint64_t challengeID);
void negotiatedLegacyTLS(WebPageProxyIdentifier);
void didNegotiateModernTLS(WebPageProxyIdentifier, const WebCore::AuthenticationChallenge&);
- void didFetchWebsiteData(CallbackID, const WebsiteData&);
- void didDeleteWebsiteData(CallbackID);
- void didDeleteWebsiteDataForOrigins(CallbackID);
void setWebProcessHasUploads(WebCore::ProcessIdentifier, bool);
void logDiagnosticMessage(WebPageProxyIdentifier, const String& message, const String& description, WebCore::ShouldSample);
void logDiagnosticMessageWithResult(WebPageProxyIdentifier, const String& message, const String& description, uint32_t result, WebCore::ShouldSample);
@@ -333,10 +328,6 @@
void processAuthenticationChallenge(PAL::SessionID, Ref<AuthenticationChallengeProxy>&&);
- HashMap<CallbackID, CompletionHandler<void(WebsiteData)>> m_pendingFetchWebsiteDataCallbacks;
- HashMap<CallbackID, CompletionHandler<void()>> m_pendingDeleteWebsiteDataCallbacks;
- HashMap<CallbackID, CompletionHandler<void()>> m_pendingDeleteWebsiteDataForOriginsCallbacks;
-
std::unique_ptr<DownloadProxyMap> m_downloadProxyMap;
UniqueRef<API::CustomProtocolManagerClient> m_customProtocolManagerClient;
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (275364 => 275365)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2021-04-01 16:10:44 UTC (rev 275364)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2021-04-01 17:17:26 UTC (rev 275365)
@@ -25,10 +25,6 @@
NegotiatedLegacyTLS(WebKit::WebPageProxyIdentifier pageID)
DidNegotiateModernTLS(WebKit::WebPageProxyIdentifier pageID, WebCore::AuthenticationChallenge challenge)
- DidFetchWebsiteData(WebKit::CallbackID callbackID, struct WebKit::WebsiteData websiteData)
- DidDeleteWebsiteData(WebKit::CallbackID callbackID)
- DidDeleteWebsiteDataForOrigins(WebKit::CallbackID callbackID)
-
TestProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebKit::WebPageProxyIdentifier pageID) -> (bool handled) Synchronous
TerminateUnresponsiveServiceWorkerProcesses(WebCore::ProcessIdentifier processIdentifier)