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