Add infrastructure for handling website data in the network process
https://bugs.webkit.org/show_bug.cgi?id=142092
Reviewed by Andreas Kling.
Source/WebKit2:
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::fetchWebsiteData):
(WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
Send back "Did" messages without actually doing anything for now.
* NetworkProcess/NetworkProcess.h:
Add new members.
* NetworkProcess/NetworkProcess.messages.in:
Add FetchWebsiteData and DeleteWebsiteDataForOrigins messages.
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::~NetworkProcessProxy):
Assert that all maps are empty.
(WebKit::NetworkProcessProxy::fetchWebsiteData):
(WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
Add callbacks and send fetch and delete messages respectively.
(WebKit::NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch):
Make sure to invoke all callbacks.
(WebKit::NetworkProcessProxy::didFetchWebsiteData):
Find the callback and invoke it.
(WebKit::NetworkProcessProxy::didDeleteWebsiteDataForOrigins):
Ditto.
* UIProcess/Network/NetworkProcessProxy.h:
Add new members.
* UIProcess/Network/NetworkProcessProxy.messages.in:
Add DidFetchWebsiteData and DidDeleteWebsiteDataForOrigins messages.
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::connectionDidClose):
Just pass an empty WebsiteData object.
Tools:
Add a menu item that will fetch all website data, delete the returned data records, and
fetch all website data again so we can confirm that it's all empty.
* MiniBrowser/mac/WK2BrowserWindowController.m:
(-[WK2BrowserWindowController fetchAndClearWebsiteData:]):
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@180773 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
index e970a26..9e32667 100644
--- a/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
+++ b/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp
@@ -35,6 +35,7 @@
#include "NetworkProcessMessages.h"
#include "WebProcessMessages.h"
#include "WebProcessPool.h"
+#include "WebsiteData.h"
#include <wtf/RunLoop.h>
#if ENABLE(SEC_ITEM_SHIM)
@@ -73,7 +74,9 @@
NetworkProcessProxy::~NetworkProcessProxy()
{
+ ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty());
+ ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty());
}
void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
@@ -111,6 +114,16 @@
return m_downloadProxyMap->createDownloadProxy(m_processPool, resourceRequest);
}
+void NetworkProcessProxy::fetchWebsiteData(SessionID sessionID, WebsiteDataTypes dataTypes, std::function<void (WebsiteData)> completionHandler)
+{
+ ASSERT(canSendMessage());
+
+ uint64_t callbackID = generateCallbackID();
+ m_pendingFetchWebsiteDataCallbacks.add(callbackID, WTF::move(completionHandler));
+
+ send(Messages::WebProcess::FetchWebsiteData(sessionID, dataTypes, callbackID), 0);
+}
+
void NetworkProcessProxy::deleteWebsiteData(WebCore::SessionID sessionID, WebsiteDataTypes dataTypes, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler)
{
auto callbackID = generateCallbackID();
@@ -119,6 +132,20 @@
send(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
}
+void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, WebsiteDataTypes dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler)
+{
+ ASSERT(canSendMessage());
+
+ uint64_t callbackID = generateCallbackID();
+ m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, WTF::move(completionHandler));
+
+ Vector<SecurityOriginData> originData;
+ for (auto& origin : origins)
+ originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
+
+ send(Messages::WebProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, callbackID), 0);
+}
+
void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
{
// The network process must have crashed or exited, send any pending sync replies we might have.
@@ -134,10 +161,18 @@
#endif
}
+ for (const auto& callback : m_pendingFetchWebsiteDataCallbacks.values())
+ callback(WebsiteData());
+ m_pendingFetchWebsiteDataCallbacks.clear();
+
for (const auto& callback : m_pendingDeleteWebsiteDataCallbacks.values())
callback();
m_pendingDeleteWebsiteDataCallbacks.clear();
+ for (const auto& callback : m_pendingDeleteWebsiteDataForOriginsCallbacks.values())
+ callback();
+ m_pendingDeleteWebsiteDataForOriginsCallbacks.clear();
+
// Tell the network process manager to forget about this network process proxy. This may cause us to be deleted.
m_processPool.networkProcessCrashed(this);
}
@@ -199,12 +234,24 @@
page->didReceiveAuthenticationChallengeProxy(frameID, authenticationChallenge.release());
}
+void NetworkProcessProxy::didFetchWebsiteData(uint64_t callbackID, const WebsiteData& websiteData)
+{
+ auto callback = m_pendingFetchWebsiteDataCallbacks.take(callbackID);
+ callback(websiteData);
+}
+
void NetworkProcessProxy::didDeleteWebsiteData(uint64_t callbackID)
{
auto callback = m_pendingDeleteWebsiteDataCallbacks.take(callbackID);
callback();
}
+void NetworkProcessProxy::didDeleteWebsiteDataForOrigins(uint64_t callbackID)
+{
+ auto callback = m_pendingDeleteWebsiteDataForOriginsCallbacks.take(callbackID);
+ callback();
+}
+
void NetworkProcessProxy::didFinishLaunching(ProcessLauncher* launcher, IPC::Connection::Identifier connectionIdentifier)
{
ChildProcessProxy::didFinishLaunching(launcher, connectionIdentifier);