Title: [242662] trunk/Source/WebKit
Revision
242662
Author
beid...@apple.com
Date
2019-03-08 15:58:52 -0800 (Fri, 08 Mar 2019)

Log Message

Have the UIProcess take the UnboundedNetworking assertion when downloads are in progress.
https://bugs.webkit.org/show_bug.cgi?id=195468

Reviewed by Andy Estes.

* UIProcess/Downloads/DownloadProxyMap.cpp:
(WebKit::DownloadProxyMap::DownloadProxyMap):
(WebKit::DownloadProxyMap::createDownloadProxy): If this is the first download, and the process has the entitlement,
  take the assertion.
(WebKit::DownloadProxyMap::downloadFinished):
(WebKit::DownloadProxyMap::processDidClose):
* UIProcess/Downloads/DownloadProxyMap.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (242661 => 242662)


--- trunk/Source/WebKit/ChangeLog	2019-03-08 23:51:05 UTC (rev 242661)
+++ trunk/Source/WebKit/ChangeLog	2019-03-08 23:58:52 UTC (rev 242662)
@@ -1,3 +1,18 @@
+2019-03-08  Brady Eidson  <beid...@apple.com>
+
+        Have the UIProcess take the UnboundedNetworking assertion when downloads are in progress.
+        https://bugs.webkit.org/show_bug.cgi?id=195468
+
+        Reviewed by Andy Estes.
+
+        * UIProcess/Downloads/DownloadProxyMap.cpp:
+        (WebKit::DownloadProxyMap::DownloadProxyMap):
+        (WebKit::DownloadProxyMap::createDownloadProxy): If this is the first download, and the process has the entitlement,
+          take the assertion.
+        (WebKit::DownloadProxyMap::downloadFinished):
+        (WebKit::DownloadProxyMap::processDidClose):
+        * UIProcess/Downloads/DownloadProxyMap.h:
+
 2019-03-08  Chris Dumez  <cdu...@apple.com>
 
         Add assertions to help debug a WebProcessCache crash

Modified: trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp (242661 => 242662)


--- trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp	2019-03-08 23:51:05 UTC (rev 242661)
+++ trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.cpp	2019-03-08 23:58:52 UTC (rev 242662)
@@ -30,12 +30,20 @@
 #include "DownloadProxy.h"
 #include "DownloadProxyMessages.h"
 #include "MessageReceiverMap.h"
+#include "ProcessAssertion.h"
 #include <wtf/StdLibExtras.h>
 
+#if PLATFORM(COCOA)
+#include <wtf/cocoa/Entitlements.h>
+#endif
+
 namespace WebKit {
 
 DownloadProxyMap::DownloadProxyMap(NetworkProcessProxy& process)
     : m_process(&process)
+#if PLATFORM(COCOA)
+    , m_shouldTakeAssertion(WTF::processHasEntitlement("com.apple.multitasking.systemappassertions"))
+#endif
 {
 }
 
@@ -49,6 +57,11 @@
     auto downloadProxy = DownloadProxy::create(*this, processPool, resourceRequest);
     m_downloads.set(downloadProxy->downloadID(), downloadProxy.copyRef());
 
+    if (m_downloads.size() == 1 && m_shouldTakeAssertion) {
+        ASSERT(!m_downloadAssertion);
+        m_downloadAssertion = std::make_unique<ProcessAssertion>(getCurrentProcessID(), "WebKit downloads"_s, AssertionState::UnboundedNetworking);
+    }
+
     m_process->addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID().downloadID(), downloadProxy.get());
 
     return downloadProxy.ptr();
@@ -63,6 +76,11 @@
     m_process->removeMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadID.downloadID());
     downloadProxy->invalidate();
     m_downloads.remove(downloadID);
+
+    if (m_downloads.isEmpty() && m_shouldTakeAssertion) {
+        ASSERT(m_downloadAssertion);
+        m_downloadAssertion = nullptr;
+    }
 }
 
 void DownloadProxyMap::processDidClose()
@@ -75,6 +93,7 @@
     }
 
     m_downloads.clear();
+    m_downloadAssertion = nullptr;
     m_process = nullptr;
 }
 

Modified: trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h (242661 => 242662)


--- trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h	2019-03-08 23:51:05 UTC (rev 242661)
+++ trunk/Source/WebKit/UIProcess/Downloads/DownloadProxyMap.h	2019-03-08 23:58:52 UTC (rev 242662)
@@ -37,6 +37,7 @@
 
 class DownloadProxy;
 class NetworkProcessProxy;
+class ProcessAssertion;
 class WebProcessPool;
 
 class DownloadProxyMap {
@@ -57,6 +58,9 @@
 private:
     NetworkProcessProxy* m_process;
     HashMap<DownloadID, RefPtr<DownloadProxy>> m_downloads;
+
+    bool m_shouldTakeAssertion { false };
+    std::unique_ptr<ProcessAssertion> m_downloadAssertion;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to