<!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 <cgarcia@igalia.com>
+
+ 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 <antti@apple.com>
</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 "config.h"
+#include "NetworkDataTask.h"
+
+#if USE(NETWORK_SESSION)
+
+#include "NetworkSession.h"
+#include <wtf/MainThread.h>
+
+#if PLATFORM(COCOA)
+#include "NetworkDataTaskCocoa.h"
+#endif
+#if USE(SOUP)
+#include "NetworkDataTaskSoup.h"
+#endif
+
+using namespace WebCore;
+
+namespace WebKit {
+
+Ref<NetworkDataTask> NetworkDataTask::create(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& 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& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentials storedCredentials, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
+ : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
+ , m_session(session)
+ , m_client(&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<NetworkDataTask> protectedThis(this);
+
+ switch (m_scheduledFailureType) {
+ case BlockedFailure:
+ m_scheduledFailureType = NoFailure;
+ if (m_client)
+ m_client->wasBlocked();
+ return;
+ case InvalidURLFailure:
+ m_scheduledFailureType = NoFailure;
+ if (m_client)
+ m_client->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 <WebCore/ResourceRequest.h>
</span><span class="cx"> #include <WebCore/Timer.h>
</span><span class="cx"> #include <wtf/Function.h>
</span><del>-#include <wtf/RetainPtr.h>
</del><span class="cx"> #include <wtf/text/WTFString.h>
</span><span class="cx">
</span><del>-#if PLATFORM(COCOA)
-OBJC_CLASS NSURLSessionDataTask;
-#endif
-
-#if USE(SOUP)
-#include <WebCore/ProtectionSpace.h>
-#include <WebCore/ResourceResponse.h>
-#include <wtf/RunLoop.h>
-#include <wtf/glib/GRefPtr.h>
-#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<NetworkDataTask> {
</span><del>- friend class NetworkSession;
</del><span class="cx"> public:
</span><del>- static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& 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<NetworkDataTask> create(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, 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&, ChallengeCompletionHandler&&);
- void didCompleteWithError(const WebCore::ResourceError&);
- void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&);
- void didReceiveData(Ref<WebCore::SharedBuffer>&&);
- void didBecomeDownload();
-
- void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
- void transferSandboxExtensionToDownload(Download&);
-#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 = &pendingDownload;
</span><span class="cx"> }
</span><del>- void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool allowOverwrite);
</del><ins>+
+ virtual void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool /*allowOverwrite*/) { m_pendingDownloadLocation = filename; }
</ins><span class="cx"> const String& 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& firstRequest() const { return m_firstRequest; }
</span><del>- String suggestedFilename();
- void setSuggestedFilename(const String&);
- bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&);
-
-private:
- NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
</del><ins>+ virtual String suggestedFilename() const { return String(); }
+ void setSuggestedFilename(const String& suggestedName) { m_suggestedFilename = suggestedName; }
+ virtual bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&) { return false; }
</ins><span class="cx">
</span><del>- bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, const ChallengeCompletionHandler&);
</del><ins>+protected:
+ NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, 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&);
- void clearRequest();
- static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTask*);
- void didSendRequest(GRefPtr<GInputStream>&&);
- void didReceiveResponse();
- static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTask*);
- void tlsErrorsChanged();
- void applyAuthenticationToRequest(WebCore::ResourceRequest&);
- static void authenticateCallback(SoupSession*, SoupMessage*, SoupAuth*, gboolean retrying, NetworkDataTask*);
- void authenticate(WebCore::AuthenticationChallenge&&);
- void continueAuthenticate(WebCore::AuthenticationChallenge&&);
- 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<GInputStream>&&);
- 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&);
- void didFinishDownload();
- void cleanDownloadFiles();
- void didFail(const WebCore::ResourceError&);
-#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<NetworkSession> m_session;
- NetworkDataTaskClient* m_client;
</del><ins>+ Ref<NetworkSession> 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<SandboxExtension> m_sandboxExtension;
-#if PLATFORM(COCOA)
- RetainPtr<NSURLSessionDataTask> m_task;
-#endif
-#if USE(SOUP)
- State m_state { State::Suspended };
- WebCore::ContentSniffingPolicy m_shouldContentSniff;
- GRefPtr<SoupRequest> m_soupRequest;
- GRefPtr<SoupMessage> m_soupMessage;
- GRefPtr<GInputStream> m_inputStream;
- GRefPtr<SoupMultipartInputStream> m_multipartInputStream;
- GRefPtr<GCancellable> m_cancellable;
- GRefPtr<GAsyncResult> m_pendingResult;
- WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
- WebCore::Credential m_credentialForPersistentStorage;
- WebCore::ResourceResponse m_response;
- Vector<char> m_readBuffer;
- unsigned m_redirectCount { 0 };
- uint64_t m_bodyDataTotalBytesSent { 0 };
- GRefPtr<GFile> m_downloadDestinationFile;
- GRefPtr<GFile> m_downloadIntermediateFile;
- GRefPtr<GOutputStream> m_downloadOutputStream;
- bool m_allowOverwriteDownload { false };
-#if ENABLE(WEB_TIMING)
- double m_startTime { 0 };
-#endif
- RunLoop::Timer<NetworkDataTask> 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&);
-#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 <WebCore/SharedBuffer.h>
</span><span class="cx"> #include <wtf/MainThread.h>
</span><span class="cx">
</span><ins>+#if PLATFORM(COCOA)
+#include "NetworkDataTaskCocoa.h"
+#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 "DownloadID.h"
</span><del>-#include "NetworkSession.h"
</del><ins>+#include "NetworkDataTask.h"
</ins><span class="cx"> #include <WebCore/AuthenticationChallenge.h>
</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 "NetworkCacheCoders.h"
</span><span class="cx"> #endif
</span><span class="cx">
</span><ins>+#if PLATFORM(COCOA)
+#include "NetworkSessionCocoa.h"
+#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<WebCookieManager>();
</span><span class="cx"> addSupplement<CustomProtocolManager>();
</span><span class="cx"> #if USE(NETWORK_SESSION) && PLATFORM(COCOA)
</span><del>- NetworkSession::setCustomProtocolManager(supplement<CustomProtocolManager>());
</del><ins>+ NetworkSessionCocoa::setCustomProtocolManager(supplement<CustomProtocolManager>());
</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 "config.h"
+#include "NetworkSession.h"
+
+#if USE(NETWORK_SESSION)
+
+#include <WebCore/NetworkStorageSession.h>
+#include <wtf/MainThread.h>
+
+#if PLATFORM(COCOA)
+#include "NetworkSessionCocoa.h"
+#endif
+#if USE(SOUP)
+#include "NetworkSessionSoup.h"
+#endif
+
+
+using namespace WebCore;
+
+namespace WebKit {
+
+Ref<NetworkSession> 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& NetworkSession::defaultSession()
+{
+#if PLATFORM(COCOA)
+ return NetworkSessionCocoa::defaultSession();
+#else
+ ASSERT(isMainThread());
+ static NetworkSession* session = &NetworkSession::create(SessionID::defaultSessionID()).leakRef();
+ return *session;
+#endif
+}
+
+NetworkStorageSession& 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 "DownloadID.h"
-#include "NetworkDataTask.h"
</del><span class="cx"> #include <WebCore/SessionID.h>
</span><del>-#include <wtf/HashMap.h>
-#include <wtf/HashSet.h>
</del><span class="cx"> #include <wtf/Ref.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</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<NetworkSession> {
</span><del>- friend class NetworkDataTask;
</del><span class="cx"> public:
</span><del>- enum class Type {
- Normal,
- Ephemeral
- };
-
- static Ref<NetworkSession> create(Type, WebCore::SessionID, CustomProtocolManager*);
</del><ins>+ static Ref<NetworkSession> create(WebCore::SessionID, CustomProtocolManager* = nullptr);
</ins><span class="cx"> static NetworkSession& 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& 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<CFDataRef>&&);
- static void setSourceApplicationBundleIdentifier(const String&);
- static void setSourceApplicationSecondaryIdentifier(const String&);
-#if PLATFORM(IOS)
- static void setCTDataConnectionServiceType(const String&);
-#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& networkStorageSession() const;
-
</del><span class="cx"> WebCore::SessionID m_sessionID;
</span><del>-
-#if PLATFORM(COCOA)
- HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithCredentials;
- HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithoutCredentials;
- HashMap<NetworkDataTask::TaskIdentifier, DownloadID> m_downloadMap;
-
- RetainPtr<NSURLSession> m_sessionWithCredentialStorage;
- RetainPtr<WKNetworkSessionDelegate> m_sessionWithCredentialStorageDelegate;
- RetainPtr<NSURLSession> m_sessionWithoutCredentialStorage;
- RetainPtr<WKNetworkSessionDelegate> m_sessionWithoutCredentialStorageDelegate;
-#elif USE(SOUP)
- HashSet<NetworkDataTask*> 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 "Logging.h"
</span><span class="cx"> #include "NetworkCache.h"
</span><span class="cx"> #include "NetworkLoad.h"
</span><ins>+#include "NetworkSession.h"
</ins><span class="cx"> #include <WebCore/SessionID.h>
</span><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="cx"> #include <wtf/RunLoop.h>
</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 "NetworkDataTask.h"
+#include <wtf/RetainPtr.h>
+
+OBJC_CLASS NSURLSessionDataTask;
+
+namespace WebKit {
+
+class NetworkSessionCocoa;
+
+class NetworkDataTaskCocoa final : public NetworkDataTask {
+ friend class NetworkSessionCocoa;
+public:
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& 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&, ChallengeCompletionHandler&&);
+ void didCompleteWithError(const WebCore::ResourceError&);
+ void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&);
+ void didReceiveData(Ref<WebCore::SharedBuffer>&&);
+ void didBecomeDownload();
+
+ void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
+ void transferSandboxExtensionToDownload(Download&);
+
+ void suspend() override;
+ void cancel() override;
+ void resume() override;
+ NetworkDataTask::State state() const override;
+
+ void setPendingDownloadLocation(const String&, const SandboxExtension::Handle&, bool /*allowOverwrite*/) override;
+ String suggestedFilename() const override;
+
+ bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&) override;
+
+private:
+ NetworkDataTaskCocoa(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+
+ bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, const ChallengeCompletionHandler&);
+
+ RefPtr<SandboxExtension> m_sandboxExtension;
+ RetainPtr<NSURLSessionDataTask> m_task;
+};
+
+WebCore::Credential serverTrustCredential(const WebCore::AuthenticationChallenge&);
+
+} // 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 "config.h"
</span><del>-#import "NetworkSession.h"
</del><ins>+#import "NetworkDataTaskCocoa.h"
</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 "DownloadProxyMessages.h"
</span><span class="cx"> #import "Logging.h"
</span><span class="cx"> #import "NetworkProcess.h"
</span><ins>+#import "NetworkSessionCocoa.h"
</ins><span class="cx"> #import "SessionTracker.h"
</span><span class="cx"> #import "WebCoreArgumentCoders.h"
</span><span class="cx"> #import <WebCore/AuthenticationChallenge.h>
</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& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
- : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
- , m_session(&session)
- , m_client(&client)
- , m_storedCredentials(storedCredentials)
- , m_lastHTTPMethod(requestWithCredentials.httpMethod())
- , m_firstRequest(requestWithCredentials)
- , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
</del><ins>+NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& 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 && 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& cocoaSession = static_cast<NetworkSessionCocoa&>(m_session.get());
</ins><span class="cx"> if (storedCredentials == WebCore::AllowStoredCredentials) {
</span><del>- m_task = [m_session->m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
- ASSERT(!m_session->m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
- m_session->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->m_sessionWithoutCredentialStorage dataTaskWithRequest:nsRequest];
- ASSERT(!m_session->m_dataTaskMapWithoutCredentials.contains([m_task taskIdentifier]));
- m_session->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, "%llu Creating NetworkDataTask with URL %s", [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->m_dataTaskMapWithCredentials.get([m_task taskIdentifier]) == this);
- m_session->m_dataTaskMapWithCredentials.remove([m_task taskIdentifier]);
- } else {
- ASSERT(m_session->m_dataTaskMapWithoutCredentials.get([m_task taskIdentifier]) == this);
- m_session->m_dataTaskMapWithoutCredentials.remove([m_task taskIdentifier]);
- }
</del><ins>+ if (!m_task)
+ return;
+
+ auto& cocoaSession = static_cast<NetworkSessionCocoa&>(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->didSendData(totalBytesSent, totalBytesExpectedToSend);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler&& completionHandler)
</del><ins>+void NetworkDataTaskCocoa::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler&& 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& error)
</del><ins>+void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError& error)
</ins><span class="cx"> {
</span><span class="cx"> if (m_client)
</span><span class="cx"> m_client->didCompleteWithError(error);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
</del><ins>+void NetworkDataTaskCocoa::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> if (m_client)
</span><span class="cx"> m_client->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<WebCore::SharedBuffer>&& data)
</del><ins>+void NetworkDataTaskCocoa::didReceiveData(Ref<WebCore::SharedBuffer>&& data)
</ins><span class="cx"> {
</span><span class="cx"> if (m_client)
</span><span class="cx"> m_client->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->didBecomeDownload();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::willPerformHTTPRedirection(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& request, RedirectCompletionHandler&& completionHandler)
</del><ins>+void NetworkDataTaskCocoa::willPerformHTTPRedirection(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& request, RedirectCompletionHandler&& 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& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
</ins><span class="cx"> {
</span><del>- RefPtr<NetworkDataTask> protect(this);
-
- switch (m_scheduledFailureType) {
- case BlockedFailure:
- m_scheduledFailureType = NoFailure;
- if (m_client)
- m_client->wasBlocked();
- return;
- case InvalidURLFailure:
- m_scheduledFailureType = NoFailure;
- if (m_client)
- m_client->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& filename, const SandboxExtension::Handle& 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->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 && WebCore::fileExists(filename))
</del><ins>+ if (allowOverwrite && 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& challenge, const ChallengeCompletionHandler& completionHandler)
</del><ins>+bool NetworkDataTaskCocoa::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge& challenge, const ChallengeCompletionHandler& 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& download)
</del><ins>+void NetworkDataTaskCocoa::transferSandboxExtensionToDownload(Download& 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& challenge)
</del><ins>+bool NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge& challenge)
</ins><span class="cx"> {
</span><span class="cx"> const String& 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& 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 "NetworkCache.h"
</span><span class="cx"> #import "NetworkProcessCreationParameters.h"
</span><span class="cx"> #import "NetworkResourceLoader.h"
</span><del>-#import "NetworkSession.h"
</del><ins>+#import "NetworkSessionCocoa.h"
</ins><span class="cx"> #import "SandboxExtension.h"
</span><span class="cx"> #import "SessionTracker.h"
</span><span class="cx"> #import <WebCore/CFNetworkSPI.h>
</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 "DownloadID.h"
+#include "NetworkDataTaskCocoa.h"
+#include "NetworkSession.h"
+#include <wtf/HashMap.h>
+
+namespace WebKit {
+
+class NetworkSessionCocoa final : public NetworkSession {
+ friend class NetworkDataTaskCocoa;
+public:
+ static Ref<NetworkSession> create(WebCore::SessionID, CustomProtocolManager*);
+ static NetworkSession& defaultSession();
+ ~NetworkSessionCocoa();
+
+ // Must be called before any NetworkSession has been created.
+ static void setCustomProtocolManager(CustomProtocolManager*);
+ static void setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&&);
+ static void setSourceApplicationBundleIdentifier(const String&);
+ static void setSourceApplicationSecondaryIdentifier(const String&);
+#if PLATFORM(IOS)
+ static void setCTDataConnectionServiceType(const String&);
+#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<NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*> m_dataTaskMapWithCredentials;
+ HashMap<NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*> m_dataTaskMapWithoutCredentials;
+ HashMap<NetworkDataTaskCocoa::TaskIdentifier, DownloadID> m_downloadMap;
+
+ RetainPtr<NSURLSession> m_sessionWithCredentialStorage;
+ RetainPtr<WKNetworkSessionDelegate> m_sessionWithCredentialStorageDelegate;
+ RetainPtr<NSURLSession> m_sessionWithoutCredentialStorage;
+ RetainPtr<WKNetworkSessionDelegate> 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 "config.h"
</span><del>-#import "NetworkSession.h"
</del><ins>+#import "NetworkSessionCocoa.h"
</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 <NSURLSessionDataDelegate> {
</span><del>- RefPtr<WebKit::NetworkSession> _session;
</del><ins>+ RefPtr<WebKit::NetworkSessionCocoa> _session;
</ins><span class="cx"> bool _withCredentials;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-- (id)initWithNetworkSession:(WebKit::NetworkSession&)session withCredentials:(bool)withCredentials;
</del><ins>+- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&)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&)session withCredentials:(bool)withCredentials
</del><ins>+- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&)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->dataTaskForIdentifier([dataTask taskIdentifier], storedCredentials)) {
</span><del>- Ref<NetworkDataTask> protectedNetworkDataTask(*networkDataTask);
</del><ins>+ Ref<NetworkDataTaskCocoa> protectedNetworkDataTask(*networkDataTask);
</ins><span class="cx"> auto downloadID = networkDataTask->pendingDownloadID();
</span><span class="cx"> auto& downloadManager = WebKit::NetworkProcess::singleton().downloadManager();
</span><span class="cx"> auto download = std::make_unique<WebKit::Download>(downloadManager, downloadID, downloadTask, _session->sessionID(), networkDataTask->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& 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<CustomProtocolManager>& 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<CFDataRef>&& data)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&& 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& identifier)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationBundleIdentifier(const String& 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& identifier)
</del><ins>+void NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(const String& 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& type)
</del><ins>+void NetworkSessionCocoa::setCTDataConnectionServiceType(const String& 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<NetworkSession> NetworkSession::create(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
</del><ins>+Ref<NetworkSession> 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& NetworkSession::defaultSession()
</del><ins>+NetworkSession& NetworkSessionCocoa::defaultSession()
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(isMainThread());
</span><del>- static NetworkSession* session = &NetworkSession::create(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID(), globalCustomProtocolManager().get()).leakRef();
</del><ins>+ static NetworkSession* session = &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->cookieStorage().get())
</span><span class="lines">@@ -465,11 +460,11 @@
</span><span class="cx"> LOG(NetworkSession, "Created NetworkSession with cookieAcceptPolicy %lu", 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& 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<CustomProtocolManager>());
</del><ins>+ auto networkSession = NetworkSession::create(sessionID, NetworkProcess::singleton().supplement<CustomProtocolManager>());
</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 "config.h"
</span><del>-#include "NetworkDataTask.h"
</del><ins>+#include "NetworkDataTaskSoup.h"
</ins><span class="cx">
</span><span class="cx"> #include "AuthenticationManager.h"
</span><span class="cx"> #include "DataReference.h"
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include "DownloadSoupErrors.h"
</span><span class="cx"> #include "NetworkLoad.h"
</span><span class="cx"> #include "NetworkProcess.h"
</span><del>-#include "NetworkSession.h"
</del><ins>+#include "NetworkSessionSoup.h"
</ins><span class="cx"> #include "WebErrors.h"
</span><span class="cx"> #include <WebCore/AuthenticationChallenge.h>
</span><span class="cx"> #include <WebCore/HTTPParsers.h>
</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& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
- : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
- , m_session(&session)
- , m_client(&client)
- , m_storedCredentials(storedCredentials)
- , m_lastHTTPMethod(requestWithCredentials.httpMethod())
- , m_firstRequest(requestWithCredentials)
- , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
</del><ins>+NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& 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, &NetworkDataTask::timeoutFired)
</del><ins>+ , m_timeoutSource(RunLoop::main(), this, &NetworkDataTaskSoup::timeoutFired)
</ins><span class="cx"> {
</span><del>- ASSERT(isMainThread());
-
- m_session->m_dataTaskSet.add(this);
-
- if (!requestWithCredentials.url().isValid()) {
- scheduleFailure(InvalidURLFailure);
</del><ins>+ static_cast<NetworkSessionSoup&>(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->m_dataTaskSet.remove(this);
</del><ins>+ static_cast<NetworkSessionSoup&>(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<NetworkDataTask> protectedThis(this);
-
- switch (m_scheduledFailureType) {
- case BlockedFailure:
- m_scheduledFailureType = NoFailure;
- if (m_client)
- m_client->wasBlocked();
- return;
- case InvalidURLFailure:
- m_scheduledFailureType = NoFailure;
- if (m_client)
- m_client->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& suggestedName)
</del><ins>+void NetworkDataTaskSoup::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
</ins><span class="cx"> {
</span><del>- m_suggestedFilename = suggestedName;
-}
-
-void NetworkDataTask::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, 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&)
</del><ins>+void NetworkDataTaskSoup::createRequest(const ResourceRequest& request)
</ins><span class="cx"> {
</span><del>- return false;
-}
-
-void NetworkDataTask::createRequest(const ResourceRequest& request)
-{
</del><span class="cx"> GUniquePtr<SoupURI> 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<SoupRequest> soupRequest = adoptGRef(soup_session_request_uri(m_session->soupSession(), soupURI.get(), nullptr));
</del><ins>+ GRefPtr<SoupRequest> soupRequest = adoptGRef(soup_session_request_uri(static_cast<NetworkSessionSoup&>(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(), "notify::tls-errors", G_CALLBACK(tlsErrorsChangedCallback), this);
</span><span class="cx"> g_signal_connect(m_soupMessage.get(), "got-headers", G_CALLBACK(gotHeadersCallback), this);
</span><span class="cx"> g_signal_connect(m_soupMessage.get(), "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), this);
</span><del>- g_signal_connect(m_session->soupSession(), "authenticate", G_CALLBACK(authenticateCallback), this);
</del><ins>+ g_signal_connect(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), "authenticate", G_CALLBACK(authenticateCallback), this);
</ins><span class="cx"> #if ENABLE(WEB_TIMING)
</span><span class="cx"> g_signal_connect(m_soupMessage.get(), "network-event", G_CALLBACK(networkEventCallback), this);
</span><span class="cx"> g_signal_connect(m_soupMessage.get(), "restarted", 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(), "starting", G_CALLBACK(startingCallback), this);
</span><span class="cx"> #else
</span><del>- g_signal_connect(m_session->soupSession(), "request-started", G_CALLBACK(requestStartedCallback), this);
</del><ins>+ g_signal_connect(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), "request-started", 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->soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</del><ins>+ soup_session_cancel_message(static_cast<NetworkSessionSoup&>(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->soupSession(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
</del><ins>+ g_signal_handlers_disconnect_matched(static_cast<NetworkSessionSoup&>(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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis(this);
</ins><span class="cx"> if (m_soupRequest && !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<GAsyncReadyCallback>(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->soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
</del><ins>+ soup_session_cancel_message(static_cast<NetworkSessionSoup&>(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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis(this);
</ins><span class="cx"> invalidateAndCancel();
</span><span class="cx"> m_client->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() > 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<NetworkDataTask> protectedThis = adoptRef(task);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
</ins><span class="cx"> if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="cx"> return;
</span><span class="lines">@@ -371,7 +314,7 @@
</span><span class="cx"> task->didSendRequest(WTFMove(inputStream));
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::didSendRequest(GRefPtr<GInputStream>&& inputStream)
</del><ins>+void NetworkDataTaskSoup::didSendRequest(GRefPtr<GInputStream>&& inputStream)
</ins><span class="cx"> {
</span><span class="cx"> if (m_soupMessage) {
</span><span class="cx"> if (m_shouldContentSniff == SniffContent && m_soupMessage->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->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="lines">@@ -447,7 +390,7 @@
</span><span class="cx"> task->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& 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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis(this);
</ins><span class="cx"> invalidateAndCancel();
</span><span class="cx"> m_client->didCompleteWithError(error);
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::applyAuthenticationToRequest(ResourceRequest& request)
</del><ins>+void NetworkDataTaskSoup::applyAuthenticationToRequest(ResourceRequest& 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->m_session->soupSession());
</del><ins>+ ASSERT(session == task->static_cast<NetworkSessionSoup&>(m_session.get()).soupSession());
</ins><span class="cx"> if (soupMessage != task->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&& challenge)
</del><ins>+void NetworkDataTaskSoup::authenticate(AuthenticationChallenge&& 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->soupSession(), m_soupMessage.get());
</del><ins>+ soup_session_pause_message(static_cast<NetworkSessionSoup&>(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&& challenge)
</del><ins>+void NetworkDataTaskSoup::continueAuthenticate(AuthenticationChallenge&& challenge)
</ins><span class="cx"> {
</span><span class="cx"> m_client->didReceiveChallenge(challenge, [this, protectedThis = makeRef(*this), challenge](AuthenticationChallengeDisposition disposition, const Credential& 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->soupSession(), m_soupMessage.get());
</del><ins>+ soup_session_unpause_message(static_cast<NetworkSessionSoup&>(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<NetworkDataTask> protectedThis = adoptRef(task);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
</ins><span class="cx"> if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="cx"> return;
</span><span class="lines">@@ -602,15 +545,15 @@
</span><span class="cx"> task->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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> 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<GAsyncReadyCallback>(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<NetworkDataTask> protectedThis = adoptRef(task);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
</ins><span class="cx"> if (task->state() == State::Canceling || task->state() == State::Completed || (!task->m_client && !task->isDownload())) {
</span><span class="cx"> task->clearRequest();
</span><span class="cx"> return;
</span><span class="lines">@@ -752,9 +695,9 @@
</span><span class="cx"> task->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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> 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<GAsyncReadyCallback>(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->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<NetworkDataTask> protectedThis = adoptRef(task);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
</ins><span class="cx"> if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="cx"> return;
</span><span class="lines">@@ -819,9 +762,9 @@
</span><span class="cx"> task->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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> 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<GAsyncReadyCallback>(requestNextPartCallback), protectedThis.leakRef());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::didRequestNextPart(GRefPtr<GInputStream>&& inputStream)
</del><ins>+void NetworkDataTaskSoup::didRequestNextPart(GRefPtr<GInputStream>&& 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->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->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="lines">@@ -857,7 +800,7 @@
</span><span class="cx"> task->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->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
</span><span class="cx"> task->clearRequest();
</span><span class="lines">@@ -880,14 +823,14 @@
</span><span class="cx"> task->didWriteBodyData(buffer->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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis(this);
</ins><span class="cx"> m_bodyDataTotalBytesSent += bytesSent;
</span><span class="cx"> m_client->didSendData(m_bodyDataTotalBytesSent, m_soupMessage->request_body->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<NetworkDataTask> protectedThis = adoptRef(task);
</del><ins>+ RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
</ins><span class="cx"> if (task->state() == State::Canceling || task->state() == State::Completed || !task->isDownload()) {
</span><span class="cx"> task->clearRequest();
</span><span class="cx"> return;
</span><span class="lines">@@ -955,9 +898,9 @@
</span><span class="cx"> task->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<NetworkDataTask> protectedThis(this);
</del><ins>+ RefPtr<NetworkDataTaskSoup> 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<GAsyncReadyCallback>(writeDownloadCallback), protectedThis.leakRef());
</span><span class="lines">@@ -966,7 +909,7 @@
</span><span class="cx"> reinterpret_cast<GAsyncReadyCallback>(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<NetworkDataTask*>(userData);
</del><ins>+ auto* task = static_cast<NetworkDataTaskSoup*>(userData);
</ins><span class="cx"> GOutputStream* outputStream = G_OUTPUT_STREAM(source);
</span><span class="cx"> RELEASE_ASSERT(task->m_downloadOutputStream.get() == outputStream);
</span><span class="cx"> RELEASE_ASSERT(task->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->didFinish();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkDataTask::didFailDownload(const ResourceError& error)
</del><ins>+void NetworkDataTaskSoup::didFailDownload(const ResourceError& 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& error)
</del><ins>+void NetworkDataTaskSoup::didFail(const ResourceError& 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->state() == State::Canceling || task->state() == State::Completed || !task->m_client)
</span><span class="cx"> return;
</span><span class="lines">@@ -1068,7 +1011,7 @@
</span><span class="cx"> task->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& 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->state() == State::Canceling || task->state() == State::Completed || !task->m_client)
</span><span class="cx"> return;
</span><span class="lines">@@ -1114,9 +1057,9 @@
</span><span class="cx"> task->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->m_session->soupSession());
</del><ins>+ ASSERT(session == task->static_cast<NetworkSessionSoup&>(m_session.get()).soupSession());
</ins><span class="cx"> if (soupMessage != task->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->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 "NetworkDataTask.h"
+#include <WebCore/ProtectionSpace.h>
+#include <WebCore/ResourceResponse.h>
+#include <wtf/RunLoop.h>
+#include <wtf/glib/GRefPtr.h>
+
+namespace WebKit {
+
+class NetworkDataTaskSoup final : public NetworkDataTask {
+public:
+ static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& 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&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
+
+ void suspend() override;
+ void cancel() override;
+ void resume() override;
+ NetworkDataTask::State state() const override;
+
+ void setPendingDownloadLocation(const String&, const SandboxExtension::Handle&, bool /*allowOverwrite*/) override;
+ String suggestedFilename() const override;
+
+ void timeoutFired();
+ void startTimeout();
+ void stopTimeout();
+
+ void createRequest(const WebCore::ResourceRequest&);
+ void clearRequest();
+ static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTaskSoup*);
+ void didSendRequest(GRefPtr<GInputStream>&&);
+ void didReceiveResponse();
+
+ static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTaskSoup*);
+ void tlsErrorsChanged();
+
+ void applyAuthenticationToRequest(WebCore::ResourceRequest&);
+ static void authenticateCallback(SoupSession*, SoupMessage*, SoupAuth*, gboolean retrying, NetworkDataTaskSoup*);
+ void authenticate(WebCore::AuthenticationChallenge&&);
+ void continueAuthenticate(WebCore::AuthenticationChallenge&&);
+
+ 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<GInputStream>&&);
+ 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&);
+ void didFinishDownload();
+ void cleanDownloadFiles();
+
+ void didFail(const WebCore::ResourceError&);
+
+#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<SoupRequest> m_soupRequest;
+ GRefPtr<SoupMessage> m_soupMessage;
+ GRefPtr<GInputStream> m_inputStream;
+ GRefPtr<SoupMultipartInputStream> m_multipartInputStream;
+ GRefPtr<GCancellable> m_cancellable;
+ GRefPtr<GAsyncResult> m_pendingResult;
+ WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
+ WebCore::Credential m_credentialForPersistentStorage;
+ WebCore::ResourceResponse m_response;
+ Vector<char> m_readBuffer;
+ unsigned m_redirectCount { 0 };
+ uint64_t m_bodyDataTotalBytesSent { 0 };
+ GRefPtr<GFile> m_downloadDestinationFile;
+ GRefPtr<GFile> m_downloadIntermediateFile;
+ GRefPtr<GOutputStream> m_downloadOutputStream;
+ bool m_allowOverwriteDownload { false };
+#if ENABLE(WEB_TIMING)
+ double m_startTime { 0 };
+#endif
+ RunLoop::Timer<NetworkDataTaskSoup> 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 "config.h"
</span><del>-#include "NetworkSession.h"
</del><ins>+#include "NetworkSessionSoup.h"
</ins><span class="cx">
</span><ins>+#include "NetworkDataTaskSoup.h"
</ins><span class="cx"> #include <WebCore/NetworkStorageSession.h>
</span><span class="cx"> #include <WebCore/SoupNetworkSession.h>
</span><span class="cx"> #include <wtf/MainThread.h>
</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<NetworkSession> 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& NetworkSession::defaultSession()
</del><ins>+NetworkSessionSoup::~NetworkSessionSoup()
</ins><span class="cx"> {
</span><del>- ASSERT(isMainThread());
- static NetworkSession* session = &NetworkSession::create(NetworkSession::Type::Normal, SessionID::defaultSessionID(), nullptr).leakRef();
- return *session;
</del><span class="cx"> }
</span><span class="cx">
</span><del>-NetworkStorageSession& 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->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 "NetworkSession.h"
+#include <wtf/HashSet.h>
+
+typedef struct _SoupSession SoupSession;
+
+namespace WebKit {
+
+class NetworkDataTaskSoup;
+
+class NetworkSessionSoup final : public NetworkSession {
+public:
+ static Ref<NetworkSession> create(WebCore::SessionID sessionID)
+ {
+ return adoptRef(*new NetworkSessionSoup(sessionID));
+ }
+ ~NetworkSessionSoup();
+
+ SoupSession* soupSession() const;
+
+ void registerNetworkDataTask(NetworkDataTaskSoup& task) { m_dataTaskSet.add(&task); }
+ void unregisterNetworkDataTask(NetworkDataTaskSoup& task) { m_dataTaskSet.remove(&task); }
+
+private:
+ NetworkSessionSoup(WebCore::SessionID);
+
+ void invalidateAndCancel() override;
+
+ HashSet<NetworkDataTaskSoup*> 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& 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"> "${WEBKIT2_DIR}/NetworkProcess/CustomProtocols/soup"
</span><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/Downloads/soup"
</span><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/efl"
</span><ins>+ "${WEBKIT2_DIR}/NetworkProcess/soup"
</ins><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/unix"
</span><span class="cx"> "${WEBKIT2_DIR}/Platform/efl"
</span><span class="cx"> "${WEBKIT2_DIR}/Shared/API/c/efl"
</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"> "${WEBKIT2_DIR}/NetworkProcess/CustomProtocols/soup"
</span><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/Downloads/soup"
</span><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/gtk"
</span><ins>+ "${WEBKIT2_DIR}/NetworkProcess/soup"
</ins><span class="cx"> "${WEBKIT2_DIR}/NetworkProcess/unix"
</span><span class="cx"> "${WEBKIT2_DIR}/Platform/IPC/glib"
</span><span class="cx"> "${WEBKIT2_DIR}/Shared/API/c/gtk"
</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 = "<group>"; };
</span><span class="cx">                 52D5A1B31C5749F200DE34A3 /* WebVideoFullscreenManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebVideoFullscreenManager.messages.in; sourceTree = "<group>"; };
</span><span class="cx">                 52D5A1B41C5749F200DE34A3 /* WebVideoFullscreenManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebVideoFullscreenManager.mm; sourceTree = "<group>"; };
</span><ins>+                5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTaskCocoa.h; path = NetworkProcess/cocoa/NetworkDataTaskCocoa.h; sourceTree = "<group>"; };
+                532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSessionCocoa.h; path = NetworkProcess/cocoa/NetworkSessionCocoa.h; sourceTree = "<group>"; };
+                532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkDataTask.cpp; path = NetworkProcess/NetworkDataTask.cpp; sourceTree = "<group>"; };
+                532159521DBAE6FC0054AA3C /* NetworkSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkSession.cpp; path = NetworkProcess/NetworkSession.cpp; sourceTree = "<group>"; };
</ins><span class="cx">                 579D18B71CCFE34B00B1974C /* PhotosSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotosSPI.h; sourceTree = "<group>"; };
</span><span class="cx">                 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuthenticationManagerCocoa.mm; path = Authentication/cocoa/AuthenticationManagerCocoa.mm; sourceTree = "<group>"; };
</span><span class="cx">                 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkProcessCreationParameters.cpp; path = NetworkProcess/NetworkProcessCreationParameters.cpp; sourceTree = "<group>"; };
</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>