- 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;