Title: [275389] trunk/Source/WebKit
Revision
275389
Author
[email protected]
Date
2021-04-01 15:27:18 -0700 (Thu, 01 Apr 2021)

Log Message

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:

Modified Paths

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

Reply via email to