NetworkStorageSessionCFNet.cpp [plain text]
#include "config.h"
#include "NetworkStorageSession.h"
#include <wtf/MainThread.h>
#include <wtf/PassOwnPtr.h>
#if PLATFORM(MAC)
#include "WebCoreSystemInterface.h"
#else
#include <WebKitSystemInterface/WebKitSystemInterface.h>
#endif
namespace WebCore {
NetworkStorageSession::NetworkStorageSession(RetainPtr<CFURLStorageSessionRef> platformSession)
: m_platformSession(platformSession)
, m_isPrivate(false)
{
}
static OwnPtr<NetworkStorageSession>& defaultNetworkStorageSession()
{
ASSERT(isMainThread());
DEFINE_STATIC_LOCAL(OwnPtr<NetworkStorageSession>, session, ());
return session;
}
void NetworkStorageSession::switchToNewTestingSession()
{
#if PLATFORM(MAC)
defaultNetworkStorageSession() = adoptPtr(new NetworkStorageSession(adoptCF(wkCreatePrivateStorageSession(CFSTR("Private WebKit Session")))));
#else
defaultNetworkStorageSession() = adoptPtr(new NetworkStorageSession(adoptCF(wkCreatePrivateStorageSession(CFSTR("Private WebKit Session"), defaultNetworkStorageSession()->platformSession()))));
#endif
}
#if PLATFORM(WIN)
static RetainPtr<CFHTTPCookieStorageRef>& cookieStorageOverride()
{
DEFINE_STATIC_LOCAL(RetainPtr<CFHTTPCookieStorageRef>, cookieStorage, ());
return cookieStorage;
}
void overrideCookieStorage(CFHTTPCookieStorageRef cookieStorage)
{
ASSERT(isMainThread());
cookieStorageOverride() = adoptCF(cookieStorage);
}
CFHTTPCookieStorageRef overridenCookieStorage()
{
return cookieStorageOverride().get();
}
#endif
NetworkStorageSession& NetworkStorageSession::defaultStorageSession()
{
if (!defaultNetworkStorageSession())
defaultNetworkStorageSession() = adoptPtr(new NetworkStorageSession(0));
return *defaultNetworkStorageSession();
}
PassOwnPtr<NetworkStorageSession> NetworkStorageSession::createPrivateBrowsingSession(const String& identifierBase)
{
RetainPtr<CFStringRef> cfIdentifier = String(identifierBase + ".PrivateBrowsing").createCFString();
#if PLATFORM(MAC)
OwnPtr<NetworkStorageSession> session = adoptPtr(new NetworkStorageSession(adoptCF(wkCreatePrivateStorageSession(cfIdentifier.get()))));
#else
OwnPtr<NetworkStorageSession> session = adoptPtr(new NetworkStorageSession(adoptCF(wkCreatePrivateStorageSession(cfIdentifier.get(), defaultNetworkStorageSession()->platformSession()))));
#endif
session->m_isPrivate = true;
return session.release();
}
RetainPtr<CFHTTPCookieStorageRef> NetworkStorageSession::cookieStorage() const
{
#if PLATFORM(WIN)
if (RetainPtr<CFHTTPCookieStorageRef>& override = cookieStorageOverride())
return override;
#endif
if (m_platformSession)
return adoptCF(wkCopyHTTPCookieStorage(m_platformSession.get()));
#if USE(CFNETWORK)
return wkGetDefaultHTTPCookieStorage();
#else
return 0;
#endif
}
}