Diff
Modified: trunk/Source/WebKit2/ChangeLog (191997 => 191998)
--- trunk/Source/WebKit2/ChangeLog 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/ChangeLog 2015-11-04 00:50:27 UTC (rev 191998)
@@ -1,3 +1,78 @@
+2015-11-03 Alex Christensen <achristen...@webkit.org>
+
+ Create a NetworkSession for each SessionID
+ https://bugs.webkit.org/show_bug.cgi?id=150857
+
+ Reviewed by Anders Carlsson.
+
+ This patch renames SessionTracker::session to storageSession and makes a parallel
+ structure for NetworkSessions. NetworkSession and NetworkStorageSession should eventually
+ become the same class in WebCore. Because not everybody uses NetworkSessions yet,
+ we keep them separate but created, destroyed, and managed together.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::storageSession):
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::fetchWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteData):
+ (WebKit::NetworkProcess::deleteWebsiteDataForOrigins):
+ * NetworkProcess/NetworkResourceLoader.cpp:
+ (WebKit::NetworkResourceLoader::startNetworkLoad):
+ (WebKit::NetworkResourceLoader::abort):
+ * NetworkProcess/NetworkResourceLoader.h:
+ * NetworkProcess/NetworkSession.h:
+ (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient):
+ (WebKit::NetworkDataTask::client):
+ (WebKit::NetworkDataTask::clearClient):
+ (WebKit::NetworkingDataTask::client): Deleted.
+ (WebKit::NetworkingDataTask::clearClient): Deleted.
+ (WebKit::NetworkSession::~NetworkSession): Deleted.
+ * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+ (WebKit::configurationForType):
+ (WebKit::defaultNetworkSession):
+ (WebKit::NetworkSession::defaultSession):
+ (WebKit::NetworkSession::NetworkSession):
+ (WebKit::NetworkSession::~NetworkSession):
+ (WebKit::NetworkSession::createDataTaskWithRequest):
+ (WebKit::NetworkSession::dataTaskForIdentifier):
+ (WebKit::NetworkDataTask::NetworkDataTask):
+ (WebKit::NetworkDataTask::~NetworkDataTask):
+ (WebKit::NetworkDataTask::cancel):
+ (WebKit::NetworkDataTask::resume):
+ (WebKit::NetworkDataTask::taskIdentifier):
+ (WebKit::NetworkSession::create): Deleted.
+ (WebKit::NetworkSession::singleton): Deleted.
+ (WebKit::NetworkingDataTask::NetworkingDataTask): Deleted.
+ (WebKit::NetworkingDataTask::~NetworkingDataTask): Deleted.
+ (WebKit::NetworkingDataTask::suspend): Deleted.
+ (WebKit::NetworkingDataTask::resume): Deleted.
+ (WebKit::NetworkingDataTask::taskIdentifier): Deleted.
+ * NetworkProcess/mac/RemoteNetworkingContext.mm:
+ (WebKit::RemoteNetworkingContext::storageSession):
+ (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
+ * Shared/SessionTracker.cpp:
+ (WebKit::staticStorageSessionMap):
+ (WebKit::identifierBase):
+ (WebKit::SessionTracker::storageSessionMap):
+ (WebKit::SessionTracker::getIdentifierBase):
+ (WebKit::SessionTracker::storageSession):
+ (WebKit::staticSessionMap):
+ (WebKit::SessionTracker::networkSession):
+ (WebKit::SessionTracker::sessionID):
+ (WebKit::SessionTracker::setSession):
+ (WebKit::SessionTracker::destroySession):
+ (WebKit::SessionTracker::sessionMap): Deleted.
+ (WebKit::SessionTracker::session): Deleted.
+ * Shared/SessionTracker.h:
+ * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
+ (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
+ (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
+ (WebKit::WebFrameNetworkingContext::storageSession):
+ * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
+ (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession):
+ (WebKit::WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts):
+ (WebKit::WebFrameNetworkingContext::storageSession):
+
2015-11-03 Ryuan Choi <ryuan.c...@navercorp.com>
[CoordinatedGraphics] invisible webview should not paint the content
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp 2015-11-04 00:50:27 UTC (rev 191998)
@@ -168,9 +168,9 @@
static NetworkStorageSession& storageSession(SessionID sessionID)
{
if (sessionID.isEphemeral()) {
- NetworkStorageSession* privateSession = SessionTracker::session(sessionID);
- if (privateSession)
- return *privateSession;
+ NetworkStorageSession* privateStorageSession = SessionTracker::storageSession(sessionID);
+ if (privateStorageSession)
+ return *privateStorageSession;
// Some requests with private browsing mode requested may still be coming shortly after NetworkProcess was told to destroy its session.
// FIXME: Find a way to track private browsing sessions more rigorously.
LOG_ERROR("Private browsing was requested, but there was no session for it. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp 2015-11-04 00:50:27 UTC (rev 191998)
@@ -337,7 +337,7 @@
}));
if (websiteDataTypes & WebsiteDataTypeCookies) {
- if (auto* networkStorageSession = SessionTracker::session(sessionID))
+ if (auto* networkStorageSession = SessionTracker::storageSession(sessionID))
getHostnamesWithCookies(*networkStorageSession, callbackAggregator->m_websiteData.hostNamesWithCookies);
}
@@ -352,13 +352,13 @@
{
#if PLATFORM(COCOA)
if (websiteDataTypes & WebsiteDataTypeHSTSCache) {
- if (auto* networkStorageSession = SessionTracker::session(sessionID))
+ if (auto* networkStorageSession = SessionTracker::storageSession(sessionID))
clearHSTSCache(*networkStorageSession, modifiedSince);
}
#endif
if (websiteDataTypes & WebsiteDataTypeCookies) {
- if (auto* networkStorageSession = SessionTracker::session(sessionID))
+ if (auto* networkStorageSession = SessionTracker::storageSession(sessionID))
deleteAllCookiesModifiedSince(*networkStorageSession, modifiedSince);
}
@@ -418,7 +418,7 @@
void NetworkProcess::deleteWebsiteDataForOrigins(SessionID sessionID, uint64_t websiteDataTypes, const Vector<SecurityOriginData>& origins, const Vector<String>& cookieHostNames, uint64_t callbackID)
{
if (websiteDataTypes & WebsiteDataTypeCookies) {
- if (auto* networkStorageSession = SessionTracker::session(sessionID))
+ if (auto* networkStorageSession = SessionTracker::storageSession(sessionID))
deleteCookiesForHostnames(*networkStorageSession, cookieHostNames);
}
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp 2015-11-04 00:50:27 UTC (rev 191998)
@@ -38,6 +38,7 @@
#include "NetworkProcessConnectionMessages.h"
#include "NetworkResourceLoadParameters.h"
#include "RemoteNetworkingContext.h"
+#include "SessionTracker.h"
#include "ShareableResource.h"
#include "SharedMemory.h"
#include "WebCoreArgumentCoders.h"
@@ -189,7 +190,7 @@
bool shouldSniff = m_parameters.contentSniffingPolicy == SniffContent;
#if USE(NETWORK_SESSION)
UNUSED_PARAM(shouldSniff); // FIXME: Use this.
- m_task = NetworkSession::singleton()->createDataTaskWithRequest(m_currentRequest, *this);
+ m_task = SessionTracker::networkSession(sessionID())->createDataTaskWithRequest(m_currentRequest, *this);
m_task->resume();
#else
m_handle = ResourceHandle::create(m_networkingContext.get(), m_currentRequest, this, m_defersLoading, shouldSniff);
@@ -252,7 +253,7 @@
#if USE(NETWORK_SESSION)
if (m_task)
- m_task->suspend();
+ m_task->cancel();
// FIXME: Do something with the network cache here.
notImplemented();
#else
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h 2015-11-04 00:50:27 UTC (rev 191998)
@@ -213,7 +213,7 @@
RefPtr<RemoteNetworkingContext> m_networkingContext;
#if USE(NETWORK_SESSION)
- RefPtr<NetworkingDataTask> m_task;
+ RefPtr<NetworkDataTask> m_task;
#else
RefPtr<WebCore::ResourceHandle> m_handle;
#endif
Modified: trunk/Source/WebKit2/NetworkProcess/NetworkSession.h (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.h 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.h 2015-11-04 00:50:27 UTC (rev 191998)
@@ -31,6 +31,7 @@
OBJC_CLASS NSOperationQueue;
OBJC_CLASS NetworkSessionDelegate;
+#include <WebCore/SessionID.h>
#include <wtf/HashMap.h>
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
@@ -74,48 +75,53 @@
virtual ~NetworkSessionTaskClient() { }
};
-class NetworkingDataTask : public RefCounted<NetworkingDataTask> {
+class NetworkDataTask : public RefCounted<NetworkDataTask> {
friend class NetworkSession;
public:
- void suspend();
+ void cancel();
void resume();
uint64_t taskIdentifier();
- ~NetworkingDataTask();
+ ~NetworkDataTask();
NetworkSessionTaskClient* client() { return m_client; }
void clearClient() { m_client = nullptr; }
private:
- explicit NetworkingDataTask(NetworkSession&, NetworkSessionTaskClient&, RetainPtr<NSURLSessionDataTask>);
-
NetworkSession& m_session;
+ NetworkSessionTaskClient* m_client;
+#if PLATFORM(COCOA)
+ explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, RetainPtr<NSURLSessionDataTask>&&);
RetainPtr<NSURLSessionDataTask> m_task;
- NetworkSessionTaskClient* m_client;
+#else
+ explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&);
+#endif
};
-class NetworkSession : public RefCounted<NetworkSession> {
- friend class NetworkingDataTask;
+class NetworkSession {
+ friend class NetworkDataTask;
public:
enum class Type {
Normal,
Ephemeral
};
+ NetworkSession(Type, WebCore::SessionID);
+ ~NetworkSession() { ASSERT(m_dataTaskMap.isEmpty()); }
- Ref<NetworkingDataTask> createDataTaskWithRequest(const WebCore::ResourceRequest&, NetworkSessionTaskClient&);
+ static NetworkSession& defaultSession();
+
+ Ref<NetworkDataTask> createDataTaskWithRequest(const WebCore::ResourceRequest&, NetworkSessionTaskClient&);
- static Ref<NetworkSession> singleton(); // FIXME: This shouldn't actually be a singleton.
- NetworkingDataTask* dataTaskForIdentifier(uint64_t);
+ NetworkDataTask* dataTaskForIdentifier(uint64_t);
- ~NetworkSession() { ASSERT(m_dataTaskMap.isEmpty()); }
private:
- static Ref<NetworkSession> create(Type);
-
- NetworkSession(Type);
- HashMap<uint64_t, NetworkingDataTask*> m_dataTaskMap;
+ WebCore::SessionID m_sessionID;
+ HashMap<uint64_t, NetworkDataTask*> m_dataTaskMap;
+#if PLATFORM(COCOA)
RetainPtr<NSURLSession> m_session;
RetainPtr<NetworkSessionDelegate> m_sessionDelegate;
+#endif
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm 2015-11-04 00:50:27 UTC (rev 191998)
@@ -33,6 +33,7 @@
#import <WebCore/AuthenticationChallenge.h>
#import <WebCore/CFNetworkSPI.h>
#import <WebCore/Credential.h>
+#import <WebCore/NetworkStorageSession.h>
#import <WebCore/ResourceError.h>
#import <WebCore/ResourceRequest.h>
#import <WebCore/ResourceResponse.h>
@@ -158,17 +159,6 @@
namespace WebKit {
-Ref<NetworkSession> NetworkSession::create(Type type)
-{
- return adoptRef(*new NetworkSession(type));
-}
-
-Ref<NetworkSession> NetworkSession::singleton()
-{
- static NeverDestroyed<Ref<NetworkSession>> sharedInstance(NetworkSession::create(Type::Normal));
- return sharedInstance.get().copyRef();
-}
-
static NSURLSessionConfiguration *configurationForType(NetworkSession::Type type)
{
switch (type) {
@@ -179,41 +169,48 @@
}
}
-NetworkSession::NetworkSession(Type type)
+NetworkSession& NetworkSession::defaultSession()
{
+ ASSERT(isMainThread());
+ static NeverDestroyed<NetworkSession> session(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID());
+ return session;
+}
+
+NetworkSession::NetworkSession(Type type, WebCore::SessionID sessionID)
+ : m_sessionID(sessionID)
+{
m_sessionDelegate = adoptNS([[NetworkSessionDelegate alloc] initWithNetworkSession:*this]);
NSURLSessionConfiguration *configuration = configurationForType(type);
- // FIXME: Use SessionTracker to make sure the correct cookie storage is used once there is more than one NetworkSession.
- if (auto* session = SessionTracker::session(WebCore::SessionID::defaultSessionID())) {
- if (CFHTTPCookieStorageRef storage = session->cookieStorage().get())
+ if (auto* storageSession = SessionTracker::storageSession(sessionID)) {
+ if (CFHTTPCookieStorageRef storage = storageSession->cookieStorage().get())
configuration.HTTPCookieStorage = [[[NSHTTPCookieStorage alloc] _initWithCFHTTPCookieStorage:storage] autorelease];
}
m_session = [NSURLSession sessionWithConfiguration:configuration delegate:static_cast<id>(m_sessionDelegate.get()) delegateQueue:[NSOperationQueue mainQueue]];
}
-Ref<NetworkingDataTask> NetworkSession::createDataTaskWithRequest(const WebCore::ResourceRequest& request, NetworkSessionTaskClient& client)
+Ref<NetworkDataTask> NetworkSession::createDataTaskWithRequest(const WebCore::ResourceRequest& request, NetworkSessionTaskClient& client)
{
- return adoptRef(*new NetworkingDataTask(*this, client, [m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]));
+ return adoptRef(*new NetworkDataTask(*this, client, [m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]));
}
-NetworkingDataTask* NetworkSession::dataTaskForIdentifier(uint64_t taskIdentifier)
+NetworkDataTask* NetworkSession::dataTaskForIdentifier(uint64_t taskIdentifier)
{
ASSERT(isMainThread());
return m_dataTaskMap.get(taskIdentifier);
}
-NetworkingDataTask::NetworkingDataTask(NetworkSession& session, NetworkSessionTaskClient& client, RetainPtr<NSURLSessionDataTask> task)
+NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkSessionTaskClient& client, RetainPtr<NSURLSessionDataTask>&& task)
: m_session(session)
- , m_task(task)
, m_client(&client)
+ , m_task(WTF::move(task))
{
ASSERT(!m_session.m_dataTaskMap.contains(taskIdentifier()));
ASSERT(isMainThread());
m_session.m_dataTaskMap.add(taskIdentifier(), this);
}
-NetworkingDataTask::~NetworkingDataTask()
+NetworkDataTask::~NetworkDataTask()
{
ASSERT(m_session.m_dataTaskMap.contains(taskIdentifier()));
ASSERT(m_session.m_dataTaskMap.get(taskIdentifier()) == this);
@@ -221,17 +218,17 @@
m_session.m_dataTaskMap.remove(taskIdentifier());
}
-void NetworkingDataTask::suspend()
+void NetworkDataTask::cancel()
{
- [m_task suspend];
+ [m_task cancel];
}
-void NetworkingDataTask::resume()
+void NetworkDataTask::resume()
{
[m_task resume];
}
-uint64_t NetworkingDataTask::taskIdentifier()
+uint64_t NetworkDataTask::taskIdentifier()
{
return [m_task taskIdentifier];
}
Modified: trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm (191997 => 191998)
--- trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm 2015-11-04 00:50:27 UTC (rev 191998)
@@ -27,6 +27,7 @@
#import "RemoteNetworkingContext.h"
#import "NetworkProcess.h"
+#import "NetworkSession.h"
#import "SessionTracker.h"
#import "WebErrors.h"
#import <WebCore/ResourceError.h>
@@ -55,7 +56,7 @@
NetworkStorageSession& RemoteNetworkingContext::storageSession() const
{
- NetworkStorageSession* session = SessionTracker::session(m_sessionID);
+ NetworkStorageSession* session = SessionTracker::storageSession(m_sessionID);
if (session)
return *session;
// Some requests may still be coming shortly after NetworkProcess was told to destroy its session.
@@ -89,11 +90,15 @@
{
ASSERT(sessionID.isEphemeral());
- if (SessionTracker::session(sessionID))
+ if (SessionTracker::storageSession(sessionID))
return;
ASSERT(!SessionTracker::getIdentifierBase().isNull());
- SessionTracker::setSession(sessionID, NetworkStorageSession::createPrivateBrowsingSession(SessionTracker::getIdentifierBase() + '.' + String::number(sessionID.sessionID())));
+ SessionTracker::setSession(sessionID, NetworkStorageSession::createPrivateBrowsingSession(SessionTracker::getIdentifierBase() + '.' + String::number(sessionID.sessionID()))
+#if USE(NETWORK_SESSION)
+ , std::make_unique<NetworkSession>(NetworkSession::Type::Ephemeral, sessionID)
+#endif
+ );
}
}
Modified: trunk/Source/WebKit2/Shared/SessionTracker.cpp (191997 => 191998)
--- trunk/Source/WebKit2/Shared/SessionTracker.cpp 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/Shared/SessionTracker.cpp 2015-11-04 00:50:27 UTC (rev 191998)
@@ -26,6 +26,8 @@
#include "config.h"
#include "SessionTracker.h"
+#include "NetworkSession.h"
+#include <WebCore/NetworkStorageSession.h>
#include <wtf/NeverDestroyed.h>
#include <wtf/RunLoop.h>
@@ -33,12 +35,12 @@
namespace WebKit {
-static HashMap<SessionID, std::unique_ptr<NetworkStorageSession>>& staticSessionMap()
+static HashMap<SessionID, std::unique_ptr<NetworkStorageSession>>& staticStorageSessionMap()
{
ASSERT(RunLoop::isMain());
static NeverDestroyed<HashMap<SessionID, std::unique_ptr<NetworkStorageSession>>> map;
- return map.get();
+ return map;
}
static HashMap<const NetworkStorageSession*, SessionID>& storageSessionToID()
@@ -46,7 +48,7 @@
ASSERT(RunLoop::isMain());
static NeverDestroyed<HashMap<const NetworkStorageSession*, SessionID>> map;
- return map.get();
+ return map;
}
static String& identifierBase()
@@ -57,9 +59,9 @@
return base;
}
-const HashMap<SessionID, std::unique_ptr<NetworkStorageSession>>& SessionTracker::sessionMap()
+const HashMap<SessionID, std::unique_ptr<NetworkStorageSession>>& SessionTracker::storageSessionMap()
{
- return staticSessionMap();
+ return staticStorageSessionMap();
}
const String& SessionTracker::getIdentifierBase()
@@ -67,12 +69,29 @@
return identifierBase();
}
-NetworkStorageSession* SessionTracker::session(SessionID sessionID)
+NetworkStorageSession* SessionTracker::storageSession(SessionID sessionID)
{
if (sessionID == SessionID::defaultSessionID())
return &NetworkStorageSession::defaultStorageSession();
+ return staticStorageSessionMap().get(sessionID);
+}
+
+#if USE(NETWORK_SESSION)
+static HashMap<SessionID, std::unique_ptr<NetworkSession>>& staticSessionMap()
+{
+ ASSERT(RunLoop::isMain());
+
+ static NeverDestroyed<HashMap<SessionID, std::unique_ptr<NetworkSession>>> map;
+ return map;
+}
+
+NetworkSession* SessionTracker::networkSession(SessionID sessionID)
+{
+ if (sessionID == SessionID::defaultSessionID())
+ return &NetworkSession::defaultSession();
return staticSessionMap().get(sessionID);
}
+#endif
SessionID SessionTracker::sessionID(const NetworkStorageSession& session)
{
@@ -81,19 +100,32 @@
return storageSessionToID().get(&session);
}
-void SessionTracker::setSession(SessionID sessionID, std::unique_ptr<NetworkStorageSession> session)
+void SessionTracker::setSession(SessionID sessionID, std::unique_ptr<NetworkStorageSession> storageSession
+#if USE(NETWORK_SESSION)
+ , std::unique_ptr<NetworkSession> session
+#endif
+)
{
+ ASSERT(storageSession);
ASSERT(sessionID != SessionID::defaultSessionID());
- storageSessionToID().set(session.get(), sessionID);
+ storageSessionToID().set(storageSession.get(), sessionID);
+ staticStorageSessionMap().set(sessionID, WTF::move(storageSession));
+#if USE(NETWORK_SESSION)
+ ASSERT(session);
staticSessionMap().set(sessionID, WTF::move(session));
+#endif
}
void SessionTracker::destroySession(SessionID sessionID)
{
ASSERT(RunLoop::isMain());
- if (staticSessionMap().contains(sessionID)) {
- storageSessionToID().remove(session(sessionID));
+ if (staticStorageSessionMap().contains(sessionID)) {
+#if USE(NETWORK_SESSION)
+ ASSERT_WITH_MESSAGE(staticSessionMap().contains(sessionID), "NetworkSessions and NetworkStorageSessions should always be created, deleted, and managed as pairs");
staticSessionMap().remove(sessionID);
+#endif
+ storageSessionToID().remove(storageSession(sessionID));
+ staticStorageSessionMap().remove(sessionID);
}
}
Modified: trunk/Source/WebKit2/Shared/SessionTracker.h (191997 => 191998)
--- trunk/Source/WebKit2/Shared/SessionTracker.h 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/Shared/SessionTracker.h 2015-11-04 00:50:27 UTC (rev 191998)
@@ -26,25 +26,40 @@
#ifndef SessionTracker_h
#define SessionTracker_h
-#include <WebCore/NetworkStorageSession.h>
+namespace WebCore {
+class NetworkStorageSession;
+}
+
#include <WebCore/SessionID.h>
#include <wtf/HashMap.h>
#include <wtf/Noncopyable.h>
-#include <wtf/text/CString.h>
+#include <wtf/text/WTFString.h>
namespace WebKit {
+class NetworkSession;
+
class SessionTracker {
WTF_MAKE_NONCOPYABLE(SessionTracker);
public:
- // FIXME: sessionMap()'s returned map does not include default session.
- static const HashMap<WebCore::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>>& sessionMap();
+ // FIXME: storageSessionMap()'s returned map does not include default session.
+ static const HashMap<WebCore::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>>& storageSessionMap();
+
static const String& getIdentifierBase();
- static WebCore::NetworkStorageSession* session(WebCore::SessionID);
+ static WebCore::NetworkStorageSession* storageSession(WebCore::SessionID);
static WebCore::SessionID sessionID(const WebCore::NetworkStorageSession&);
- static void setSession(WebCore::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>);
+ static void setSession(WebCore::SessionID, std::unique_ptr<WebCore::NetworkStorageSession>
+#if USE(NETWORK_SESSION)
+ , std::unique_ptr<NetworkSession>
+#endif
+ );
static void destroySession(WebCore::SessionID);
static void setIdentifierBase(const String&);
+
+#if USE(NETWORK_SESSION)
+ // FIXME: A NetworkSession and a NetworkStorageSession should be the same object once NETWORK_SESSION is used by default.
+ static NetworkSession* networkSession(WebCore::SessionID);
+#endif
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm (191997 => 191998)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm 2015-11-04 00:50:27 UTC (rev 191998)
@@ -26,6 +26,7 @@
#include "config.h"
#include "WebFrameNetworkingContext.h"
+#include "NetworkSession.h"
#include "SessionTracker.h"
#include "WebCookieManager.h"
#include "WebPage.h"
@@ -47,7 +48,7 @@
{
ASSERT(sessionID.isEphemeral());
- if (SessionTracker::session(sessionID))
+ if (SessionTracker::storageSession(sessionID))
return;
String base;
@@ -56,7 +57,11 @@
else
base = SessionTracker::getIdentifierBase();
- SessionTracker::setSession(sessionID, NetworkStorageSession::createPrivateBrowsingSession(base + '.' + String::number(sessionID.sessionID())));
+ SessionTracker::setSession(sessionID, NetworkStorageSession::createPrivateBrowsingSession(base + '.' + String::number(sessionID.sessionID()))
+#if USE(NETWORK_SESSION)
+ , std::make_unique<NetworkSession>(NetworkSession::Type::Ephemeral, sessionID)
+#endif
+ );
}
void WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy policy)
@@ -66,7 +71,7 @@
if (RetainPtr<CFHTTPCookieStorageRef> cookieStorage = NetworkStorageSession::defaultStorageSession().cookieStorage())
WKSetHTTPCookieAcceptPolicy(cookieStorage.get(), policy);
- for (const auto& session : SessionTracker::sessionMap().values()) {
+ for (const auto& session : SessionTracker::storageSessionMap().values()) {
if (session)
WKSetHTTPCookieAcceptPolicy(session->cookieStorage().get(), policy);
}
@@ -110,8 +115,8 @@
{
ASSERT(RunLoop::isMain());
if (frame()) {
- if (NetworkStorageSession* session = SessionTracker::session(frame()->page()->sessionID()))
- return *session;
+ if (auto* storageSession = SessionTracker::storageSession(frame()->page()->sessionID()))
+ return *storageSession;
// Some requests may still be coming shortly after WebProcess was told to destroy its session.
LOG_ERROR("Invalid session ID. Please file a bug unless you just disabled private browsing, in which case it's an expected race.");
}
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp (191997 => 191998)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp 2015-11-04 00:43:58 UTC (rev 191997)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp 2015-11-04 00:50:27 UTC (rev 191998)
@@ -45,7 +45,7 @@
{
ASSERT(isMainThread());
- if (SessionTracker::session(sessionID))
+ if (SessionTracker::storageSession(sessionID))
return;
SessionTracker::setSession(sessionID, NetworkStorageSession::createPrivateBrowsingSession(String::number(sessionID.sessionID())));
@@ -72,7 +72,7 @@
SoupNetworkSession& soupSession = NetworkStorageSession::defaultStorageSession().soupNetworkSession();
soup_cookie_jar_set_accept_policy(soupSession.cookieJar(), soupPolicy);
- for (const auto& session : SessionTracker::sessionMap().values()) {
+ for (const auto& session : SessionTracker::storageSessionMap().values()) {
if (session)
soup_cookie_jar_set_accept_policy(session->soupNetworkSession().cookieJar(), soupPolicy);
}
@@ -86,7 +86,7 @@
NetworkStorageSession& WebFrameNetworkingContext::storageSession() const
{
if (frame() && frame()->page()->usesEphemeralSession())
- return *SessionTracker::session(SessionID::legacyPrivateSessionID());
+ return *SessionTracker::storageSession(SessionID::legacyPrivateSessionID());
return NetworkStorageSession::defaultStorageSession();
}