Diff
Modified: trunk/Source/WebCore/ChangeLog (242890 => 242891)
--- trunk/Source/WebCore/ChangeLog 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebCore/ChangeLog 2019-03-13 17:57:57 UTC (rev 242891)
@@ -1,3 +1,14 @@
+2019-03-12 Brady Eidson <[email protected]>
+
+ Take UnboundedNetworking assertion when a file upload is in progress.
+ https://bugs.webkit.org/show_bug.cgi?id=195497
+
+ Reviewed by Geoff Garen.
+
+ * platform/network/ResourceRequestBase.cpp:
+ (WebCore::ResourceRequestBase::hasUpload const):
+ * platform/network/ResourceRequestBase.h:
+
2019-03-13 Youenn Fablet <[email protected]>
Enable libwebrtc logging control through WebCore
Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp (242890 => 242891)
--- trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -488,6 +488,18 @@
return m_httpBody.get();
}
+bool ResourceRequestBase::hasUpload() const
+{
+ if (auto* body = httpBody()) {
+ for (auto& element : body->elements()) {
+ if (WTF::holds_alternative<WebCore::FormDataElement::EncodedFileData>(element.data) || WTF::holds_alternative<WebCore::FormDataElement::EncodedBlobData>(element.data))
+ return true;
+ }
+ }
+
+ return false;
+}
+
void ResourceRequestBase::setHTTPBody(RefPtr<FormData>&& httpBody)
{
updateResourceRequest();
Modified: trunk/Source/WebCore/platform/network/ResourceRequestBase.h (242890 => 242891)
--- trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebCore/platform/network/ResourceRequestBase.h 2019-03-13 17:57:57 UTC (rev 242891)
@@ -144,6 +144,7 @@
WEBCORE_EXPORT void setResponseContentDispositionEncodingFallbackArray(const String& encoding1, const String& encoding2 = String(), const String& encoding3 = String());
WEBCORE_EXPORT FormData* httpBody() const;
+ WEBCORE_EXPORT bool hasUpload() const;
WEBCORE_EXPORT void setHTTPBody(RefPtr<FormData>&&);
bool allowCookies() const;
Modified: trunk/Source/WebKit/ChangeLog (242890 => 242891)
--- trunk/Source/WebKit/ChangeLog 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/ChangeLog 2019-03-13 17:57:57 UTC (rev 242891)
@@ -1,3 +1,57 @@
+2019-03-12 Brady Eidson <[email protected]>
+
+ Take UnboundedNetworking assertion when a file upload is in progress.
+ https://bugs.webkit.org/show_bug.cgi?id=195497
+
+ Reviewed by Geoff Garen.
+
+ This patch implements whole bunch of bookkeeping in both the Networking and UI processes.
+
+ The TLDR of that bookkeeping is:
+ - Whenever any uploads are in progress, take an assertion for both Networking and UI processes.
+ - Whenever a particular WebProcess has an upload in progress, take an assertion for it.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess):
+ (WebKit::NetworkConnectionToWebProcess::setProcessIdentifier):
+ (WebKit::NetworkConnectionToWebProcess::setConnectionHasUploads):
+ (WebKit::NetworkConnectionToWebProcess::clearConnectionHasUploads):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+
+ * NetworkProcess/NetworkResourceLoadMap.cpp: Added.
+ (WebKit::NetworkResourceLoadMap::add):
+ (WebKit::NetworkResourceLoadMap::remove):
+ (WebKit::NetworkResourceLoadMap::get const):
+ * NetworkProcess/NetworkResourceLoadMap.h: Added.
+ (WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap):
+ (WebKit::NetworkResourceLoadMap::isEmpty const):
+ (WebKit::NetworkResourceLoadMap::contains const):
+ (WebKit::NetworkResourceLoadMap::begin):
+ (WebKit::NetworkResourceLoadMap::values):
+
+ * NetworkProcess/NetworkSession.cpp:
+
+ * Scripts/webkit/messages.py:
+
+ * Sources.txt:
+
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::takeUploadAssertion):
+ (WebKit::NetworkProcessProxy::clearUploadAssertion):
+ * UIProcess/Network/NetworkProcessProxy.h:
+
+ * UIProcess/WebProcessPool.cpp:
+ (WebKit::WebProcessPool::setWebProcessHasUploads):
+ (WebKit::WebProcessPool::clearWebProcessHasUploads):
+ * UIProcess/WebProcessPool.h:
+ * UIProcess/WebProcessPool.messages.in:
+
+ * WebKit.xcodeproj/project.pbxproj:
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::ensureNetworkProcessConnection):
+
2019-03-13 Chris Dumez <[email protected]>
Use new RegistrableDomain type in PSON code
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (242890 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -50,6 +50,7 @@
#include "WebErrors.h"
#include "WebIDBConnectionToClient.h"
#include "WebIDBConnectionToClientMessages.h"
+#include "WebProcessPoolMessages.h"
#include "WebResourceLoadStatisticsStore.h"
#include "WebSWServerConnection.h"
#include "WebSWServerConnectionMessages.h"
@@ -77,6 +78,7 @@
NetworkConnectionToWebProcess::NetworkConnectionToWebProcess(NetworkProcess& networkProcess, IPC::Connection::Identifier connectionIdentifier)
: m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this))
, m_networkProcess(networkProcess)
+ , m_networkResourceLoaders(*this)
#if ENABLE(WEB_RTC)
, m_mdnsRegister(*this)
#endif
@@ -821,4 +823,23 @@
}
#endif
+void NetworkConnectionToWebProcess::setWebProcessIdentifier(ProcessIdentifier webProcessIdentifier)
+{
+ m_webProcessIdentifier = webProcessIdentifier;
+}
+
+void NetworkConnectionToWebProcess::setConnectionHasUploads()
+{
+ ASSERT(!m_connectionHasUploads);
+ m_connectionHasUploads = true;
+ m_networkProcess->parentProcessConnection()->send(Messages::WebProcessPool::SetWebProcessHasUploads(m_webProcessIdentifier), 0);
+}
+
+void NetworkConnectionToWebProcess::clearConnectionHasUploads()
+{
+ ASSERT(m_connectionHasUploads);
+ m_connectionHasUploads = false;
+ m_networkProcess->parentProcessConnection()->send(Messages::WebProcessPool::ClearWebProcessHasUploads(m_webProcessIdentifier), 0);
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (242890 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2019-03-13 17:57:57 UTC (rev 242891)
@@ -32,8 +32,10 @@
#include "NetworkConnectionToWebProcessMessages.h"
#include "NetworkMDNSRegister.h"
#include "NetworkRTCProvider.h"
+#include "NetworkResourceLoadMap.h"
#include "WebPaymentCoordinatorProxy.h"
#include <WebCore/NetworkLoadInformation.h>
+#include <WebCore/ProcessIdentifier.h>
#include <WebCore/RegistrableDomain.h>
#include <wtf/RefCounted.h>
@@ -135,6 +137,10 @@
Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(const URL&);
Vector<RefPtr<WebCore::BlobDataFileReference>> resolveBlobReferences(const NetworkResourceLoadParameters&);
+ void setWebProcessIdentifier(WebCore::ProcessIdentifier);
+ void setConnectionHasUploads();
+ void clearConnectionHasUploads();
+
private:
NetworkConnectionToWebProcess(NetworkProcess&, IPC::Connection::Identifier);
@@ -268,7 +274,7 @@
Ref<NetworkProcess> m_networkProcess;
HashMap<uint64_t, RefPtr<NetworkSocketStream>> m_networkSocketStreams;
- HashMap<ResourceLoadIdentifier, Ref<NetworkResourceLoader>> m_networkResourceLoaders;
+ NetworkResourceLoadMap m_networkResourceLoaders;
HashMap<String, RefPtr<WebCore::BlobDataFileReference>> m_blobDataFileReferences;
Vector<ResourceNetworkActivityTracker> m_networkActivityTrackers;
@@ -297,6 +303,9 @@
#if ENABLE(APPLE_PAY_REMOTE_UI)
std::unique_ptr<WebPaymentCoordinatorProxy> m_paymentCoordinator;
#endif
+
+ WebCore::ProcessIdentifier m_webProcessIdentifier;
+ bool m_connectionHasUploads { false };
};
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (242890 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2019-03-13 17:57:57 UTC (rev 242891)
@@ -83,4 +83,6 @@
#if ENABLE(SERVICE_WORKER)
EstablishSWServerConnection(PAL::SessionID sessionID) -> (WebCore::SWServerConnectionIdentifier serverConnectionIdentifier) LegacySync
#endif
+
+ SetWebProcessIdentifier(WebCore::ProcessIdentifier processIdentifier)
}
Added: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp (0 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "NetworkResourceLoadMap.h"
+
+namespace WebKit {
+
+NetworkResourceLoadMap::MapType::AddResult NetworkResourceLoadMap::add(ResourceLoadIdentifier identifier, Ref<NetworkResourceLoader>&& loader)
+{
+ auto result = m_loaders.add(identifier, WTFMove(loader));
+ ASSERT(result.isNewEntry);
+
+ if (result.iterator->value->originalRequest().hasUpload()) {
+ if (m_loadersWithUploads.isEmpty())
+ m_connectionToWebProcess.setConnectionHasUploads();
+ m_loadersWithUploads.add(result.iterator->value.ptr());
+ }
+
+ return result;
+}
+
+bool NetworkResourceLoadMap::remove(ResourceLoadIdentifier identifier)
+{
+ auto loader = m_loaders.take(identifier);
+ if (!loader)
+ return false;
+
+ if ((*loader)->originalRequest().hasUpload()) {
+ m_loadersWithUploads.remove(loader->ptr());
+ if (m_loadersWithUploads.isEmpty())
+ m_connectionToWebProcess.clearConnectionHasUploads();
+ }
+
+ return true;
+}
+
+NetworkResourceLoader* NetworkResourceLoadMap::get(ResourceLoadIdentifier identifier) const
+{
+ return m_loaders.get(identifier);
+}
+
+} // namespace WebKit
Added: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h (0 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadMap.h 2019-03-13 17:57:57 UTC (rev 242891)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2019 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "NetworkConnectionToWebProcess.h"
+#include "NetworkResourceLoader.h"
+#include <wtf/HashMap.h>
+#include <wtf/HashSet.h>
+
+#if ENABLE(TAKE_UNBOUNDED_NETWORKING_ASSERTION)
+#include "ProcessAssertion.h"
+#endif
+
+namespace WebKit {
+
+typedef uint64_t ResourceLoadIdentifier;
+
+class NetworkResourceLoadMap {
+public:
+ typedef HashMap<ResourceLoadIdentifier, Ref<NetworkResourceLoader>> MapType;
+
+ NetworkResourceLoadMap(NetworkConnectionToWebProcess& connection)
+ : m_connectionToWebProcess(connection)
+ {
+ }
+
+ 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(); }
+
+ MapType::AddResult add(ResourceLoadIdentifier, Ref<NetworkResourceLoader>&&);
+ NetworkResourceLoader* get(ResourceLoadIdentifier) const;
+ bool remove(ResourceLoadIdentifier);
+
+private:
+ NetworkConnectionToWebProcess& m_connectionToWebProcess;
+ MapType m_loaders;
+ HashSet<NetworkResourceLoader*> m_loadersWithUploads;
+};
+
+} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp (242890 => 242891)
--- trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -29,6 +29,8 @@
#include "NetworkAdClickAttribution.h"
#include "NetworkProcess.h"
#include "NetworkProcessProxyMessages.h"
+#include "WebPageProxy.h"
+#include "WebPageProxyMessages.h"
#include "WebProcessProxy.h"
#include <WebCore/AdClickAttribution.h>
#include <WebCore/CookieJar.h>
Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (242890 => 242891)
--- trunk/Source/WebKit/Scripts/webkit/messages.py 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py 2019-03-13 17:57:57 UTC (rev 242891)
@@ -198,6 +198,7 @@
'WebCore::DocumentIdentifier',
'WebCore::FetchIdentifier',
'WebCore::PointerID',
+ 'WebCore::ProcessIdentifier',
'WebCore::ServiceWorkerIdentifier',
'WebCore::ServiceWorkerJobIdentifier',
'WebCore::ServiceWorkerOrClientData',
@@ -424,6 +425,7 @@
'WebCore::PluginInfo': ['<WebCore/PluginData.h>'],
'WebCore::PolicyAction': ['<WebCore/FrameLoaderTypes.h>'],
'WebCore::PolicyCheckIdentifier': ['<WebCore/FrameLoaderTypes.h>'],
+ 'WebCore::ProcessIdentifier': ['<WebCore/ProcessIdentifier.h>'],
'WebCore::RecentSearch': ['<WebCore/SearchPopupMenu.h>'],
'WebCore::RouteSharingPolicy': ['<WebCore/AudioSession.h>'],
'WebCore::SWServerConnectionIdentifier': ['<WebCore/ServiceWorkerTypes.h>'],
Modified: trunk/Source/WebKit/Sources.txt (242890 => 242891)
--- trunk/Source/WebKit/Sources.txt 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/Sources.txt 2019-03-13 17:57:57 UTC (rev 242891)
@@ -35,6 +35,7 @@
NetworkProcess/NetworkProcessCreationParameters.cpp
NetworkProcess/NetworkProcessPlatformStrategies.cpp
NetworkProcess/NetworkResourceLoadParameters.cpp
+NetworkProcess/NetworkResourceLoadMap.cpp
NetworkProcess/NetworkResourceLoader.cpp
NetworkProcess/NetworkSession.cpp
NetworkProcess/NetworkSessionCreationParameters.cpp
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (242890 => 242891)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -1201,6 +1201,18 @@
store->client().requestStorageSpace(origin.topOrigin, origin.clientOrigin, quota, currentSize, spaceRequired, WTFMove(completionHandler));
}
+void NetworkProcessProxy::takeUploadAssertion()
+{
+ ASSERT(!m_uploadAssertion);
+ m_uploadAssertion = std::make_unique<ProcessAssertion>(processIdentifier(), "WebKit uploads"_s, AssertionState::UnboundedNetworking);
+}
+
+void NetworkProcessProxy::clearUploadAssertion()
+{
+ ASSERT(m_uploadAssertion);
+ m_uploadAssertion = nullptr;
+}
+
} // namespace WebKit
#undef MESSAGE_CHECK
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (242890 => 242891)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2019-03-13 17:57:57 UTC (rev 242891)
@@ -173,6 +173,9 @@
void addSession(Ref<WebsiteDataStore>&&);
void removeSession(PAL::SessionID);
+
+ void takeUploadAssertion();
+ void clearUploadAssertion();
private:
// AuxiliaryProcessProxy
@@ -261,6 +264,8 @@
#endif
HashMap<PAL::SessionID, RefPtr<WebsiteDataStore>> m_websiteDataStores;
+
+ std::unique_ptr<ProcessAssertion> m_uploadAssertion;
};
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.cpp (242890 => 242891)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -2511,4 +2511,47 @@
#endif
}
+void WebProcessPool::setWebProcessHasUploads(ProcessIdentifier processID)
+{
+ auto* process = WebProcessProxy::processForIdentifier(processID);
+ ASSERT(process);
+
+ RELEASE_LOG(ProcessSuspension, "Web process pid %u now has uploads in progress", (unsigned)process->processIdentifier());
+
+ if (m_processesWithUploads.isEmpty()) {
+ RELEASE_LOG(ProcessSuspension, "The number of uploads in progress is now one. Taking Networking and UI process assertions.");
+
+ ASSERT(m_networkProcess);
+ m_networkProcess->takeUploadAssertion();
+
+ ASSERT(!m_uiProcessUploadAssertion);
+ m_uiProcessUploadAssertion = std::make_unique<ProcessAssertion>(getCurrentProcessID(), "WebKit uploads"_s, AssertionState::UnboundedNetworking);
+ }
+
+ auto result = m_processesWithUploads.add(processID, nullptr);
+ ASSERT(result.isNewEntry);
+ result.iterator->value = std::make_unique<ProcessAssertion>(process->processIdentifier(), "WebKit uploads"_s, AssertionState::UnboundedNetworking);
+}
+
+void WebProcessPool::clearWebProcessHasUploads(ProcessIdentifier processID)
+{
+ auto result = m_processesWithUploads.take(processID);
+ ASSERT_UNUSED(result, result);
+
+ auto* process = WebProcessProxy::processForIdentifier(processID);
+ ASSERT(process);
+ RELEASE_LOG(ProcessSuspension, "Web process pid %u no longer has uploads in progress", (unsigned)process->processIdentifier());
+
+ if (m_processesWithUploads.isEmpty()) {
+ RELEASE_LOG(ProcessSuspension, "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;
+ }
+
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (242890 => 242891)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h 2019-03-13 17:57:57 UTC (rev 242891)
@@ -44,6 +44,7 @@
#include "WebContextClient.h"
#include "WebContextConnectionClient.h"
#include "WebProcessProxy.h"
+#include <WebCore/ProcessIdentifier.h>
#include <WebCore/RegistrableDomain.h>
#include <WebCore/SecurityOriginHash.h>
#include <WebCore/SharedStringHash.h>
@@ -52,7 +53,6 @@
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
#include <wtf/MemoryPressureHandler.h>
-#include <wtf/ProcessID.h>
#include <wtf/RefCounter.h>
#include <wtf/RefPtr.h>
#include <wtf/text/StringHash.h>
@@ -495,6 +495,9 @@
const HashMap<CString, SandboxPermission>& sandboxPaths() const { return m_extraSandboxPaths; };
bool sandboxEnabled() const { return m_sandboxEnabled; };
#endif
+
+ void setWebProcessHasUploads(WebCore::ProcessIdentifier);
+ void clearWebProcessHasUploads(WebCore::ProcessIdentifier);
private:
void platformInitialize();
@@ -768,6 +771,9 @@
bool m_sandboxEnabled { false };
HashMap<CString, SandboxPermission> m_extraSandboxPaths;
#endif
+
+ HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>> m_processesWithUploads;
+ std::unique_ptr<ProcessAssertion> m_uiProcessUploadAssertion;
};
template<typename T>
Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in (242890 => 242891)
--- trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in 2019-03-13 17:57:57 UTC (rev 242891)
@@ -37,6 +37,9 @@
ReportWebContentCPUTime(Seconds cpuTime, uint64_t activityState)
+ SetWebProcessHasUploads(WebCore::ProcessIdentifier processID)
+ ClearWebProcessHasUploads(WebCore::ProcessIdentifier processID)
+
#if ENABLE(SERVICE_WORKER)
PostMessageToServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier destinationIdentifier, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerIdentifier sourceIdentifier, String sourceOrigin)
PostMessageToServiceWorker(WebCore::ServiceWorkerIdentifier destination, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerOrClientIdentifier source, WebCore::SWServerConnectionIdentifier connectionIdentifier)
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (242890 => 242891)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2019-03-13 17:57:57 UTC (rev 242891)
@@ -924,6 +924,7 @@
51217461164C20E30037A5C1 /* ShareableResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5121745F164C20E30037A5C1 /* ShareableResource.h */; };
5123CF1C133D260A0056F800 /* WKIconDatabaseCG.h in Headers */ = {isa = PBXBuildFile; fileRef = 5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */; settings = {ATTRIBUTES = (Private, ); }; };
51240EBA220A08D2005CFC63 /* DownloadMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 51240EB8220A08CA005CFC63 /* DownloadMap.h */; };
+ 51240EC0220B694C005CFC63 /* NetworkResourceLoadMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */; };
512935D81288D19400A4B695 /* WebContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935D61288D19400A4B695 /* WebContextMenuItem.h */; };
512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */; };
512E34E5130B4D0500ABD19A /* WKApplicationCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 517A33B4130B308C00F80CB5 /* WKApplicationCacheManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3169,6 +3170,8 @@
5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WKIconDatabaseCG.h; path = cg/WKIconDatabaseCG.h; sourceTree = "<group>"; };
51240EB8220A08CA005CFC63 /* DownloadMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadMap.h; sourceTree = "<group>"; };
51240EB9220A08CA005CFC63 /* DownloadMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DownloadMap.cpp; sourceTree = "<group>"; };
+ 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkResourceLoadMap.h; sourceTree = "<group>"; };
+ 51240EBF220B6948005CFC63 /* NetworkResourceLoadMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkResourceLoadMap.cpp; sourceTree = "<group>"; };
512935D51288D19400A4B695 /* WebContextMenuItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextMenuItem.cpp; sourceTree = "<group>"; };
512935D61288D19400A4B695 /* WebContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebContextMenuItem.h; sourceTree = "<group>"; };
512935E11288D97800A4B695 /* InjectedBundlePageContextMenuClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InjectedBundlePageContextMenuClient.cpp; sourceTree = "<group>"; };
@@ -6512,6 +6515,8 @@
51FD18B31651FBAD00DBE1CE /* NetworkResourceLoader.cpp */,
51FD18B41651FBAD00DBE1CE /* NetworkResourceLoader.h */,
E1525517170109FB003D7ADB /* NetworkResourceLoader.messages.in */,
+ 51240EBF220B6948005CFC63 /* NetworkResourceLoadMap.cpp */,
+ 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */,
5C1426E51C23F80500D41183 /* NetworkResourceLoadParameters.cpp */,
5C1426E61C23F80500D41183 /* NetworkResourceLoadParameters.h */,
532159521DBAE6FC0054AA3C /* NetworkSession.cpp */,
@@ -9262,6 +9267,7 @@
A11455B0211FD25200CA935B /* NetworkProximityManager.h in Headers */,
51FD18B61651FBAD00DBE1CE /* NetworkResourceLoader.h in Headers */,
E152551B17011819003D7ADB /* NetworkResourceLoaderMessages.h in Headers */,
+ 51240EC0220B694C005CFC63 /* NetworkResourceLoadMap.h in Headers */,
5C1426F01C23F80900D41183 /* NetworkResourceLoadParameters.h in Headers */,
413075AC1DE85F370039EC69 /* NetworkRTCMonitor.h in Headers */,
41DC45961E3D6E2200B11F51 /* NetworkRTCProvider.h in Headers */,
Modified: trunk/Source/WebKit/WebProcess/WebProcess.cpp (242890 => 242891)
--- trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-03-13 17:53:24 UTC (rev 242890)
+++ trunk/Source/WebKit/WebProcess/WebProcess.cpp 2019-03-13 17:57:57 UTC (rev 242891)
@@ -1230,6 +1230,7 @@
CRASH();
m_networkProcessConnection = NetworkProcessConnection::create(connectionIdentifier);
+ m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::SetWebProcessIdentifier(Process::identifier()), 0);
}
return *m_networkProcessConnection;