Diff
Modified: trunk/Source/WebKit2/ChangeLog (137823 => 137824)
--- trunk/Source/WebKit2/ChangeLog 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/ChangeLog 2012-12-16 01:26:05 UTC (rev 137824)
@@ -1,3 +1,47 @@
+2012-12-15 Anders Carlsson <[email protected]>
+
+ Handle downloads in the network process
+ https://bugs.webkit.org/show_bug.cgi?id=105117
+
+ Reviewed by Sam Weinig.
+
+ Start using the download manager in the network process.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::startDownload):
+ Call through to the download manager.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ Add StartDownload message.
+
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::downloadManager):
+ Add "singleton" download manager.
+
+ (WebKit::NetworkProcess::didCreateDownload):
+ (WebKit::NetworkProcess::didDestroyDownload):
+ (WebKit::NetworkProcess::downloadProxyConnection):
+ Implement DownloadManager::Client.
+
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::didReceiveMessage):
+ (WebKit::NetworkProcessProxy::didReceiveSyncMessage):
+ Call through to the message receiver map.
+
+ * WebProcess/Downloads/Download.cpp:
+ * WebProcess/Downloads/DownloadManager.cpp:
+ (WebKit::DownloadManager::downloadProxyConnection):
+ * WebProcess/Downloads/DownloadManager.h:
+ Rename connection to downloadProxyConnection.
+
+ * WebProcess/WebPage/WebFrame.cpp:
+ (WebKit::WebFrame::startDownload):
+ When using the network process, send a message to it with the request that needs to be downloaded.
+
+ * WebProcess/WebProcess.cpp:
+ (WebKit::WebProcess::downloadProxyConnection):
+ Return the connection to the UI process.
+
2012-12-15 Sam Weinig <[email protected]>
NSURLCache should be disabled in the WebProcess when using the NetworkProcess
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp (137823 => 137824)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -166,6 +166,12 @@
}
}
+void NetworkConnectionToWebProcess::startDownload(bool privateBrowsingEnabled, uint64_t downloadID, const ResourceRequest& request)
+{
+ // FIXME: Do something with the private browsing flag.
+ NetworkProcess::shared().downloadManager().startDownload(downloadID, request);
+}
+
void NetworkConnectionToWebProcess::cookiesForDOM(bool privateBrowsingEnabled, const KURL& firstParty, const KURL& url, String& result)
{
result = WebCore::cookiesForDOM(networkingContext(privateBrowsingEnabled), firstParty, url);
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h (137823 => 137824)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.h 2012-12-16 01:26:05 UTC (rev 137824)
@@ -86,6 +86,7 @@
void suspendPendingRequests();
void resumePendingRequests();
void setSerialLoadingEnabled(bool);
+ void startDownload(bool privateBrowsingEnabled, uint64_t downloadID, const WebCore::ResourceRequest&);
void cookiesForDOM(bool privateBrowsingEnabled, const WebCore::KURL& firstParty, const WebCore::KURL&, String& result);
void setCookiesFromDOM(bool privateBrowsingEnabled, const WebCore::KURL& firstParty, const WebCore::KURL&, const String&);
void cookiesEnabled(bool privateBrowsingEnabled, const WebCore::KURL& firstParty, const WebCore::KURL&, bool& result);
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in (137823 => 137824)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2012-12-16 01:26:05 UTC (rev 137824)
@@ -39,6 +39,8 @@
SetSerialLoadingEnabled(bool enabled) -> ()
+ StartDownload(bool privateBrowsingEnabled, uint64_t downloadID, WebCore::ResourceRequest request)
+
CookiesForDOM(bool privateBrowsingEnabled, WebCore::KURL firstParty, WebCore::KURL url) -> (WTF::String result)
SetCookiesFromDOM(bool privateBrowsingEnabled, WebCore::KURL firstParty, WebCore::KURL url, WTF::String cookieString)
CookiesEnabled(bool privateBrowsingEnabled, WebCore::KURL firstParty, WebCore::KURL url) -> (bool enabled)
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (137823 => 137824)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -61,6 +61,12 @@
{
}
+DownloadManager& NetworkProcess::downloadManager()
+{
+ DEFINE_STATIC_LOCAL(DownloadManager, downloadManager, (this));
+ return downloadManager;
+}
+
void NetworkProcess::initialize(CoreIPC::Connection::Identifier serverIdentifier, WebCore::RunLoop* runLoop)
{
ASSERT(!m_uiConnection);
@@ -99,6 +105,21 @@
RunLoop::current()->stop();
}
+void NetworkProcess::didCreateDownload()
+{
+ disableTermination();
+}
+
+void NetworkProcess::didDestroyDownload()
+{
+ enableTermination();
+}
+
+CoreIPC::Connection* NetworkProcess::downloadProxyConnection()
+{
+ return m_uiConnection.get();
+}
+
void NetworkProcess::initializeNetworkProcess(const NetworkProcessCreationParameters& parameters)
{
#if !LOG_DISABLED
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h (137823 => 137824)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.h 2012-12-16 01:26:05 UTC (rev 137824)
@@ -30,6 +30,7 @@
#include "CacheModel.h"
#include "ChildProcess.h"
+#include "DownloadManager.h"
#include "NetworkResourceLoadScheduler.h"
#include <wtf/Forward.h>
@@ -42,7 +43,7 @@
class NetworkConnectionToWebProcess;
struct NetworkProcessCreationParameters;
-class NetworkProcess : ChildProcess {
+class NetworkProcess : ChildProcess, DownloadManager::Client {
WTF_MAKE_NONCOPYABLE(NetworkProcess);
public:
static NetworkProcess& shared();
@@ -53,6 +54,8 @@
NetworkResourceLoadScheduler& networkResourceLoadScheduler() { return m_networkResourceLoadScheduler; }
+ DownloadManager& downloadManager();
+
private:
NetworkProcess();
~NetworkProcess();
@@ -67,6 +70,11 @@
virtual void didClose(CoreIPC::Connection*) OVERRIDE;
virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::StringReference messageReceiverName, CoreIPC::StringReference messageName) OVERRIDE;
+ // DownloadManager::Client
+ virtual void didCreateDownload() OVERRIDE;
+ virtual void didDestroyDownload() OVERRIDE;
+ virtual CoreIPC::Connection* downloadProxyConnection() OVERRIDE;
+
// Message Handlers
void didReceiveNetworkProcessMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&);
void initializeNetworkProcess(const NetworkProcessCreationParameters&);
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp (137823 => 137824)
--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -26,6 +26,7 @@
#include "config.h"
#include "NetworkProcessProxy.h"
+#include "DownloadProxyMessages.h"
#include "NetworkProcessCreationParameters.h"
#include "NetworkProcessMessages.h"
#include "WebContext.h"
@@ -106,9 +107,20 @@
void NetworkProcessProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder)
{
+ if (m_messageReceiverMap.dispatchMessage(connection, messageID, decoder))
+ return;
+
didReceiveNetworkProcessProxyMessage(connection, messageID, decoder);
}
+void NetworkProcessProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::MessageDecoder& decoder, OwnPtr<CoreIPC::MessageEncoder>& replyEncoder)
+{
+ if (m_messageReceiverMap.dispatchSyncMessage(connection, messageID, decoder, replyEncoder))
+ return;
+
+ ASSERT_NOT_REACHED();
+}
+
void NetworkProcessProxy::didClose(CoreIPC::Connection*)
{
if (m_downloadProxyMap)
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h (137823 => 137824)
--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h 2012-12-16 01:26:05 UTC (rev 137824)
@@ -64,6 +64,7 @@
// CoreIPC::Connection::Client
virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&) OVERRIDE;
+ virtual void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::MessageDecoder&, OwnPtr<CoreIPC::MessageEncoder>&) OVERRIDE;
virtual void didClose(CoreIPC::Connection*) OVERRIDE;
virtual void didReceiveInvalidMessage(CoreIPC::Connection*, CoreIPC::StringReference messageReceiverName, CoreIPC::StringReference messageName) OVERRIDE;
Modified: trunk/Source/WebKit2/WebProcess/Downloads/Download.cpp (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/Downloads/Download.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/Downloads/Download.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -69,7 +69,7 @@
CoreIPC::Connection* Download::connection() const
{
- return m_downloadManager.connection();
+ return m_downloadManager.downloadProxyConnection();
}
void Download::didStart()
Modified: trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -83,9 +83,9 @@
m_client->didDestroyDownload();
}
-CoreIPC::Connection* DownloadManager::connection()
+CoreIPC::Connection* DownloadManager::downloadProxyConnection()
{
- return m_client->connection();
+ return m_client->downloadProxyConnection();
}
#if PLATFORM(QT)
Modified: trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.h (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.h 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/Downloads/DownloadManager.h 2012-12-16 01:26:05 UTC (rev 137824)
@@ -56,7 +56,8 @@
virtual void didCreateDownload() = 0;
virtual void didDestroyDownload() = 0;
- virtual CoreIPC::Connection* connection() const = 0;
+ // This is the connection where DownloadProxy messages should be sent.
+ virtual CoreIPC::Connection* downloadProxyConnection() = 0;
};
explicit DownloadManager(Client*);
@@ -72,7 +73,7 @@
void didCreateDownload();
void didDestroyDownload();
- CoreIPC::Connection* connection();
+ CoreIPC::Connection* downloadProxyConnection();
#if PLATFORM(QT)
void startTransfer(uint64_t downloadID, const String& destination);
Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebFrame.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -76,6 +76,12 @@
#include <WebCore/LegacyWebArchive.h>
#endif
+#if ENABLE(NETWORK_PROCESS)
+#include "NetworkConnectionToWebProcessMessages.h"
+#include "NetworkProcessConnection.h"
+#include "WebCoreArgumentCoders.h"
+#endif
+
#ifndef NDEBUG
#include <wtf/RefCountedLeakCounter.h>
#endif
@@ -236,9 +242,18 @@
{
ASSERT(m_policyDownloadID);
- WebProcess::shared().downloadManager().startDownload(m_policyDownloadID, request);
+ uint64_t policyDownloadID = m_policyDownloadID;
+ m_policyDownloadID = 0;
- m_policyDownloadID = 0;
+#if ENABLE(NETWORK_PROCESS)
+ if (WebProcess::shared().usesNetworkProcess()) {
+ bool privateBrowsingEnabled = m_coreFrame->loader()->networkingContext()->inPrivateBrowsingMode();
+ WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::StartDownload(privateBrowsingEnabled, policyDownloadID, request), 0);
+ return;
+ }
+#endif
+
+ WebProcess::shared().downloadManager().startDownload(policyDownloadID, request);
}
void WebFrame::convertHandleToDownload(ResourceHandle* handle, const ResourceRequest& request, const ResourceResponse& response)
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp 2012-12-16 01:26:05 UTC (rev 137824)
@@ -229,6 +229,11 @@
enableTermination();
}
+CoreIPC::Connection* WebProcess::downloadProxyConnection()
+{
+ return m_connection.get();
+}
+
void WebProcess::initializeWebProcess(const WebProcessCreationParameters& parameters, CoreIPC::MessageDecoder& decoder)
{
ASSERT(m_pageMap.isEmpty());
@@ -1011,7 +1016,6 @@
m_networkProcessConnection = 0;
}
-
#endif
#if ENABLE(PLUGIN_PROCESS)
Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (137823 => 137824)
--- trunk/Source/WebKit2/WebProcess/WebProcess.h 2012-12-16 01:15:52 UTC (rev 137823)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h 2012-12-16 01:26:05 UTC (rev 137824)
@@ -224,6 +224,7 @@
// DownloadManager::Client.
virtual void didCreateDownload() OVERRIDE;
virtual void didDestroyDownload() OVERRIDE;
+ virtual CoreIPC::Connection* downloadProxyConnection() OVERRIDE;
void initializeWebProcess(const WebProcessCreationParameters&, CoreIPC::MessageDecoder&);
void platformInitializeWebProcess(const WebProcessCreationParameters&, CoreIPC::MessageDecoder&);