Title: [174230] trunk/Source/WebKit2
Revision
174230
Author
je...@apple.com
Date
2014-10-02 14:01:08 -0700 (Thu, 02 Oct 2014)

Log Message

WKDownloadCopyRequest() returns 0 until the download starts
https://bugs.webkit.org/show_bug.cgi?id=137322

Reviewed by Anders Carlsson.

The m_request ivar in DownloadProxy was only being initialized when didStart() was called after the
download starts. Since clients have access to the ResourceRequest when the DownloadProxy is created,
there's no reason not to pass that along to DownloadProxy::create() so it can be returned if
WKDownloadCopyRequest() is called before didStart().

* UIProcess/Downloads/DownloadProxy.cpp:
(WebKit::DownloadProxy::create):
Add ResourceRequest parameter, and pass it to DownloadProxy constructor.

(WebKit::DownloadProxy::DownloadProxy):
Initialize m_request.

* UIProcess/Downloads/DownloadProxy.h:
Add ResourceRequest parameter to create() and constructor.

* UIProcess/Downloads/DownloadProxyMap.cpp:
(WebKit::DownloadProxyMap::createDownloadProxy):
Add ResourceRequest parameter and pass it to DownloadProxy::create().

* UIProcess/Downloads/DownloadProxyMap.h:
Add ResourceRequest parameter to createDownloadProxy().

* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::createDownloadProxy):
Add ResourceRequest parameter and pass it to DownloadProxy::create().

* UIProcess/Network/NetworkProcessProxy.h:
Add ResourceRequest parameter to createDownloadProxy().

* UIProcess/WebContext.cpp:
(WebKit::WebContext::download):
Pass ResourceRequest to createDownloadProxy().

(WebKit::WebContext::createDownloadProxy):
Add ResourceRequest parameter and pass it to createDownloadProxy() functions.

* UIProcess/WebContext.h:
Add ResourceRequest parameter to createDownloadProxy().

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::receivedPolicyDecision):
Pass m_decidePolicyForResponseRequest to WebContext::createDownloadProxy().

* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::createDownloadProxy):
Add ResourceRequest parameter and pass it to DownloadProxyMap::create().

* UIProcess/WebProcessProxy.h:
Add ResourceRequest parameter to createDownloadProxy().

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (174229 => 174230)


--- trunk/Source/WebKit2/ChangeLog	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/ChangeLog	2014-10-02 21:01:08 UTC (rev 174230)
@@ -1,3 +1,60 @@
+2014-10-02  Jeff Miller  <je...@apple.com>
+
+        WKDownloadCopyRequest() returns 0 until the download starts
+        https://bugs.webkit.org/show_bug.cgi?id=137322
+
+        Reviewed by Anders Carlsson.
+
+        The m_request ivar in DownloadProxy was only being initialized when didStart() was called after the
+        download starts. Since clients have access to the ResourceRequest when the DownloadProxy is created,
+        there's no reason not to pass that along to DownloadProxy::create() so it can be returned if
+        WKDownloadCopyRequest() is called before didStart().
+
+        * UIProcess/Downloads/DownloadProxy.cpp:
+        (WebKit::DownloadProxy::create):
+        Add ResourceRequest parameter, and pass it to DownloadProxy constructor.
+
+        (WebKit::DownloadProxy::DownloadProxy):
+        Initialize m_request.
+
+        * UIProcess/Downloads/DownloadProxy.h:
+        Add ResourceRequest parameter to create() and constructor.
+
+        * UIProcess/Downloads/DownloadProxyMap.cpp:
+        (WebKit::DownloadProxyMap::createDownloadProxy):
+        Add ResourceRequest parameter and pass it to DownloadProxy::create().
+
+        * UIProcess/Downloads/DownloadProxyMap.h:
+        Add ResourceRequest parameter to createDownloadProxy().
+
+        * UIProcess/Network/NetworkProcessProxy.cpp:
+        (WebKit::NetworkProcessProxy::createDownloadProxy):
+        Add ResourceRequest parameter and pass it to DownloadProxy::create().
+
+        * UIProcess/Network/NetworkProcessProxy.h:
+        Add ResourceRequest parameter to createDownloadProxy().
+
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::download):
+        Pass ResourceRequest to createDownloadProxy().
+
+        (WebKit::WebContext::createDownloadProxy):
+        Add ResourceRequest parameter and pass it to createDownloadProxy() functions.
+
+        * UIProcess/WebContext.h:
+        Add ResourceRequest parameter to createDownloadProxy().
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::receivedPolicyDecision):
+        Pass m_decidePolicyForResponseRequest to WebContext::createDownloadProxy().
+
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::createDownloadProxy):
+        Add ResourceRequest parameter and pass it to DownloadProxyMap::create().
+
+        * UIProcess/WebProcessProxy.h:
+        Add ResourceRequest parameter to createDownloadProxy().
+
 2014-10-01  Christophe Dumez  <cdu...@apple.com>
 
         Have is<>(T*) function do a null check on the pointer argument

Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -51,15 +51,16 @@
     return ++uniqueDownloadID;
 }
     
-PassRefPtr<DownloadProxy> DownloadProxy::create(DownloadProxyMap& downloadProxyMap, WebContext& webContext)
+PassRefPtr<DownloadProxy> DownloadProxy::create(DownloadProxyMap& downloadProxyMap, WebContext& webContext, const ResourceRequest& resourceRequest)
 {
-    return adoptRef(new DownloadProxy(downloadProxyMap, webContext));
+    return adoptRef(new DownloadProxy(downloadProxyMap, webContext, resourceRequest));
 }
 
-DownloadProxy::DownloadProxy(DownloadProxyMap& downloadProxyMap, WebContext& webContext)
+DownloadProxy::DownloadProxy(DownloadProxyMap& downloadProxyMap, WebContext& webContext, const ResourceRequest& resourceRequest)
     : m_downloadProxyMap(downloadProxyMap)
     , m_webContext(&webContext)
     , m_downloadID(generateDownloadID())
+    , m_request(resourceRequest)
 {
 }
 

Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxy.h	2014-10-02 21:01:08 UTC (rev 174230)
@@ -51,7 +51,7 @@
 
 class DownloadProxy : public API::ObjectImpl<API::Object::Type::Download>, public IPC::MessageReceiver {
 public:
-    static PassRefPtr<DownloadProxy> create(DownloadProxyMap&, WebContext&);
+    static PassRefPtr<DownloadProxy> create(DownloadProxyMap&, WebContext&, const WebCore::ResourceRequest&);
     ~DownloadProxy();
 
     uint64_t downloadID() const { return m_downloadID; }
@@ -67,7 +67,7 @@
     void didReceiveSyncDownloadProxyMessage(IPC::Connection*, IPC::MessageDecoder&, std::unique_ptr<IPC::MessageEncoder>&);
 
 private:
-    explicit DownloadProxy(DownloadProxyMap&, WebContext&);
+    explicit DownloadProxy(DownloadProxyMap&, WebContext&, const WebCore::ResourceRequest&);
 
     // IPC::MessageReceiver
     virtual void didReceiveMessage(IPC::Connection*, IPC::MessageDecoder&) override;

Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -44,9 +44,9 @@
     ASSERT(m_downloads.isEmpty());
 }
 
-DownloadProxy* DownloadProxyMap::createDownloadProxy(WebContext& webContext)
+DownloadProxy* DownloadProxyMap::createDownloadProxy(WebContext& webContext, const WebCore::ResourceRequest& resourceRequest)
 {
-    RefPtr<DownloadProxy> downloadProxy = DownloadProxy::create(*this, webContext);
+    RefPtr<DownloadProxy> downloadProxy = DownloadProxy::create(*this, webContext, resourceRequest);
     m_downloads.set(downloadProxy->downloadID(), downloadProxy);
 
     m_process->addMessageReceiver(Messages::DownloadProxy::messageReceiverName(), downloadProxy->downloadID(), *downloadProxy);

Modified: trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.h (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.h	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Downloads/DownloadProxyMap.h	2014-10-02 21:01:08 UTC (rev 174230)
@@ -30,6 +30,10 @@
 #include <wtf/Noncopyable.h>
 #include <wtf/PassRefPtr.h>
 
+namespace WebCore {
+class ResourceRequest;
+}
+
 namespace WebKit {
 
 class ChildProcessProxy;
@@ -43,7 +47,7 @@
     explicit DownloadProxyMap(ChildProcessProxy*);
     ~DownloadProxyMap();
 
-    DownloadProxy* createDownloadProxy(WebContext&);
+    DownloadProxy* createDownloadProxy(WebContext&, const WebCore::ResourceRequest&);
     void downloadFinished(DownloadProxy*);
 
     bool isEmpty() const { return m_downloads.isEmpty(); }

Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -97,12 +97,12 @@
     connection()->send(Messages::NetworkProcess::CreateNetworkConnectionToWebProcess(), 0, IPC::DispatchMessageEvenWhenWaitingForSyncReply);
 }
 
-DownloadProxy* NetworkProcessProxy::createDownloadProxy()
+DownloadProxy* NetworkProcessProxy::createDownloadProxy(const ResourceRequest& resourceRequest)
 {
     if (!m_downloadProxyMap)
         m_downloadProxyMap = std::make_unique<DownloadProxyMap>(this);
 
-    return m_downloadProxyMap->createDownloadProxy(m_webContext);
+    return m_downloadProxyMap->createDownloadProxy(m_webContext, resourceRequest);
 }
 
 void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()

Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h	2014-10-02 21:01:08 UTC (rev 174230)
@@ -44,6 +44,7 @@
 
 namespace WebCore {
 class AuthenticationChallenge;
+class ResourceRequest;
 }
 
 namespace WebKit {
@@ -60,7 +61,7 @@
 
     void getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>);
 
-    DownloadProxy* createDownloadProxy();
+    DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&);
 
 #if PLATFORM(COCOA)
     void setProcessSuppressionEnabled(bool);

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -883,7 +883,7 @@
 
 DownloadProxy* WebContext::download(WebPageProxy* initiatingPage, const ResourceRequest& request)
 {
-    DownloadProxy* downloadProxy = createDownloadProxy();
+    DownloadProxy* downloadProxy = createDownloadProxy(request);
     uint64_t initiatingPageID = initiatingPage ? initiatingPage->pageID() : 0;
 
 #if ENABLE(NETWORK_PROCESS)
@@ -1055,17 +1055,17 @@
     sendToAllProcesses(Messages::WebProcess::SetDefaultRequestTimeoutInterval(timeoutInterval));
 }
 
-DownloadProxy* WebContext::createDownloadProxy()
+DownloadProxy* WebContext::createDownloadProxy(const ResourceRequest& request)
 {
 #if ENABLE(NETWORK_PROCESS)
     if (usesNetworkProcess()) {
         ensureNetworkProcess();
         ASSERT(m_networkProcess);
-        return m_networkProcess->createDownloadProxy();
+        return m_networkProcess->createDownloadProxy(request);
     }
 #endif
 
-    return ensureSharedWebProcess().createDownloadProxy();
+    return ensureSharedWebProcess().createDownloadProxy(request);
 }
 
 void WebContext::addMessageReceiver(IPC::StringReference messageReceiverName, IPC::MessageReceiver& messageReceiver)

Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/WebContext.h	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h	2014-10-02 21:01:08 UTC (rev 174230)
@@ -230,7 +230,7 @@
     void setEnhancedAccessibility(bool);
     
     // Downloads.
-    DownloadProxy* createDownloadProxy();
+    DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&);
     API::DownloadClient& downloadClient() { return *m_downloadClient; }
 
     API::HistoryClient& historyClient() { return *m_historyClient; }

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -1788,7 +1788,9 @@
     uint64_t downloadID = 0;
     if (action == PolicyDownload) {
         // Create a download proxy.
-        DownloadProxy* download = m_process->context().createDownloadProxy();
+        // FIXME: We should ensure that the downloadRequest is never empty.
+        const ResourceRequest& downloadRequest = m_decidePolicyForResponseRequest ? *m_decidePolicyForResponseRequest : ResourceRequest();
+        DownloadProxy* download = m_process->context().createDownloadProxy(downloadRequest);
         downloadID = download->downloadID();
         handleDownloadRequest(download);
     }

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2014-10-02 21:01:08 UTC (rev 174230)
@@ -609,7 +609,7 @@
         send(Messages::WebProcess::SetTextCheckerState(TextChecker::state()), 0);
 }
 
-DownloadProxy* WebProcessProxy::createDownloadProxy()
+DownloadProxy* WebProcessProxy::createDownloadProxy(const ResourceRequest& request)
 {
 #if ENABLE(NETWORK_PROCESS)
     ASSERT(!m_context->usesNetworkProcess());
@@ -618,7 +618,7 @@
     if (!m_downloadProxyMap)
         m_downloadProxyMap = std::make_unique<DownloadProxyMap>(this);
 
-    return m_downloadProxyMap->createDownloadProxy(m_context.get());
+    return m_downloadProxyMap->createDownloadProxy(m_context.get(), request);
 }
 
 void WebProcessProxy::didNavigateWithNavigationData(uint64_t pageID, const WebNavigationDataStore& store, uint64_t frameID) 

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (174229 => 174230)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2014-10-02 20:56:52 UTC (rev 174229)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2014-10-02 21:01:08 UTC (rev 174230)
@@ -52,6 +52,7 @@
 #endif
 
 namespace WebCore {
+class ResourceRequest;
 class URL;
 struct PluginInfo;
 };
@@ -118,7 +119,7 @@
 
     static bool fullKeyboardAccessEnabled();
 
-    DownloadProxy* createDownloadProxy();
+    DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&);
 
     void pageSuppressibilityChanged(WebPageProxy*);
     void pagePreferencesChanged(WebPageProxy*);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to