<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[191998] trunk/Source/WebKit2</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/191998">191998</a></dd>
<dt>Author</dt> <dd>achristensen@apple.com</dd>
<dt>Date</dt> <dd>2015-11-03 16:50:27 -0800 (Tue, 03 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>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):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkConnectionToWebProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkConnectionToWebProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkResourceLoadercpp">trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkResourceLoaderh">trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkSessionh">trunk/Source/WebKit2/NetworkProcess/NetworkSession.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoamm">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessmacRemoteNetworkingContextmm">trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedSessionTrackercpp">trunk/Source/WebKit2/Shared/SessionTracker.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedSessionTrackerh">trunk/Source/WebKit2/Shared/SessionTracker.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportmacWebFrameNetworkingContextmm">trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportsoupWebFrameNetworkingContextcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp</a></li>
</ul>

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

</body>
</html>