<!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>[207813] 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/207813">207813</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2016-10-25 03:25:29 -0700 (Tue, 25 Oct 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>NetworkSession: switch to use subclasses for NetworkSession and NetworkDataTask implementations
https://bugs.webkit.org/show_bug.cgi?id=163777

Reviewed by Alex Christensen.

The subclass model allows us to choose the implementation at run time, so we could add other implementations
like a mock network class to measure performance, and even one for blobs and finally get rid of ResourceHandle
in WebKit2.

* CMakeLists.txt: Add new files to compilation.
* NetworkProcess/NetworkDataTask.cpp: Added.
(WebKit::NetworkDataTask::create): Create a NetworkDataTaskCocoa or NetworkDataTaskSoup.
(WebKit::NetworkDataTask::NetworkDataTask): Move common code from NetworkDataTaskCocoa and NetworkDataTaskSoup
here to handle the early failures.
(WebKit::NetworkDataTask::~NetworkDataTask):
(WebKit::NetworkDataTask::scheduleFailure):
(WebKit::NetworkDataTask::failureTimerFired):
* NetworkProcess/NetworkDataTask.h: Remove platform specific members.
(WebKit::NetworkDataTask::setPendingDownloadLocation): Make it virtual and set the m_pendingDownloadLocation.
(WebKit::NetworkDataTask::suggestedFilename): Make it virtual and const with a default implementation.
(WebKit::NetworkDataTask::setSuggestedFilename): Ditto.
(WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost): Ditto.
* NetworkProcess/NetworkLoad.cpp: Include NetworkDataTaskCocoa.h.
* NetworkProcess/NetworkLoad.h: Include NetworkDataTask.h instead of NetworkSession.h.
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::NetworkProcess): Use NetworkSessionCocoa.
* NetworkProcess/NetworkSession.cpp:
(WebKit::NetworkSession::create): Create a NetworkSessionCocoa or NetworkSessionSoup.
(WebKit::NetworkSession::defaultSession): In case of cocoa use NetworkSessionCocoa::defaultSession() because of
the custom protocol manager, otherwise simply create a default session.
(WebKit::NetworkSession::networkStorageSession): Move common code from NetworkSessionCocoa and
NetworkSessionSoup here.
(WebKit::NetworkSession::NetworkSession):
(WebKit::NetworkSession::~NetworkSession):
* NetworkProcess/NetworkSession.h: Remove platform specific members.
(WebKit::NetworkSession::invalidateAndCancel): Make it virtual.
(WebKit::NetworkSession::clearCredentials): Ditto.
* NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp: Include NetworkSession.h.
* NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Added.
* NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
(WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
(WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
(WebKit::NetworkDataTaskCocoa::didSendData):
(WebKit::NetworkDataTaskCocoa::didReceiveChallenge):
(WebKit::NetworkDataTaskCocoa::didCompleteWithError):
(WebKit::NetworkDataTaskCocoa::didReceiveResponse):
(WebKit::NetworkDataTaskCocoa::didReceiveData):
(WebKit::NetworkDataTaskCocoa::didBecomeDownload):
(WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
(WebKit::NetworkDataTaskCocoa::setPendingDownloadLocation):
(WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):
(WebKit::NetworkDataTaskCocoa::transferSandboxExtensionToDownload):
(WebKit::NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost):
(WebKit::NetworkDataTaskCocoa::suggestedFilename):
(WebKit::NetworkDataTaskCocoa::cancel):
(WebKit::NetworkDataTaskCocoa::resume):
(WebKit::NetworkDataTaskCocoa::suspend):
(WebKit::NetworkDataTaskCocoa::state):
* NetworkProcess/cocoa/NetworkProcessCocoa.mm:
(WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
* NetworkProcess/cocoa/NetworkSessionCocoa.h: Added.
* NetworkProcess/cocoa/NetworkSessionCocoa.mm:
(-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
(-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
(WebKit::configurationForSessionID):
(WebKit::NetworkSessionCocoa::setCustomProtocolManager):
(WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData):
(WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier):
(WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
(WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType):
(WebKit::NetworkSessionCocoa::create):
(WebKit::NetworkSessionCocoa::defaultSession):
(WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
(WebKit::NetworkSessionCocoa::~NetworkSessionCocoa):
(WebKit::NetworkSessionCocoa::invalidateAndCancel):
(WebKit::NetworkSessionCocoa::clearCredentials):
(WebKit::NetworkSessionCocoa::dataTaskForIdentifier):
(WebKit::NetworkSessionCocoa::addDownloadID):
(WebKit::NetworkSessionCocoa::downloadID):
(WebKit::NetworkSessionCocoa::takeDownloadID):
* NetworkProcess/mac/RemoteNetworkingContext.mm:
(WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
* NetworkProcess/soup/NetworkDataTaskSoup.cpp:
(WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
(WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
(WebKit::NetworkDataTaskSoup::suggestedFilename):
(WebKit::NetworkDataTaskSoup::setPendingDownloadLocation):
(WebKit::NetworkDataTaskSoup::createRequest):
(WebKit::NetworkDataTaskSoup::clearRequest):
(WebKit::NetworkDataTaskSoup::resume):
(WebKit::NetworkDataTaskSoup::suspend):
(WebKit::NetworkDataTaskSoup::cancel):
(WebKit::NetworkDataTaskSoup::invalidateAndCancel):
(WebKit::NetworkDataTaskSoup::state):
(WebKit::NetworkDataTaskSoup::timeoutFired):
(WebKit::NetworkDataTaskSoup::startTimeout):
(WebKit::NetworkDataTaskSoup::stopTimeout):
(WebKit::NetworkDataTaskSoup::sendRequestCallback):
(WebKit::NetworkDataTaskSoup::didSendRequest):
(WebKit::NetworkDataTaskSoup::didReceiveResponse):
(WebKit::NetworkDataTaskSoup::tlsErrorsChangedCallback):
(WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
(WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest):
(WebKit::NetworkDataTaskSoup::authenticateCallback):
(WebKit::NetworkDataTaskSoup::authenticate):
(WebKit::NetworkDataTaskSoup::continueAuthenticate):
(WebKit::NetworkDataTaskSoup::skipInputStreamForRedirectionCallback):
(WebKit::NetworkDataTaskSoup::skipInputStreamForRedirection):
(WebKit::NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection):
(WebKit::NetworkDataTaskSoup::shouldStartHTTPRedirection):
(WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
(WebKit::NetworkDataTaskSoup::readCallback):
(WebKit::NetworkDataTaskSoup::read):
(WebKit::NetworkDataTaskSoup::didRead):
(WebKit::NetworkDataTaskSoup::didFinishRead):
(WebKit::NetworkDataTaskSoup::requestNextPartCallback):
(WebKit::NetworkDataTaskSoup::requestNextPart):
(WebKit::NetworkDataTaskSoup::didRequestNextPart):
(WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
(WebKit::NetworkDataTaskSoup::gotHeadersCallback):
(WebKit::NetworkDataTaskSoup::didGetHeaders):
(WebKit::NetworkDataTaskSoup::wroteBodyDataCallback):
(WebKit::NetworkDataTaskSoup::didWriteBodyData):
(WebKit::NetworkDataTaskSoup::download):
(WebKit::NetworkDataTaskSoup::writeDownloadCallback):
(WebKit::NetworkDataTaskSoup::writeDownload):
(WebKit::NetworkDataTaskSoup::didWriteDownload):
(WebKit::NetworkDataTaskSoup::didFinishDownload):
(WebKit::NetworkDataTaskSoup::didFailDownload):
(WebKit::NetworkDataTaskSoup::cleanDownloadFiles):
(WebKit::NetworkDataTaskSoup::didFail):
(WebKit::NetworkDataTaskSoup::networkEventCallback):
(WebKit::NetworkDataTaskSoup::networkEvent):
(WebKit::NetworkDataTaskSoup::startingCallback):
(WebKit::NetworkDataTaskSoup::requestStartedCallback):
(WebKit::NetworkDataTaskSoup::didStartRequest):
(WebKit::NetworkDataTaskSoup::restartedCallback):
(WebKit::NetworkDataTaskSoup::didRestart):
* NetworkProcess/soup/NetworkDataTaskSoup.h: Added.
* NetworkProcess/soup/NetworkSessionSoup.cpp:
(WebKit::NetworkSessionSoup::NetworkSessionSoup):
(WebKit::NetworkSessionSoup::~NetworkSessionSoup):
(WebKit::NetworkSessionSoup::soupSession):
(WebKit::NetworkSessionSoup::invalidateAndCancel):
* NetworkProcess/soup/NetworkSessionSoup.h: Added.
* NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
(WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
* PlatformEfl.cmake: Add new files to compilation.
* PlatformGTK.cmake: Ditto.
* WebKit2.xcodeproj/project.pbxproj: Ditto.
* WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
(WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
* WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
(WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2CMakeListstxt">trunk/Source/WebKit2/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkDataTaskh">trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadcpp">trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkLoadh">trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkSessionh">trunk/Source/WebKit2/NetworkProcess/NetworkSession.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadcpp">trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoamm">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkProcessCocoamm">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm</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="#trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSoupcpp">trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkSessionSoupcpp">trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupRemoteNetworkingContextSoupcpp">trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp</a></li>
<li><a href="#trunkSourceWebKit2PlatformEflcmake">trunk/Source/WebKit2/PlatformEfl.cmake</a></li>
<li><a href="#trunkSourceWebKit2PlatformGTKcmake">trunk/Source/WebKit2/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj">trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj</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>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkDataTaskcpp">trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkSessioncpp">trunk/Source/WebKit2/NetworkProcess/NetworkSession.cpp</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoah">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoah">trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSouph">trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcesssoupNetworkSessionSouph">trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2CMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/CMakeLists.txt (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/CMakeLists.txt        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/CMakeLists.txt        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -182,10 +182,12 @@
</span><span class="cx"> 
</span><span class="cx"> set(NetworkProcess_COMMON_SOURCES
</span><span class="cx">     NetworkProcess/NetworkConnectionToWebProcess.cpp
</span><ins>+    NetworkProcess/NetworkDataTask.cpp
</ins><span class="cx">     NetworkProcess/NetworkLoad.cpp
</span><span class="cx">     NetworkProcess/NetworkProcess.cpp
</span><span class="cx">     NetworkProcess/NetworkProcessPlatformStrategies.cpp
</span><span class="cx">     NetworkProcess/NetworkResourceLoader.cpp
</span><ins>+    NetworkProcess/NetworkSession.cpp
</ins><span class="cx"> 
</span><span class="cx">     NetworkProcess/FileAPI/NetworkBlobRegistry.cpp
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/ChangeLog        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -1,3 +1,160 @@
</span><ins>+2016-10-25  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        NetworkSession: switch to use subclasses for NetworkSession and NetworkDataTask implementations
+        https://bugs.webkit.org/show_bug.cgi?id=163777
+
+        Reviewed by Alex Christensen.
+
+        The subclass model allows us to choose the implementation at run time, so we could add other implementations
+        like a mock network class to measure performance, and even one for blobs and finally get rid of ResourceHandle
+        in WebKit2.
+
+        * CMakeLists.txt: Add new files to compilation.
+        * NetworkProcess/NetworkDataTask.cpp: Added.
+        (WebKit::NetworkDataTask::create): Create a NetworkDataTaskCocoa or NetworkDataTaskSoup.
+        (WebKit::NetworkDataTask::NetworkDataTask): Move common code from NetworkDataTaskCocoa and NetworkDataTaskSoup
+        here to handle the early failures.
+        (WebKit::NetworkDataTask::~NetworkDataTask):
+        (WebKit::NetworkDataTask::scheduleFailure):
+        (WebKit::NetworkDataTask::failureTimerFired):
+        * NetworkProcess/NetworkDataTask.h: Remove platform specific members.
+        (WebKit::NetworkDataTask::setPendingDownloadLocation): Make it virtual and set the m_pendingDownloadLocation.
+        (WebKit::NetworkDataTask::suggestedFilename): Make it virtual and const with a default implementation.
+        (WebKit::NetworkDataTask::setSuggestedFilename): Ditto.
+        (WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost): Ditto.
+        * NetworkProcess/NetworkLoad.cpp: Include NetworkDataTaskCocoa.h.
+        * NetworkProcess/NetworkLoad.h: Include NetworkDataTask.h instead of NetworkSession.h.
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::NetworkProcess): Use NetworkSessionCocoa.
+        * NetworkProcess/NetworkSession.cpp:
+        (WebKit::NetworkSession::create): Create a NetworkSessionCocoa or NetworkSessionSoup.
+        (WebKit::NetworkSession::defaultSession): In case of cocoa use NetworkSessionCocoa::defaultSession() because of
+        the custom protocol manager, otherwise simply create a default session.
+        (WebKit::NetworkSession::networkStorageSession): Move common code from NetworkSessionCocoa and
+        NetworkSessionSoup here.
+        (WebKit::NetworkSession::NetworkSession):
+        (WebKit::NetworkSession::~NetworkSession):
+        * NetworkProcess/NetworkSession.h: Remove platform specific members.
+        (WebKit::NetworkSession::invalidateAndCancel): Make it virtual.
+        (WebKit::NetworkSession::clearCredentials): Ditto.
+        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp: Include NetworkSession.h.
+        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Added.
+        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
+        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
+        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
+        (WebKit::NetworkDataTaskCocoa::didSendData):
+        (WebKit::NetworkDataTaskCocoa::didReceiveChallenge):
+        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
+        (WebKit::NetworkDataTaskCocoa::didReceiveResponse):
+        (WebKit::NetworkDataTaskCocoa::didReceiveData):
+        (WebKit::NetworkDataTaskCocoa::didBecomeDownload):
+        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
+        (WebKit::NetworkDataTaskCocoa::setPendingDownloadLocation):
+        (WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):
+        (WebKit::NetworkDataTaskCocoa::transferSandboxExtensionToDownload):
+        (WebKit::NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost):
+        (WebKit::NetworkDataTaskCocoa::suggestedFilename):
+        (WebKit::NetworkDataTaskCocoa::cancel):
+        (WebKit::NetworkDataTaskCocoa::resume):
+        (WebKit::NetworkDataTaskCocoa::suspend):
+        (WebKit::NetworkDataTaskCocoa::state):
+        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
+        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
+        * NetworkProcess/cocoa/NetworkSessionCocoa.h: Added.
+        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
+        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
+        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
+        (WebKit::configurationForSessionID):
+        (WebKit::NetworkSessionCocoa::setCustomProtocolManager):
+        (WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData):
+        (WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier):
+        (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
+        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType):
+        (WebKit::NetworkSessionCocoa::create):
+        (WebKit::NetworkSessionCocoa::defaultSession):
+        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
+        (WebKit::NetworkSessionCocoa::~NetworkSessionCocoa):
+        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
+        (WebKit::NetworkSessionCocoa::clearCredentials):
+        (WebKit::NetworkSessionCocoa::dataTaskForIdentifier):
+        (WebKit::NetworkSessionCocoa::addDownloadID):
+        (WebKit::NetworkSessionCocoa::downloadID):
+        (WebKit::NetworkSessionCocoa::takeDownloadID):
+        * NetworkProcess/mac/RemoteNetworkingContext.mm:
+        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
+        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
+        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
+        (WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
+        (WebKit::NetworkDataTaskSoup::suggestedFilename):
+        (WebKit::NetworkDataTaskSoup::setPendingDownloadLocation):
+        (WebKit::NetworkDataTaskSoup::createRequest):
+        (WebKit::NetworkDataTaskSoup::clearRequest):
+        (WebKit::NetworkDataTaskSoup::resume):
+        (WebKit::NetworkDataTaskSoup::suspend):
+        (WebKit::NetworkDataTaskSoup::cancel):
+        (WebKit::NetworkDataTaskSoup::invalidateAndCancel):
+        (WebKit::NetworkDataTaskSoup::state):
+        (WebKit::NetworkDataTaskSoup::timeoutFired):
+        (WebKit::NetworkDataTaskSoup::startTimeout):
+        (WebKit::NetworkDataTaskSoup::stopTimeout):
+        (WebKit::NetworkDataTaskSoup::sendRequestCallback):
+        (WebKit::NetworkDataTaskSoup::didSendRequest):
+        (WebKit::NetworkDataTaskSoup::didReceiveResponse):
+        (WebKit::NetworkDataTaskSoup::tlsErrorsChangedCallback):
+        (WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
+        (WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest):
+        (WebKit::NetworkDataTaskSoup::authenticateCallback):
+        (WebKit::NetworkDataTaskSoup::authenticate):
+        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
+        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirectionCallback):
+        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirection):
+        (WebKit::NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection):
+        (WebKit::NetworkDataTaskSoup::shouldStartHTTPRedirection):
+        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
+        (WebKit::NetworkDataTaskSoup::readCallback):
+        (WebKit::NetworkDataTaskSoup::read):
+        (WebKit::NetworkDataTaskSoup::didRead):
+        (WebKit::NetworkDataTaskSoup::didFinishRead):
+        (WebKit::NetworkDataTaskSoup::requestNextPartCallback):
+        (WebKit::NetworkDataTaskSoup::requestNextPart):
+        (WebKit::NetworkDataTaskSoup::didRequestNextPart):
+        (WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
+        (WebKit::NetworkDataTaskSoup::gotHeadersCallback):
+        (WebKit::NetworkDataTaskSoup::didGetHeaders):
+        (WebKit::NetworkDataTaskSoup::wroteBodyDataCallback):
+        (WebKit::NetworkDataTaskSoup::didWriteBodyData):
+        (WebKit::NetworkDataTaskSoup::download):
+        (WebKit::NetworkDataTaskSoup::writeDownloadCallback):
+        (WebKit::NetworkDataTaskSoup::writeDownload):
+        (WebKit::NetworkDataTaskSoup::didWriteDownload):
+        (WebKit::NetworkDataTaskSoup::didFinishDownload):
+        (WebKit::NetworkDataTaskSoup::didFailDownload):
+        (WebKit::NetworkDataTaskSoup::cleanDownloadFiles):
+        (WebKit::NetworkDataTaskSoup::didFail):
+        (WebKit::NetworkDataTaskSoup::networkEventCallback):
+        (WebKit::NetworkDataTaskSoup::networkEvent):
+        (WebKit::NetworkDataTaskSoup::startingCallback):
+        (WebKit::NetworkDataTaskSoup::requestStartedCallback):
+        (WebKit::NetworkDataTaskSoup::didStartRequest):
+        (WebKit::NetworkDataTaskSoup::restartedCallback):
+        (WebKit::NetworkDataTaskSoup::didRestart):
+        * NetworkProcess/soup/NetworkDataTaskSoup.h: Added.
+        * NetworkProcess/soup/NetworkSessionSoup.cpp:
+        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
+        (WebKit::NetworkSessionSoup::~NetworkSessionSoup):
+        (WebKit::NetworkSessionSoup::soupSession):
+        (WebKit::NetworkSessionSoup::invalidateAndCancel):
+        * NetworkProcess/soup/NetworkSessionSoup.h: Added.
+        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
+        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
+        * PlatformEfl.cmake: Add new files to compilation.
+        * PlatformGTK.cmake: Ditto.
+        * WebKit2.xcodeproj/project.pbxproj: Ditto.
+        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
+        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
+        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
+        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Ditto.
+
</ins><span class="cx"> 2016-10-25  Antti Koivisto  &lt;antti@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add support for introducing simulated latency in network process
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkDataTaskcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.cpp (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.cpp                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,114 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;NetworkDataTask.h&quot;
+
+#if USE(NETWORK_SESSION)
+
+#include &quot;NetworkSession.h&quot;
+#include &lt;wtf/MainThread.h&gt;
+
+#if PLATFORM(COCOA)
+#include &quot;NetworkDataTaskCocoa.h&quot;
+#endif
+#if USE(SOUP)
+#include &quot;NetworkDataTaskSoup.h&quot;
+#endif
+
+using namespace WebCore;
+
+namespace WebKit {
+
+Ref&lt;NetworkDataTask&gt; NetworkDataTask::create(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const ResourceRequest&amp; request, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+{
+#if PLATFORM(COCOA)
+    return NetworkDataTaskCocoa::create(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect);
+#endif
+#if USE(SOUP)
+    return NetworkDataTaskSoup::create(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect);
+#endif
+}
+
+NetworkDataTask::NetworkDataTask(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const ResourceRequest&amp; requestWithCredentials, StoredCredentials storedCredentials, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+    : m_failureTimer(*this, &amp;NetworkDataTask::failureTimerFired)
+    , m_session(session)
+    , m_client(&amp;client)
+    , m_storedCredentials(storedCredentials)
+    , m_lastHTTPMethod(requestWithCredentials.httpMethod())
+    , m_firstRequest(requestWithCredentials)
+    , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
+{
+    ASSERT(isMainThread());
+
+    if (!requestWithCredentials.url().isValid()) {
+        scheduleFailure(InvalidURLFailure);
+        return;
+    }
+
+    if (!portAllowed(requestWithCredentials.url())) {
+        scheduleFailure(BlockedFailure);
+        return;
+    }
+}
+
+NetworkDataTask::~NetworkDataTask()
+{
+    ASSERT(isMainThread());
+    ASSERT(!m_client);
+}
+
+void NetworkDataTask::scheduleFailure(FailureType type)
+{
+    ASSERT(type != NoFailure);
+    m_scheduledFailureType = type;
+    m_failureTimer.startOneShot(0);
+}
+
+void NetworkDataTask::failureTimerFired()
+{
+    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
+
+    switch (m_scheduledFailureType) {
+    case BlockedFailure:
+        m_scheduledFailureType = NoFailure;
+        if (m_client)
+            m_client-&gt;wasBlocked();
+        return;
+    case InvalidURLFailure:
+        m_scheduledFailureType = NoFailure;
+        if (m_client)
+            m_client-&gt;cannotShowURL();
+        return;
+    case NoFailure:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+    ASSERT_NOT_REACHED();
+}
+
+} // namespace WebKit
+
+#endif // USE(NETWORK_SESSION)
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkDataTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -36,25 +36,11 @@
</span><span class="cx"> #include &lt;WebCore/ResourceRequest.h&gt;
</span><span class="cx"> #include &lt;WebCore/Timer.h&gt;
</span><span class="cx"> #include &lt;wtf/Function.h&gt;
</span><del>-#include &lt;wtf/RetainPtr.h&gt;
</del><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><del>-#if PLATFORM(COCOA)
-OBJC_CLASS NSURLSessionDataTask;
-#endif
-
-#if USE(SOUP)
-#include &lt;WebCore/ProtectionSpace.h&gt;
-#include &lt;WebCore/ResourceResponse.h&gt;
-#include &lt;wtf/RunLoop.h&gt;
-#include &lt;wtf/glib/GRefPtr.h&gt;
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> class AuthenticationChallenge;
</span><del>-class Credential;
</del><span class="cx"> class ResourceError;
</span><del>-class ResourceRequest;
</del><span class="cx"> class ResourceResponse;
</span><span class="cx"> class SharedBuffer;
</span><span class="cx"> }
</span><span class="lines">@@ -86,17 +72,15 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> class NetworkDataTask : public RefCounted&lt;NetworkDataTask&gt; {
</span><del>-    friend class NetworkSession;
</del><span class="cx"> public:
</span><del>-    static Ref&lt;NetworkDataTask&gt; create(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const WebCore::ResourceRequest&amp; request, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
-    {
-        return adoptRef(*new NetworkDataTask(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
-    }
-    
-    void suspend();
-    void cancel();
-    void resume();
</del><ins>+    static Ref&lt;NetworkDataTask&gt; create(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
</ins><span class="cx"> 
</span><ins>+    virtual ~NetworkDataTask();
+
+    virtual void suspend() = 0;
+    virtual void cancel() = 0;
+    virtual void resume() = 0;
+
</ins><span class="cx">     enum class State {
</span><span class="cx">         Running,
</span><span class="cx">         Suspended,
</span><span class="lines">@@ -103,26 +87,11 @@
</span><span class="cx">         Canceling,
</span><span class="cx">         Completed
</span><span class="cx">     };
</span><del>-    State state() const;
</del><ins>+    virtual State state() const = 0;
</ins><span class="cx"> 
</span><del>-    typedef uint64_t TaskIdentifier;
-    
-    ~NetworkDataTask();
-
-#if PLATFORM(COCOA)
-    void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend);
-    void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp;);
-    void didCompleteWithError(const WebCore::ResourceError&amp;);
-    void didReceiveResponse(WebCore::ResourceResponse&amp;&amp;, ResponseCompletionHandler&amp;&amp;);
-    void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;);
-    void didBecomeDownload();
-
-    void willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp;, RedirectCompletionHandler&amp;&amp;);
-    void transferSandboxExtensionToDownload(Download&amp;);
-#endif
</del><span class="cx">     NetworkDataTaskClient* client() const { return m_client; }
</span><span class="cx">     void clearClient() { m_client = nullptr; }
</span><del>-    
</del><ins>+
</ins><span class="cx">     DownloadID pendingDownloadID() const { return m_pendingDownloadID; }
</span><span class="cx">     PendingDownload* pendingDownload() const { return m_pendingDownload; }
</span><span class="cx">     void setPendingDownloadID(DownloadID downloadID)
</span><span class="lines">@@ -136,87 +105,31 @@
</span><span class="cx">         ASSERT(!m_pendingDownload);
</span><span class="cx">         m_pendingDownload = &amp;pendingDownload;
</span><span class="cx">     }
</span><del>-    void setPendingDownloadLocation(const String&amp; filename, const SandboxExtension::Handle&amp;, bool allowOverwrite);
</del><ins>+
+    virtual void setPendingDownloadLocation(const String&amp; filename, const SandboxExtension::Handle&amp;, bool /*allowOverwrite*/) { m_pendingDownloadLocation = filename; }
</ins><span class="cx">     const String&amp; pendingDownloadLocation() const { return m_pendingDownloadLocation; }
</span><span class="cx">     bool isDownload() const { return !!m_pendingDownloadID.downloadID(); }
</span><span class="cx"> 
</span><span class="cx">     const WebCore::ResourceRequest&amp; firstRequest() const { return m_firstRequest; }
</span><del>-    String suggestedFilename();
-    void setSuggestedFilename(const String&amp;);
-    bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp;);
-    
-private:
-    NetworkDataTask(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
</del><ins>+    virtual String suggestedFilename() const { return String(); }
+    void setSuggestedFilename(const String&amp; suggestedName) { m_suggestedFilename = suggestedName; }
+    virtual bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp;) { return false; }
</ins><span class="cx"> 
</span><del>-    bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&amp;, const ChallengeCompletionHandler&amp;);
</del><ins>+protected:
+    NetworkDataTask(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
</ins><span class="cx"> 
</span><del>-#if USE(SOUP)
-    void timeoutFired();
-    void startTimeout();
-    void stopTimeout();
-    void invalidateAndCancel();
-    void createRequest(const WebCore::ResourceRequest&amp;);
-    void clearRequest();
-    static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTask*);
-    void didSendRequest(GRefPtr&lt;GInputStream&gt;&amp;&amp;);
-    void didReceiveResponse();
-    static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTask*);
-    void tlsErrorsChanged();
-    void applyAuthenticationToRequest(WebCore::ResourceRequest&amp;);
-    static void authenticateCallback(SoupSession*, SoupMessage*, SoupAuth*, gboolean retrying, NetworkDataTask*);
-    void authenticate(WebCore::AuthenticationChallenge&amp;&amp;);
-    void continueAuthenticate(WebCore::AuthenticationChallenge&amp;&amp;);
-    static void skipInputStreamForRedirectionCallback(GInputStream*, GAsyncResult*, NetworkDataTask*);
-    void skipInputStreamForRedirection();
-    void didFinishSkipInputStreamForRedirection();
-    bool shouldStartHTTPRedirection();
-    void continueHTTPRedirection();
-    static void readCallback(GInputStream*, GAsyncResult*, NetworkDataTask*);
-    void read();
-    void didRead(gssize bytesRead);
-    void didFinishRead();
-    static void requestNextPartCallback(SoupMultipartInputStream*, GAsyncResult*, NetworkDataTask*);
-    void requestNextPart();
-    void didRequestNextPart(GRefPtr&lt;GInputStream&gt;&amp;&amp;);
-    void didFinishRequestNextPart();
-    static void gotHeadersCallback(SoupMessage*, NetworkDataTask*);
-    void didGetHeaders();
-    static void wroteBodyDataCallback(SoupMessage*, SoupBuffer*, NetworkDataTask*);
-    void didWriteBodyData(uint64_t bytesSent);
-    void download();
-    static void writeDownloadCallback(GOutputStream*, GAsyncResult*, NetworkDataTask*);
-    void writeDownload();
-    void didWriteDownload(gsize bytesWritten);
-    void didFailDownload(const WebCore::ResourceError&amp;);
-    void didFinishDownload();
-    void cleanDownloadFiles();
-    void didFail(const WebCore::ResourceError&amp;);
-#if ENABLE(WEB_TIMING)
-    static void networkEventCallback(SoupMessage*, GSocketClientEvent, GIOStream*, NetworkDataTask*);
-    void networkEvent(GSocketClientEvent);
-#if SOUP_CHECK_VERSION(2, 49, 91)
-    static void startingCallback(SoupMessage*, NetworkDataTask*);
-#else
-    static void requestStartedCallback(SoupSession*, SoupMessage*, SoupSocket*, NetworkDataTask*);
-#endif
-    void didStartRequest();
-    static void restartedCallback(SoupMessage*, NetworkDataTask*);
-    void didRestart();
-#endif
-#endif
-    
</del><span class="cx">     enum FailureType {
</span><span class="cx">         NoFailure,
</span><span class="cx">         BlockedFailure,
</span><span class="cx">         InvalidURLFailure
</span><span class="cx">     };
</span><ins>+    void failureTimerFired();
+    void scheduleFailure(FailureType);
+
</ins><span class="cx">     FailureType m_scheduledFailureType { NoFailure };
</span><span class="cx">     WebCore::Timer m_failureTimer;
</span><del>-    void failureTimerFired();
-    void scheduleFailure(FailureType);
-    
-    RefPtr&lt;NetworkSession&gt; m_session;
-    NetworkDataTaskClient* m_client;
</del><ins>+    Ref&lt;NetworkSession&gt; m_session;
+    NetworkDataTaskClient* m_client { nullptr };
</ins><span class="cx">     PendingDownload* m_pendingDownload { nullptr };
</span><span class="cx">     DownloadID m_pendingDownloadID;
</span><span class="cx">     String m_user;
</span><span class="lines">@@ -224,46 +137,14 @@
</span><span class="cx"> #if USE(CREDENTIAL_STORAGE_WITH_NETWORK_SESSION)
</span><span class="cx">     WebCore::Credential m_initialCredential;
</span><span class="cx"> #endif
</span><del>-    WebCore::StoredCredentials m_storedCredentials;
</del><ins>+    WebCore::StoredCredentials m_storedCredentials { WebCore::DoNotAllowStoredCredentials };
</ins><span class="cx">     String m_lastHTTPMethod;
</span><span class="cx">     String m_pendingDownloadLocation;
</span><span class="cx">     WebCore::ResourceRequest m_firstRequest;
</span><del>-    bool m_shouldClearReferrerOnHTTPSToHTTPRedirect;
-    RefPtr&lt;SandboxExtension&gt; m_sandboxExtension;
-#if PLATFORM(COCOA)
-    RetainPtr&lt;NSURLSessionDataTask&gt; m_task;
-#endif
-#if USE(SOUP)
-    State m_state { State::Suspended };
-    WebCore::ContentSniffingPolicy m_shouldContentSniff;
-    GRefPtr&lt;SoupRequest&gt; m_soupRequest;
-    GRefPtr&lt;SoupMessage&gt; m_soupMessage;
-    GRefPtr&lt;GInputStream&gt; m_inputStream;
-    GRefPtr&lt;SoupMultipartInputStream&gt; m_multipartInputStream;
-    GRefPtr&lt;GCancellable&gt; m_cancellable;
-    GRefPtr&lt;GAsyncResult&gt; m_pendingResult;
-    WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
-    WebCore::Credential m_credentialForPersistentStorage;
-    WebCore::ResourceResponse m_response;
-    Vector&lt;char&gt; m_readBuffer;
-    unsigned m_redirectCount { 0 };
-    uint64_t m_bodyDataTotalBytesSent { 0 };
-    GRefPtr&lt;GFile&gt; m_downloadDestinationFile;
-    GRefPtr&lt;GFile&gt; m_downloadIntermediateFile;
-    GRefPtr&lt;GOutputStream&gt; m_downloadOutputStream;
-    bool m_allowOverwriteDownload { false };
-#if ENABLE(WEB_TIMING)
-    double m_startTime { 0 };
-#endif
-    RunLoop::Timer&lt;NetworkDataTask&gt; m_timeoutSource;
-#endif
</del><ins>+    bool m_shouldClearReferrerOnHTTPSToHTTPRedirect { true };
</ins><span class="cx">     String m_suggestedFilename;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-#if PLATFORM(COCOA)
-WebCore::Credential serverTrustCredential(const WebCore::AuthenticationChallenge&amp;);
-#endif
-    
-}
</del><ins>+} // namespace WebKit
</ins><span class="cx"> 
</span><span class="cx"> #endif // USE(NETWORK_SESSION)
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -39,6 +39,10 @@
</span><span class="cx"> #include &lt;WebCore/SharedBuffer.h&gt;
</span><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+#include &quot;NetworkDataTaskCocoa.h&quot;
+#endif
+
</ins><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkLoadh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx"> #include &quot;DownloadID.h&quot;
</span><del>-#include &quot;NetworkSession.h&quot;
</del><ins>+#include &quot;NetworkDataTask.h&quot;
</ins><span class="cx"> #include &lt;WebCore/AuthenticationChallenge.h&gt;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -74,6 +74,10 @@
</span><span class="cx"> #include &quot;NetworkCacheCoders.h&quot;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+#if PLATFORM(COCOA)
+#include &quot;NetworkSessionCocoa.h&quot;
+#endif
+
</ins><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -102,7 +106,7 @@
</span><span class="cx">     addSupplement&lt;WebCookieManager&gt;();
</span><span class="cx">     addSupplement&lt;CustomProtocolManager&gt;();
</span><span class="cx"> #if USE(NETWORK_SESSION) &amp;&amp; PLATFORM(COCOA)
</span><del>-    NetworkSession::setCustomProtocolManager(supplement&lt;CustomProtocolManager&gt;());
</del><ins>+    NetworkSessionCocoa::setCustomProtocolManager(supplement&lt;CustomProtocolManager&gt;());
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkSessioncppfromrev207812trunkSourceWebKit2NetworkProcesssoupNetworkSessionSoupcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/NetworkProcess/NetworkSession.cpp (from rev 207812, trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp) (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.cpp                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;NetworkSession.h&quot;
+
+#if USE(NETWORK_SESSION)
+
+#include &lt;WebCore/NetworkStorageSession.h&gt;
+#include &lt;wtf/MainThread.h&gt;
+
+#if PLATFORM(COCOA)
+#include &quot;NetworkSessionCocoa.h&quot;
+#endif
+#if USE(SOUP)
+#include &quot;NetworkSessionSoup.h&quot;
+#endif
+
+
+using namespace WebCore;
+
+namespace WebKit {
+
+Ref&lt;NetworkSession&gt; NetworkSession::create(SessionID sessionID, CustomProtocolManager* customProtocolManager)
+{
+#if PLATFORM(COCOA)
+    return NetworkSessionCocoa::create(sessionID, customProtocolManager);
+#endif
+#if USE(SOUP)
+    UNUSED_PARAM(customProtocolManager);
+    return NetworkSessionSoup::create(sessionID);
+#endif
+}
+
+NetworkSession&amp; NetworkSession::defaultSession()
+{
+#if PLATFORM(COCOA)
+    return NetworkSessionCocoa::defaultSession();
+#else
+    ASSERT(isMainThread());
+    static NetworkSession* session = &amp;NetworkSession::create(SessionID::defaultSessionID()).leakRef();
+    return *session;
+#endif
+}
+
+NetworkStorageSession&amp; NetworkSession::networkStorageSession() const
+{
+    auto* storageSession = NetworkStorageSession::storageSession(m_sessionID);
+    RELEASE_ASSERT(storageSession);
+    return *storageSession;
+}
+
+NetworkSession::NetworkSession(SessionID sessionID)
+    : m_sessionID(sessionID)
+{
+}
+
+NetworkSession::~NetworkSession()
+{
+}
+
+} // namespace WebKit
+
+#endif // USE(NETWORK_SESSION)
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkSessionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkSession.h (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkSession.h        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkSession.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -27,24 +27,10 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx"> 
</span><del>-#if PLATFORM(COCOA)
-OBJC_CLASS NSURLSession;
-OBJC_CLASS NSOperationQueue;
-OBJC_CLASS WKNetworkSessionDelegate;
-#endif
-
-#include &quot;DownloadID.h&quot;
-#include &quot;NetworkDataTask.h&quot;
</del><span class="cx"> #include &lt;WebCore/SessionID.h&gt;
</span><del>-#include &lt;wtf/HashMap.h&gt;
-#include &lt;wtf/HashSet.h&gt;
</del><span class="cx"> #include &lt;wtf/Ref.h&gt;
</span><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> 
</span><del>-#if USE(SOUP)
-typedef struct _SoupSession SoupSession;
-#endif
-
</del><span class="cx"> namespace WebCore {
</span><span class="cx"> class NetworkStorageSession;
</span><span class="cx"> }
</span><span class="lines">@@ -54,63 +40,21 @@
</span><span class="cx"> class CustomProtocolManager;
</span><span class="cx"> 
</span><span class="cx"> class NetworkSession : public RefCounted&lt;NetworkSession&gt; {
</span><del>-    friend class NetworkDataTask;
</del><span class="cx"> public:
</span><del>-    enum class Type {
-        Normal,
-        Ephemeral
-    };
-
-    static Ref&lt;NetworkSession&gt; create(Type, WebCore::SessionID, CustomProtocolManager*);
</del><ins>+    static Ref&lt;NetworkSession&gt; create(WebCore::SessionID, CustomProtocolManager* = nullptr);
</ins><span class="cx">     static NetworkSession&amp; defaultSession();
</span><del>-    ~NetworkSession();
</del><ins>+    virtual ~NetworkSession();
</ins><span class="cx"> 
</span><del>-    void invalidateAndCancel();
</del><ins>+    virtual void invalidateAndCancel() = 0;
+    virtual void clearCredentials() { };
</ins><span class="cx"> 
</span><span class="cx">     WebCore::SessionID sessionID() const { return m_sessionID; }
</span><ins>+    WebCore::NetworkStorageSession&amp; networkStorageSession() const;
</ins><span class="cx"> 
</span><del>-#if USE(SOUP)
-    SoupSession* soupSession() const;
-#endif
</del><ins>+protected:
+    NetworkSession(WebCore::SessionID);
</ins><span class="cx"> 
</span><del>-#if PLATFORM(COCOA)
-    // Must be called before any NetworkSession has been created.
-    static void setCustomProtocolManager(CustomProtocolManager*);
-    static void setSourceApplicationAuditTokenData(RetainPtr&lt;CFDataRef&gt;&amp;&amp;);
-    static void setSourceApplicationBundleIdentifier(const String&amp;);
-    static void setSourceApplicationSecondaryIdentifier(const String&amp;);
-#if PLATFORM(IOS)
-    static void setCTDataConnectionServiceType(const String&amp;);
-#endif
-#endif
-
-    void clearCredentials();
-#if PLATFORM(COCOA)
-    NetworkDataTask* dataTaskForIdentifier(NetworkDataTask::TaskIdentifier, WebCore::StoredCredentials);
-
-    void addDownloadID(NetworkDataTask::TaskIdentifier, DownloadID);
-    DownloadID downloadID(NetworkDataTask::TaskIdentifier);
-    DownloadID takeDownloadID(NetworkDataTask::TaskIdentifier);
-#endif
-
-private:
-    NetworkSession(Type, WebCore::SessionID, CustomProtocolManager*);
-    WebCore::NetworkStorageSession&amp; networkStorageSession() const;
-
</del><span class="cx">     WebCore::SessionID m_sessionID;
</span><del>-
-#if PLATFORM(COCOA)
-    HashMap&lt;NetworkDataTask::TaskIdentifier, NetworkDataTask*&gt; m_dataTaskMapWithCredentials;
-    HashMap&lt;NetworkDataTask::TaskIdentifier, NetworkDataTask*&gt; m_dataTaskMapWithoutCredentials;
-    HashMap&lt;NetworkDataTask::TaskIdentifier, DownloadID&gt; m_downloadMap;
-
-    RetainPtr&lt;NSURLSession&gt; m_sessionWithCredentialStorage;
-    RetainPtr&lt;WKNetworkSessionDelegate&gt; m_sessionWithCredentialStorageDelegate;
-    RetainPtr&lt;NSURLSession&gt; m_sessionWithoutCredentialStorage;
-    RetainPtr&lt;WKNetworkSessionDelegate&gt; m_sessionWithoutCredentialStorageDelegate;
-#elif USE(SOUP)
-    HashSet&lt;NetworkDataTask*&gt; m_dataTaskSet;
-#endif
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscacheNetworkCacheSpeculativeLoadcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;Logging.h&quot;
</span><span class="cx"> #include &quot;NetworkCache.h&quot;
</span><span class="cx"> #include &quot;NetworkLoad.h&quot;
</span><ins>+#include &quot;NetworkSession.h&quot;
</ins><span class="cx"> #include &lt;WebCore/SessionID.h&gt;
</span><span class="cx"> #include &lt;wtf/CurrentTime.h&gt;
</span><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoah"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if USE(NETWORK_SESSION)
+
+#include &quot;NetworkDataTask.h&quot;
+#include &lt;wtf/RetainPtr.h&gt;
+
+OBJC_CLASS NSURLSessionDataTask;
+
+namespace WebKit {
+
+class NetworkSessionCocoa;
+
+class NetworkDataTaskCocoa final : public NetworkDataTask {
+    friend class NetworkSessionCocoa;
+public:
+    static Ref&lt;NetworkDataTask&gt; create(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const WebCore::ResourceRequest&amp; request, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+    {
+        return adoptRef(*new NetworkDataTaskCocoa(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
+    }
+
+    ~NetworkDataTaskCocoa();
+
+    typedef uint64_t TaskIdentifier;
+
+    void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend);
+    void didReceiveChallenge(const WebCore::AuthenticationChallenge&amp;, ChallengeCompletionHandler&amp;&amp;);
+    void didCompleteWithError(const WebCore::ResourceError&amp;);
+    void didReceiveResponse(WebCore::ResourceResponse&amp;&amp;, ResponseCompletionHandler&amp;&amp;);
+    void didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp;);
+    void didBecomeDownload();
+
+    void willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp;, WebCore::ResourceRequest&amp;&amp;, RedirectCompletionHandler&amp;&amp;);
+    void transferSandboxExtensionToDownload(Download&amp;);
+
+    void suspend() override;
+    void cancel() override;
+    void resume() override;
+    NetworkDataTask::State state() const override;
+
+    void setPendingDownloadLocation(const String&amp;, const SandboxExtension::Handle&amp;, bool /*allowOverwrite*/) override;
+    String suggestedFilename() const override;
+
+    bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp;) override;
+
+private:
+    NetworkDataTaskCocoa(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+
+    bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&amp;, const ChallengeCompletionHandler&amp;);
+
+    RefPtr&lt;SandboxExtension&gt; m_sandboxExtension;
+    RetainPtr&lt;NSURLSessionDataTask&gt; m_task;
+};
+
+WebCore::Credential serverTrustCredential(const WebCore::AuthenticationChallenge&amp;);
+
+} // namespace WebKit
+
+#endif // USE(NETWORK_SESSION)
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkDataTaskCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #import &quot;config.h&quot;
</span><del>-#import &quot;NetworkSession.h&quot;
</del><ins>+#import &quot;NetworkDataTaskCocoa.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx"> 
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #import &quot;DownloadProxyMessages.h&quot;
</span><span class="cx"> #import &quot;Logging.h&quot;
</span><span class="cx"> #import &quot;NetworkProcess.h&quot;
</span><ins>+#import &quot;NetworkSessionCocoa.h&quot;
</ins><span class="cx"> #import &quot;SessionTracker.h&quot;
</span><span class="cx"> #import &quot;WebCoreArgumentCoders.h&quot;
</span><span class="cx"> #import &lt;WebCore/AuthenticationChallenge.h&gt;
</span><span class="lines">@@ -52,27 +53,12 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-NetworkDataTask::NetworkDataTask(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const WebCore::ResourceRequest&amp; requestWithCredentials, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
-    : m_failureTimer(*this, &amp;NetworkDataTask::failureTimerFired)
-    , m_session(&amp;session)
-    , m_client(&amp;client)
-    , m_storedCredentials(storedCredentials)
-    , m_lastHTTPMethod(requestWithCredentials.httpMethod())
-    , m_firstRequest(requestWithCredentials)
-    , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
</del><ins>+NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const WebCore::ResourceRequest&amp; requestWithCredentials, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+    : NetworkDataTask(session, client, requestWithCredentials, storedCredentials, shouldClearReferrerOnHTTPSToHTTPRedirect)
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-    
-    if (!requestWithCredentials.url().isValid()) {
-        scheduleFailure(InvalidURLFailure);
</del><ins>+    if (m_scheduledFailureType != NoFailure)
</ins><span class="cx">         return;
</span><del>-    }
-    
-    if (!portAllowed(requestWithCredentials.url())) {
-        scheduleFailure(BlockedFailure);
-        return;
-    }
-    
</del><ins>+
</ins><span class="cx">     auto request = requestWithCredentials;
</span><span class="cx">     auto url = request.url();
</span><span class="cx">     if (storedCredentials == WebCore::AllowStoredCredentials &amp;&amp; url.protocolIsInHTTPFamily()) {
</span><span class="lines">@@ -103,14 +89,15 @@
</span><span class="cx">         nsRequest = mutableRequest;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    auto&amp; cocoaSession = static_cast&lt;NetworkSessionCocoa&amp;&gt;(m_session.get());
</ins><span class="cx">     if (storedCredentials == WebCore::AllowStoredCredentials) {
</span><del>-        m_task = [m_session-&gt;m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
-        ASSERT(!m_session-&gt;m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
-        m_session-&gt;m_dataTaskMapWithCredentials.add([m_task taskIdentifier], this);
</del><ins>+        m_task = [cocoaSession.m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
+        ASSERT(!cocoaSession.m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
+        cocoaSession.m_dataTaskMapWithCredentials.add([m_task taskIdentifier], this);
</ins><span class="cx">     } else {
</span><del>-        m_task = [m_session-&gt;m_sessionWithoutCredentialStorage dataTaskWithRequest:nsRequest];
-        ASSERT(!m_session-&gt;m_dataTaskMapWithoutCredentials.contains([m_task taskIdentifier]));
-        m_session-&gt;m_dataTaskMapWithoutCredentials.add([m_task taskIdentifier], this);
</del><ins>+        m_task = [cocoaSession.m_sessionWithoutCredentialStorage dataTaskWithRequest:nsRequest];
+        ASSERT(!cocoaSession.m_dataTaskMapWithoutCredentials.contains([m_task taskIdentifier]));
+        cocoaSession.m_dataTaskMapWithoutCredentials.add([m_task taskIdentifier], this);
</ins><span class="cx">     }
</span><span class="cx">     LOG(NetworkSession, &quot;%llu Creating NetworkDataTask with URL %s&quot;, [m_task taskIdentifier], nsRequest.URL.absoluteString.UTF8String);
</span><span class="cx"> 
</span><span class="lines">@@ -121,27 +108,28 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkDataTask::~NetworkDataTask()
</del><ins>+NetworkDataTaskCocoa::~NetworkDataTaskCocoa()
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-    if (m_task) {
-        if (m_storedCredentials == WebCore::StoredCredentials::AllowStoredCredentials) {
-            ASSERT(m_session-&gt;m_dataTaskMapWithCredentials.get([m_task taskIdentifier]) == this);
-            m_session-&gt;m_dataTaskMapWithCredentials.remove([m_task taskIdentifier]);
-        } else {
-            ASSERT(m_session-&gt;m_dataTaskMapWithoutCredentials.get([m_task taskIdentifier]) == this);
-            m_session-&gt;m_dataTaskMapWithoutCredentials.remove([m_task taskIdentifier]);
-        }
</del><ins>+    if (!m_task)
+        return;
+
+    auto&amp; cocoaSession = static_cast&lt;NetworkSessionCocoa&amp;&gt;(m_session.get());
+    if (m_storedCredentials == WebCore::StoredCredentials::AllowStoredCredentials) {
+        ASSERT(cocoaSession.m_dataTaskMapWithCredentials.get([m_task taskIdentifier]) == this);
+        cocoaSession.m_dataTaskMapWithCredentials.remove([m_task taskIdentifier]);
+    } else {
+        ASSERT(cocoaSession.m_dataTaskMapWithoutCredentials.get([m_task taskIdentifier]) == this);
+        cocoaSession.m_dataTaskMapWithoutCredentials.remove([m_task taskIdentifier]);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend)
</del><ins>+void NetworkDataTaskCocoa::didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend)
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;didSendData(totalBytesSent, totalBytesExpectedToSend);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didReceiveChallenge(const WebCore::AuthenticationChallenge&amp; challenge, ChallengeCompletionHandler&amp;&amp; completionHandler)
</del><ins>+void NetworkDataTaskCocoa::didReceiveChallenge(const WebCore::AuthenticationChallenge&amp; challenge, ChallengeCompletionHandler&amp;&amp; completionHandler)
</ins><span class="cx"> {
</span><span class="cx">     // Proxy authentication is handled by CFNetwork internally. We can get here if the user cancels
</span><span class="cx">     // CFNetwork authentication dialog, and we shouldn't ask the client to display another one in that case.
</span><span class="lines">@@ -161,13 +149,13 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didCompleteWithError(const WebCore::ResourceError&amp; error)
</del><ins>+void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;didCompleteWithError(error);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didReceiveResponse(WebCore::ResourceResponse&amp;&amp; response, ResponseCompletionHandler&amp;&amp; completionHandler)
</del><ins>+void NetworkDataTaskCocoa::didReceiveResponse(WebCore::ResourceResponse&amp;&amp; response, ResponseCompletionHandler&amp;&amp; completionHandler)
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;didReceiveResponseNetworkSession(WTFMove(response), WTFMove(completionHandler));
</span><span class="lines">@@ -177,19 +165,19 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp; data)
</del><ins>+void NetworkDataTaskCocoa::didReceiveData(Ref&lt;WebCore::SharedBuffer&gt;&amp;&amp; data)
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;didReceiveData(WTFMove(data));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didBecomeDownload()
</del><ins>+void NetworkDataTaskCocoa::didBecomeDownload()
</ins><span class="cx"> {
</span><span class="cx">     if (m_client)
</span><span class="cx">         m_client-&gt;didBecomeDownload();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp; redirectResponse, WebCore::ResourceRequest&amp;&amp; request, RedirectCompletionHandler&amp;&amp; completionHandler)
</del><ins>+void NetworkDataTaskCocoa::willPerformHTTPRedirection(WebCore::ResourceResponse&amp;&amp; redirectResponse, WebCore::ResourceRequest&amp;&amp; request, RedirectCompletionHandler&amp;&amp; completionHandler)
</ins><span class="cx"> {
</span><span class="cx">     if (redirectResponse.httpStatusCode() == 307 || redirectResponse.httpStatusCode() == 308) {
</span><span class="cx">         ASSERT(m_lastHTTPMethod == request.httpMethod());
</span><span class="lines">@@ -240,51 +228,23 @@
</span><span class="cx">         completionHandler({ });
</span><span class="cx">     }
</span><span class="cx"> }
</span><del>-    
-void NetworkDataTask::scheduleFailure(FailureType type)
-{
-    ASSERT(type != NoFailure);
-    m_scheduledFailureType = type;
-    m_failureTimer.startOneShot(0);
-}
</del><span class="cx"> 
</span><del>-void NetworkDataTask::failureTimerFired()
</del><ins>+void NetworkDataTaskCocoa::setPendingDownloadLocation(const WTF::String&amp; filename, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protect(this);
-    
-    switch (m_scheduledFailureType) {
-    case BlockedFailure:
-        m_scheduledFailureType = NoFailure;
-        if (m_client)
-            m_client-&gt;wasBlocked();
-        return;
-    case InvalidURLFailure:
-        m_scheduledFailureType = NoFailure;
-        if (m_client)
-            m_client-&gt;cannotShowURL();
-        return;
-    case NoFailure:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    ASSERT_NOT_REACHED();
-}
</del><ins>+    NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);
</ins><span class="cx"> 
</span><del>-void NetworkDataTask::setPendingDownloadLocation(const WTF::String&amp; filename, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
-{
</del><span class="cx">     ASSERT(!m_sandboxExtension);
</span><span class="cx">     m_sandboxExtension = SandboxExtension::create(sandboxExtensionHandle);
</span><span class="cx">     if (m_sandboxExtension)
</span><span class="cx">         m_sandboxExtension-&gt;consume();
</span><span class="cx"> 
</span><del>-    m_pendingDownloadLocation = filename;
-    m_task.get()._pathToDownloadTaskFile = filename;
</del><ins>+    m_task.get()._pathToDownloadTaskFile = m_pendingDownloadLocation;
</ins><span class="cx"> 
</span><del>-    if (allowOverwrite &amp;&amp; WebCore::fileExists(filename))
</del><ins>+    if (allowOverwrite &amp;&amp; WebCore::fileExists(m_pendingDownloadLocation))
</ins><span class="cx">         WebCore::deleteFile(filename);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool NetworkDataTask::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&amp; challenge, const ChallengeCompletionHandler&amp; completionHandler)
</del><ins>+bool NetworkDataTaskCocoa::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&amp; challenge, const ChallengeCompletionHandler&amp; completionHandler)
</ins><span class="cx"> {
</span><span class="cx">     if (!challenge.protectionSpace().isPasswordBased())
</span><span class="cx">         return false;
</span><span class="lines">@@ -329,7 +289,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::transferSandboxExtensionToDownload(Download&amp; download)
</del><ins>+void NetworkDataTaskCocoa::transferSandboxExtensionToDownload(Download&amp; download)
</ins><span class="cx"> {
</span><span class="cx">     download.setSandboxExtension(WTFMove(m_sandboxExtension));
</span><span class="cx"> }
</span><span class="lines">@@ -356,7 +316,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool NetworkDataTask::allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp; challenge)
</del><ins>+bool NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&amp; challenge)
</ins><span class="cx"> {
</span><span class="cx">     const String&amp; host = challenge.protectionSpace().host();
</span><span class="cx">     NSArray *certificates = [NSURLRequest allowsSpecificHTTPSCertificateForHost:host];
</span><span class="lines">@@ -374,7 +334,7 @@
</span><span class="cx">     return certificatesMatch(trust.get(), challenge.nsURLAuthenticationChallenge().protectionSpace.serverTrust);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String NetworkDataTask::suggestedFilename()
</del><ins>+String NetworkDataTaskCocoa::suggestedFilename() const
</ins><span class="cx"> {
</span><span class="cx">     if (!m_suggestedFilename.isEmpty())
</span><span class="cx">         return m_suggestedFilename;
</span><span class="lines">@@ -381,17 +341,12 @@
</span><span class="cx">     return m_task.get().response.suggestedFilename;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::setSuggestedFilename(const String&amp; suggestedName)
</del><ins>+void NetworkDataTaskCocoa::cancel()
</ins><span class="cx"> {
</span><del>-    m_suggestedFilename = suggestedName;
-}
-
-void NetworkDataTask::cancel()
-{
</del><span class="cx">     [m_task cancel];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::resume()
</del><ins>+void NetworkDataTaskCocoa::resume()
</ins><span class="cx"> {
</span><span class="cx">     if (m_scheduledFailureType != NoFailure)
</span><span class="cx">         m_failureTimer.startOneShot(0);
</span><span class="lines">@@ -398,7 +353,7 @@
</span><span class="cx">     [m_task resume];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::suspend()
</del><ins>+void NetworkDataTaskCocoa::suspend()
</ins><span class="cx"> {
</span><span class="cx">     if (m_failureTimer.isActive())
</span><span class="cx">         m_failureTimer.stop();
</span><span class="lines">@@ -405,7 +360,7 @@
</span><span class="cx">     [m_task suspend];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkDataTask::State NetworkDataTask::state() const
</del><ins>+NetworkDataTask::State NetworkDataTaskCocoa::state() const
</ins><span class="cx"> {
</span><span class="cx">     switch ([m_task state]) {
</span><span class="cx">     case NSURLSessionTaskStateRunning:
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkProcessCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -29,7 +29,7 @@
</span><span class="cx"> #import &quot;NetworkCache.h&quot;
</span><span class="cx"> #import &quot;NetworkProcessCreationParameters.h&quot;
</span><span class="cx"> #import &quot;NetworkResourceLoader.h&quot;
</span><del>-#import &quot;NetworkSession.h&quot;
</del><ins>+#import &quot;NetworkSessionCocoa.h&quot;
</ins><span class="cx"> #import &quot;SandboxExtension.h&quot;
</span><span class="cx"> #import &quot;SessionTracker.h&quot;
</span><span class="cx"> #import &lt;WebCore/CFNetworkSPI.h&gt;
</span><span class="lines">@@ -85,11 +85,11 @@
</span><span class="cx">     SessionTracker::setIdentifierBase(parameters.uiProcessBundleIdentifier);
</span><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><del>-    NetworkSession::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
-    NetworkSession::setSourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier);
-    NetworkSession::setSourceApplicationSecondaryIdentifier(parameters.sourceApplicationSecondaryIdentifier);
</del><ins>+    NetworkSessionCocoa::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
+    NetworkSessionCocoa::setSourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier);
+    NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(parameters.sourceApplicationSecondaryIdentifier);
</ins><span class="cx"> #if PLATFORM(IOS)
</span><del>-    NetworkSession::setCTDataConnectionServiceType(parameters.ctDataConnectionServiceType);
</del><ins>+    NetworkSessionCocoa::setCTDataConnectionServiceType(parameters.ctDataConnectionServiceType);
</ins><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoahfromrev207812trunkSourceWebKit2NetworkProcessNetworkSessionh"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h (from rev 207812, trunk/Source/WebKit2/NetworkProcess/NetworkSession.h) (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,81 @@
</span><ins>+/*
+ * Copyright (C) 2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if USE(NETWORK_SESSION)
+
+OBJC_CLASS NSURLSession;
+OBJC_CLASS NSOperationQueue;
+OBJC_CLASS WKNetworkSessionDelegate;
+
+#include &quot;DownloadID.h&quot;
+#include &quot;NetworkDataTaskCocoa.h&quot;
+#include &quot;NetworkSession.h&quot;
+#include &lt;wtf/HashMap.h&gt;
+
+namespace WebKit {
+
+class NetworkSessionCocoa final : public NetworkSession {
+    friend class NetworkDataTaskCocoa;
+public:
+    static Ref&lt;NetworkSession&gt; create(WebCore::SessionID, CustomProtocolManager*);
+    static NetworkSession&amp; defaultSession();
+    ~NetworkSessionCocoa();
+
+    // Must be called before any NetworkSession has been created.
+    static void setCustomProtocolManager(CustomProtocolManager*);
+    static void setSourceApplicationAuditTokenData(RetainPtr&lt;CFDataRef&gt;&amp;&amp;);
+    static void setSourceApplicationBundleIdentifier(const String&amp;);
+    static void setSourceApplicationSecondaryIdentifier(const String&amp;);
+#if PLATFORM(IOS)
+    static void setCTDataConnectionServiceType(const String&amp;);
+#endif
+
+    NetworkDataTaskCocoa* dataTaskForIdentifier(NetworkDataTaskCocoa::TaskIdentifier, WebCore::StoredCredentials);
+
+    void addDownloadID(NetworkDataTaskCocoa::TaskIdentifier, DownloadID);
+    DownloadID downloadID(NetworkDataTaskCocoa::TaskIdentifier);
+    DownloadID takeDownloadID(NetworkDataTaskCocoa::TaskIdentifier);
+
+private:
+    NetworkSessionCocoa(WebCore::SessionID, CustomProtocolManager*);
+
+    void invalidateAndCancel() override;
+    void clearCredentials() override;
+
+    HashMap&lt;NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*&gt; m_dataTaskMapWithCredentials;
+    HashMap&lt;NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*&gt; m_dataTaskMapWithoutCredentials;
+    HashMap&lt;NetworkDataTaskCocoa::TaskIdentifier, DownloadID&gt; m_downloadMap;
+
+    RetainPtr&lt;NSURLSession&gt; m_sessionWithCredentialStorage;
+    RetainPtr&lt;WKNetworkSessionDelegate&gt; m_sessionWithCredentialStorageDelegate;
+    RetainPtr&lt;NSURLSession&gt; m_sessionWithoutCredentialStorage;
+    RetainPtr&lt;WKNetworkSessionDelegate&gt; m_sessionWithoutCredentialStorageDelegate;
+};
+
+} // namespace WebKit
+
+#endif // USE(NETWORK_SESSION)
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesscocoaNetworkSessionCocoamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #import &quot;config.h&quot;
</span><del>-#import &quot;NetworkSession.h&quot;
</del><ins>+#import &quot;NetworkSessionCocoa.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><span class="cx"> 
</span><span class="lines">@@ -82,17 +82,17 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @interface WKNetworkSessionDelegate : NSObject &lt;NSURLSessionDataDelegate&gt; {
</span><del>-    RefPtr&lt;WebKit::NetworkSession&gt; _session;
</del><ins>+    RefPtr&lt;WebKit::NetworkSessionCocoa&gt; _session;
</ins><span class="cx">     bool _withCredentials;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-- (id)initWithNetworkSession:(WebKit::NetworkSession&amp;)session withCredentials:(bool)withCredentials;
</del><ins>+- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&amp;)session withCredentials:(bool)withCredentials;
</ins><span class="cx"> 
</span><span class="cx"> @end
</span><span class="cx"> 
</span><span class="cx"> @implementation WKNetworkSessionDelegate
</span><span class="cx"> 
</span><del>-- (id)initWithNetworkSession:(WebKit::NetworkSession&amp;)session withCredentials:(bool)withCredentials
</del><ins>+- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&amp;)session withCredentials:(bool)withCredentials
</ins><span class="cx"> {
</span><span class="cx">     self = [super init];
</span><span class="cx">     if (!self)
</span><span class="lines">@@ -296,7 +296,7 @@
</span><span class="cx"> {
</span><span class="cx">     auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
</span><span class="cx">     if (auto* networkDataTask = _session-&gt;dataTaskForIdentifier([dataTask taskIdentifier], storedCredentials)) {
</span><del>-        Ref&lt;NetworkDataTask&gt; protectedNetworkDataTask(*networkDataTask);
</del><ins>+        Ref&lt;NetworkDataTaskCocoa&gt; protectedNetworkDataTask(*networkDataTask);
</ins><span class="cx">         auto downloadID = networkDataTask-&gt;pendingDownloadID();
</span><span class="cx">         auto&amp; downloadManager = WebKit::NetworkProcess::singleton().downloadManager();
</span><span class="cx">         auto download = std::make_unique&lt;WebKit::Download&gt;(downloadManager, downloadID, downloadTask, _session-&gt;sessionID(), networkDataTask-&gt;suggestedFilename());
</span><span class="lines">@@ -314,14 +314,11 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx">     
</span><del>-static NSURLSessionConfiguration *configurationForType(NetworkSession::Type type)
</del><ins>+static NSURLSessionConfiguration *configurationForSessionID(const WebCore::SessionID&amp; session)
</ins><span class="cx"> {
</span><del>-    switch (type) {
-    case NetworkSession::Type::Normal:
-        return [NSURLSessionConfiguration defaultSessionConfiguration];
-    case NetworkSession::Type::Ephemeral:
</del><ins>+    if (session.isEphemeral())
</ins><span class="cx">         return [NSURLSessionConfiguration ephemeralSessionConfiguration];
</span><del>-    }
</del><ins>+    return [NSURLSessionConfiguration defaultSessionConfiguration];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static RefPtr&lt;CustomProtocolManager&gt;&amp; globalCustomProtocolManager()
</span><span class="lines">@@ -360,25 +357,25 @@
</span><span class="cx"> static bool sessionsCreated = false;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void NetworkSession::setCustomProtocolManager(CustomProtocolManager* customProtocolManager)
</del><ins>+void NetworkSessionCocoa::setCustomProtocolManager(CustomProtocolManager* customProtocolManager)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!sessionsCreated);
</span><span class="cx">     globalCustomProtocolManager() = customProtocolManager;
</span><span class="cx"> }
</span><span class="cx">     
</span><del>-void NetworkSession::setSourceApplicationAuditTokenData(RetainPtr&lt;CFDataRef&gt;&amp;&amp; data)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationAuditTokenData(RetainPtr&lt;CFDataRef&gt;&amp;&amp; data)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!sessionsCreated);
</span><span class="cx">     globalSourceApplicationAuditTokenData() = data;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::setSourceApplicationBundleIdentifier(const String&amp; identifier)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationBundleIdentifier(const String&amp; identifier)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!sessionsCreated);
</span><span class="cx">     globalSourceApplicationBundleIdentifier() = identifier;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::setSourceApplicationSecondaryIdentifier(const String&amp; identifier)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(const String&amp; identifier)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!sessionsCreated);
</span><span class="cx">     globalSourceApplicationSecondaryIdentifier() = identifier;
</span><span class="lines">@@ -385,7 +382,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-void NetworkSession::setCTDataConnectionServiceType(const String&amp; type)
</del><ins>+void NetworkSessionCocoa::setCTDataConnectionServiceType(const String&amp; type)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!sessionsCreated);
</span><span class="cx">     globalCTDataConnectionServiceType() = type;
</span><span class="lines">@@ -392,20 +389,20 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-Ref&lt;NetworkSession&gt; NetworkSession::create(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
</del><ins>+Ref&lt;NetworkSession&gt; NetworkSessionCocoa::create(WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new NetworkSession(type, sessionID, customProtocolManager));
</del><ins>+    return adoptRef(*new NetworkSessionCocoa(sessionID, customProtocolManager));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkSession&amp; NetworkSession::defaultSession()
</del><ins>+NetworkSession&amp; NetworkSessionCocoa::defaultSession()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    static NetworkSession* session = &amp;NetworkSession::create(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID(), globalCustomProtocolManager().get()).leakRef();
</del><ins>+    static NetworkSession* session = &amp;NetworkSessionCocoa::create(WebCore::SessionID::defaultSessionID(), globalCustomProtocolManager().get()).leakRef();
</ins><span class="cx">     return *session;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkSession::NetworkSession(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
-    : m_sessionID(sessionID)
</del><ins>+NetworkSessionCocoa::NetworkSessionCocoa(WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
+    : NetworkSession(sessionID)
</ins><span class="cx"> {
</span><span class="cx">     relaxAdoptionRequirement();
</span><span class="cx"> 
</span><span class="lines">@@ -413,7 +410,7 @@
</span><span class="cx">     sessionsCreated = true;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    NSURLSessionConfiguration *configuration = configurationForType(type);
</del><ins>+    NSURLSessionConfiguration *configuration = configurationForSessionID(m_sessionID);
</ins><span class="cx"> 
</span><span class="cx">     if (NetworkCache::singleton().isEnabled())
</span><span class="cx">         configuration.URLCache = nil;
</span><span class="lines">@@ -445,11 +442,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     if (sessionID == WebCore::SessionID::defaultSessionID()) {
</span><del>-        ASSERT(type == Type::Normal);
</del><span class="cx">         if (CFHTTPCookieStorageRef storage = WebCore::NetworkStorageSession::defaultStorageSession().cookieStorage().get())
</span><span class="cx">             configuration.HTTPCookieStorage = [[[NSHTTPCookieStorage alloc] _initWithCFHTTPCookieStorage:storage] autorelease];
</span><span class="cx">     } else {
</span><del>-        ASSERT(type == Type::Ephemeral);
</del><span class="cx">         auto* storageSession = WebCore::NetworkStorageSession::storageSession(sessionID);
</span><span class="cx">         RELEASE_ASSERT(storageSession);
</span><span class="cx">         if (CFHTTPCookieStorageRef storage = storageSession-&gt;cookieStorage().get())
</span><span class="lines">@@ -465,11 +460,11 @@
</span><span class="cx">     LOG(NetworkSession, &quot;Created NetworkSession with cookieAcceptPolicy %lu&quot;, configuration.HTTPCookieStorage.cookieAcceptPolicy);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkSession::~NetworkSession()
</del><ins>+NetworkSessionCocoa::~NetworkSessionCocoa()
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::invalidateAndCancel()
</del><ins>+void NetworkSessionCocoa::invalidateAndCancel()
</ins><span class="cx"> {
</span><span class="cx">     [m_sessionWithCredentialStorage invalidateAndCancel];
</span><span class="cx">     [m_sessionWithoutCredentialStorage invalidateAndCancel];
</span><span class="lines">@@ -476,15 +471,8 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-WebCore::NetworkStorageSession&amp; NetworkSession::networkStorageSession() const
</del><ins>+void NetworkSessionCocoa::clearCredentials()
</ins><span class="cx"> {
</span><del>-    auto* storageSession = WebCore::NetworkStorageSession::storageSession(m_sessionID);
-    RELEASE_ASSERT(storageSession);
-    return *storageSession;
-}
-
-void NetworkSession::clearCredentials()
-{
</del><span class="cx"> #if !USE(CREDENTIAL_STORAGE_WITH_NETWORK_SESSION)
</span><span class="cx">     ASSERT(m_dataTaskMapWithCredentials.isEmpty());
</span><span class="cx">     ASSERT(m_dataTaskMapWithoutCredentials.isEmpty());
</span><span class="lines">@@ -495,7 +483,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkDataTask* NetworkSession::dataTaskForIdentifier(NetworkDataTask::TaskIdentifier taskIdentifier, WebCore::StoredCredentials storedCredentials)
</del><ins>+NetworkDataTaskCocoa* NetworkSessionCocoa::dataTaskForIdentifier(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier, WebCore::StoredCredentials storedCredentials)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     if (storedCredentials == WebCore::StoredCredentials::AllowStoredCredentials)
</span><span class="lines">@@ -503,7 +491,7 @@
</span><span class="cx">     return m_dataTaskMapWithoutCredentials.get(taskIdentifier);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::addDownloadID(NetworkDataTask::TaskIdentifier taskIdentifier, DownloadID downloadID)
</del><ins>+void NetworkSessionCocoa::addDownloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier, DownloadID downloadID)
</ins><span class="cx"> {
</span><span class="cx"> #ifndef NDEBUG
</span><span class="cx">     ASSERT(!m_downloadMap.contains(taskIdentifier));
</span><span class="lines">@@ -513,13 +501,13 @@
</span><span class="cx">     m_downloadMap.add(taskIdentifier, downloadID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-DownloadID NetworkSession::downloadID(NetworkDataTask::TaskIdentifier taskIdentifier)
</del><ins>+DownloadID NetworkSessionCocoa::downloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_downloadMap.get(taskIdentifier).downloadID());
</span><span class="cx">     return m_downloadMap.get(taskIdentifier);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-DownloadID NetworkSession::takeDownloadID(NetworkDataTask::TaskIdentifier taskIdentifier)
</del><ins>+DownloadID NetworkSessionCocoa::takeDownloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     auto downloadID = m_downloadMap.take(taskIdentifier);
</span><span class="cx">     return downloadID;
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessmacRemoteNetworkingContextmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx">     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, base + '.' + String::number(sessionID.sessionID()));
</span><span class="cx"> 
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><del>-    auto networkSession = NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, NetworkProcess::singleton().supplement&lt;CustomProtocolManager&gt;());
</del><ins>+    auto networkSession = NetworkSession::create(sessionID, NetworkProcess::singleton().supplement&lt;CustomProtocolManager&gt;());
</ins><span class="cx">     SessionTracker::setSession(sessionID, WTFMove(networkSession));
</span><span class="cx"> #endif
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -24,7 +24,7 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><del>-#include &quot;NetworkDataTask.h&quot;
</del><ins>+#include &quot;NetworkDataTaskSoup.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> #include &quot;AuthenticationManager.h&quot;
</span><span class="cx"> #include &quot;DataReference.h&quot;
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include &quot;DownloadSoupErrors.h&quot;
</span><span class="cx"> #include &quot;NetworkLoad.h&quot;
</span><span class="cx"> #include &quot;NetworkProcess.h&quot;
</span><del>-#include &quot;NetworkSession.h&quot;
</del><ins>+#include &quot;NetworkSessionSoup.h&quot;
</ins><span class="cx"> #include &quot;WebErrors.h&quot;
</span><span class="cx"> #include &lt;WebCore/AuthenticationChallenge.h&gt;
</span><span class="cx"> #include &lt;WebCore/HTTPParsers.h&gt;
</span><span class="lines">@@ -47,31 +47,15 @@
</span><span class="cx"> 
</span><span class="cx"> static const size_t gDefaultReadBufferSize = 8192;
</span><span class="cx"> 
</span><del>-NetworkDataTask::NetworkDataTask(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const ResourceRequest&amp; requestWithCredentials, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
-    : m_failureTimer(*this, &amp;NetworkDataTask::failureTimerFired)
-    , m_session(&amp;session)
-    , m_client(&amp;client)
-    , m_storedCredentials(storedCredentials)
-    , m_lastHTTPMethod(requestWithCredentials.httpMethod())
-    , m_firstRequest(requestWithCredentials)
-    , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
</del><ins>+NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const ResourceRequest&amp; requestWithCredentials, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+    : NetworkDataTask(session, client, requestWithCredentials, storedCredentials, shouldClearReferrerOnHTTPSToHTTPRedirect)
</ins><span class="cx">     , m_shouldContentSniff(shouldContentSniff)
</span><del>-    , m_timeoutSource(RunLoop::main(), this, &amp;NetworkDataTask::timeoutFired)
</del><ins>+    , m_timeoutSource(RunLoop::main(), this, &amp;NetworkDataTaskSoup::timeoutFired)
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-
-    m_session-&gt;m_dataTaskSet.add(this);
-
-    if (!requestWithCredentials.url().isValid()) {
-        scheduleFailure(InvalidURLFailure);
</del><ins>+    static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).registerNetworkDataTask(*this);
+    if (m_scheduledFailureType != NoFailure)
</ins><span class="cx">         return;
</span><del>-    }
</del><span class="cx"> 
</span><del>-    if (!portAllowed(requestWithCredentials.url())) {
-        scheduleFailure(BlockedFailure);
-        return;
-    }
-
</del><span class="cx">     auto request = requestWithCredentials;
</span><span class="cx">     if (request.url().protocolIsInHTTPFamily()) {
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="lines">@@ -93,45 +77,14 @@
</span><span class="cx">     createRequest(request);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkDataTask::~NetworkDataTask()
</del><ins>+NetworkDataTaskSoup::~NetworkDataTaskSoup()
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-    ASSERT(!m_client);
</del><span class="cx">     clearRequest();
</span><del>-    m_session-&gt;m_dataTaskSet.remove(this);
</del><ins>+    static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).unregisterNetworkDataTask(*this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::scheduleFailure(FailureType type)
</del><ins>+String NetworkDataTaskSoup::suggestedFilename() const
</ins><span class="cx"> {
</span><del>-    ASSERT(type != NoFailure);
-    m_scheduledFailureType = type;
-    m_failureTimer.startOneShot(0);
-}
-
-void NetworkDataTask::failureTimerFired()
-{
-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
-
-    switch (m_scheduledFailureType) {
-    case BlockedFailure:
-        m_scheduledFailureType = NoFailure;
-        if (m_client)
-            m_client-&gt;wasBlocked();
-        return;
-    case InvalidURLFailure:
-        m_scheduledFailureType = NoFailure;
-        if (m_client)
-            m_client-&gt;cannotShowURL();
-        return;
-    case NoFailure:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    ASSERT_NOT_REACHED();
-}
-
-String NetworkDataTask::suggestedFilename()
-{
</del><span class="cx">     if (!m_suggestedFilename.isEmpty())
</span><span class="cx">         return m_suggestedFilename;
</span><span class="cx"> 
</span><span class="lines">@@ -142,24 +95,14 @@
</span><span class="cx">     return decodeURLEscapeSequences(m_response.url().lastPathComponent());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::setSuggestedFilename(const String&amp; suggestedName)
</del><ins>+void NetworkDataTaskSoup::setPendingDownloadLocation(const String&amp; filename, const SandboxExtension::Handle&amp; sandboxExtensionHandle, bool allowOverwrite)
</ins><span class="cx"> {
</span><del>-    m_suggestedFilename = suggestedName;
-}
-
-void NetworkDataTask::setPendingDownloadLocation(const String&amp; filename, const SandboxExtension::Handle&amp;, bool allowOverwrite)
-{
-    m_pendingDownloadLocation = filename;
</del><ins>+    NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);
</ins><span class="cx">     m_allowOverwriteDownload = allowOverwrite;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool NetworkDataTask::allowsSpecificHTTPSCertificateForHost(const AuthenticationChallenge&amp;)
</del><ins>+void NetworkDataTaskSoup::createRequest(const ResourceRequest&amp; request)
</ins><span class="cx"> {
</span><del>-    return false;
-}
-
-void NetworkDataTask::createRequest(const ResourceRequest&amp; request)
-{
</del><span class="cx">     GUniquePtr&lt;SoupURI&gt; soupURI = request.createSoupURI();
</span><span class="cx">     if (!soupURI) {
</span><span class="cx">         scheduleFailure(InvalidURLFailure);
</span><span class="lines">@@ -166,7 +109,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    GRefPtr&lt;SoupRequest&gt; soupRequest = adoptGRef(soup_session_request_uri(m_session-&gt;soupSession(), soupURI.get(), nullptr));
</del><ins>+    GRefPtr&lt;SoupRequest&gt; soupRequest = adoptGRef(soup_session_request_uri(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), soupURI.get(), nullptr));
</ins><span class="cx">     if (!soupRequest) {
</span><span class="cx">         scheduleFailure(InvalidURLFailure);
</span><span class="cx">         return;
</span><span class="lines">@@ -218,7 +161,7 @@
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;notify::tls-errors&quot;, G_CALLBACK(tlsErrorsChangedCallback), this);
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;got-headers&quot;, G_CALLBACK(gotHeadersCallback), this);
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;wrote-body-data&quot;, G_CALLBACK(wroteBodyDataCallback), this);
</span><del>-    g_signal_connect(m_session-&gt;soupSession(), &quot;authenticate&quot;,  G_CALLBACK(authenticateCallback), this);
</del><ins>+    g_signal_connect(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), &quot;authenticate&quot;,  G_CALLBACK(authenticateCallback), this);
</ins><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;network-event&quot;, G_CALLBACK(networkEventCallback), this);
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;restarted&quot;, G_CALLBACK(restartedCallback), this);
</span><span class="lines">@@ -225,12 +168,12 @@
</span><span class="cx"> #if SOUP_CHECK_VERSION(2, 49, 91)
</span><span class="cx">     g_signal_connect(m_soupMessage.get(), &quot;starting&quot;, G_CALLBACK(startingCallback), this);
</span><span class="cx"> #else
</span><del>-    g_signal_connect(m_session-&gt;soupSession(), &quot;request-started&quot;, G_CALLBACK(requestStartedCallback), this);
</del><ins>+    g_signal_connect(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), &quot;request-started&quot;, G_CALLBACK(requestStartedCallback), this);
</ins><span class="cx"> #endif
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::clearRequest()
</del><ins>+void NetworkDataTaskSoup::clearRequest()
</ins><span class="cx"> {
</span><span class="cx">     if (m_state == State::Completed)
</span><span class="cx">         return;
</span><span class="lines">@@ -247,13 +190,13 @@
</span><span class="cx">     m_cancellable = nullptr;
</span><span class="cx">     if (m_soupMessage) {
</span><span class="cx">         g_signal_handlers_disconnect_matched(m_soupMessage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
</span><del>-        soup_session_cancel_message(m_session-&gt;soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</del><ins>+        soup_session_cancel_message(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</ins><span class="cx">         m_soupMessage = nullptr;
</span><span class="cx">     }
</span><del>-    g_signal_handlers_disconnect_matched(m_session-&gt;soupSession(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
</del><ins>+    g_signal_handlers_disconnect_matched(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::resume()
</del><ins>+void NetworkDataTaskSoup::resume()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_state != State::Running);
</span><span class="cx">     if (m_state == State::Canceling || m_state == State::Completed)
</span><span class="lines">@@ -268,7 +211,7 @@
</span><span class="cx"> 
</span><span class="cx">     startTimeout();
</span><span class="cx"> 
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     if (m_soupRequest &amp;&amp; !m_cancellable) {
</span><span class="cx">         m_cancellable = adoptGRef(g_cancellable_new());
</span><span class="cx">         soup_request_send_async(m_soupRequest.get(), m_cancellable.get(), reinterpret_cast&lt;GAsyncReadyCallback&gt;(sendRequestCallback), protectedThis.leakRef());
</span><span class="lines">@@ -288,7 +231,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::suspend()
</del><ins>+void NetworkDataTaskSoup::suspend()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_state != State::Suspended);
</span><span class="cx">     if (m_state == State::Canceling || m_state == State::Completed)
</span><span class="lines">@@ -298,7 +241,7 @@
</span><span class="cx">     stopTimeout();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::cancel()
</del><ins>+void NetworkDataTaskSoup::cancel()
</ins><span class="cx"> {
</span><span class="cx">     if (m_state == State::Canceling || m_state == State::Completed)
</span><span class="cx">         return;
</span><span class="lines">@@ -306,7 +249,7 @@
</span><span class="cx">     m_state = State::Canceling;
</span><span class="cx"> 
</span><span class="cx">     if (m_soupMessage)
</span><del>-        soup_session_cancel_message(m_session-&gt;soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</del><ins>+        soup_session_cancel_message(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</ins><span class="cx"> 
</span><span class="cx">     g_cancellable_cancel(m_cancellable.get());
</span><span class="cx"> 
</span><span class="lines">@@ -314,18 +257,18 @@
</span><span class="cx">         cleanDownloadFiles();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::invalidateAndCancel()
</del><ins>+void NetworkDataTaskSoup::invalidateAndCancel()
</ins><span class="cx"> {
</span><span class="cx">     cancel();
</span><span class="cx">     clearRequest();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkDataTask::State NetworkDataTask::state() const
</del><ins>+NetworkDataTask::State NetworkDataTaskSoup::state() const
</ins><span class="cx"> {
</span><span class="cx">     return m_state;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::timeoutFired()
</del><ins>+void NetworkDataTaskSoup::timeoutFired()
</ins><span class="cx"> {
</span><span class="cx">     if (m_state == State::Canceling || m_state == State::Completed || !m_client) {
</span><span class="cx">         clearRequest();
</span><span class="lines">@@ -332,25 +275,25 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     invalidateAndCancel();
</span><span class="cx">     m_client-&gt;didCompleteWithError(ResourceError::timeoutError(m_firstRequest.url()));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::startTimeout()
</del><ins>+void NetworkDataTaskSoup::startTimeout()
</ins><span class="cx"> {
</span><span class="cx">     if (m_firstRequest.timeoutInterval() &gt; 0)
</span><span class="cx">         m_timeoutSource.startOneShot(m_firstRequest.timeoutInterval());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::stopTimeout()
</del><ins>+void NetworkDataTaskSoup::stopTimeout()
</ins><span class="cx"> {
</span><span class="cx">     m_timeoutSource.stop();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::sendRequestCallback(SoupRequest* soupRequest, GAsyncResult* result, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::sendRequestCallback(SoupRequest* soupRequest, GAsyncResult* result, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis = adoptRef(task);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis = adoptRef(task);
</ins><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="cx">         return;
</span><span class="lines">@@ -371,7 +314,7 @@
</span><span class="cx">         task-&gt;didSendRequest(WTFMove(inputStream));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didSendRequest(GRefPtr&lt;GInputStream&gt;&amp;&amp; inputStream)
</del><ins>+void NetworkDataTaskSoup::didSendRequest(GRefPtr&lt;GInputStream&gt;&amp;&amp; inputStream)
</ins><span class="cx"> {
</span><span class="cx">     if (m_soupMessage) {
</span><span class="cx">         if (m_shouldContentSniff == SniffContent &amp;&amp; m_soupMessage-&gt;status_code != SOUP_STATUS_NOT_MODIFIED)
</span><span class="lines">@@ -405,7 +348,7 @@
</span><span class="cx">     didReceiveResponse();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didReceiveResponse()
</del><ins>+void NetworkDataTaskSoup::didReceiveResponse()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_response.isNull());
</span><span class="cx"> 
</span><span class="lines">@@ -436,7 +379,7 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::tlsErrorsChangedCallback(SoupMessage* soupMessage, GParamSpec*, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::tlsErrorsChangedCallback(SoupMessage* soupMessage, GParamSpec*, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="lines">@@ -447,7 +390,7 @@
</span><span class="cx">     task-&gt;tlsErrorsChanged();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::tlsErrorsChanged()
</del><ins>+void NetworkDataTaskSoup::tlsErrorsChanged()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_soupRequest);
</span><span class="cx">     SoupNetworkSession::checkTLSErrors(m_soupRequest.get(), m_soupMessage.get(), [this] (const ResourceError&amp; error) {
</span><span class="lines">@@ -454,13 +397,13 @@
</span><span class="cx">         if (error.isNull())
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+        RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">         invalidateAndCancel();
</span><span class="cx">         m_client-&gt;didCompleteWithError(error);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::applyAuthenticationToRequest(ResourceRequest&amp; request)
</del><ins>+void NetworkDataTaskSoup::applyAuthenticationToRequest(ResourceRequest&amp; request)
</ins><span class="cx"> {
</span><span class="cx">     // We always put the credentials into the URL. In the Coca port HTTP family credentials are applied in
</span><span class="cx">     // the didReceiveChallenge callback, but libsoup requires us to use this method to override
</span><span class="lines">@@ -480,9 +423,9 @@
</span><span class="cx">     request.setURL(url);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::authenticateCallback(SoupSession* session, SoupMessage* soupMessage, SoupAuth* soupAuth, gboolean retrying, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::authenticateCallback(SoupSession* session, SoupMessage* soupMessage, SoupAuth* soupAuth, gboolean retrying, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    ASSERT(session == task-&gt;m_session-&gt;soupSession());
</del><ins>+    ASSERT(session == task-&gt;static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession());
</ins><span class="cx">     if (soupMessage != task-&gt;m_soupMessage.get())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -499,7 +442,7 @@
</span><span class="cx">     return httpStatusCode == SOUP_STATUS_PROXY_AUTHENTICATION_REQUIRED || httpStatusCode == SOUP_STATUS_UNAUTHORIZED;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::authenticate(AuthenticationChallenge&amp;&amp; challenge)
</del><ins>+void NetworkDataTaskSoup::authenticate(AuthenticationChallenge&amp;&amp; challenge)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_soupMessage);
</span><span class="cx">     if (m_storedCredentials == AllowStoredCredentials) {
</span><span class="lines">@@ -525,7 +468,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    soup_session_pause_message(m_session-&gt;soupSession(), m_soupMessage.get());
</del><ins>+    soup_session_pause_message(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), m_soupMessage.get());
</ins><span class="cx"> 
</span><span class="cx">     // We could also do this before we even start the request, but that would be at the expense
</span><span class="cx">     // of all request latency, versus a one-time latency for the small subset of requests that
</span><span class="lines">@@ -547,7 +490,7 @@
</span><span class="cx">         continueAuthenticate(WTFMove(challenge));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::continueAuthenticate(AuthenticationChallenge&amp;&amp; challenge)
</del><ins>+void NetworkDataTaskSoup::continueAuthenticate(AuthenticationChallenge&amp;&amp; challenge)
</ins><span class="cx"> {
</span><span class="cx">     m_client-&gt;didReceiveChallenge(challenge, [this, protectedThis = makeRef(*this), challenge](AuthenticationChallengeDisposition disposition, const Credential&amp; credential) {
</span><span class="cx">         if (m_state == State::Canceling || m_state == State::Completed) {
</span><span class="lines">@@ -579,13 +522,13 @@
</span><span class="cx">             soup_auth_authenticate(challenge.soupAuth(), credential.user().utf8().data(), credential.password().utf8().data());
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        soup_session_unpause_message(m_session-&gt;soupSession(), m_soupMessage.get());
</del><ins>+        soup_session_unpause_message(static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession(), m_soupMessage.get());
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::skipInputStreamForRedirectionCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::skipInputStreamForRedirectionCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis = adoptRef(task);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis = adoptRef(task);
</ins><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="cx">         return;
</span><span class="lines">@@ -602,15 +545,15 @@
</span><span class="cx">         task-&gt;didFinishSkipInputStreamForRedirection();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::skipInputStreamForRedirection()
</del><ins>+void NetworkDataTaskSoup::skipInputStreamForRedirection()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_inputStream);
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     g_input_stream_skip_async(m_inputStream.get(), gDefaultReadBufferSize, G_PRIORITY_DEFAULT, m_cancellable.get(),
</span><span class="cx">         reinterpret_cast&lt;GAsyncReadyCallback&gt;(skipInputStreamForRedirectionCallback), protectedThis.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFinishSkipInputStreamForRedirection()
</del><ins>+void NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection()
</ins><span class="cx"> {
</span><span class="cx">     g_input_stream_close(m_inputStream.get(), nullptr, nullptr);
</span><span class="cx">     continueHTTPRedirection();
</span><span class="lines">@@ -637,7 +580,7 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool NetworkDataTask::shouldStartHTTPRedirection()
</del><ins>+bool NetworkDataTaskSoup::shouldStartHTTPRedirection()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_soupMessage);
</span><span class="cx">     ASSERT(!m_response.isNull());
</span><span class="lines">@@ -656,7 +599,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::continueHTTPRedirection()
</del><ins>+void NetworkDataTaskSoup::continueHTTPRedirection()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_soupMessage);
</span><span class="cx">     ASSERT(!m_response.isNull());
</span><span class="lines">@@ -727,9 +670,9 @@
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::readCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::readCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis = adoptRef(task);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis = adoptRef(task);
</ins><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || (!task-&gt;m_client &amp;&amp; !task-&gt;isDownload())) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="cx">         return;
</span><span class="lines">@@ -752,9 +695,9 @@
</span><span class="cx">         task-&gt;didFinishRead();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::read()
</del><ins>+void NetworkDataTaskSoup::read()
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     ASSERT(m_inputStream);
</span><span class="cx">     m_readBuffer.grow(gDefaultReadBufferSize);
</span><span class="cx">     g_input_stream_read_async(m_inputStream.get(), m_readBuffer.data(), m_readBuffer.size(), G_PRIORITY_DEFAULT, m_cancellable.get(),
</span><span class="lines">@@ -761,7 +704,7 @@
</span><span class="cx">         reinterpret_cast&lt;GAsyncReadyCallback&gt;(readCallback), protectedThis.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didRead(gssize bytesRead)
</del><ins>+void NetworkDataTaskSoup::didRead(gssize bytesRead)
</ins><span class="cx"> {
</span><span class="cx">     m_readBuffer.shrink(bytesRead);
</span><span class="cx">     if (m_downloadOutputStream) {
</span><span class="lines">@@ -774,7 +717,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFinishRead()
</del><ins>+void NetworkDataTaskSoup::didFinishRead()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_inputStream);
</span><span class="cx">     g_input_stream_close(m_inputStream.get(), nullptr, nullptr);
</span><span class="lines">@@ -794,9 +737,9 @@
</span><span class="cx">     m_client-&gt;didCompleteWithError({ });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::requestNextPartCallback(SoupMultipartInputStream* multipartInputStream, GAsyncResult* result, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::requestNextPartCallback(SoupMultipartInputStream* multipartInputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis = adoptRef(task);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis = adoptRef(task);
</ins><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="cx">         return;
</span><span class="lines">@@ -819,9 +762,9 @@
</span><span class="cx">         task-&gt;didFinishRequestNextPart();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::requestNextPart()
</del><ins>+void NetworkDataTaskSoup::requestNextPart()
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     ASSERT(m_multipartInputStream);
</span><span class="cx">     ASSERT(!m_inputStream);
</span><span class="cx">     soup_multipart_input_stream_next_part_async(m_multipartInputStream.get(), G_PRIORITY_DEFAULT, m_cancellable.get(),
</span><span class="lines">@@ -828,7 +771,7 @@
</span><span class="cx">         reinterpret_cast&lt;GAsyncReadyCallback&gt;(requestNextPartCallback), protectedThis.leakRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didRequestNextPart(GRefPtr&lt;GInputStream&gt;&amp;&amp; inputStream)
</del><ins>+void NetworkDataTaskSoup::didRequestNextPart(GRefPtr&lt;GInputStream&gt;&amp;&amp; inputStream)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_inputStream);
</span><span class="cx">     m_inputStream = WTFMove(inputStream);
</span><span class="lines">@@ -838,7 +781,7 @@
</span><span class="cx">     didReceiveResponse();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFinishRequestNextPart()
</del><ins>+void NetworkDataTaskSoup::didFinishRequestNextPart()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_inputStream);
</span><span class="cx">     ASSERT(m_multipartInputStream);
</span><span class="lines">@@ -847,7 +790,7 @@
</span><span class="cx">     m_client-&gt;didCompleteWithError({ });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::gotHeadersCallback(SoupMessage* soupMessage, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::gotHeadersCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="lines">@@ -857,7 +800,7 @@
</span><span class="cx">     task-&gt;didGetHeaders();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didGetHeaders()
</del><ins>+void NetworkDataTaskSoup::didGetHeaders()
</ins><span class="cx"> {
</span><span class="cx">     // We are a bit more conservative with the persistent credential storage than the session store,
</span><span class="cx">     // since we are waiting until we know that this authentication succeeded before actually storing.
</span><span class="lines">@@ -870,7 +813,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::wroteBodyDataCallback(SoupMessage* soupMessage, SoupBuffer* buffer, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::wroteBodyDataCallback(SoupMessage* soupMessage, SoupBuffer* buffer, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="lines">@@ -880,14 +823,14 @@
</span><span class="cx">     task-&gt;didWriteBodyData(buffer-&gt;length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didWriteBodyData(uint64_t bytesSent)
</del><ins>+void NetworkDataTaskSoup::didWriteBodyData(uint64_t bytesSent)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx">     m_bodyDataTotalBytesSent += bytesSent;
</span><span class="cx">     m_client-&gt;didSendData(m_bodyDataTotalBytesSent, m_soupMessage-&gt;request_body-&gt;length);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::download()
</del><ins>+void NetworkDataTaskSoup::download()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isDownload());
</span><span class="cx">     ASSERT(m_pendingDownloadLocation);
</span><span class="lines">@@ -931,9 +874,9 @@
</span><span class="cx">     read();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::writeDownloadCallback(GOutputStream* outputStream, GAsyncResult* result, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::writeDownloadCallback(GOutputStream* outputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis = adoptRef(task);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis = adoptRef(task);
</ins><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;isDownload()) {
</span><span class="cx">         task-&gt;clearRequest();
</span><span class="cx">         return;
</span><span class="lines">@@ -955,9 +898,9 @@
</span><span class="cx">         task-&gt;didWriteDownload(bytesWritten);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::writeDownload()
</del><ins>+void NetworkDataTaskSoup::writeDownload()
</ins><span class="cx"> {
</span><del>-    RefPtr&lt;NetworkDataTask&gt; protectedThis(this);
</del><ins>+    RefPtr&lt;NetworkDataTaskSoup&gt; protectedThis(this);
</ins><span class="cx"> #if GLIB_CHECK_VERSION(2, 44, 0)
</span><span class="cx">     g_output_stream_write_all_async(m_downloadOutputStream.get(), m_readBuffer.data(), m_readBuffer.size(), G_PRIORITY_DEFAULT, m_cancellable.get(),
</span><span class="cx">         reinterpret_cast&lt;GAsyncReadyCallback&gt;(writeDownloadCallback), protectedThis.leakRef());
</span><span class="lines">@@ -966,7 +909,7 @@
</span><span class="cx">         reinterpret_cast&lt;GAsyncReadyCallback&gt;(writeDownloadCallback), protectedThis.leakRef()));
</span><span class="cx">     g_task_set_task_data(writeTask.get(), this, nullptr);
</span><span class="cx">     g_task_run_in_thread(writeTask.get(), [](GTask* writeTask, gpointer source, gpointer userData, GCancellable* cancellable) {
</span><del>-        auto* task = static_cast&lt;NetworkDataTask*&gt;(userData);
</del><ins>+        auto* task = static_cast&lt;NetworkDataTaskSoup*&gt;(userData);
</ins><span class="cx">         GOutputStream* outputStream = G_OUTPUT_STREAM(source);
</span><span class="cx">         RELEASE_ASSERT(task-&gt;m_downloadOutputStream.get() == outputStream);
</span><span class="cx">         RELEASE_ASSERT(task-&gt;m_cancellable.get() == cancellable);
</span><span class="lines">@@ -985,7 +928,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didWriteDownload(gsize bytesWritten)
</del><ins>+void NetworkDataTaskSoup::didWriteDownload(gsize bytesWritten)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(bytesWritten == m_readBuffer.size());
</span><span class="cx">     auto* download = NetworkProcess::singleton().downloadManager().download(m_pendingDownloadID);
</span><span class="lines">@@ -994,7 +937,7 @@
</span><span class="cx">     read();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFinishDownload()
</del><ins>+void NetworkDataTaskSoup::didFinishDownload()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_response.isNull());
</span><span class="cx">     ASSERT(m_downloadOutputStream);
</span><span class="lines">@@ -1021,7 +964,7 @@
</span><span class="cx">     download-&gt;didFinish();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFailDownload(const ResourceError&amp; error)
</del><ins>+void NetworkDataTaskSoup::didFailDownload(const ResourceError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     clearRequest();
</span><span class="cx">     cleanDownloadFiles();
</span><span class="lines">@@ -1034,7 +977,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::cleanDownloadFiles()
</del><ins>+void NetworkDataTaskSoup::cleanDownloadFiles()
</ins><span class="cx"> {
</span><span class="cx">     if (m_downloadDestinationFile) {
</span><span class="cx">         g_file_delete(m_downloadDestinationFile.get(), nullptr, nullptr);
</span><span class="lines">@@ -1046,7 +989,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didFail(const ResourceError&amp; error)
</del><ins>+void NetworkDataTaskSoup::didFail(const ResourceError&amp; error)
</ins><span class="cx"> {
</span><span class="cx">     if (isDownload()) {
</span><span class="cx">         didFailDownload(platformDownloadNetworkError(error.errorCode(), error.failingURL(), error.localizedDescription()));
</span><span class="lines">@@ -1059,7 +1002,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(WEB_TIMING)
</span><del>-void NetworkDataTask::networkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream*, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::networkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream*, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client)
</span><span class="cx">         return;
</span><span class="lines">@@ -1068,7 +1011,7 @@
</span><span class="cx">     task-&gt;networkEvent(event);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::networkEvent(GSocketClientEvent event)
</del><ins>+void NetworkDataTaskSoup::networkEvent(GSocketClientEvent event)
</ins><span class="cx"> {
</span><span class="cx">     double deltaTime = monotonicallyIncreasingTimeMS() - m_startTime;
</span><span class="cx">     auto&amp; loadTiming = m_response.networkLoadTiming();
</span><span class="lines">@@ -1105,7 +1048,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #if SOUP_CHECK_VERSION(2, 49, 91)
</span><del>-void NetworkDataTask::startingCallback(SoupMessage* soupMessage, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::startingCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     if (task-&gt;state() == State::Canceling || task-&gt;state() == State::Completed || !task-&gt;m_client)
</span><span class="cx">         return;
</span><span class="lines">@@ -1114,9 +1057,9 @@
</span><span class="cx">     task-&gt;didStartRequest();
</span><span class="cx"> }
</span><span class="cx"> #else
</span><del>-void NetworkDataTask::requestStartedCallback(SoupSession* session, SoupMessage* soupMessage, SoupSocket*, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::requestStartedCallback(SoupSession* session, SoupMessage* soupMessage, SoupSocket*, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><del>-    ASSERT(session == task-&gt;m_session-&gt;soupSession());
</del><ins>+    ASSERT(session == task-&gt;static_cast&lt;NetworkSessionSoup&amp;&gt;(m_session.get()).soupSession());
</ins><span class="cx">     if (soupMessage != task-&gt;m_soupMessage.get())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -1127,12 +1070,12 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didStartRequest()
</del><ins>+void NetworkDataTaskSoup::didStartRequest()
</ins><span class="cx"> {
</span><span class="cx">     m_response.networkLoadTiming().requestStart = monotonicallyIncreasingTimeMS() - m_startTime;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::restartedCallback(SoupMessage* soupMessage, NetworkDataTask* task)
</del><ins>+void NetworkDataTaskSoup::restartedCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
</ins><span class="cx"> {
</span><span class="cx">     // Called each time the message is going to be sent again except the first time.
</span><span class="cx">     // This happens when libsoup handles HTTP authentication.
</span><span class="lines">@@ -1143,7 +1086,7 @@
</span><span class="cx">     task-&gt;didRestart();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkDataTask::didRestart()
</del><ins>+void NetworkDataTaskSoup::didRestart()
</ins><span class="cx"> {
</span><span class="cx">     m_startTime = monotonicallyIncreasingTimeMS();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkDataTaskSouph"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,145 @@
</span><ins>+/*
+ * Copyright (C) 2016 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;NetworkDataTask.h&quot;
+#include &lt;WebCore/ProtectionSpace.h&gt;
+#include &lt;WebCore/ResourceResponse.h&gt;
+#include &lt;wtf/RunLoop.h&gt;
+#include &lt;wtf/glib/GRefPtr.h&gt;
+
+namespace WebKit {
+
+class NetworkDataTaskSoup final : public NetworkDataTask {
+public:
+    static Ref&lt;NetworkDataTask&gt; create(NetworkSession&amp; session, NetworkDataTaskClient&amp; client, const WebCore::ResourceRequest&amp; request, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+    {
+        return adoptRef(*new NetworkDataTaskSoup(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
+    }
+
+    ~NetworkDataTaskSoup();
+
+    void invalidateAndCancel();
+
+private:
+    NetworkDataTaskSoup(NetworkSession&amp;, NetworkDataTaskClient&amp;, const WebCore::ResourceRequest&amp;, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+
+    void suspend() override;
+    void cancel() override;
+    void resume() override;
+    NetworkDataTask::State state() const override;
+
+    void setPendingDownloadLocation(const String&amp;, const SandboxExtension::Handle&amp;, bool /*allowOverwrite*/) override;
+    String suggestedFilename() const override;
+
+    void timeoutFired();
+    void startTimeout();
+    void stopTimeout();
+
+    void createRequest(const WebCore::ResourceRequest&amp;);
+    void clearRequest();
+    static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTaskSoup*);
+    void didSendRequest(GRefPtr&lt;GInputStream&gt;&amp;&amp;);
+    void didReceiveResponse();
+
+    static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTaskSoup*);
+    void tlsErrorsChanged();
+
+    void applyAuthenticationToRequest(WebCore::ResourceRequest&amp;);
+    static void authenticateCallback(SoupSession*, SoupMessage*, SoupAuth*, gboolean retrying, NetworkDataTaskSoup*);
+    void authenticate(WebCore::AuthenticationChallenge&amp;&amp;);
+    void continueAuthenticate(WebCore::AuthenticationChallenge&amp;&amp;);
+
+    static void skipInputStreamForRedirectionCallback(GInputStream*, GAsyncResult*, NetworkDataTaskSoup*);
+    void skipInputStreamForRedirection();
+    void didFinishSkipInputStreamForRedirection();
+    bool shouldStartHTTPRedirection();
+    void continueHTTPRedirection();
+
+    static void readCallback(GInputStream*, GAsyncResult*, NetworkDataTaskSoup*);
+    void read();
+    void didRead(gssize bytesRead);
+    void didFinishRead();
+
+    static void requestNextPartCallback(SoupMultipartInputStream*, GAsyncResult*, NetworkDataTaskSoup*);
+    void requestNextPart();
+    void didRequestNextPart(GRefPtr&lt;GInputStream&gt;&amp;&amp;);
+    void didFinishRequestNextPart();
+
+    static void gotHeadersCallback(SoupMessage*, NetworkDataTaskSoup*);
+    void didGetHeaders();
+
+    static void wroteBodyDataCallback(SoupMessage*, SoupBuffer*, NetworkDataTaskSoup*);
+    void didWriteBodyData(uint64_t bytesSent);
+
+    void download();
+    static void writeDownloadCallback(GOutputStream*, GAsyncResult*, NetworkDataTaskSoup*);
+    void writeDownload();
+    void didWriteDownload(gsize bytesWritten);
+    void didFailDownload(const WebCore::ResourceError&amp;);
+    void didFinishDownload();
+    void cleanDownloadFiles();
+
+    void didFail(const WebCore::ResourceError&amp;);
+
+#if ENABLE(WEB_TIMING)
+    static void networkEventCallback(SoupMessage*, GSocketClientEvent, GIOStream*, NetworkDataTaskSoup*);
+    void networkEvent(GSocketClientEvent);
+#if SOUP_CHECK_VERSION(2, 49, 91)
+    static void startingCallback(SoupMessage*, NetworkDataTaskSoup*);
+#else
+    static void requestStartedCallback(SoupSession*, SoupMessage*, SoupSocket*, NetworkDataTaskSoup*);
+#endif
+    void didStartRequest();
+    static void restartedCallback(SoupMessage*, NetworkDataTaskSoup*);
+    void didRestart();
+#endif // ENABLE(WEB_TIMING)
+
+    State m_state { State::Suspended };
+    WebCore::ContentSniffingPolicy m_shouldContentSniff;
+    GRefPtr&lt;SoupRequest&gt; m_soupRequest;
+    GRefPtr&lt;SoupMessage&gt; m_soupMessage;
+    GRefPtr&lt;GInputStream&gt; m_inputStream;
+    GRefPtr&lt;SoupMultipartInputStream&gt; m_multipartInputStream;
+    GRefPtr&lt;GCancellable&gt; m_cancellable;
+    GRefPtr&lt;GAsyncResult&gt; m_pendingResult;
+    WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
+    WebCore::Credential m_credentialForPersistentStorage;
+    WebCore::ResourceResponse m_response;
+    Vector&lt;char&gt; m_readBuffer;
+    unsigned m_redirectCount { 0 };
+    uint64_t m_bodyDataTotalBytesSent { 0 };
+    GRefPtr&lt;GFile&gt; m_downloadDestinationFile;
+    GRefPtr&lt;GFile&gt; m_downloadIntermediateFile;
+    GRefPtr&lt;GOutputStream&gt; m_downloadOutputStream;
+    bool m_allowOverwriteDownload { false };
+#if ENABLE(WEB_TIMING)
+    double m_startTime { 0 };
+#endif
+    RunLoop::Timer&lt;NetworkDataTaskSoup&gt; m_timeoutSource;
+};
+
+} // namespace WebKit
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkSessionSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -24,8 +24,9 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><del>-#include &quot;NetworkSession.h&quot;
</del><ins>+#include &quot;NetworkSessionSoup.h&quot;
</ins><span class="cx"> 
</span><ins>+#include &quot;NetworkDataTaskSoup.h&quot;
</ins><span class="cx"> #include &lt;WebCore/NetworkStorageSession.h&gt;
</span><span class="cx"> #include &lt;WebCore/SoupNetworkSession.h&gt;
</span><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="lines">@@ -34,47 +35,24 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><del>-Ref&lt;NetworkSession&gt; NetworkSession::create(Type type, SessionID sessionID, CustomProtocolManager*)
</del><ins>+NetworkSessionSoup::NetworkSessionSoup(SessionID sessionID)
+    : NetworkSession(sessionID)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new NetworkSession(type, sessionID, nullptr));
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkSession&amp; NetworkSession::defaultSession()
</del><ins>+NetworkSessionSoup::~NetworkSessionSoup()
</ins><span class="cx"> {
</span><del>-    ASSERT(isMainThread());
-    static NetworkSession* session = &amp;NetworkSession::create(NetworkSession::Type::Normal, SessionID::defaultSessionID(), nullptr).leakRef();
-    return *session;
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-NetworkStorageSession&amp; NetworkSession::networkStorageSession() const
</del><ins>+SoupSession* NetworkSessionSoup::soupSession() const
</ins><span class="cx"> {
</span><del>-    auto* storageSession = NetworkStorageSession::storageSession(m_sessionID);
-    RELEASE_ASSERT(storageSession);
-    return *storageSession;
-}
-
-NetworkSession::NetworkSession(Type type, SessionID sessionID, CustomProtocolManager*)
-    : m_sessionID(sessionID)
-{
-}
-
-NetworkSession::~NetworkSession()
-{
-}
-
-SoupSession* NetworkSession::soupSession() const
-{
</del><span class="cx">     return networkStorageSession().soupNetworkSession().soupSession();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::invalidateAndCancel()
</del><ins>+void NetworkSessionSoup::invalidateAndCancel()
</ins><span class="cx"> {
</span><span class="cx">     for (auto* task : m_dataTaskSet)
</span><span class="cx">         task-&gt;invalidateAndCancel();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void NetworkSession::clearCredentials()
-{
-}
-
</del><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupNetworkSessionSouphfromrev207812trunkSourceWebKit2NetworkProcesssoupRemoteNetworkingContextSoupcpp"></a>
<div class="copfile"><h4>Copied: trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.h (from rev 207812, trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp) (0 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.h                                (rev 0)
+++ trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.h        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -0,0 +1,58 @@
</span><ins>+/*
+ * Copyright (C) 2016 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &quot;NetworkSession.h&quot;
+#include &lt;wtf/HashSet.h&gt;
+
+typedef struct _SoupSession SoupSession;
+
+namespace WebKit {
+
+class NetworkDataTaskSoup;
+
+class NetworkSessionSoup final : public NetworkSession {
+public:
+    static Ref&lt;NetworkSession&gt; create(WebCore::SessionID sessionID)
+    {
+        return adoptRef(*new NetworkSessionSoup(sessionID));
+    }
+    ~NetworkSessionSoup();
+
+    SoupSession* soupSession() const;
+
+    void registerNetworkDataTask(NetworkDataTaskSoup&amp; task) { m_dataTaskSet.add(&amp;task); }
+    void unregisterNetworkDataTask(NetworkDataTaskSoup&amp; task) { m_dataTaskSet.remove(&amp;task); }
+
+private:
+    NetworkSessionSoup(WebCore::SessionID);
+
+    void invalidateAndCancel() override;
+
+    HashSet&lt;NetworkDataTaskSoup*&gt; m_dataTaskSet;
+};
+
+} // namespace WebKit
</ins></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcesssoupRemoteNetworkingContextSoupcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -55,7 +55,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
</span><del>-    SessionTracker::setSession(sessionID, NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr));
</del><ins>+    SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> NetworkStorageSession&amp; RemoteNetworkingContext::storageSession() const
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformEflcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformEfl.cmake (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformEfl.cmake        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/PlatformEfl.cmake        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -249,6 +249,7 @@
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/CustomProtocols/soup&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/Downloads/soup&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/efl&quot;
</span><ins>+    &quot;${WEBKIT2_DIR}/NetworkProcess/soup&quot;
</ins><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/unix&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/Platform/efl&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/Shared/API/c/efl&quot;
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformGTK.cmake (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformGTK.cmake        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/PlatformGTK.cmake        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -845,6 +845,7 @@
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/CustomProtocols/soup&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/Downloads/soup&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/gtk&quot;
</span><ins>+    &quot;${WEBKIT2_DIR}/NetworkProcess/soup&quot;
</ins><span class="cx">     &quot;${WEBKIT2_DIR}/NetworkProcess/unix&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/Platform/IPC/glib&quot;
</span><span class="cx">     &quot;${WEBKIT2_DIR}/Shared/API/c/gtk&quot;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebKit2xcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -1039,6 +1039,10 @@
</span><span class="cx">                 52D5A1B01C57495A00DE34A3 /* WebVideoFullscreenManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D5A1AA1C57494E00DE34A3 /* WebVideoFullscreenManagerProxy.h */; };
</span><span class="cx">                 52D5A1B11C57496200DE34A3 /* WebVideoFullscreenManagerProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1AC1C57494E00DE34A3 /* WebVideoFullscreenManagerProxy.mm */; };
</span><span class="cx">                 52D5A1B71C574A0200DE34A3 /* WebVideoFullscreenManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1B41C5749F200DE34A3 /* WebVideoFullscreenManager.mm */; };
</span><ins>+                532159531DBAE7180054AA3C /* NetworkSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 532159521DBAE6FC0054AA3C /* NetworkSession.cpp */; };
+                532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */; };
+                532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */; };
+                532159561DBAE72D0054AA3C /* NetworkDataTaskCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */; };
</ins><span class="cx">                 5C052F261C6D3BD30076E919 /* AuthenticationManagerCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */; };
</span><span class="cx">                 5C1426EC1C23F80900D41183 /* NetworkProcessCreationParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */; };
</span><span class="cx">                 5C1426ED1C23F80900D41183 /* NetworkProcessCreationParameters.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1426E31C23F80500D41183 /* NetworkProcessCreationParameters.h */; };
</span><span class="lines">@@ -3119,6 +3123,10 @@
</span><span class="cx">                 52D5A1B21C5749F200DE34A3 /* WebVideoFullscreenManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebVideoFullscreenManager.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 52D5A1B31C5749F200DE34A3 /* WebVideoFullscreenManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebVideoFullscreenManager.messages.in; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 52D5A1B41C5749F200DE34A3 /* WebVideoFullscreenManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebVideoFullscreenManager.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTaskCocoa.h; path = NetworkProcess/cocoa/NetworkDataTaskCocoa.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSessionCocoa.h; path = NetworkProcess/cocoa/NetworkSessionCocoa.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkDataTask.cpp; path = NetworkProcess/NetworkDataTask.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                532159521DBAE6FC0054AA3C /* NetworkSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkSession.cpp; path = NetworkProcess/NetworkSession.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 579D18B71CCFE34B00B1974C /* PhotosSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotosSPI.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuthenticationManagerCocoa.mm; path = Authentication/cocoa/AuthenticationManagerCocoa.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcessCreationParameters.cpp; path = NetworkProcess/NetworkProcessCreationParameters.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -5435,6 +5443,7 @@
</span><span class="cx">                                 513A16491630A9BF005D7D22 /* NetworkConnectionToWebProcess.cpp */,
</span><span class="cx">                                 513A164A1630A9BF005D7D22 /* NetworkConnectionToWebProcess.h */,
</span><span class="cx">                                 513A164B1630A9BF005D7D22 /* NetworkConnectionToWebProcess.messages.in */,
</span><ins>+                                532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */,
</ins><span class="cx">                                 5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */,
</span><span class="cx">                                 839901FF1BE9A01B000F3653 /* NetworkLoad.cpp */,
</span><span class="cx">                                 839901FE1BE9A01B000F3653 /* NetworkLoad.h */,
</span><span class="lines">@@ -5453,6 +5462,7 @@
</span><span class="cx">                                 E1525517170109FB003D7ADB /* NetworkResourceLoader.messages.in */,
</span><span class="cx">                                 5C1426E51C23F80500D41183 /* NetworkResourceLoadParameters.cpp */,
</span><span class="cx">                                 5C1426E61C23F80500D41183 /* NetworkResourceLoadParameters.h */,
</span><ins>+                                532159521DBAE6FC0054AA3C /* NetworkSession.cpp */,
</ins><span class="cx">                                 5C20CB9E1BB0DD1800895BB1 /* NetworkSession.h */,
</span><span class="cx">                                 5CE85B1F1C88E6430070BFCE /* PingLoad.h */,
</span><span class="cx">                                 E1B78470163F24690007B692 /* RemoteNetworkingContext.h */,
</span><span class="lines">@@ -5845,8 +5855,10 @@
</span><span class="cx">                 7EC4F0F818E4A922008056AF /* cocoa */ = {
</span><span class="cx">                         isa = PBXGroup;
</span><span class="cx">                         children = (
</span><ins>+                                5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */,
</ins><span class="cx">                                 5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */,
</span><span class="cx">                                 7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */,
</span><ins>+                                532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */,
</ins><span class="cx">                                 5C20CB9B1BB0DCD200895BB1 /* NetworkSessionCocoa.mm */,
</span><span class="cx">                         );
</span><span class="cx">                         name = cocoa;
</span><span class="lines">@@ -8124,6 +8136,7 @@
</span><span class="cx">                                 BC7B633D12A45D1200D174A4 /* WKBundlePageGroup.h in Headers */,
</span><span class="cx">                                 1AB474D8184D43FD0051B622 /* WKBundlePageLoaderClient.h in Headers */,
</span><span class="cx">                                 ED82A7F2128C6FAF004477B3 /* WKBundlePageOverlay.h in Headers */,
</span><ins>+                                532159561DBAE72D0054AA3C /* NetworkDataTaskCocoa.h in Headers */,
</ins><span class="cx">                                 1AB474EA184D45130051B622 /* WKBundlePagePolicyClient.h in Headers */,
</span><span class="cx">                                 BC1B419811D41D570011E8DD /* WKBundlePagePrivate.h in Headers */,
</span><span class="cx">                                 1AB474DA184D44250051B622 /* WKBundlePageResourceLoadClient.h in Headers */,
</span><span class="lines">@@ -8193,6 +8206,7 @@
</span><span class="cx">                                 BC54CC1212D674EE005C67B0 /* WKGeolocationManager.h in Headers */,
</span><span class="cx">                                 BC06F44E12DBDF3F002D78DE /* WKGeolocationPermissionRequest.h in Headers */,
</span><span class="cx">                                 BC0E619812D6CD120012A72A /* WKGeolocationPosition.h in Headers */,
</span><ins>+                                532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */,
</ins><span class="cx">                                 0FCB4E4F18BBE044000FCFC9 /* WKGeolocationProviderIOS.h in Headers */,
</span><span class="cx">                                 BCC8B374125FB69000DE46A4 /* WKGeometry.h in Headers */,
</span><span class="cx">                                 1A422F8B18B29B5400D8CD96 /* WKHistoryDelegatePrivate.h in Headers */,
</span><span class="lines">@@ -9607,6 +9621,7 @@
</span><span class="cx">                                 2DFC7DBC1BCCC19500C1548C /* WebViewImpl.mm in Sources */,
</span><span class="cx">                                 C0337DD1127A2980008FF4F4 /* WebWheelEvent.cpp in Sources */,
</span><span class="cx">                                 868160D0187645570021E79D /* WindowServerConnection.mm in Sources */,
</span><ins>+                                532159531DBAE7180054AA3C /* NetworkSession.cpp in Sources */,
</ins><span class="cx">                                 29CD55AB128E294F00133C85 /* WKAccessibilityWebPageObjectBase.mm in Sources */,
</span><span class="cx">                                 29232DF818B2A9AE00D0596F /* WKAccessibilityWebPageObjectIOS.mm in Sources */,
</span><span class="cx">                                 29232DF918B2AB3A00D0596F /* WKAccessibilityWebPageObjectMac.mm in Sources */,
</span><span class="lines">@@ -9625,6 +9640,7 @@
</span><span class="cx">                                 BCBAACF51452324F0053F82F /* WKBrowsingContextGroup.mm in Sources */,
</span><span class="cx">                                 1AE00D4C182D6EB000087DD7 /* WKBrowsingContextHandle.mm in Sources */,
</span><span class="cx">                                 BC204EEE11C83EC8008F3375 /* WKBundle.cpp in Sources */,
</span><ins>+                                532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */,
</ins><span class="cx">                                 935EEB9E127761AC003322B8 /* WKBundleBackForwardList.cpp in Sources */,
</span><span class="cx">                                 935EEBA0127761AC003322B8 /* WKBundleBackForwardListItem.cpp in Sources */,
</span><span class="cx">                                 51FA2D7715212E2600C1BA0B /* WKBundleDOMWindowExtension.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportmacWebFrameNetworkingContextmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> 
</span><span class="cx">     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, base + '.' + String::number(sessionID.sessionID()));
</span><span class="cx"> #if USE(NETWORK_SESSION)
</span><del>-    auto networkSession = NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr);
</del><ins>+    auto networkSession = NetworkSession::create(sessionID);
</ins><span class="cx">     SessionTracker::setSession(sessionID, WTFMove(networkSession));
</span><span class="cx"> #endif
</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 (207812 => 207813)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp        2016-10-25 08:22:19 UTC (rev 207812)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp        2016-10-25 10:25:29 UTC (rev 207813)
</span><span class="lines">@@ -50,7 +50,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
</span><del>-    SessionTracker::setSession(sessionID, NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr));
</del><ins>+    SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebFrameNetworkingContext::setCookieAcceptPolicyForAllContexts(HTTPCookieAcceptPolicy policy)
</span></span></pre>
</div>
</div>

</body>
</html>