Title: [195357] trunk/Source/WebKit2
Revision
195357
Author
achristen...@apple.com
Date
2016-01-20 10:23:29 -0800 (Wed, 20 Jan 2016)

Log Message

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:

Modified Paths

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
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to