Changeset 242891 in webkit
- Timestamp:
- Mar 13, 2019 10:57:57 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 2 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r242886 r242891 1 2019-03-12 Brady Eidson <beidson@apple.com> 2 3 Take UnboundedNetworking assertion when a file upload is in progress. 4 https://bugs.webkit.org/show_bug.cgi?id=195497 5 6 Reviewed by Geoff Garen. 7 8 * platform/network/ResourceRequestBase.cpp: 9 (WebCore::ResourceRequestBase::hasUpload const): 10 * platform/network/ResourceRequestBase.h: 11 1 12 2019-03-13 Youenn Fablet <youenn@apple.com> 2 13 -
trunk/Source/WebCore/platform/network/ResourceRequestBase.cpp
r241918 r242891 489 489 } 490 490 491 bool ResourceRequestBase::hasUpload() const 492 { 493 if (auto* body = httpBody()) { 494 for (auto& element : body->elements()) { 495 if (WTF::holds_alternative<WebCore::FormDataElement::EncodedFileData>(element.data) || WTF::holds_alternative<WebCore::FormDataElement::EncodedBlobData>(element.data)) 496 return true; 497 } 498 } 499 500 return false; 501 } 502 491 503 void ResourceRequestBase::setHTTPBody(RefPtr<FormData>&& httpBody) 492 504 { -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r240805 r242891 145 145 146 146 WEBCORE_EXPORT FormData* httpBody() const; 147 WEBCORE_EXPORT bool hasUpload() const; 147 148 WEBCORE_EXPORT void setHTTPBody(RefPtr<FormData>&&); 148 149 -
trunk/Source/WebKit/ChangeLog
r242889 r242891 1 2019-03-12 Brady Eidson <beidson@apple.com> 2 3 Take UnboundedNetworking assertion when a file upload is in progress. 4 https://bugs.webkit.org/show_bug.cgi?id=195497 5 6 Reviewed by Geoff Garen. 7 8 This patch implements whole bunch of bookkeeping in both the Networking and UI processes. 9 10 The TLDR of that bookkeeping is: 11 - Whenever any uploads are in progress, take an assertion for both Networking and UI processes. 12 - Whenever a particular WebProcess has an upload in progress, take an assertion for it. 13 14 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 15 (WebKit::NetworkConnectionToWebProcess::NetworkConnectionToWebProcess): 16 (WebKit::NetworkConnectionToWebProcess::setProcessIdentifier): 17 (WebKit::NetworkConnectionToWebProcess::setConnectionHasUploads): 18 (WebKit::NetworkConnectionToWebProcess::clearConnectionHasUploads): 19 * NetworkProcess/NetworkConnectionToWebProcess.h: 20 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 21 22 * NetworkProcess/NetworkResourceLoadMap.cpp: Added. 23 (WebKit::NetworkResourceLoadMap::add): 24 (WebKit::NetworkResourceLoadMap::remove): 25 (WebKit::NetworkResourceLoadMap::get const): 26 * NetworkProcess/NetworkResourceLoadMap.h: Added. 27 (WebKit::NetworkResourceLoadMap::NetworkResourceLoadMap): 28 (WebKit::NetworkResourceLoadMap::isEmpty const): 29 (WebKit::NetworkResourceLoadMap::contains const): 30 (WebKit::NetworkResourceLoadMap::begin): 31 (WebKit::NetworkResourceLoadMap::values): 32 33 * NetworkProcess/NetworkSession.cpp: 34 35 * Scripts/webkit/messages.py: 36 37 * Sources.txt: 38 39 * UIProcess/Network/NetworkProcessProxy.cpp: 40 (WebKit::NetworkProcessProxy::takeUploadAssertion): 41 (WebKit::NetworkProcessProxy::clearUploadAssertion): 42 * UIProcess/Network/NetworkProcessProxy.h: 43 44 * UIProcess/WebProcessPool.cpp: 45 (WebKit::WebProcessPool::setWebProcessHasUploads): 46 (WebKit::WebProcessPool::clearWebProcessHasUploads): 47 * UIProcess/WebProcessPool.h: 48 * UIProcess/WebProcessPool.messages.in: 49 50 * WebKit.xcodeproj/project.pbxproj: 51 52 * WebProcess/WebProcess.cpp: 53 (WebKit::WebProcess::ensureNetworkProcessConnection): 54 1 55 2019-03-13 Chris Dumez <cdumez@apple.com> 2 56 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r242748 r242891 51 51 #include "WebIDBConnectionToClient.h" 52 52 #include "WebIDBConnectionToClientMessages.h" 53 #include "WebProcessPoolMessages.h" 53 54 #include "WebResourceLoadStatisticsStore.h" 54 55 #include "WebSWServerConnection.h" … … 78 79 : m_connection(IPC::Connection::createServerConnection(connectionIdentifier, *this)) 79 80 , m_networkProcess(networkProcess) 81 , m_networkResourceLoaders(*this) 80 82 #if ENABLE(WEB_RTC) 81 83 , m_mdnsRegister(*this) … … 822 824 #endif 823 825 826 void NetworkConnectionToWebProcess::setWebProcessIdentifier(ProcessIdentifier webProcessIdentifier) 827 { 828 m_webProcessIdentifier = webProcessIdentifier; 829 } 830 831 void NetworkConnectionToWebProcess::setConnectionHasUploads() 832 { 833 ASSERT(!m_connectionHasUploads); 834 m_connectionHasUploads = true; 835 m_networkProcess->parentProcessConnection()->send(Messages::WebProcessPool::SetWebProcessHasUploads(m_webProcessIdentifier), 0); 836 } 837 838 void NetworkConnectionToWebProcess::clearConnectionHasUploads() 839 { 840 ASSERT(m_connectionHasUploads); 841 m_connectionHasUploads = false; 842 m_networkProcess->parentProcessConnection()->send(Messages::WebProcessPool::ClearWebProcessHasUploads(m_webProcessIdentifier), 0); 843 } 844 824 845 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r242748 r242891 33 33 #include "NetworkMDNSRegister.h" 34 34 #include "NetworkRTCProvider.h" 35 #include "NetworkResourceLoadMap.h" 35 36 #include "WebPaymentCoordinatorProxy.h" 36 37 #include <WebCore/NetworkLoadInformation.h> 38 #include <WebCore/ProcessIdentifier.h> 37 39 #include <WebCore/RegistrableDomain.h> 38 40 #include <wtf/RefCounted.h> … … 135 137 Vector<RefPtr<WebCore::BlobDataFileReference>> filesInBlob(const URL&); 136 138 Vector<RefPtr<WebCore::BlobDataFileReference>> resolveBlobReferences(const NetworkResourceLoadParameters&); 139 140 void setWebProcessIdentifier(WebCore::ProcessIdentifier); 141 void setConnectionHasUploads(); 142 void clearConnectionHasUploads(); 137 143 138 144 private: … … 269 275 270 276 HashMap<uint64_t, RefPtr<NetworkSocketStream>> m_networkSocketStreams; 271 HashMap<ResourceLoadIdentifier, Ref<NetworkResourceLoader>>m_networkResourceLoaders;277 NetworkResourceLoadMap m_networkResourceLoaders; 272 278 HashMap<String, RefPtr<WebCore::BlobDataFileReference>> m_blobDataFileReferences; 273 279 Vector<ResourceNetworkActivityTracker> m_networkActivityTrackers; … … 298 304 std::unique_ptr<WebPaymentCoordinatorProxy> m_paymentCoordinator; 299 305 #endif 306 307 WebCore::ProcessIdentifier m_webProcessIdentifier; 308 bool m_connectionHasUploads { false }; 300 309 }; 301 310 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r242738 r242891 84 84 EstablishSWServerConnection(PAL::SessionID sessionID) -> (WebCore::SWServerConnectionIdentifier serverConnectionIdentifier) LegacySync 85 85 #endif 86 87 SetWebProcessIdentifier(WebCore::ProcessIdentifier processIdentifier) 86 88 } -
trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp
r242764 r242891 30 30 #include "NetworkProcess.h" 31 31 #include "NetworkProcessProxyMessages.h" 32 #include "WebPageProxy.h" 33 #include "WebPageProxyMessages.h" 32 34 #include "WebProcessProxy.h" 33 35 #include <WebCore/AdClickAttribution.h> -
trunk/Source/WebKit/Scripts/webkit/messages.py
r242696 r242891 199 199 'WebCore::FetchIdentifier', 200 200 'WebCore::PointerID', 201 'WebCore::ProcessIdentifier', 201 202 'WebCore::ServiceWorkerIdentifier', 202 203 'WebCore::ServiceWorkerJobIdentifier', … … 425 426 'WebCore::PolicyAction': ['<WebCore/FrameLoaderTypes.h>'], 426 427 'WebCore::PolicyCheckIdentifier': ['<WebCore/FrameLoaderTypes.h>'], 428 'WebCore::ProcessIdentifier': ['<WebCore/ProcessIdentifier.h>'], 427 429 'WebCore::RecentSearch': ['<WebCore/SearchPopupMenu.h>'], 428 430 'WebCore::RouteSharingPolicy': ['<WebCore/AudioSession.h>'], -
trunk/Source/WebKit/Sources.txt
r242696 r242891 36 36 NetworkProcess/NetworkProcessPlatformStrategies.cpp 37 37 NetworkProcess/NetworkResourceLoadParameters.cpp 38 NetworkProcess/NetworkResourceLoadMap.cpp 38 39 NetworkProcess/NetworkResourceLoader.cpp 39 40 NetworkProcess/NetworkSession.cpp -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r242738 r242891 1202 1202 } 1203 1203 1204 void NetworkProcessProxy::takeUploadAssertion() 1205 { 1206 ASSERT(!m_uploadAssertion); 1207 m_uploadAssertion = std::make_unique<ProcessAssertion>(processIdentifier(), "WebKit uploads"_s, AssertionState::UnboundedNetworking); 1208 } 1209 1210 void NetworkProcessProxy::clearUploadAssertion() 1211 { 1212 ASSERT(m_uploadAssertion); 1213 m_uploadAssertion = nullptr; 1214 } 1215 1204 1216 } // namespace WebKit 1205 1217 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r242738 r242891 174 174 void addSession(Ref<WebsiteDataStore>&&); 175 175 void removeSession(PAL::SessionID); 176 177 void takeUploadAssertion(); 178 void clearUploadAssertion(); 176 179 177 180 private: … … 262 265 263 266 HashMap<PAL::SessionID, RefPtr<WebsiteDataStore>> m_websiteDataStores; 267 268 std::unique_ptr<ProcessAssertion> m_uploadAssertion; 264 269 }; 265 270 -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r242889 r242891 2512 2512 } 2513 2513 2514 void WebProcessPool::setWebProcessHasUploads(ProcessIdentifier processID) 2515 { 2516 auto* process = WebProcessProxy::processForIdentifier(processID); 2517 ASSERT(process); 2518 2519 RELEASE_LOG(ProcessSuspension, "Web process pid %u now has uploads in progress", (unsigned)process->processIdentifier()); 2520 2521 if (m_processesWithUploads.isEmpty()) { 2522 RELEASE_LOG(ProcessSuspension, "The number of uploads in progress is now one. Taking Networking and UI process assertions."); 2523 2524 ASSERT(m_networkProcess); 2525 m_networkProcess->takeUploadAssertion(); 2526 2527 ASSERT(!m_uiProcessUploadAssertion); 2528 m_uiProcessUploadAssertion = std::make_unique<ProcessAssertion>(getCurrentProcessID(), "WebKit uploads"_s, AssertionState::UnboundedNetworking); 2529 } 2530 2531 auto result = m_processesWithUploads.add(processID, nullptr); 2532 ASSERT(result.isNewEntry); 2533 result.iterator->value = std::make_unique<ProcessAssertion>(process->processIdentifier(), "WebKit uploads"_s, AssertionState::UnboundedNetworking); 2534 } 2535 2536 void WebProcessPool::clearWebProcessHasUploads(ProcessIdentifier processID) 2537 { 2538 auto result = m_processesWithUploads.take(processID); 2539 ASSERT_UNUSED(result, result); 2540 2541 auto* process = WebProcessProxy::processForIdentifier(processID); 2542 ASSERT(process); 2543 RELEASE_LOG(ProcessSuspension, "Web process pid %u no longer has uploads in progress", (unsigned)process->processIdentifier()); 2544 2545 if (m_processesWithUploads.isEmpty()) { 2546 RELEASE_LOG(ProcessSuspension, "The number of uploads in progress is now zero. Releasing Networking and UI process assertions."); 2547 2548 if (m_networkProcess) 2549 m_networkProcess->clearUploadAssertion(); 2550 2551 ASSERT(m_uiProcessUploadAssertion); 2552 m_uiProcessUploadAssertion = nullptr; 2553 } 2554 2555 } 2556 2514 2557 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r242889 r242891 45 45 #include "WebContextConnectionClient.h" 46 46 #include "WebProcessProxy.h" 47 #include <WebCore/ProcessIdentifier.h> 47 48 #include <WebCore/RegistrableDomain.h> 48 49 #include <WebCore/SecurityOriginHash.h> … … 53 54 #include <wtf/HashSet.h> 54 55 #include <wtf/MemoryPressureHandler.h> 55 #include <wtf/ProcessID.h>56 56 #include <wtf/RefCounter.h> 57 57 #include <wtf/RefPtr.h> … … 496 496 bool sandboxEnabled() const { return m_sandboxEnabled; }; 497 497 #endif 498 499 void setWebProcessHasUploads(WebCore::ProcessIdentifier); 500 void clearWebProcessHasUploads(WebCore::ProcessIdentifier); 498 501 499 502 private: … … 769 772 HashMap<CString, SandboxPermission> m_extraSandboxPaths; 770 773 #endif 774 775 HashMap<WebCore::ProcessIdentifier, std::unique_ptr<ProcessAssertion>> m_processesWithUploads; 776 std::unique_ptr<ProcessAssertion> m_uiProcessUploadAssertion; 771 777 }; 772 778 -
trunk/Source/WebKit/UIProcess/WebProcessPool.messages.in
r241778 r242891 38 38 ReportWebContentCPUTime(Seconds cpuTime, uint64_t activityState) 39 39 40 SetWebProcessHasUploads(WebCore::ProcessIdentifier processID) 41 ClearWebProcessHasUploads(WebCore::ProcessIdentifier processID) 42 40 43 #if ENABLE(SERVICE_WORKER) 41 44 PostMessageToServiceWorkerClient(struct WebCore::ServiceWorkerClientIdentifier destinationIdentifier, struct WebCore::MessageWithMessagePorts message, WebCore::ServiceWorkerIdentifier sourceIdentifier, String sourceOrigin) -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r242764 r242891 925 925 5123CF1C133D260A0056F800 /* WKIconDatabaseCG.h in Headers */ = {isa = PBXBuildFile; fileRef = 5123CF1A133D260A0056F800 /* WKIconDatabaseCG.h */; settings = {ATTRIBUTES = (Private, ); }; }; 926 926 51240EBA220A08D2005CFC63 /* DownloadMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 51240EB8220A08CA005CFC63 /* DownloadMap.h */; }; 927 51240EC0220B694C005CFC63 /* NetworkResourceLoadMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */; }; 927 928 512935D81288D19400A4B695 /* WebContextMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935D61288D19400A4B695 /* WebContextMenuItem.h */; }; 928 929 512935E41288D97800A4B695 /* InjectedBundlePageContextMenuClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 512935E21288D97800A4B695 /* InjectedBundlePageContextMenuClient.h */; }; … … 3170 3171 51240EB8220A08CA005CFC63 /* DownloadMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DownloadMap.h; sourceTree = "<group>"; }; 3171 3172 51240EB9220A08CA005CFC63 /* DownloadMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DownloadMap.cpp; sourceTree = "<group>"; }; 3173 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkResourceLoadMap.h; sourceTree = "<group>"; }; 3174 51240EBF220B6948005CFC63 /* NetworkResourceLoadMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkResourceLoadMap.cpp; sourceTree = "<group>"; }; 3172 3175 512935D51288D19400A4B695 /* WebContextMenuItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebContextMenuItem.cpp; sourceTree = "<group>"; }; 3173 3176 512935D61288D19400A4B695 /* WebContextMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebContextMenuItem.h; sourceTree = "<group>"; }; … … 6513 6516 51FD18B41651FBAD00DBE1CE /* NetworkResourceLoader.h */, 6514 6517 E1525517170109FB003D7ADB /* NetworkResourceLoader.messages.in */, 6518 51240EBF220B6948005CFC63 /* NetworkResourceLoadMap.cpp */, 6519 51240EBE220B6947005CFC63 /* NetworkResourceLoadMap.h */, 6515 6520 5C1426E51C23F80500D41183 /* NetworkResourceLoadParameters.cpp */, 6516 6521 5C1426E61C23F80500D41183 /* NetworkResourceLoadParameters.h */, … … 9263 9268 51FD18B61651FBAD00DBE1CE /* NetworkResourceLoader.h in Headers */, 9264 9269 E152551B17011819003D7ADB /* NetworkResourceLoaderMessages.h in Headers */, 9270 51240EC0220B694C005CFC63 /* NetworkResourceLoadMap.h in Headers */, 9265 9271 5C1426F01C23F80900D41183 /* NetworkResourceLoadParameters.h in Headers */, 9266 9272 413075AC1DE85F370039EC69 /* NetworkRTCMonitor.h in Headers */, -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r242889 r242891 1231 1231 1232 1232 m_networkProcessConnection = NetworkProcessConnection::create(connectionIdentifier); 1233 m_networkProcessConnection->connection().send(Messages::NetworkConnectionToWebProcess::SetWebProcessIdentifier(Process::identifier()), 0); 1233 1234 } 1234 1235
Note: See TracChangeset
for help on using the changeset viewer.