Diff
Modified: trunk/Source/WebKit2/ChangeLog (195356 => 195357)
--- trunk/Source/WebKit2/ChangeLog 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/ChangeLog 2016-01-20 18:23:29 UTC (rev 195357)
@@ -1,3 +1,37 @@
+2016-01-20 Alex Christensen <achristen...@webkit.org>
+
+ Ask UI Process before sending redirect requests when downloading
+ https://bugs.webkit.org/show_bug.cgi?id=153041
+
+ Reviewed by Darin Adler.
+
+ * NetworkProcess/Downloads/DownloadManager.cpp:
+ (WebKit::DownloadManager::continueCanAuthenticateAgainstProtectionSpace):
+ (WebKit::DownloadManager::continueWillSendRequest):
+ (WebKit::DownloadManager::convertHandleToDownload):
+ * NetworkProcess/Downloads/DownloadManager.h:
+ * NetworkProcess/Downloads/PendingDownload.cpp:
+ (WebKit::PendingDownload::willSendRedirectedRequest):
+ (WebKit::PendingDownload::continueWillSendRequest):
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::continueCanAuthenticateAgainstProtectionSpace):
+ (WebKit::NetworkProcess::continueWillSendRequest):
+ (WebKit::NetworkProcess::setCacheModel):
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * UIProcess/API/APIDownloadClient.h:
+ (API::DownloadClient::didCancel):
+ (API::DownloadClient::processDidCrash):
+ (API::DownloadClient::canAuthenticateAgainstProtectionSpace):
+ (API::DownloadClient::willSendRequest):
+ * UIProcess/Downloads/DownloadProxy.cpp:
+ (WebKit::DownloadProxy::didReceiveAuthenticationChallenge):
+ (WebKit::DownloadProxy::canAuthenticateAgainstProtectionSpace):
+ (WebKit::DownloadProxy::willSendRequest):
+ (WebKit::DownloadProxy::didReceiveResponse):
+ * UIProcess/Downloads/DownloadProxy.h:
+ * UIProcess/Downloads/DownloadProxy.messages.in:
+
2016-01-20 Carlos Garcia Campos <cgar...@igalia.com>
Unreviewed. Update OptionsGTK.cmake and NEWS for 2.11.4 release.
Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.cpp 2016-01-20 18:23:29 UTC (rev 195357)
@@ -81,6 +81,14 @@
if (pendingDownload)
pendingDownload->continueCanAuthenticateAgainstProtectionSpace(canAuthenticate);
}
+
+void DownloadManager::continueWillSendRequest(DownloadID downloadID, const WebCore::ResourceRequest& request)
+{
+ auto* pendingDownload = m_pendingDownloads.get(downloadID);
+ ASSERT(pendingDownload);
+ if (pendingDownload)
+ pendingDownload->continueWillSendRequest(request);
+}
#else
void DownloadManager::convertHandleToDownload(DownloadID downloadID, ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response)
{
Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/DownloadManager.h 2016-01-20 18:23:29 UTC (rev 195357)
@@ -74,6 +74,7 @@
#if USE(NETWORK_SESSION)
std::unique_ptr<PendingDownload> dataTaskBecameDownloadTask(DownloadID, std::unique_ptr<Download>&&);
void continueCanAuthenticateAgainstProtectionSpace(DownloadID, bool canAuthenticate);
+ void continueWillSendRequest(DownloadID, const WebCore::ResourceRequest&);
#else
void convertHandleToDownload(DownloadID, WebCore::ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
#endif
Modified: trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/Downloads/PendingDownload.cpp 2016-01-20 18:23:29 UTC (rev 195357)
@@ -46,8 +46,7 @@
void PendingDownload::willSendRedirectedRequest(const WebCore::ResourceRequest&, const WebCore::ResourceRequest& redirectRequest, const WebCore::ResourceResponse& redirectResponse)
{
- // FIXME: We should ask the UI process directly if we actually want to continue this request.
- continueWillSendRequest(redirectRequest);
+ send(Messages::DownloadProxy::WillSendRequest(redirectRequest, redirectResponse));
};
void PendingDownload::continueWillSendRequest(const WebCore::ResourceRequest& newRequest)
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2016-01-20 18:23:29 UTC (rev 195357)
@@ -452,6 +452,11 @@
{
downloadManager().continueCanAuthenticateAgainstProtectionSpace(downloadID, canAuthenticate);
}
+
+void NetworkProcess::continueWillSendRequest(DownloadID downloadID, const WebCore::ResourceRequest& request)
+{
+ downloadManager().continueWillSendRequest(downloadID, request);
+}
#endif
void NetworkProcess::setCacheModel(uint32_t cm)
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2016-01-20 18:23:29 UTC (rev 195357)
@@ -154,6 +154,7 @@
void cancelDownload(DownloadID);
#if USE(NETWORK_SESSION)
void continueCanAuthenticateAgainstProtectionSpace(DownloadID, bool canAuthenticate);
+ void continueWillSendRequest(DownloadID, const WebCore::ResourceRequest&);
#endif
void setCacheModel(uint32_t);
void allowSpecificHTTPSCertificateForHost(const WebCore::CertificateInfo&, const String& host);
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in (195356 => 195357)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.messages.in 2016-01-20 18:23:29 UTC (rev 195357)
@@ -44,6 +44,7 @@
CancelDownload(WebKit::DownloadID downloadID)
#if USE(NETWORK_SESSION)
ContinueCanAuthenticateAgainstProtectionSpace(WebKit::DownloadID downloadID, bool canAuthenticate)
+ ContinueWillSendRequest(WebKit::DownloadID downloadID, WebCore::ResourceRequest request)
#endif
SetProcessSuppressionEnabled(bool flag)
Modified: trunk/Source/WebKit2/UIProcess/API/APIDownloadClient.h (195356 => 195357)
--- trunk/Source/WebKit2/UIProcess/API/APIDownloadClient.h 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/UIProcess/API/APIDownloadClient.h 2016-01-20 18:23:29 UTC (rev 195357)
@@ -26,10 +26,12 @@
#ifndef APIDownloadClient_h
#define APIDownloadClient_h
+#include <functional>
#include <wtf/text/WTFString.h>
namespace WebCore {
class ResourceError;
+class ResourceRequest;
class ResourceResponse;
}
@@ -58,6 +60,7 @@
virtual void didCancel(WebKit::WebProcessPool*, WebKit::DownloadProxy*) { }
virtual void processDidCrash(WebKit::WebProcessPool*, WebKit::DownloadProxy*) { }
virtual bool canAuthenticateAgainstProtectionSpace(WebKit::WebProtectionSpace*) { return true; }
+ virtual void willSendRequest(const WebCore::ResourceRequest& request, const WebCore::ResourceResponse&, std::function<void(const WebCore::ResourceRequest&)> callback) { callback(request); }
};
} // namespace API
Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp (195356 => 195357)
--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp 2016-01-20 18:23:29 UTC (rev 195357)
@@ -111,7 +111,7 @@
}
#if USE(NETWORK_SESSION)
-void DownloadProxy::canAuthenticateAgainstProtectionSpace(const WebCore::ProtectionSpace& protectionSpace)
+void DownloadProxy::canAuthenticateAgainstProtectionSpace(const ProtectionSpace& protectionSpace)
{
if (!m_processPool)
return;
@@ -124,6 +124,24 @@
networkProcessProxy->connection()->send(Messages::NetworkProcess::ContinueCanAuthenticateAgainstProtectionSpace(m_downloadID, result), 0);
}
+
+void DownloadProxy::willSendRequest(const ResourceRequest& proposedRequest, const ResourceResponse& redirectResponse)
+{
+ if (!m_processPool)
+ return;
+
+ RefPtr<DownloadProxy> protectedThis(this);
+ m_processPool->downloadClient().willSendRequest(proposedRequest, redirectResponse, [protectedThis](const ResourceRequest& newRequest) {
+ if (!protectedThis->m_processPool)
+ return;
+
+ auto* networkProcessProxy = protectedThis->m_processPool->networkProcess();
+ if (!networkProcessProxy)
+ return;
+
+ networkProcessProxy->connection()->send(Messages::NetworkProcess::ContinueWillSendRequest(protectedThis->m_downloadID, newRequest), 0);
+ });
+}
#endif
void DownloadProxy::didReceiveResponse(const ResourceResponse& response)
Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h (195356 => 195357)
--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h 2016-01-20 18:23:29 UTC (rev 195357)
@@ -88,6 +88,7 @@
void didCancel(const IPC::DataReference& resumeData);
#if USE(NETWORK_SESSION)
void canAuthenticateAgainstProtectionSpace(const WebCore::ProtectionSpace&);
+ void willSendRequest(const WebCore::ResourceRequest& redirectRequest, const WebCore::ResourceResponse& redirectResponse);
#endif
DownloadProxyMap& m_downloadProxyMap;
Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in (195356 => 195357)
--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in 2016-01-20 17:59:02 UTC (rev 195356)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.messages.in 2016-01-20 18:23:29 UTC (rev 195357)
@@ -24,6 +24,7 @@
DidStart(WebCore::ResourceRequest request)
DidReceiveAuthenticationChallenge(WebCore::AuthenticationChallenge challenge, uint64_t challengeID)
#if USE(NETWORK_SESSION)
+ WillSendRequest(WebCore::ResourceRequest redirectRequest, WebCore::ResourceResponse redirectResponse));
CanAuthenticateAgainstProtectionSpace(WebCore::ProtectionSpace protectionSpace)
#endif