Title: [260283] trunk/Source/WebKit
Revision
260283
Author
cdu...@apple.com
Date
2020-04-17 14:20:25 -0700 (Fri, 17 Apr 2020)

Log Message

[iOS] Refactor WebKit uploads process assertion logic to minimize chances of leaking them
https://bugs.webkit.org/show_bug.cgi?id=210664
<rdar://problem/61751982>

Reviewed by Geoff Garen.

To minimize chances of leaking "WebKit uploads" process assertion, the following refactoring
was done:
1. WebKit upload assertions are now held by NetworkProcessProxy instead of the WebProcessPool.
   This makes more sense since uploads are tied to a particular network process. In base of
   a network process crash, we would not want those assertions to persist for example.
2. Store all upload assertions (UIProcess + NetworkProcess + WebProcesses) into a single
   UploadActivity data structure that can easily be cleared. Make sure we clear it on network
   process crash.
3. No longer on the WebProcess to send IPC whenever its has pending uploads or not. Instead,
   have the network process send such IPC. This makes more sense, especially now that all
   webkit upload process assertions are now stored on NetworkProcessProxy. It also makes it
   so that we deal properly with WebProcess crashes. In case of a WebProcess crash, its
   connection to the network process will get closed. NetworkConnectionToWebProcess::didClose()
   gets called and causes all NetworkResourceLoader objects for this connection to get
   destroyed. As a result, the network process will properly notify the UIProcess that this
   process no longer has any upload in progress.

* NetworkProcess/NetworkConnectionToWebProcess.cpp:
(WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
(WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
(WebKit::NetworkConnectionToWebProcess::hasUploadStateChanged):
* NetworkProcess/NetworkConnectionToWebProcess.h:
* NetworkProcess/NetworkResourceLoadMap.cpp:
(WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap):
(WebKit::NetworkResourceLoadMap::~NetworkResourceLoadMap):
(WebKit::NetworkResourceLoadMap::add):
(WebKit::NetworkResourceLoadMap::clear):
(WebKit::NetworkResourceLoadMap::take):
(WebKit::NetworkResourceLoadMap::setHasUpload):
* NetworkProcess/NetworkResourceLoadMap.h:
(WebKit::NetworkResourceLoadMap::hasUpload const):
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::didClose):
(WebKit::NetworkProcessProxy::setWebProcessHasUploads):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.messages.in:
* UIProcess/ProcessAssertion.cpp:
(WebKit::ProcessAssertion::ProcessAssertion):
* UIProcess/ProcessAssertion.h:
(WebKit::ProcessAssertion::pid const):
* UIProcess/WebProcessPool.cpp:
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessPool.messages.in:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::~WebProcessProxy):
* UIProcess/WebProcessProxy.h:
* WebProcess/Network/WebLoaderStrategy.cpp:
(WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
(WebKit::WebLoaderStrategy::remove):
(WebKit::WebLoaderStrategy::loadResourceSynchronously):
* WebProcess/Network/WebLoaderStrategy.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (260282 => 260283)


--- trunk/Source/WebKit/ChangeLog	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/ChangeLog	2020-04-17 21:20:25 UTC (rev 260283)
@@ -1,3 +1,63 @@
+2020-04-17  Chris Dumez  <cdu...@apple.com>
+
+        [iOS] Refactor WebKit uploads process assertion logic to minimize chances of leaking them
+        https://bugs.webkit.org/show_bug.cgi?id=210664
+        <rdar://problem/61751982>
+
+        Reviewed by Geoff Garen.
+
+        To minimize chances of leaking "WebKit uploads" process assertion, the following refactoring
+        was done:
+        1. WebKit upload assertions are now held by NetworkProcessProxy instead of the WebProcessPool.
+           This makes more sense since uploads are tied to a particular network process. In base of
+           a network process crash, we would not want those assertions to persist for example.
+        2. Store all upload assertions (UIProcess + NetworkProcess + WebProcesses) into a single
+           UploadActivity data structure that can easily be cleared. Make sure we clear it on network
+           process crash.
+        3. No longer on the WebProcess to send IPC whenever its has pending uploads or not. Instead,
+           have the network process send such IPC. This makes more sense, especially now that all
+           webkit upload process assertions are now stored on NetworkProcessProxy. It also makes it
+           so that we deal properly with WebProcess crashes. In case of a WebProcess crash, its
+           connection to the network process will get closed. NetworkConnectionToWebProcess::didClose()
+           gets called and causes all NetworkResourceLoader objects for this connection to get
+           destroyed. As a result, the network process will properly notify the UIProcess that this
+           process no longer has any upload in progress.
+
+        * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+        (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
+        (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess):
+        (WebKit::NetworkConnectionToWebProcess::hasUploadStateChanged):
+        * NetworkProcess/NetworkConnectionToWebProcess.h:
+        * NetworkProcess/NetworkResourceLoadMap.cpp:
+        (WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap):
+        (WebKit::NetworkResourceLoadMap::~NetworkResourceLoadMap):
+        (WebKit::NetworkResourceLoadMap::add):
+        (WebKit::NetworkResourceLoadMap::clear):
+        (WebKit::NetworkResourceLoadMap::take):
+        (WebKit::NetworkResourceLoadMap::setHasUpload):
+        * NetworkProcess/NetworkResourceLoadMap.h:
+        (WebKit::NetworkResourceLoadMap::hasUpload const):
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::didClose):
+        (WebKit::NetworkProcessProxy::setWebProcessHasUploads):
+        * UIProcess/Network/NetworkProcessProxy.h:
+        * UIProcess/Network/NetworkProcessProxy.messages.in:
+        * UIProcess/ProcessAssertion.cpp:
+        (WebKit::ProcessAssertion::ProcessAssertion):
+        * UIProcess/ProcessAssertion.h:
+        (WebKit::ProcessAssertion::pid const):
+        * UIProcess/WebProcessPool.cpp:
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessPool.messages.in:
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::~WebProcessProxy):
+        * UIProcess/WebProcessProxy.h:
+        * WebProcess/Network/WebLoaderStrategy.cpp:
+        (WebKit::WebLoaderStrategy::scheduleLoadFromNetworkProcess):
+        (WebKit::WebLoaderStrategy::remove):
+        (WebKit::WebLoaderStrategy::loadResourceSynchronously):
+        * WebProcess/Network/WebLoaderStrategy.h:
+
 2020-04-17  Jer Noble  <jer.no...@apple.com>
 
         Bring Fullscreen API + alert() behavior from iOS to macOS

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (260282 => 260283)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -105,6 +105,7 @@
     : m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
     , m_networkProcess(networkProcess)
     , m_sessionID(sessionID)
+    , m_networkResourceLoaders([this](bool hasUpload) { hasUploadStateChanged(hasUpload); })
 #if ENABLE(WEB_RTC)
     , m_mdnsRegister(*this)
 #endif
@@ -131,6 +132,9 @@
 
     m_connection->invalidate();
 
+    // This may call hasUploadStateChanged().
+    m_networkResourceLoaders.clear();
+
     for (auto& port : m_processEntangledPorts)
         networkProcess().messagePortChannelRegistry().didCloseMessagePort(port);
 
@@ -149,6 +153,12 @@
 #endif
 }
 
+void NetworkConnectionToWebProcess::hasUploadStateChanged(bool hasUpload)
+{
+    RELEASE_LOG_IF_ALLOWED(Loading, "hasUploadStateChanged - WebProcess %llu - hasUpload: %d", webProcessIdentifier().toUInt64(), hasUpload);
+    m_networkProcess->parentProcessConnection()->send(Messages::NetworkProcessProxy::SetWebProcessHasUploads(m_webProcessIdentifier, hasUpload), 0);
+}
+
 void NetworkConnectionToWebProcess::didCleanupResourceLoader(NetworkResourceLoader& loader)
 {
     RELEASE_ASSERT(loader.identifier());

Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (260282 => 260283)


--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -314,6 +314,8 @@
     size_t findRootNetworkActivity(WebCore::PageIdentifier);
     size_t findNetworkActivityTracker(ResourceLoadIdentifier resourceID);
 
+    void hasUploadStateChanged(bool);
+
 #if ENABLE(APPLE_PAY_REMOTE_UI)
     WebPaymentCoordinatorProxy& paymentCoordinator();
 

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp (260282 => 260283)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -29,10 +29,24 @@
 
 namespace WebKit {
 
+NetworkResourceLoadMap::NetworkResourceLoadMap(Function<void(bool hasUpload)>&& hasUploadChangeListener)
+    : m_hasUploadChangeListener(WTFMove(hasUploadChangeListener))
+{
+}
+
+NetworkResourceLoadMap::~NetworkResourceLoadMap()
+{
+    clear();
+}
+
 NetworkResourceLoadMap::MapType::AddResult NetworkResourceLoadMap::add(ResourceLoadIdentifier identifier, Ref<NetworkResourceLoader>&& loader)
 {
     ASSERT(!m_loaders.contains(identifier));
-    return m_loaders.add(identifier, WTFMove(loader));
+    bool hasUpload = loader->originalRequest().hasUpload();
+    auto result = m_loaders.add(identifier, WTFMove(loader));
+    if (hasUpload)
+        setHasUpload(true);
+    return result;
 }
 
 bool NetworkResourceLoadMap::remove(ResourceLoadIdentifier identifier)
@@ -40,11 +54,21 @@
     return !!take(identifier);
 }
 
+void NetworkResourceLoadMap::clear()
+{
+    m_loaders.clear();
+    setHasUpload(false);
+}
+
 RefPtr<NetworkResourceLoader> NetworkResourceLoadMap::take(ResourceLoadIdentifier identifier)
 {
     auto loader = m_loaders.take(identifier);
     if (!loader)
         return nullptr;
+
+    if ((*loader)->originalRequest().hasUpload())
+        setHasUpload(WTF::anyOf(m_loaders.values(), [](auto& loader) { return loader->originalRequest().hasUpload(); }));
+
     return WTFMove(*loader);
 }
 
@@ -53,4 +77,14 @@
     return m_loaders.get(identifier);
 }
 
+void NetworkResourceLoadMap::setHasUpload(bool hasUpload)
+{
+    if (m_hasUpload == hasUpload)
+        return;
+
+    m_hasUpload = hasUpload;
+    if (m_hasUploadChangeListener)
+        m_hasUploadChangeListener(m_hasUpload);
+}
+
 } // namespace WebKit

Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h (260282 => 260283)


--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -42,11 +42,14 @@
 class NetworkResourceLoadMap {
 public:
     typedef HashMap<ResourceLoadIdentifier, Ref<NetworkResourceLoader>> MapType;
+    NetworkResourceLoadMap(Function<void(bool hasUpload)>&&);
+    ~NetworkResourceLoadMap();
 
     bool isEmpty() const { return m_loaders.isEmpty(); }
     bool contains(ResourceLoadIdentifier identifier) const { return m_loaders.contains(identifier); }
     MapType::iterator begin() { return m_loaders.begin(); }
     MapType::ValuesIteratorRange values() { return m_loaders.values(); }
+    void clear();
 
     MapType::AddResult add(ResourceLoadIdentifier, Ref<NetworkResourceLoader>&&);
     NetworkResourceLoader* get(ResourceLoadIdentifier) const;
@@ -53,8 +56,14 @@
     bool remove(ResourceLoadIdentifier);
     RefPtr<NetworkResourceLoader> take(ResourceLoadIdentifier);
 
+    bool hasUpload() const { return m_hasUpload; }
+
 private:
+    void setHasUpload(bool);
+
     MapType m_loaders;
+    bool m_hasUpload { false };
+    Function<void(bool hasUpload)> m_hasUploadChangeListener;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -274,6 +274,8 @@
     m_syncAllCookiesActivity = nullptr;
     m_syncAllCookiesCounter = 0;
 
+    m_uploadActivity = WTF::nullopt;
+
     // This will cause us to be deleted.
     networkProcessCrashed();
 }
@@ -1355,16 +1357,42 @@
 #endif
 }
 
-void NetworkProcessProxy::takeUploadAssertion()
+void NetworkProcessProxy::setWebProcessHasUploads(WebCore::ProcessIdentifier processID, bool hasUpload)
 {
-    ASSERT(!m_uploadAssertion);
-    m_uploadAssertion = makeUnique<ProcessAssertion>(processIdentifier(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking);
-}
+    if (!hasUpload) {
+        if (!m_uploadActivity)
+            return;
 
-void NetworkProcessProxy::clearUploadAssertion()
-{
-    ASSERT(m_uploadAssertion);
-    m_uploadAssertion = nullptr;
+        auto assertion = m_uploadActivity->webProcessAssertions.take(processID);
+        if (!assertion)
+            return;
+
+        RELEASE_LOG(ProcessSuspension, "NetworkProcessProxy::setWebProcessHasUploads: Releasing upload assertion on behalf of WebProcess with PID %d", assertion->pid());
+
+        if (m_uploadActivity->webProcessAssertions.isEmpty()) {
+            RELEASE_LOG(ProcessSuspension, "NetworkProcessProxy::setWebProcessHasUploads: The number of uploads in progress is now zero. Releasing Networking and UI process assertions.");
+            m_uploadActivity = WTF::nullopt;
+        }
+        return;
+    }
+
+    auto* process = WebProcessProxy::processForIdentifier(processID);
+    if (!process)
+        return;
+
+    if (!m_uploadActivity) {
+        RELEASE_LOG(ProcessSuspension, "NetworkProcessProxy::setWebProcessHasUploads: The number of uploads in progress is now greater than 0. Taking Networking and UI process assertions.");
+        m_uploadActivity = UploadActivity {
+            makeUnique<ProcessAssertion>(getCurrentProcessID(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking),
+            makeUnique<ProcessAssertion>(processIdentifier(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking),
+            HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>>()
+        };
+    }
+
+    m_uploadActivity->webProcessAssertions.ensure(processID, [&] {
+        RELEASE_LOG(ProcessSuspension, "NetworkProcessProxy::setWebProcessHasUploads: Taking upload assertion on behalf of WebProcess with PID %d", process->processIdentifier());
+        return makeUnique<ProcessAssertion>(process->processIdentifier(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking);
+    });
 }
 
 void NetworkProcessProxy::testProcessIncomingSyncMessagesWhenWaitingForSyncReply(WebPageProxyIdentifier pageID, Messages::NetworkProcessProxy::TestProcessIncomingSyncMessagesWhenWaitingForSyncReply::DelayedReply&& reply)

Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -201,9 +201,6 @@
     void addSession(Ref<WebsiteDataStore>&&);
     void removeSession(PAL::SessionID);
     
-    void takeUploadAssertion();
-    void clearUploadAssertion();
-    
 #if ENABLE(INDEXED_DATABASE)
     void createSymLinkForFileUpgrade(const String& indexedDatabaseDirectory);
 #endif
@@ -255,6 +252,7 @@
     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);
     void logDiagnosticMessageWithValue(WebPageProxyIdentifier, const String& message, const String& description, double value, unsigned significantFigures, WebCore::ShouldSample);
@@ -311,8 +309,13 @@
 #endif
 
     HashMap<PAL::SessionID, RefPtr<WebsiteDataStore>> m_websiteDataStores;
-    
-    std::unique_ptr<ProcessAssertion> m_uploadAssertion;
+
+    struct UploadActivity {
+        std::unique_ptr<ProcessAssertion> uiAssertion;
+        std::unique_ptr<ProcessAssertion> networkAssertion;
+        HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>> webProcessAssertions;
+    };
+    Optional<UploadActivity> m_uploadActivity;
 };
 
 } // namespace WebKit

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


--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in	2020-04-17 21:20:25 UTC (rev 260283)
@@ -65,6 +65,8 @@
     UnregisterServiceWorkerClientProcess(WebCore::ProcessIdentifier webProcessIdentifier, WebCore::ProcessIdentifier serviceWorkerProcessIdentifier)
 #endif
 
+    SetWebProcessHasUploads(WebCore::ProcessIdentifier processID, bool hasUpload)
+
     RequestStorageSpace(PAL::SessionID sessionID, struct WebCore::ClientOrigin origin, uint64_t quota, uint64_t currentSize, uint64_t spaceRequired) -> (Optional<uint64_t> newQuota) Async
     
     ResourceLoadDidSendRequest(WebKit::WebPageProxyIdentifier pageIdentifier, struct WebKit::ResourceLoadInfo resourceLoadInfo, WebCore::ResourceRequest request, Optional<IPC::FormDataReference> httpBody)

Modified: trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/ProcessAssertion.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -32,8 +32,9 @@
 
 namespace WebKit {
 
-ProcessAssertion::ProcessAssertion(ProcessID, ASCIILiteral, ProcessAssertionType assertionType)
+ProcessAssertion::ProcessAssertion(ProcessID pid, ASCIILiteral, ProcessAssertionType assertionType)
     : m_assertionType(assertionType)
+    , m_pid(pid)
 {
 }
 

Modified: trunk/Source/WebKit/UIProcess/ProcessAssertion.h (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/ProcessAssertion.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/ProcessAssertion.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -69,6 +69,7 @@
     Client* client() { return m_client; }
 
     ProcessAssertionType type() const { return m_assertionType; }
+    ProcessID pid() const { return m_pid; }
 
 #if PLATFORM(IOS_FAMILY)
 protected:
@@ -80,8 +81,8 @@
 
 private:
     const ProcessAssertionType m_assertionType;
+    const ProcessID m_pid;
 #if PLATFORM(IOS_FAMILY)
-    const ProcessID m_pid;
     RetainPtr<RBSAssertion> m_rbsAssertion;
     RetainPtr<WKRBSAssertionDelegate> m_delegate;
     RetainPtr<BKSProcessAssertion> m_bksAssertion; // Legacy.

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -2350,54 +2350,6 @@
 }
 #endif
 
-void WebProcessPool::setWebProcessHasUploads(ProcessIdentifier processID)
-{
-    ASSERT(processID);
-    auto* process = WebProcessProxy::processForIdentifier(processID);
-    ASSERT(process);
-
-    if (!process)
-        return;
-
-    WEBPROCESSPOOL_RELEASE_LOG(ProcessSuspension, "setWebProcessHasUploads: Web process now has uploads in progress (process=%p, PID=%i)", process, process->processIdentifier());
-
-    if (m_processesWithUploads.isEmpty()) {
-        WEBPROCESSPOOL_RELEASE_LOG(ProcessSuspension, "setWebProcessHasUploads: The number of uploads in progress is now one. Taking Networking and UI process assertions.");
-
-        ensureNetworkProcess().takeUploadAssertion();
-        
-        ASSERT(!m_uiProcessUploadAssertion);
-        m_uiProcessUploadAssertion = makeUnique<ProcessAssertion>(getCurrentProcessID(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking);
-    }
-    
-    auto result = m_processesWithUploads.add(processID, nullptr);
-    ASSERT(result.isNewEntry);
-    result.iterator->value = makeUnique<ProcessAssertion>(process->processIdentifier(), "WebKit uploads"_s, ProcessAssertionType::UnboundedNetworking);
-}
-
-void WebProcessPool::clearWebProcessHasUploads(ProcessIdentifier processID)
-{
-    ASSERT(processID);
-    auto result = m_processesWithUploads.take(processID);
-    if (!result)
-        return;
-
-    auto* process = WebProcessProxy::processForIdentifier(processID);
-    ASSERT_UNUSED(process, process);
-    WEBPROCESSPOOL_RELEASE_LOG(ProcessSuspension, "clearWebProcessHasUploads: Web process no longer has uploads in progress (process=%p, PID=%i)", process, process->processIdentifier());
-
-    if (m_processesWithUploads.isEmpty()) {
-        WEBPROCESSPOOL_RELEASE_LOG(ProcessSuspension, "clearWebProcessHasUploads: The number of uploads in progress is now zero. Releasing Networking and UI process assertions.");
-
-        if (m_networkProcess)
-            m_networkProcess->clearUploadAssertion();
-        
-        ASSERT(m_uiProcessUploadAssertion);
-        m_uiProcessUploadAssertion = nullptr;
-    }
-    
-}
-
 void WebProcessPool::setWebProcessIsPlayingAudibleMedia(WebCore::ProcessIdentifier processID)
 {
     auto* process = WebProcessProxy::processForIdentifier(processID);

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -516,9 +516,6 @@
     void setUserMessageHandler(Function<void(UserMessage&&, CompletionHandler<void(UserMessage&&)>&&)>&& handler) { m_userMessageHandler = WTFMove(handler); }
     const Function<void(UserMessage&&, CompletionHandler<void(UserMessage&&)>&&)>& userMessageHandler() const { return m_userMessageHandler; }
 #endif
-    
-    void setWebProcessHasUploads(WebCore::ProcessIdentifier);
-    void clearWebProcessHasUploads(WebCore::ProcessIdentifier);
 
     void setWebProcessIsPlayingAudibleMedia(WebCore::ProcessIdentifier);
     void clearWebProcessIsPlayingAudibleMedia(WebCore::ProcessIdentifier);
@@ -790,9 +787,6 @@
     Function<void(UserMessage&&, CompletionHandler<void(UserMessage&&)>&&)> m_userMessageHandler;
 #endif
 
-    HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>> m_processesWithUploads;
-    std::unique_ptr<ProcessAssertion> m_uiProcessUploadAssertion;
-
     HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>> m_processesPlayingAudibleMedia;
     std::unique_ptr<ProcessAssertion> m_uiProcessMediaPlaybackAssertion;
     std::unique_ptr<ProcessAssertion> m_gpuProcessMediaPlaybackAssertion;

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in	2020-04-17 21:20:25 UTC (rev 260283)
@@ -30,7 +30,4 @@
 #endif
 
     ReportWebContentCPUTime(Seconds cpuTime, uint64_t activityState)
-
-    SetWebProcessHasUploads(WebCore::ProcessIdentifier processID)
-    ClearWebProcessHasUploads(WebCore::ProcessIdentifier processID)
 }

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -215,9 +215,6 @@
     RELEASE_ASSERT(isMainThreadOrCheckDisabled());
     ASSERT(m_pageURLRetainCountMap.isEmpty());
 
-    if (m_processPool)
-        m_processPool->clearWebProcessHasUploads(coreProcessIdentifier());
-
     auto result = allProcesses().remove(coreProcessIdentifier());
     ASSERT_UNUSED(result, result);
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (260282 => 260283)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -29,6 +29,7 @@
 #include "AuxiliaryProcessProxy.h"
 #include "BackgroundProcessResponsivenessTimer.h"
 #include "MessageReceiverMap.h"
+#include "NetworkProcessProxy.h"
 #include "PluginInfoStore.h"
 #include "ProcessLauncher.h"
 #include "ProcessTerminationReason.h"
@@ -78,7 +79,6 @@
 namespace WebKit {
 
 class AudioSessionRoutingArbitratorProxy;
-class NetworkProcessProxy;
 class ObjCObjectGraph;
 class PageClient;
 class ProvisionalPageProxy;

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (260282 => 260283)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp	2020-04-17 21:20:25 UTC (rev 260283)
@@ -397,12 +397,6 @@
     }
 
     auto loader = WebResourceLoader::create(resourceLoader, trackingParameters);
-    if (resourceLoader.originalRequest().hasUpload()) {
-        if (m_loadersWithUploads.isEmpty())
-            WebProcess::singleton().parentProcessConnection()->send(Messages::WebProcessPool::SetWebProcessHasUploads(Process::identifier()), 0);
-        m_loadersWithUploads.add(loader.ptr());
-    }
-
     m_webResourceLoaders.set(identifier, WTFMove(loader));
 }
 
@@ -464,9 +458,6 @@
 
     WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RemoveLoadIdentifier(identifier), 0);
 
-    if (m_loadersWithUploads.remove(loader.get()) && m_loadersWithUploads.isEmpty())
-        WebProcess::singleton().parentProcessConnection()->send(Messages::WebProcessPool::ClearWebProcessHasUploads { Process::identifier() }, 0);
-
     // It's possible that this WebResourceLoader might be just about to message back to the NetworkProcess (e.g. ContinueWillSendRequest)
     // but there's no point in doing so anymore.
     loader->detachFromCoreLoader();
@@ -614,10 +605,6 @@
     HangDetectionDisabler hangDetectionDisabler;
     IPC::UnboundedSynchronousIPCScope unboundedSynchronousIPCScope;
 
-    bool shouldNotifyOfUpload = request.hasUpload() && m_loadersWithUploads.isEmpty();
-    if (shouldNotifyOfUpload)
-        WebProcess::singleton().parentProcessConnection()->send(Messages::WebProcessPool::SetWebProcessHasUploads { Process::identifier() }, 0);
-
     if (!WebProcess::singleton().ensureNetworkProcessConnection().connection().sendSync(Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad(loadParameters), Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::Reply(error, response, data), 0)) {
         WEBLOADERSTRATEGY_WITH_FRAMELOADER_RELEASE_LOG_ERROR_IF_ALLOWED("loadResourceSynchronously: failed sending synchronous network process message");
         if (page)
@@ -625,9 +612,6 @@
         response = ResourceResponse();
         error = internalError(request.url());
     }
-
-    if (shouldNotifyOfUpload)
-        WebProcess::singleton().parentProcessConnection()->send(Messages::WebProcessPool::ClearWebProcessHasUploads { Process::identifier() }, 0);
 }
 
 void WebLoaderStrategy::pageLoadCompleted(Page& page)

Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h (260282 => 260283)


--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h	2020-04-17 21:19:49 UTC (rev 260282)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.h	2020-04-17 21:20:25 UTC (rev 260283)
@@ -126,7 +126,6 @@
     HashMap<unsigned long, PreconnectCompletionHandler> m_preconnectCompletionHandlers;
     Vector<Function<void(bool)>> m_onlineStateChangeListeners;
     bool m_isOnLine { true };
-    HashSet<WebResourceLoader*> m_loadersWithUploads;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to