diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp')
-rw-r--r-- | Source/WebKit2/UIProcess/WebCookieManagerProxy.cpp | 107 |
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) |