Title: [191998] trunk/Source/WebKit2
Revision
191998
Author
achristen...@apple.com
Date
2015-11-03 16:50:27 -0800 (Tue, 03 Nov 2015)

Log Message

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):

Modified Paths

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();
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to