summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp')
-rw-r--r--Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp107
1 files changed, 63 insertions, 44 deletions
diff --git a/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp b/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp
index 091b96549..2a9b0dd4c 100644
--- a/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp
@@ -27,11 +27,11 @@
#include "WebCookieManagerProxy.h"
#include "APIArray.h"
-#include "SecurityOriginData.h"
-#include "WebContext.h"
+#include "APISecurityOrigin.h"
#include "WebCookieManagerMessages.h"
#include "WebCookieManagerProxyMessages.h"
-#include "WebSecurityOrigin.h"
+#include "WebProcessPool.h"
+#include <WebCore/SecurityOriginData.h>
namespace WebKit {
@@ -40,18 +40,18 @@ const char* WebCookieManagerProxy::supplementName()
return "WebCookieManagerProxy";
}
-PassRefPtr<WebCookieManagerProxy> WebCookieManagerProxy::create(WebContext* context)
+PassRefPtr<WebCookieManagerProxy> WebCookieManagerProxy::create(WebProcessPool* processPool)
{
- return adoptRef(new WebCookieManagerProxy(context));
+ return adoptRef(new WebCookieManagerProxy(processPool));
}
-WebCookieManagerProxy::WebCookieManagerProxy(WebContext* context)
- : WebContextSupplement(context)
+WebCookieManagerProxy::WebCookieManagerProxy(WebProcessPool* processPool)
+ : WebContextSupplement(processPool)
#if USE(SOUP)
, m_cookiePersistentStorageType(SoupCookiePersistentStorageSQLite)
#endif
{
- WebContextSupplement::context()->addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this);
+ WebContextSupplement::processPool()->addMessageReceiver(Messages::WebCookieManagerProxy::messageReceiverName(), *this);
}
WebCookieManagerProxy::~WebCookieManagerProxy()
@@ -65,28 +65,22 @@ void WebCookieManagerProxy::initializeClient(const WKCookieManagerClientBase* cl
// WebContextSupplement
-void WebCookieManagerProxy::contextDestroyed()
+void WebCookieManagerProxy::processPoolDestroyed()
{
- invalidateCallbackMap(m_arrayCallbacks);
- invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
+ invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::OwnerWasInvalidated);
+ invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::OwnerWasInvalidated);
}
void WebCookieManagerProxy::processDidClose(WebProcessProxy*)
{
- invalidateCallbackMap(m_arrayCallbacks);
- invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
+ invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
+ invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::ProcessExited);
}
void WebCookieManagerProxy::processDidClose(NetworkProcessProxy*)
{
- invalidateCallbackMap(m_arrayCallbacks);
- invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks);
-}
-
-bool WebCookieManagerProxy::shouldTerminate(WebProcessProxy*) const
-{
- return context()->processModel() != ProcessModelSharedSecondaryProcess
- || (m_arrayCallbacks.isEmpty() && m_httpCookieAcceptPolicyCallbacks.isEmpty());
+ invalidateCallbackMap(m_arrayCallbacks, CallbackBase::Error::ProcessExited);
+ invalidateCallbackMap(m_httpCookieAcceptPolicyCallbacks, CallbackBase::Error::ProcessExited);
}
void WebCookieManagerProxy::refWebContextSupplement()
@@ -99,15 +93,15 @@ void WebCookieManagerProxy::derefWebContextSupplement()
API::Object::deref();
}
-void WebCookieManagerProxy::getHostnamesWithCookies(PassRefPtr<ArrayCallback> prpCallback)
+void WebCookieManagerProxy::getHostnamesWithCookies(WebCore::SessionID sessionID, std::function<void (API::Array*, CallbackBase::Error)> callbackFunction)
{
- RefPtr<ArrayCallback> callback = prpCallback;
+ auto callback = ArrayCallback::create(WTFMove(callbackFunction));
uint64_t callbackID = callback->callbackID();
- m_arrayCallbacks.set(callbackID, callback.release());
+ m_arrayCallbacks.set(callbackID, WTFMove(callback));
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetHostnamesWithCookies(callbackID));
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetHostnamesWithCookies(sessionID, callbackID));
}
-
+
void WebCookieManagerProxy::didGetHostnamesWithCookies(const Vector<String>& hostnames, uint64_t callbackID)
{
RefPtr<ArrayCallback> callback = m_arrayCallbacks.take(callbackID);
@@ -116,54 +110,79 @@ void WebCookieManagerProxy::didGetHostnamesWithCookies(const Vector<String>& hos
return;
}
- callback->performCallbackWithReturnValue(API::Array::createStringArray(hostnames).get());
+ callback->performCallbackWithReturnValue(API::Array::createStringArray(hostnames).ptr());
+}
+
+void WebCookieManagerProxy::deleteCookiesForHostname(WebCore::SessionID sessionID, const String& hostname)
+{
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookiesForHostname(sessionID, hostname));
+}
+
+void WebCookieManagerProxy::deleteAllCookies(WebCore::SessionID sessionID)
+{
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookies(sessionID));
+}
+
+void WebCookieManagerProxy::deleteAllCookiesModifiedSince(WebCore::SessionID sessionID, std::chrono::system_clock::time_point time)
+{
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookiesModifiedSince(sessionID, time));
}
-void WebCookieManagerProxy::deleteCookiesForHostname(const String& hostname)
+void WebCookieManagerProxy::addCookie(WebCore::SessionID sessionID, const WebCore::Cookie& cookie, const String& hostname)
{
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteCookiesForHostname(hostname));
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::AddCookie(sessionID, cookie, hostname));
}
-void WebCookieManagerProxy::deleteAllCookies()
+void WebCookieManagerProxy::startObservingCookieChanges(WebCore::SessionID sessionID)
{
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::DeleteAllCookies());
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges(sessionID));
}
-void WebCookieManagerProxy::startObservingCookieChanges()
+void WebCookieManagerProxy::stopObservingCookieChanges(WebCore::SessionID sessionID)
{
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StartObservingCookieChanges());
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges(sessionID));
}
-void WebCookieManagerProxy::stopObservingCookieChanges()
+void WebCookieManagerProxy::setCookieObserverCallback(WebCore::SessionID sessionID, std::function<void ()>&& callback)
{
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::StopObservingCookieChanges());
+ if (callback)
+ m_cookieObservers.set(sessionID, WTFMove(callback));
+ else
+ m_cookieObservers.remove(sessionID);
}
-void WebCookieManagerProxy::cookiesDidChange()
+void WebCookieManagerProxy::cookiesDidChange(WebCore::SessionID sessionID)
{
m_client.cookiesDidChange(this);
+ if (auto callback = m_cookieObservers.get(sessionID))
+ callback();
}
void WebCookieManagerProxy::setHTTPCookieAcceptPolicy(HTTPCookieAcceptPolicy policy)
{
-#if PLATFORM(MAC)
- persistHTTPCookieAcceptPolicy(policy);
+#if PLATFORM(COCOA)
+ if (!processPool()->isUsingTestingNetworkSession())
+ persistHTTPCookieAcceptPolicy(policy);
#endif
#if USE(SOUP)
- context()->setInitialHTTPCookieAcceptPolicy(policy);
+ processPool()->setInitialHTTPCookieAcceptPolicy(policy);
#endif
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy));
+ // The policy is not sent to newly created processes (only Soup does that via setInitialHTTPCookieAcceptPolicy()). This is not a serious problem, because:
+ // - When testing, we only have one WebProcess and one NetworkProcess, and WebKitTestRunner never restarts them;
+ // - When not testing, Cocoa has the policy persisted, and thus new processes use it (even for ephemeral sessions).
+ processPool()->sendToAllProcesses(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy));
+ processPool()->sendToNetworkingProcess(Messages::WebCookieManager::SetHTTPCookieAcceptPolicy(policy));
}
-void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(PassRefPtr<HTTPCookieAcceptPolicyCallback> prpCallback)
+void WebCookieManagerProxy::getHTTPCookieAcceptPolicy(std::function<void (HTTPCookieAcceptPolicy, CallbackBase::Error)> callbackFunction)
{
- RefPtr<HTTPCookieAcceptPolicyCallback> callback = prpCallback;
+ auto callback = HTTPCookieAcceptPolicyCallback::create(WTFMove(callbackFunction));
uint64_t callbackID = callback->callbackID();
- m_httpCookieAcceptPolicyCallbacks.set(callbackID, callback.release());
+ m_httpCookieAcceptPolicyCallbacks.set(callbackID, WTFMove(callback));
- context()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(callbackID));
+ processPool()->sendToNetworkingProcessRelaunchingIfNecessary(Messages::WebCookieManager::GetHTTPCookieAcceptPolicy(callbackID));
}
void WebCookieManagerProxy::didGetHTTPCookieAcceptPolicy(uint32_t policy, uint64_t callbackID)