Title: [137858] trunk/Source/WebKit2
Revision
137858
Author
[email protected]
Date
2012-12-16 17:19:33 -0800 (Sun, 16 Dec 2012)

Log Message

Rudimentary support for main resource downloads
https://bugs.webkit.org/show_bug.cgi?id=105141

Reviewed by Sam Weinig.

For now, instead of converting a main resource load into a download, just cancel it and start
a new separate download.

* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::downloadRequest):
Call through to the download manager.

(WebKit::NetworkProcess::cancelDownload):
Call through to the download manager.

* NetworkProcess/NetworkProcess.messages.in:
Add new messages.

* UIProcess/Downloads/DownloadProxy.cpp:
(WebKit::DownloadProxy::cancel):
Send the cancel message to the network process when needed.

* UIProcess/WebContext.cpp:
(WebKit::WebContext::download):
Handle the network process case.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::WebPageProxy):
(WebKit::WebPageProxy::receivedPolicyDecision):
(WebKit::WebPageProxy::decidePolicyForResponse):
Keep track of the current request when calling decidePolicyForResponse.

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (137857 => 137858)


--- trunk/Source/WebKit2/ChangeLog	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/ChangeLog	2012-12-17 01:19:33 UTC (rev 137858)
@@ -1,3 +1,37 @@
+2012-12-16  Anders Carlsson  <[email protected]>
+
+        Rudimentary support for main resource downloads
+        https://bugs.webkit.org/show_bug.cgi?id=105141
+
+        Reviewed by Sam Weinig.
+
+        For now, instead of converting a main resource load into a download, just cancel it and start
+        a new separate download.
+
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::downloadRequest):
+        Call through to the download manager.
+        
+        (WebKit::NetworkProcess::cancelDownload):
+        Call through to the download manager.
+
+        * NetworkProcess/NetworkProcess.messages.in:
+        Add new messages.
+
+        * UIProcess/Downloads/DownloadProxy.cpp:
+        (WebKit::DownloadProxy::cancel):
+        Send the cancel message to the network process when needed.
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::download):
+        Handle the network process case.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::WebPageProxy):
+        (WebKit::WebPageProxy::receivedPolicyDecision):
+        (WebKit::WebPageProxy::decidePolicyForResponse):
+        Keep track of the current request when calling decidePolicyForResponse.
+
 2012-12-16  Andy Estes  <[email protected]>
 
         [WebKit2] CustomProtocolManager should intercept messages of class MessageClassCustomProtocolManager sent to the network process

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (137857 => 137858)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp	2012-12-17 01:19:33 UTC (rev 137858)
@@ -180,6 +180,16 @@
     RemoteNetworkingContext::destroyPrivateBrowsingSession();
 }
 
+void NetworkProcess::downloadRequest(uint64_t downloadID, const ResourceRequest& request)
+{
+    downloadManager().startDownload(downloadID, request);
+}
+
+void NetworkProcess::cancelDownload(uint64_t downloadID)
+{
+    downloadManager().cancelDownload(downloadID);
+}
+
 #if ENABLE(CUSTOM_PROTOCOLS)
 void NetworkProcess::registerSchemeForCustomProtocol(const String& scheme)
 {

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (137857 => 137858)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h	2012-12-17 01:19:33 UTC (rev 137858)
@@ -81,6 +81,8 @@
     void createNetworkConnectionToWebProcess();
     void ensurePrivateBrowsingSession();
     void destroyPrivateBrowsingSession();
+    void downloadRequest(uint64_t downloadID, const WebCore::ResourceRequest&);
+    void cancelDownload(uint64_t downloadID);
     void setCacheModel(uint32_t);
 #if ENABLE(CUSTOM_PROTOCOLS)
     void registerSchemeForCustomProtocol(const String&);

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in (137857 => 137858)


--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in	2012-12-17 01:19:33 UTC (rev 137858)
@@ -32,6 +32,9 @@
     EnsurePrivateBrowsingSession()
     DestroyPrivateBrowsingSession()
 
+    DownloadRequest(uint64_t downloadID, WebCore::ResourceRequest request)
+    CancelDownload(uint64_t downloadID)
+
 #if PLATFORM(MAC)
     SetApplicationIsOccluded(bool flag)
 #endif

Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp (137857 => 137858)


--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp	2012-12-17 01:19:33 UTC (rev 137858)
@@ -35,6 +35,11 @@
 #include <wtf/text/CString.h>
 #include <wtf/text/WTFString.h>
 
+#if ENABLE(NETWORK_PROCESS)
+#include "NetworkProcessMessages.h"
+#include "NetworkProcessProxy.h"
+#endif
+
 using namespace WebCore;
 
 namespace WebKit {
@@ -67,7 +72,14 @@
     if (!m_webContext)
         return;
 
-    // FIXME (Multi-WebProcess): <rdar://problem/12239483> Downloads shouldn't be handled in the web process.
+#if ENABLE(NETWORK_PROCESS)
+    if (m_webContext->usesNetworkProcess()) {
+        if (NetworkProcessProxy* networkProcess = m_webContext->networkProcess())
+            networkProcess->connection()->send(Messages::NetworkProcess::CancelDownload(m_downloadID), 0);
+        return;
+    }
+#endif
+
     m_webContext->sendToAllProcesses(Messages::WebProcess::CancelDownload(m_downloadID));
 }
 

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (137857 => 137858)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-12-17 01:19:33 UTC (rev 137858)
@@ -706,9 +706,10 @@
     uint64_t initiatingPageID = initiatingPage ? initiatingPage->pageID() : 0;
 
 #if ENABLE(NETWORK_PROCESS)
-    if (usesNetworkProcess()) {
-        // FIXME (Multi-WebProcess): <rdar://problem/12239483> Make downloading work.
-        return 0;
+    if (usesNetworkProcess() && networkProcess()) {
+        // FIXME (NetworkProcess): Replicate whatever FrameLoader::setOriginalURLForDownloadRequest does with the request here.
+        networkProcess()->connection()->send(Messages::NetworkProcess::DownloadRequest(downloadProxy->downloadID(), request), 0);
+        return downloadProxy;
     }
 #endif
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (137857 => 137858)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2012-12-17 01:19:33 UTC (rev 137858)
@@ -202,6 +202,7 @@
     , m_isInPrintingMode(false)
     , m_isPerformingDOMPrintOperation(false)
     , m_inDecidePolicyForResponse(false)
+    , m_decidePolicyForResponseRequest(0)
     , m_syncMimeTypePolicyActionIsValid(false)
     , m_syncMimeTypePolicyAction(PolicyUse)
     , m_syncMimeTypePolicyDownloadID(0)
@@ -1292,7 +1293,17 @@
 {
     if (!isValid())
         return;
-    
+
+#if ENABLE(NETWORK_PROCESS)
+    // FIXME (NetworkProcess): Instead of canceling the load and then starting a separate download, we should
+    // just convert the connection to a download connection. See <rdar://problem/12890184>.
+    if (m_inDecidePolicyForResponse && action == PolicyDownload && m_process->context()->usesNetworkProcess()) {
+        action = ""
+
+        m_process->context()->download(this, *m_decidePolicyForResponseRequest);
+    }
+#endif
+
     if (action == PolicyIgnore)
         clearPendingAPIRequestURL();
 
@@ -2406,12 +2417,14 @@
     ASSERT(!m_inDecidePolicyForResponse);
 
     m_inDecidePolicyForResponse = true;
+    m_decidePolicyForResponseRequest = &request;
     m_syncMimeTypePolicyActionIsValid = false;
 
     if (!m_policyClient.decidePolicyForResponse(this, frame, response, request, listener.get(), userData.get()))
         listener->use();
 
     m_inDecidePolicyForResponse = false;
+    m_decidePolicyForResponseRequest = 0;
 
     // Check if we received a policy decision already. If we did, we can just pass it back.
     receivedPolicyAction = m_syncMimeTypePolicyActionIsValid;

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (137857 => 137858)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2012-12-17 01:18:54 UTC (rev 137857)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2012-12-17 01:19:33 UTC (rev 137858)
@@ -1169,6 +1169,7 @@
     bool m_isPerformingDOMPrintOperation;
 
     bool m_inDecidePolicyForResponse;
+    const WebCore::ResourceRequest* m_decidePolicyForResponseRequest;
     bool m_syncMimeTypePolicyActionIsValid;
     WebCore::PolicyAction m_syncMimeTypePolicyAction;
     uint64_t m_syncMimeTypePolicyDownloadID;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to