Diff
Modified: trunk/Source/WebKit/ChangeLog (275388 => 275389)
--- trunk/Source/WebKit/ChangeLog 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/ChangeLog 2021-04-01 22:27:18 UTC (rev 275389)
@@ -1,3 +1,31 @@
+2021-04-01 Chris Dumez <[email protected]>
+
+ Share same code between network process termination and crash handling
+ https://bugs.webkit.org/show_bug.cgi?id=224056
+
+ Reviewed by Darin Adler.
+
+ Share same code between network process termination and crash handling. This would avoid
+ bugs such as Bug 224022.
+
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::terminate):
+ (WebKit::NetworkProcessProxy::networkProcessDidTerminate):
+ (WebKit::NetworkProcessProxy::didClose):
+ (WebKit::NetworkProcessProxy::didFinishLaunching):
+ (WebKit::NetworkProcessProxy::didTerminate): Deleted.
+ (WebKit::NetworkProcessProxy::networkProcessCrashed): Deleted.
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::networkProcessDidTerminate):
+ (WebKit::WebProcessPool::networkProcessCrashed): Deleted.
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::networkProcessDidTerminate):
+ (WebKit::WebsiteDataStore::terminateNetworkProcess):
+ (WebKit::WebsiteDataStore::networkProcessCrashed): Deleted.
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+
2021-04-01 Per Arne <[email protected]>
Add IOKit method filter telemetry
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2021-04-01 22:27:18 UTC (rev 275389)
@@ -119,15 +119,9 @@
AuxiliaryProcessProxy::terminate();
if (auto* connection = this->connection())
connection->invalidate();
- didTerminate();
+ networkProcessDidTerminate(TerminationReason::RequestedByClient);
}
-void NetworkProcessProxy::didTerminate()
-{
- if (this == defaultProcess().get())
- defaultProcess() = nullptr;
-}
-
void NetworkProcessProxy::sendCreationParametersToNewProcess()
{
ASSERT(RunLoop::isMain());
@@ -304,16 +298,26 @@
sendWithAsyncReply(Messages::NetworkProcess::RenameOriginInWebsiteData(sessionID, oldName, newName, dataTypes), WTFMove(completionHandler));
}
-void NetworkProcessProxy::networkProcessCrashed()
+void NetworkProcessProxy::networkProcessDidTerminate(TerminationReason reason)
{
+ if (m_downloadProxyMap)
+ m_downloadProxyMap->invalidate();
+#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
+ m_customProtocolManagerProxy.invalidate();
+#endif
+
+ m_activityForHoldingLockedFiles = nullptr;
+
+ m_uploadActivity = WTF::nullopt;
+
if (defaultProcess() == this)
defaultProcess() = nullptr;
Ref<NetworkProcessProxy> protectedThis(*this);
for (auto* processPool : WebProcessPool::allProcessPools())
- processPool->networkProcessCrashed(*this);
+ processPool->networkProcessDidTerminate(*this, reason);
for (auto& websiteDataStore : m_websiteDataStores)
- websiteDataStore.networkProcessCrashed(*this);
+ websiteDataStore.networkProcessDidTerminate(*this);
}
void NetworkProcessProxy::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
@@ -334,18 +338,8 @@
void NetworkProcessProxy::didClose(IPC::Connection&)
{
- if (m_downloadProxyMap)
- m_downloadProxyMap->invalidate();
-#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
- m_customProtocolManagerProxy.invalidate();
-#endif
-
- m_activityForHoldingLockedFiles = nullptr;
-
- m_uploadActivity = WTF::nullopt;
-
// This will cause us to be deleted.
- networkProcessCrashed();
+ networkProcessDidTerminate(TerminationReason::Crash);
}
void NetworkProcessProxy::didReceiveInvalidMessage(IPC::Connection& connection, IPC::MessageName messageName)
@@ -426,7 +420,7 @@
AuxiliaryProcessProxy::didFinishLaunching(launcher, connectionIdentifier);
if (!IPC::Connection::identifierIsValid(connectionIdentifier)) {
- networkProcessCrashed();
+ networkProcessDidTerminate(TerminationReason::Crash);
return;
}
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2021-04-01 22:27:18 UTC (rev 275389)
@@ -115,7 +115,6 @@
static Vector<Ref<NetworkProcessProxy>> allNetworkProcesses();
void terminate() final;
- void didTerminate();
void getNetworkProcessConnection(WebProcessProxy&, Messages::WebProcessProxy::GetNetworkProcessConnectionDelayedReply&&);
@@ -237,7 +236,8 @@
void registerSchemeForLegacyCustomProtocol(const String&);
void unregisterSchemeForLegacyCustomProtocol(const String&);
- void networkProcessCrashed();
+ enum class TerminationReason { RequestedByClient, Crash };
+ void networkProcessDidTerminate(TerminationReason);
void resetQuota(PAL::SessionID, CompletionHandler<void()>&&);
void setQuotaLoggingEnabled(PAL::SessionID, bool enabled, CompletionHandler<void()>&&);
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2021-04-01 22:27:18 UTC (rev 275389)
@@ -472,12 +472,13 @@
#endif
}
-void WebProcessPool::networkProcessCrashed(NetworkProcessProxy& networkProcessProxy)
+void WebProcessPool::networkProcessDidTerminate(NetworkProcessProxy& networkProcessProxy, NetworkProcessProxy::TerminationReason reason)
{
for (auto& supplement : m_supplements.values())
supplement->processDidClose(&networkProcessProxy);
- m_client.networkProcessDidCrash(this);
+ if (reason == NetworkProcessProxy::TerminationReason::Crash)
+ m_client.networkProcessDidCrash(this);
if (m_automationSession)
m_automationSession->terminate();
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2021-04-01 22:27:18 UTC (rev 275389)
@@ -368,7 +368,7 @@
#endif
// Network Process Management
- void networkProcessCrashed(NetworkProcessProxy&);
+ void networkProcessDidTerminate(NetworkProcessProxy&, NetworkProcessProxy::TerminationReason);
bool isServiceWorkerPageID(WebPageProxyIdentifier) const;
#if ENABLE(SERVICE_WORKER)
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2021-04-01 22:27:18 UTC (rev 275389)
@@ -1731,23 +1731,16 @@
});
}
-void WebsiteDataStore::networkProcessCrashed(NetworkProcessProxy&)
+void WebsiteDataStore::networkProcessDidTerminate(NetworkProcessProxy& networkProcess)
{
- if (m_networkProcess)
- m_networkProcess->didTerminate();
+ ASSERT(!m_networkProcess || m_networkProcess == &networkProcess);
m_networkProcess = nullptr;
}
void WebsiteDataStore::terminateNetworkProcess()
{
- auto processPools = copyToVectorOf<RefPtr<WebProcessPool>>(WebProcessPool::allProcessPools());
- for (auto& processPool : processPools)
- processPool->terminateServiceWorkers();
-
- if (!m_networkProcess)
- return;
- m_networkProcess->terminate();
- m_networkProcess = nullptr;
+ if (auto networkProcess = std::exchange(m_networkProcess, nullptr))
+ networkProcess->terminate();
}
void WebsiteDataStore::sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&& completionHandler)
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (275388 => 275389)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2021-04-01 22:26:48 UTC (rev 275388)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2021-04-01 22:27:18 UTC (rev 275389)
@@ -139,7 +139,7 @@
void sendNetworkProcessPrepareToSuspendForTesting(CompletionHandler<void()>&&);
void sendNetworkProcessWillSuspendImminentlyForTesting();
void sendNetworkProcessDidResume();
- void networkProcessCrashed(NetworkProcessProxy&);
+ void networkProcessDidTerminate(NetworkProcessProxy&);
static void makeNextNetworkProcessLaunchFailForTesting();
static bool shouldMakeNextNetworkProcessLaunchFailForTesting();