Changeset 207813 in webkit


Ignore:
Timestamp:
Oct 25, 2016 3:25:29 AM (7 years ago)
Author:
Carlos Garcia Campos
Message:

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.

Location:
trunk/Source/WebKit2
Files:
3 added
20 edited
3 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/CMakeLists.txt

    r207586 r207813  
    183183set(NetworkProcess_COMMON_SOURCES
    184184    NetworkProcess/NetworkConnectionToWebProcess.cpp
     185    NetworkProcess/NetworkDataTask.cpp
    185186    NetworkProcess/NetworkLoad.cpp
    186187    NetworkProcess/NetworkProcess.cpp
    187188    NetworkProcess/NetworkProcessPlatformStrategies.cpp
    188189    NetworkProcess/NetworkResourceLoader.cpp
     190    NetworkProcess/NetworkSession.cpp
    189191
    190192    NetworkProcess/FileAPI/NetworkBlobRegistry.cpp
  • trunk/Source/WebKit2/ChangeLog

    r207812 r207813  
     12016-10-25  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        NetworkSession: switch to use subclasses for NetworkSession and NetworkDataTask implementations
     4        https://bugs.webkit.org/show_bug.cgi?id=163777
     5
     6        Reviewed by Alex Christensen.
     7
     8        The subclass model allows us to choose the implementation at run time, so we could add other implementations
     9        like a mock network class to measure performance, and even one for blobs and finally get rid of ResourceHandle
     10        in WebKit2.
     11
     12        * CMakeLists.txt: Add new files to compilation.
     13        * NetworkProcess/NetworkDataTask.cpp: Added.
     14        (WebKit::NetworkDataTask::create): Create a NetworkDataTaskCocoa or NetworkDataTaskSoup.
     15        (WebKit::NetworkDataTask::NetworkDataTask): Move common code from NetworkDataTaskCocoa and NetworkDataTaskSoup
     16        here to handle the early failures.
     17        (WebKit::NetworkDataTask::~NetworkDataTask):
     18        (WebKit::NetworkDataTask::scheduleFailure):
     19        (WebKit::NetworkDataTask::failureTimerFired):
     20        * NetworkProcess/NetworkDataTask.h: Remove platform specific members.
     21        (WebKit::NetworkDataTask::setPendingDownloadLocation): Make it virtual and set the m_pendingDownloadLocation.
     22        (WebKit::NetworkDataTask::suggestedFilename): Make it virtual and const with a default implementation.
     23        (WebKit::NetworkDataTask::setSuggestedFilename): Ditto.
     24        (WebKit::NetworkDataTask::allowsSpecificHTTPSCertificateForHost): Ditto.
     25        * NetworkProcess/NetworkLoad.cpp: Include NetworkDataTaskCocoa.h.
     26        * NetworkProcess/NetworkLoad.h: Include NetworkDataTask.h instead of NetworkSession.h.
     27        * NetworkProcess/NetworkProcess.cpp:
     28        (WebKit::NetworkProcess::NetworkProcess): Use NetworkSessionCocoa.
     29        * NetworkProcess/NetworkSession.cpp:
     30        (WebKit::NetworkSession::create): Create a NetworkSessionCocoa or NetworkSessionSoup.
     31        (WebKit::NetworkSession::defaultSession): In case of cocoa use NetworkSessionCocoa::defaultSession() because of
     32        the custom protocol manager, otherwise simply create a default session.
     33        (WebKit::NetworkSession::networkStorageSession): Move common code from NetworkSessionCocoa and
     34        NetworkSessionSoup here.
     35        (WebKit::NetworkSession::NetworkSession):
     36        (WebKit::NetworkSession::~NetworkSession):
     37        * NetworkProcess/NetworkSession.h: Remove platform specific members.
     38        (WebKit::NetworkSession::invalidateAndCancel): Make it virtual.
     39        (WebKit::NetworkSession::clearCredentials): Ditto.
     40        * NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp: Include NetworkSession.h.
     41        * NetworkProcess/cocoa/NetworkDataTaskCocoa.h: Added.
     42        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm:
     43        (WebKit::NetworkDataTaskCocoa::NetworkDataTaskCocoa):
     44        (WebKit::NetworkDataTaskCocoa::~NetworkDataTaskCocoa):
     45        (WebKit::NetworkDataTaskCocoa::didSendData):
     46        (WebKit::NetworkDataTaskCocoa::didReceiveChallenge):
     47        (WebKit::NetworkDataTaskCocoa::didCompleteWithError):
     48        (WebKit::NetworkDataTaskCocoa::didReceiveResponse):
     49        (WebKit::NetworkDataTaskCocoa::didReceiveData):
     50        (WebKit::NetworkDataTaskCocoa::didBecomeDownload):
     51        (WebKit::NetworkDataTaskCocoa::willPerformHTTPRedirection):
     52        (WebKit::NetworkDataTaskCocoa::setPendingDownloadLocation):
     53        (WebKit::NetworkDataTaskCocoa::tryPasswordBasedAuthentication):
     54        (WebKit::NetworkDataTaskCocoa::transferSandboxExtensionToDownload):
     55        (WebKit::NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost):
     56        (WebKit::NetworkDataTaskCocoa::suggestedFilename):
     57        (WebKit::NetworkDataTaskCocoa::cancel):
     58        (WebKit::NetworkDataTaskCocoa::resume):
     59        (WebKit::NetworkDataTaskCocoa::suspend):
     60        (WebKit::NetworkDataTaskCocoa::state):
     61        * NetworkProcess/cocoa/NetworkProcessCocoa.mm:
     62        (WebKit::NetworkProcess::platformInitializeNetworkProcessCocoa):
     63        * NetworkProcess/cocoa/NetworkSessionCocoa.h: Added.
     64        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     65        (-[WKNetworkSessionDelegate initWithNetworkSession:withCredentials:]):
     66        (-[WKNetworkSessionDelegate URLSession:dataTask:didBecomeDownloadTask:]):
     67        (WebKit::configurationForSessionID):
     68        (WebKit::NetworkSessionCocoa::setCustomProtocolManager):
     69        (WebKit::NetworkSessionCocoa::setSourceApplicationAuditTokenData):
     70        (WebKit::NetworkSessionCocoa::setSourceApplicationBundleIdentifier):
     71        (WebKit::NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier):
     72        (WebKit::NetworkSessionCocoa::setCTDataConnectionServiceType):
     73        (WebKit::NetworkSessionCocoa::create):
     74        (WebKit::NetworkSessionCocoa::defaultSession):
     75        (WebKit::NetworkSessionCocoa::NetworkSessionCocoa):
     76        (WebKit::NetworkSessionCocoa::~NetworkSessionCocoa):
     77        (WebKit::NetworkSessionCocoa::invalidateAndCancel):
     78        (WebKit::NetworkSessionCocoa::clearCredentials):
     79        (WebKit::NetworkSessionCocoa::dataTaskForIdentifier):
     80        (WebKit::NetworkSessionCocoa::addDownloadID):
     81        (WebKit::NetworkSessionCocoa::downloadID):
     82        (WebKit::NetworkSessionCocoa::takeDownloadID):
     83        * NetworkProcess/mac/RemoteNetworkingContext.mm:
     84        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession):
     85        * NetworkProcess/soup/NetworkDataTaskSoup.cpp:
     86        (WebKit::NetworkDataTaskSoup::NetworkDataTaskSoup):
     87        (WebKit::NetworkDataTaskSoup::~NetworkDataTaskSoup):
     88        (WebKit::NetworkDataTaskSoup::suggestedFilename):
     89        (WebKit::NetworkDataTaskSoup::setPendingDownloadLocation):
     90        (WebKit::NetworkDataTaskSoup::createRequest):
     91        (WebKit::NetworkDataTaskSoup::clearRequest):
     92        (WebKit::NetworkDataTaskSoup::resume):
     93        (WebKit::NetworkDataTaskSoup::suspend):
     94        (WebKit::NetworkDataTaskSoup::cancel):
     95        (WebKit::NetworkDataTaskSoup::invalidateAndCancel):
     96        (WebKit::NetworkDataTaskSoup::state):
     97        (WebKit::NetworkDataTaskSoup::timeoutFired):
     98        (WebKit::NetworkDataTaskSoup::startTimeout):
     99        (WebKit::NetworkDataTaskSoup::stopTimeout):
     100        (WebKit::NetworkDataTaskSoup::sendRequestCallback):
     101        (WebKit::NetworkDataTaskSoup::didSendRequest):
     102        (WebKit::NetworkDataTaskSoup::didReceiveResponse):
     103        (WebKit::NetworkDataTaskSoup::tlsErrorsChangedCallback):
     104        (WebKit::NetworkDataTaskSoup::tlsErrorsChanged):
     105        (WebKit::NetworkDataTaskSoup::applyAuthenticationToRequest):
     106        (WebKit::NetworkDataTaskSoup::authenticateCallback):
     107        (WebKit::NetworkDataTaskSoup::authenticate):
     108        (WebKit::NetworkDataTaskSoup::continueAuthenticate):
     109        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirectionCallback):
     110        (WebKit::NetworkDataTaskSoup::skipInputStreamForRedirection):
     111        (WebKit::NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection):
     112        (WebKit::NetworkDataTaskSoup::shouldStartHTTPRedirection):
     113        (WebKit::NetworkDataTaskSoup::continueHTTPRedirection):
     114        (WebKit::NetworkDataTaskSoup::readCallback):
     115        (WebKit::NetworkDataTaskSoup::read):
     116        (WebKit::NetworkDataTaskSoup::didRead):
     117        (WebKit::NetworkDataTaskSoup::didFinishRead):
     118        (WebKit::NetworkDataTaskSoup::requestNextPartCallback):
     119        (WebKit::NetworkDataTaskSoup::requestNextPart):
     120        (WebKit::NetworkDataTaskSoup::didRequestNextPart):
     121        (WebKit::NetworkDataTaskSoup::didFinishRequestNextPart):
     122        (WebKit::NetworkDataTaskSoup::gotHeadersCallback):
     123        (WebKit::NetworkDataTaskSoup::didGetHeaders):
     124        (WebKit::NetworkDataTaskSoup::wroteBodyDataCallback):
     125        (WebKit::NetworkDataTaskSoup::didWriteBodyData):
     126        (WebKit::NetworkDataTaskSoup::download):
     127        (WebKit::NetworkDataTaskSoup::writeDownloadCallback):
     128        (WebKit::NetworkDataTaskSoup::writeDownload):
     129        (WebKit::NetworkDataTaskSoup::didWriteDownload):
     130        (WebKit::NetworkDataTaskSoup::didFinishDownload):
     131        (WebKit::NetworkDataTaskSoup::didFailDownload):
     132        (WebKit::NetworkDataTaskSoup::cleanDownloadFiles):
     133        (WebKit::NetworkDataTaskSoup::didFail):
     134        (WebKit::NetworkDataTaskSoup::networkEventCallback):
     135        (WebKit::NetworkDataTaskSoup::networkEvent):
     136        (WebKit::NetworkDataTaskSoup::startingCallback):
     137        (WebKit::NetworkDataTaskSoup::requestStartedCallback):
     138        (WebKit::NetworkDataTaskSoup::didStartRequest):
     139        (WebKit::NetworkDataTaskSoup::restartedCallback):
     140        (WebKit::NetworkDataTaskSoup::didRestart):
     141        * NetworkProcess/soup/NetworkDataTaskSoup.h: Added.
     142        * NetworkProcess/soup/NetworkSessionSoup.cpp:
     143        (WebKit::NetworkSessionSoup::NetworkSessionSoup):
     144        (WebKit::NetworkSessionSoup::~NetworkSessionSoup):
     145        (WebKit::NetworkSessionSoup::soupSession):
     146        (WebKit::NetworkSessionSoup::invalidateAndCancel):
     147        * NetworkProcess/soup/NetworkSessionSoup.h: Added.
     148        * NetworkProcess/soup/RemoteNetworkingContextSoup.cpp:
     149        (WebKit::RemoteNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
     150        * PlatformEfl.cmake: Add new files to compilation.
     151        * PlatformGTK.cmake: Ditto.
     152        * WebKit2.xcodeproj/project.pbxproj: Ditto.
     153        * WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm:
     154        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Update to new NetworkSession::create() API.
     155        * WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp:
     156        (WebKit::WebFrameNetworkingContext::ensurePrivateBrowsingSession): Ditto.
     157
    11582016-10-25  Antti Koivisto  <antti@apple.com>
    2159
  • trunk/Source/WebKit2/NetworkProcess/NetworkDataTask.h

    r207586 r207813  
    3737#include <WebCore/Timer.h>
    3838#include <wtf/Function.h>
    39 #include <wtf/RetainPtr.h>
    4039#include <wtf/text/WTFString.h>
    41 
    42 #if PLATFORM(COCOA)
    43 OBJC_CLASS NSURLSessionDataTask;
    44 #endif
    45 
    46 #if USE(SOUP)
    47 #include <WebCore/ProtectionSpace.h>
    48 #include <WebCore/ResourceResponse.h>
    49 #include <wtf/RunLoop.h>
    50 #include <wtf/glib/GRefPtr.h>
    51 #endif
    5240
    5341namespace WebCore {
    5442class AuthenticationChallenge;
    55 class Credential;
    5643class ResourceError;
    57 class ResourceRequest;
    5844class ResourceResponse;
    5945class SharedBuffer;
     
    8773
    8874class NetworkDataTask : public RefCounted<NetworkDataTask> {
    89     friend class NetworkSession;
    9075public:
    91     static Ref<NetworkDataTask> create(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
    92     {
    93         return adoptRef(*new NetworkDataTask(session, client, request, storedCredentials, shouldContentSniff, shouldClearReferrerOnHTTPSToHTTPRedirect));
    94     }
    95    
    96     void suspend();
    97     void cancel();
    98     void resume();
     76    static Ref<NetworkDataTask> create(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
     77
     78    virtual ~NetworkDataTask();
     79
     80    virtual void suspend() = 0;
     81    virtual void cancel() = 0;
     82    virtual void resume() = 0;
    9983
    10084    enum class State {
     
    10488        Completed
    10589    };
    106     State state() const;
     90    virtual State state() const = 0;
    10791
    108     typedef uint64_t TaskIdentifier;
    109    
    110     ~NetworkDataTask();
    111 
    112 #if PLATFORM(COCOA)
    113     void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend);
    114     void didReceiveChallenge(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler&&);
    115     void didCompleteWithError(const WebCore::ResourceError&);
    116     void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&);
    117     void didReceiveData(Ref<WebCore::SharedBuffer>&&);
    118     void didBecomeDownload();
    119 
    120     void willPerformHTTPRedirection(WebCore::ResourceResponse&&, WebCore::ResourceRequest&&, RedirectCompletionHandler&&);
    121     void transferSandboxExtensionToDownload(Download&);
    122 #endif
    12392    NetworkDataTaskClient* client() const { return m_client; }
    12493    void clearClient() { m_client = nullptr; }
    125    
     94
    12695    DownloadID pendingDownloadID() const { return m_pendingDownloadID; }
    12796    PendingDownload* pendingDownload() const { return m_pendingDownload; }
     
    137106        m_pendingDownload = &pendingDownload;
    138107    }
    139     void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool allowOverwrite);
     108
     109    virtual void setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool /*allowOverwrite*/) { m_pendingDownloadLocation = filename; }
    140110    const String& pendingDownloadLocation() const { return m_pendingDownloadLocation; }
    141111    bool isDownload() const { return !!m_pendingDownloadID.downloadID(); }
    142112
    143113    const WebCore::ResourceRequest& firstRequest() const { return m_firstRequest; }
    144     String suggestedFilename();
    145     void setSuggestedFilename(const String&);
    146     bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&);
    147    
    148 private:
    149     NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, WebCore::ContentSniffingPolicy, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
     114    virtual String suggestedFilename() const { return String(); }
     115    void setSuggestedFilename(const String& suggestedName) { m_suggestedFilename = suggestedName; }
     116    virtual bool allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge&) { return false; }
    150117
    151     bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, const ChallengeCompletionHandler&);
     118protected:
     119    NetworkDataTask(NetworkSession&, NetworkDataTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials, bool shouldClearReferrerOnHTTPSToHTTPRedirect);
    152120
    153 #if USE(SOUP)
    154     void timeoutFired();
    155     void startTimeout();
    156     void stopTimeout();
    157     void invalidateAndCancel();
    158     void createRequest(const WebCore::ResourceRequest&);
    159     void clearRequest();
    160     static void sendRequestCallback(SoupRequest*, GAsyncResult*, NetworkDataTask*);
    161     void didSendRequest(GRefPtr<GInputStream>&&);
    162     void didReceiveResponse();
    163     static void tlsErrorsChangedCallback(SoupMessage*, GParamSpec*, NetworkDataTask*);
    164     void tlsErrorsChanged();
    165     void applyAuthenticationToRequest(WebCore::ResourceRequest&);
    166     static void authenticateCallback(SoupSession*, SoupMessage*, SoupAuth*, gboolean retrying, NetworkDataTask*);
    167     void authenticate(WebCore::AuthenticationChallenge&&);
    168     void continueAuthenticate(WebCore::AuthenticationChallenge&&);
    169     static void skipInputStreamForRedirectionCallback(GInputStream*, GAsyncResult*, NetworkDataTask*);
    170     void skipInputStreamForRedirection();
    171     void didFinishSkipInputStreamForRedirection();
    172     bool shouldStartHTTPRedirection();
    173     void continueHTTPRedirection();
    174     static void readCallback(GInputStream*, GAsyncResult*, NetworkDataTask*);
    175     void read();
    176     void didRead(gssize bytesRead);
    177     void didFinishRead();
    178     static void requestNextPartCallback(SoupMultipartInputStream*, GAsyncResult*, NetworkDataTask*);
    179     void requestNextPart();
    180     void didRequestNextPart(GRefPtr<GInputStream>&&);
    181     void didFinishRequestNextPart();
    182     static void gotHeadersCallback(SoupMessage*, NetworkDataTask*);
    183     void didGetHeaders();
    184     static void wroteBodyDataCallback(SoupMessage*, SoupBuffer*, NetworkDataTask*);
    185     void didWriteBodyData(uint64_t bytesSent);
    186     void download();
    187     static void writeDownloadCallback(GOutputStream*, GAsyncResult*, NetworkDataTask*);
    188     void writeDownload();
    189     void didWriteDownload(gsize bytesWritten);
    190     void didFailDownload(const WebCore::ResourceError&);
    191     void didFinishDownload();
    192     void cleanDownloadFiles();
    193     void didFail(const WebCore::ResourceError&);
    194 #if ENABLE(WEB_TIMING)
    195     static void networkEventCallback(SoupMessage*, GSocketClientEvent, GIOStream*, NetworkDataTask*);
    196     void networkEvent(GSocketClientEvent);
    197 #if SOUP_CHECK_VERSION(2, 49, 91)
    198     static void startingCallback(SoupMessage*, NetworkDataTask*);
    199 #else
    200     static void requestStartedCallback(SoupSession*, SoupMessage*, SoupSocket*, NetworkDataTask*);
    201 #endif
    202     void didStartRequest();
    203     static void restartedCallback(SoupMessage*, NetworkDataTask*);
    204     void didRestart();
    205 #endif
    206 #endif
    207    
    208121    enum FailureType {
    209122        NoFailure,
     
    211124        InvalidURLFailure
    212125    };
     126    void failureTimerFired();
     127    void scheduleFailure(FailureType);
     128
    213129    FailureType m_scheduledFailureType { NoFailure };
    214130    WebCore::Timer m_failureTimer;
    215     void failureTimerFired();
    216     void scheduleFailure(FailureType);
    217    
    218     RefPtr<NetworkSession> m_session;
    219     NetworkDataTaskClient* m_client;
     131    Ref<NetworkSession> m_session;
     132    NetworkDataTaskClient* m_client { nullptr };
    220133    PendingDownload* m_pendingDownload { nullptr };
    221134    DownloadID m_pendingDownloadID;
     
    225138    WebCore::Credential m_initialCredential;
    226139#endif
    227     WebCore::StoredCredentials m_storedCredentials;
     140    WebCore::StoredCredentials m_storedCredentials { WebCore::DoNotAllowStoredCredentials };
    228141    String m_lastHTTPMethod;
    229142    String m_pendingDownloadLocation;
    230143    WebCore::ResourceRequest m_firstRequest;
    231     bool m_shouldClearReferrerOnHTTPSToHTTPRedirect;
    232     RefPtr<SandboxExtension> m_sandboxExtension;
    233 #if PLATFORM(COCOA)
    234     RetainPtr<NSURLSessionDataTask> m_task;
    235 #endif
    236 #if USE(SOUP)
    237     State m_state { State::Suspended };
    238     WebCore::ContentSniffingPolicy m_shouldContentSniff;
    239     GRefPtr<SoupRequest> m_soupRequest;
    240     GRefPtr<SoupMessage> m_soupMessage;
    241     GRefPtr<GInputStream> m_inputStream;
    242     GRefPtr<SoupMultipartInputStream> m_multipartInputStream;
    243     GRefPtr<GCancellable> m_cancellable;
    244     GRefPtr<GAsyncResult> m_pendingResult;
    245     WebCore::ProtectionSpace m_protectionSpaceForPersistentStorage;
    246     WebCore::Credential m_credentialForPersistentStorage;
    247     WebCore::ResourceResponse m_response;
    248     Vector<char> m_readBuffer;
    249     unsigned m_redirectCount { 0 };
    250     uint64_t m_bodyDataTotalBytesSent { 0 };
    251     GRefPtr<GFile> m_downloadDestinationFile;
    252     GRefPtr<GFile> m_downloadIntermediateFile;
    253     GRefPtr<GOutputStream> m_downloadOutputStream;
    254     bool m_allowOverwriteDownload { false };
    255 #if ENABLE(WEB_TIMING)
    256     double m_startTime { 0 };
    257 #endif
    258     RunLoop::Timer<NetworkDataTask> m_timeoutSource;
    259 #endif
     144    bool m_shouldClearReferrerOnHTTPSToHTTPRedirect { true };
    260145    String m_suggestedFilename;
    261146};
    262147
    263 #if PLATFORM(COCOA)
    264 WebCore::Credential serverTrustCredential(const WebCore::AuthenticationChallenge&);
    265 #endif
    266    
    267 }
     148} // namespace WebKit
    268149
    269150#endif // USE(NETWORK_SESSION)
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp

    r207812 r207813  
    4040#include <wtf/MainThread.h>
    4141
     42#if PLATFORM(COCOA)
     43#include "NetworkDataTaskCocoa.h"
     44#endif
     45
    4246namespace WebKit {
    4347
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h

    r207812 r207813  
    3535#if USE(NETWORK_SESSION)
    3636#include "DownloadID.h"
    37 #include "NetworkSession.h"
     37#include "NetworkDataTask.h"
    3838#include <WebCore/AuthenticationChallenge.h>
    3939#endif
  • trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp

    r207812 r207813  
    7575#endif
    7676
     77#if PLATFORM(COCOA)
     78#include "NetworkSessionCocoa.h"
     79#endif
     80
    7781using namespace WebCore;
    7882
     
    103107    addSupplement<CustomProtocolManager>();
    104108#if USE(NETWORK_SESSION) && PLATFORM(COCOA)
    105     NetworkSession::setCustomProtocolManager(supplement<CustomProtocolManager>());
     109    NetworkSessionCocoa::setCustomProtocolManager(supplement<CustomProtocolManager>());
    106110#endif
    107111}
  • trunk/Source/WebKit2/NetworkProcess/NetworkSession.cpp

    r207812 r207813  
    11/*
    2  * Copyright (C) 2016 Igalia S.L.
     2 * Copyright (C) 2015 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727#include "NetworkSession.h"
    2828
     29#if USE(NETWORK_SESSION)
     30
    2931#include <WebCore/NetworkStorageSession.h>
    30 #include <WebCore/SoupNetworkSession.h>
    3132#include <wtf/MainThread.h>
     33
     34#if PLATFORM(COCOA)
     35#include "NetworkSessionCocoa.h"
     36#endif
     37#if USE(SOUP)
     38#include "NetworkSessionSoup.h"
     39#endif
     40
    3241
    3342using namespace WebCore;
     
    3544namespace WebKit {
    3645
    37 Ref<NetworkSession> NetworkSession::create(Type type, SessionID sessionID, CustomProtocolManager*)
     46Ref<NetworkSession> NetworkSession::create(SessionID sessionID, CustomProtocolManager* customProtocolManager)
    3847{
    39     return adoptRef(*new NetworkSession(type, sessionID, nullptr));
     48#if PLATFORM(COCOA)
     49    return NetworkSessionCocoa::create(sessionID, customProtocolManager);
     50#endif
     51#if USE(SOUP)
     52    UNUSED_PARAM(customProtocolManager);
     53    return NetworkSessionSoup::create(sessionID);
     54#endif
    4055}
    4156
    4257NetworkSession& NetworkSession::defaultSession()
    4358{
     59#if PLATFORM(COCOA)
     60    return NetworkSessionCocoa::defaultSession();
     61#else
    4462    ASSERT(isMainThread());
    45     static NetworkSession* session = &NetworkSession::create(NetworkSession::Type::Normal, SessionID::defaultSessionID(), nullptr).leakRef();
     63    static NetworkSession* session = &NetworkSession::create(SessionID::defaultSessionID()).leakRef();
    4664    return *session;
     65#endif
    4766}
    4867
     
    5473}
    5574
    56 NetworkSession::NetworkSession(Type type, SessionID sessionID, CustomProtocolManager*)
     75NetworkSession::NetworkSession(SessionID sessionID)
    5776    : m_sessionID(sessionID)
    5877{
     
    6382}
    6483
    65 SoupSession* NetworkSession::soupSession() const
    66 {
    67     return networkStorageSession().soupNetworkSession().soupSession();
    68 }
     84} // namespace WebKit
    6985
    70 void NetworkSession::invalidateAndCancel()
    71 {
    72     for (auto* task : m_dataTaskSet)
    73         task->invalidateAndCancel();
    74 }
    75 
    76 void NetworkSession::clearCredentials()
    77 {
    78 }
    79 
    80 } // namespace WebKit
     86#endif // USE(NETWORK_SESSION)
  • trunk/Source/WebKit2/NetworkProcess/NetworkSession.h

    r207586 r207813  
    2828#if USE(NETWORK_SESSION)
    2929
    30 #if PLATFORM(COCOA)
    31 OBJC_CLASS NSURLSession;
    32 OBJC_CLASS NSOperationQueue;
    33 OBJC_CLASS WKNetworkSessionDelegate;
    34 #endif
    35 
    36 #include "DownloadID.h"
    37 #include "NetworkDataTask.h"
    3830#include <WebCore/SessionID.h>
    39 #include <wtf/HashMap.h>
    40 #include <wtf/HashSet.h>
    4131#include <wtf/Ref.h>
    4232#include <wtf/RefCounted.h>
    43 
    44 #if USE(SOUP)
    45 typedef struct _SoupSession SoupSession;
    46 #endif
    4733
    4834namespace WebCore {
     
    5541
    5642class NetworkSession : public RefCounted<NetworkSession> {
    57     friend class NetworkDataTask;
    5843public:
    59     enum class Type {
    60         Normal,
    61         Ephemeral
    62     };
     44    static Ref<NetworkSession> create(WebCore::SessionID, CustomProtocolManager* = nullptr);
     45    static NetworkSession& defaultSession();
     46    virtual ~NetworkSession();
    6347
    64     static Ref<NetworkSession> create(Type, WebCore::SessionID, CustomProtocolManager*);
    65     static NetworkSession& defaultSession();
    66     ~NetworkSession();
    67 
    68     void invalidateAndCancel();
     48    virtual void invalidateAndCancel() = 0;
     49    virtual void clearCredentials() { };
    6950
    7051    WebCore::SessionID sessionID() const { return m_sessionID; }
    71 
    72 #if USE(SOUP)
    73     SoupSession* soupSession() const;
    74 #endif
    75 
    76 #if PLATFORM(COCOA)
    77     // Must be called before any NetworkSession has been created.
    78     static void setCustomProtocolManager(CustomProtocolManager*);
    79     static void setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&&);
    80     static void setSourceApplicationBundleIdentifier(const String&);
    81     static void setSourceApplicationSecondaryIdentifier(const String&);
    82 #if PLATFORM(IOS)
    83     static void setCTDataConnectionServiceType(const String&);
    84 #endif
    85 #endif
    86 
    87     void clearCredentials();
    88 #if PLATFORM(COCOA)
    89     NetworkDataTask* dataTaskForIdentifier(NetworkDataTask::TaskIdentifier, WebCore::StoredCredentials);
    90 
    91     void addDownloadID(NetworkDataTask::TaskIdentifier, DownloadID);
    92     DownloadID downloadID(NetworkDataTask::TaskIdentifier);
    93     DownloadID takeDownloadID(NetworkDataTask::TaskIdentifier);
    94 #endif
    95 
    96 private:
    97     NetworkSession(Type, WebCore::SessionID, CustomProtocolManager*);
    9852    WebCore::NetworkStorageSession& networkStorageSession() const;
    9953
     54protected:
     55    NetworkSession(WebCore::SessionID);
     56
    10057    WebCore::SessionID m_sessionID;
    101 
    102 #if PLATFORM(COCOA)
    103     HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithCredentials;
    104     HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithoutCredentials;
    105     HashMap<NetworkDataTask::TaskIdentifier, DownloadID> m_downloadMap;
    106 
    107     RetainPtr<NSURLSession> m_sessionWithCredentialStorage;
    108     RetainPtr<WKNetworkSessionDelegate> m_sessionWithCredentialStorageDelegate;
    109     RetainPtr<NSURLSession> m_sessionWithoutCredentialStorage;
    110     RetainPtr<WKNetworkSessionDelegate> m_sessionWithoutCredentialStorageDelegate;
    111 #elif USE(SOUP)
    112     HashSet<NetworkDataTask*> m_dataTaskSet;
    113 #endif
    11458};
    11559
  • trunk/Source/WebKit2/NetworkProcess/cache/NetworkCacheSpeculativeLoad.cpp

    r203133 r207813  
    3232#include "NetworkCache.h"
    3333#include "NetworkLoad.h"
     34#include "NetworkSession.h"
    3435#include <WebCore/SessionID.h>
    3536#include <wtf/CurrentTime.h>
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkDataTaskCocoa.mm

    r207586 r207813  
    2525
    2626#import "config.h"
    27 #import "NetworkSession.h"
     27#import "NetworkDataTaskCocoa.h"
    2828
    2929#if USE(NETWORK_SESSION)
     
    3434#import "Logging.h"
    3535#import "NetworkProcess.h"
     36#import "NetworkSessionCocoa.h"
    3637#import "SessionTracker.h"
    3738#import "WebCoreArgumentCoders.h"
     
    5354#endif
    5455
    55 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
    56     : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
    57     , m_session(&session)
    58     , m_client(&client)
    59     , m_storedCredentials(storedCredentials)
    60     , m_lastHTTPMethod(requestWithCredentials.httpMethod())
    61     , m_firstRequest(requestWithCredentials)
    62     , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
    63 {
    64     ASSERT(isMainThread());
    65    
    66     if (!requestWithCredentials.url().isValid()) {
    67         scheduleFailure(InvalidURLFailure);
     56NetworkDataTaskCocoa::NetworkDataTaskCocoa(NetworkSession& session, NetworkDataTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentials storedCredentials, WebCore::ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
     57    : NetworkDataTask(session, client, requestWithCredentials, storedCredentials, shouldClearReferrerOnHTTPSToHTTPRedirect)
     58{
     59    if (m_scheduledFailureType != NoFailure)
    6860        return;
    69     }
    70    
    71     if (!portAllowed(requestWithCredentials.url())) {
    72         scheduleFailure(BlockedFailure);
    73         return;
    74     }
    75    
     61
    7662    auto request = requestWithCredentials;
    7763    auto url = request.url();
     
    10490    }
    10591
     92    auto& cocoaSession = static_cast<NetworkSessionCocoa&>(m_session.get());
    10693    if (storedCredentials == WebCore::AllowStoredCredentials) {
    107         m_task = [m_session->m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
    108         ASSERT(!m_session->m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
    109         m_session->m_dataTaskMapWithCredentials.add([m_task taskIdentifier], this);
     94        m_task = [cocoaSession.m_sessionWithCredentialStorage dataTaskWithRequest:nsRequest];
     95        ASSERT(!cocoaSession.m_dataTaskMapWithCredentials.contains([m_task taskIdentifier]));
     96        cocoaSession.m_dataTaskMapWithCredentials.add([m_task taskIdentifier], this);
    11097    } else {
    111         m_task = [m_session->m_sessionWithoutCredentialStorage dataTaskWithRequest:nsRequest];
    112         ASSERT(!m_session->m_dataTaskMapWithoutCredentials.contains([m_task taskIdentifier]));
    113         m_session->m_dataTaskMapWithoutCredentials.add([m_task taskIdentifier], this);
     98        m_task = [cocoaSession.m_sessionWithoutCredentialStorage dataTaskWithRequest:nsRequest];
     99        ASSERT(!cocoaSession.m_dataTaskMapWithoutCredentials.contains([m_task taskIdentifier]));
     100        cocoaSession.m_dataTaskMapWithoutCredentials.add([m_task taskIdentifier], this);
    114101    }
    115102    LOG(NetworkSession, "%llu Creating NetworkDataTask with URL %s", [m_task taskIdentifier], nsRequest.URL.absoluteString.UTF8String);
     
    122109}
    123110
    124 NetworkDataTask::~NetworkDataTask()
    125 {
    126     ASSERT(isMainThread());
    127     if (m_task) {
    128         if (m_storedCredentials == WebCore::StoredCredentials::AllowStoredCredentials) {
    129             ASSERT(m_session->m_dataTaskMapWithCredentials.get([m_task taskIdentifier]) == this);
    130             m_session->m_dataTaskMapWithCredentials.remove([m_task taskIdentifier]);
    131         } else {
    132             ASSERT(m_session->m_dataTaskMapWithoutCredentials.get([m_task taskIdentifier]) == this);
    133             m_session->m_dataTaskMapWithoutCredentials.remove([m_task taskIdentifier]);
    134         }
    135     }
    136 }
    137 
    138 void NetworkDataTask::didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend)
     111NetworkDataTaskCocoa::~NetworkDataTaskCocoa()
     112{
     113    if (!m_task)
     114        return;
     115
     116    auto& cocoaSession = static_cast<NetworkSessionCocoa&>(m_session.get());
     117    if (m_storedCredentials == WebCore::StoredCredentials::AllowStoredCredentials) {
     118        ASSERT(cocoaSession.m_dataTaskMapWithCredentials.get([m_task taskIdentifier]) == this);
     119        cocoaSession.m_dataTaskMapWithCredentials.remove([m_task taskIdentifier]);
     120    } else {
     121        ASSERT(cocoaSession.m_dataTaskMapWithoutCredentials.get([m_task taskIdentifier]) == this);
     122        cocoaSession.m_dataTaskMapWithoutCredentials.remove([m_task taskIdentifier]);
     123    }
     124}
     125
     126void NetworkDataTaskCocoa::didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend)
    139127{
    140128    if (m_client)
     
    142130}
    143131
    144 void NetworkDataTask::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler&& completionHandler)
     132void NetworkDataTaskCocoa::didReceiveChallenge(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler&& completionHandler)
    145133{
    146134    // Proxy authentication is handled by CFNetwork internally. We can get here if the user cancels
     
    162150}
    163151
    164 void NetworkDataTask::didCompleteWithError(const WebCore::ResourceError& error)
     152void NetworkDataTaskCocoa::didCompleteWithError(const WebCore::ResourceError& error)
    165153{
    166154    if (m_client)
     
    168156}
    169157
    170 void NetworkDataTask::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
     158void NetworkDataTaskCocoa::didReceiveResponse(WebCore::ResourceResponse&& response, ResponseCompletionHandler&& completionHandler)
    171159{
    172160    if (m_client)
     
    178166}
    179167
    180 void NetworkDataTask::didReceiveData(Ref<WebCore::SharedBuffer>&& data)
     168void NetworkDataTaskCocoa::didReceiveData(Ref<WebCore::SharedBuffer>&& data)
    181169{
    182170    if (m_client)
     
    184172}
    185173
    186 void NetworkDataTask::didBecomeDownload()
     174void NetworkDataTaskCocoa::didBecomeDownload()
    187175{
    188176    if (m_client)
     
    190178}
    191179
    192 void NetworkDataTask::willPerformHTTPRedirection(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& request, RedirectCompletionHandler&& completionHandler)
     180void NetworkDataTaskCocoa::willPerformHTTPRedirection(WebCore::ResourceResponse&& redirectResponse, WebCore::ResourceRequest&& request, RedirectCompletionHandler&& completionHandler)
    193181{
    194182    if (redirectResponse.httpStatusCode() == 307 || redirectResponse.httpStatusCode() == 308) {
     
    241229    }
    242230}
    243    
    244 void NetworkDataTask::scheduleFailure(FailureType type)
    245 {
    246     ASSERT(type != NoFailure);
    247     m_scheduledFailureType = type;
    248     m_failureTimer.startOneShot(0);
    249 }
    250 
    251 void NetworkDataTask::failureTimerFired()
    252 {
    253     RefPtr<NetworkDataTask> protect(this);
    254    
    255     switch (m_scheduledFailureType) {
    256     case BlockedFailure:
    257         m_scheduledFailureType = NoFailure;
    258         if (m_client)
    259             m_client->wasBlocked();
    260         return;
    261     case InvalidURLFailure:
    262         m_scheduledFailureType = NoFailure;
    263         if (m_client)
    264             m_client->cannotShowURL();
    265         return;
    266     case NoFailure:
    267         ASSERT_NOT_REACHED();
    268         break;
    269     }
    270     ASSERT_NOT_REACHED();
    271 }
    272 
    273 void NetworkDataTask::setPendingDownloadLocation(const WTF::String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
    274 {
     231
     232void NetworkDataTaskCocoa::setPendingDownloadLocation(const WTF::String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
     233{
     234    NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);
     235
    275236    ASSERT(!m_sandboxExtension);
    276237    m_sandboxExtension = SandboxExtension::create(sandboxExtensionHandle);
     
    278239        m_sandboxExtension->consume();
    279240
    280     m_pendingDownloadLocation = filename;
    281     m_task.get()._pathToDownloadTaskFile = filename;
    282 
    283     if (allowOverwrite && WebCore::fileExists(filename))
     241    m_task.get()._pathToDownloadTaskFile = m_pendingDownloadLocation;
     242
     243    if (allowOverwrite && WebCore::fileExists(m_pendingDownloadLocation))
    284244        WebCore::deleteFile(filename);
    285245}
    286246
    287 bool NetworkDataTask::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge& challenge, const ChallengeCompletionHandler& completionHandler)
     247bool NetworkDataTaskCocoa::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge& challenge, const ChallengeCompletionHandler& completionHandler)
    288248{
    289249    if (!challenge.protectionSpace().isPasswordBased())
     
    330290}
    331291
    332 void NetworkDataTask::transferSandboxExtensionToDownload(Download& download)
     292void NetworkDataTaskCocoa::transferSandboxExtensionToDownload(Download& download)
    333293{
    334294    download.setSandboxExtension(WTFMove(m_sandboxExtension));
     
    357317}
    358318
    359 bool NetworkDataTask::allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge& challenge)
     319bool NetworkDataTaskCocoa::allowsSpecificHTTPSCertificateForHost(const WebCore::AuthenticationChallenge& challenge)
    360320{
    361321    const String& host = challenge.protectionSpace().host();
     
    375335}
    376336
    377 String NetworkDataTask::suggestedFilename()
     337String NetworkDataTaskCocoa::suggestedFilename() const
    378338{
    379339    if (!m_suggestedFilename.isEmpty())
     
    382342}
    383343
    384 void NetworkDataTask::setSuggestedFilename(const String& suggestedName)
    385 {
    386     m_suggestedFilename = suggestedName;
    387 }
    388 
    389 void NetworkDataTask::cancel()
     344void NetworkDataTaskCocoa::cancel()
    390345{
    391346    [m_task cancel];
    392347}
    393348
    394 void NetworkDataTask::resume()
     349void NetworkDataTaskCocoa::resume()
    395350{
    396351    if (m_scheduledFailureType != NoFailure)
     
    399354}
    400355
    401 void NetworkDataTask::suspend()
     356void NetworkDataTaskCocoa::suspend()
    402357{
    403358    if (m_failureTimer.isActive())
     
    406361}
    407362
    408 NetworkDataTask::State NetworkDataTask::state() const
     363NetworkDataTask::State NetworkDataTaskCocoa::state() const
    409364{
    410365    switch ([m_task state]) {
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkProcessCocoa.mm

    r206604 r207813  
    3030#import "NetworkProcessCreationParameters.h"
    3131#import "NetworkResourceLoader.h"
    32 #import "NetworkSession.h"
     32#import "NetworkSessionCocoa.h"
    3333#import "SandboxExtension.h"
    3434#import "SessionTracker.h"
     
    8686
    8787#if USE(NETWORK_SESSION)
    88     NetworkSession::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
    89     NetworkSession::setSourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier);
    90     NetworkSession::setSourceApplicationSecondaryIdentifier(parameters.sourceApplicationSecondaryIdentifier);
    91 #if PLATFORM(IOS)
    92     NetworkSession::setCTDataConnectionServiceType(parameters.ctDataConnectionServiceType);
     88    NetworkSessionCocoa::setSourceApplicationAuditTokenData(sourceApplicationAuditData());
     89    NetworkSessionCocoa::setSourceApplicationBundleIdentifier(parameters.sourceApplicationBundleIdentifier);
     90    NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(parameters.sourceApplicationSecondaryIdentifier);
     91#if PLATFORM(IOS)
     92    NetworkSessionCocoa::setCTDataConnectionServiceType(parameters.ctDataConnectionServiceType);
    9393#endif
    9494#endif
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.h

    r207812 r207813  
    11/*
    2  * Copyright (C) 2015 Apple Inc. All rights reserved.
     2 * Copyright (C) 2016 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2828#if USE(NETWORK_SESSION)
    2929
    30 #if PLATFORM(COCOA)
    3130OBJC_CLASS NSURLSession;
    3231OBJC_CLASS NSOperationQueue;
    3332OBJC_CLASS WKNetworkSessionDelegate;
    34 #endif
    3533
    3634#include "DownloadID.h"
    37 #include "NetworkDataTask.h"
    38 #include <WebCore/SessionID.h>
     35#include "NetworkDataTaskCocoa.h"
     36#include "NetworkSession.h"
    3937#include <wtf/HashMap.h>
    40 #include <wtf/HashSet.h>
    41 #include <wtf/Ref.h>
    42 #include <wtf/RefCounted.h>
    43 
    44 #if USE(SOUP)
    45 typedef struct _SoupSession SoupSession;
    46 #endif
    47 
    48 namespace WebCore {
    49 class NetworkStorageSession;
    50 }
    5138
    5239namespace WebKit {
    5340
    54 class CustomProtocolManager;
     41class NetworkSessionCocoa final : public NetworkSession {
     42    friend class NetworkDataTaskCocoa;
     43public:
     44    static Ref<NetworkSession> create(WebCore::SessionID, CustomProtocolManager*);
     45    static NetworkSession& defaultSession();
     46    ~NetworkSessionCocoa();
    5547
    56 class NetworkSession : public RefCounted<NetworkSession> {
    57     friend class NetworkDataTask;
    58 public:
    59     enum class Type {
    60         Normal,
    61         Ephemeral
    62     };
    63 
    64     static Ref<NetworkSession> create(Type, WebCore::SessionID, CustomProtocolManager*);
    65     static NetworkSession& defaultSession();
    66     ~NetworkSession();
    67 
    68     void invalidateAndCancel();
    69 
    70     WebCore::SessionID sessionID() const { return m_sessionID; }
    71 
    72 #if USE(SOUP)
    73     SoupSession* soupSession() const;
    74 #endif
    75 
    76 #if PLATFORM(COCOA)
    7748    // Must be called before any NetworkSession has been created.
    7849    static void setCustomProtocolManager(CustomProtocolManager*);
     
    8354    static void setCTDataConnectionServiceType(const String&);
    8455#endif
    85 #endif
    8656
    87     void clearCredentials();
    88 #if PLATFORM(COCOA)
    89     NetworkDataTask* dataTaskForIdentifier(NetworkDataTask::TaskIdentifier, WebCore::StoredCredentials);
     57    NetworkDataTaskCocoa* dataTaskForIdentifier(NetworkDataTaskCocoa::TaskIdentifier, WebCore::StoredCredentials);
    9058
    91     void addDownloadID(NetworkDataTask::TaskIdentifier, DownloadID);
    92     DownloadID downloadID(NetworkDataTask::TaskIdentifier);
    93     DownloadID takeDownloadID(NetworkDataTask::TaskIdentifier);
    94 #endif
     59    void addDownloadID(NetworkDataTaskCocoa::TaskIdentifier, DownloadID);
     60    DownloadID downloadID(NetworkDataTaskCocoa::TaskIdentifier);
     61    DownloadID takeDownloadID(NetworkDataTaskCocoa::TaskIdentifier);
    9562
    9663private:
    97     NetworkSession(Type, WebCore::SessionID, CustomProtocolManager*);
    98     WebCore::NetworkStorageSession& networkStorageSession() const;
     64    NetworkSessionCocoa(WebCore::SessionID, CustomProtocolManager*);
    9965
    100     WebCore::SessionID m_sessionID;
     66    void invalidateAndCancel() override;
     67    void clearCredentials() override;
    10168
    102 #if PLATFORM(COCOA)
    103     HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithCredentials;
    104     HashMap<NetworkDataTask::TaskIdentifier, NetworkDataTask*> m_dataTaskMapWithoutCredentials;
    105     HashMap<NetworkDataTask::TaskIdentifier, DownloadID> m_downloadMap;
     69    HashMap<NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*> m_dataTaskMapWithCredentials;
     70    HashMap<NetworkDataTaskCocoa::TaskIdentifier, NetworkDataTaskCocoa*> m_dataTaskMapWithoutCredentials;
     71    HashMap<NetworkDataTaskCocoa::TaskIdentifier, DownloadID> m_downloadMap;
    10672
    10773    RetainPtr<NSURLSession> m_sessionWithCredentialStorage;
     
    10975    RetainPtr<NSURLSession> m_sessionWithoutCredentialStorage;
    11076    RetainPtr<WKNetworkSessionDelegate> m_sessionWithoutCredentialStorageDelegate;
    111 #elif USE(SOUP)
    112     HashSet<NetworkDataTask*> m_dataTaskSet;
    113 #endif
    11477};
    11578
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r207586 r207813  
    2525
    2626#import "config.h"
    27 #import "NetworkSession.h"
     27#import "NetworkSessionCocoa.h"
    2828
    2929#if USE(NETWORK_SESSION)
     
    8383
    8484@interface WKNetworkSessionDelegate : NSObject <NSURLSessionDataDelegate> {
    85     RefPtr<WebKit::NetworkSession> _session;
     85    RefPtr<WebKit::NetworkSessionCocoa> _session;
    8686    bool _withCredentials;
    8787}
    8888
    89 - (id)initWithNetworkSession:(WebKit::NetworkSession&)session withCredentials:(bool)withCredentials;
     89- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&)session withCredentials:(bool)withCredentials;
    9090
    9191@end
     
    9393@implementation WKNetworkSessionDelegate
    9494
    95 - (id)initWithNetworkSession:(WebKit::NetworkSession&)session withCredentials:(bool)withCredentials
     95- (id)initWithNetworkSession:(WebKit::NetworkSessionCocoa&)session withCredentials:(bool)withCredentials
    9696{
    9797    self = [super init];
     
    297297    auto storedCredentials = _withCredentials ? WebCore::StoredCredentials::AllowStoredCredentials : WebCore::StoredCredentials::DoNotAllowStoredCredentials;
    298298    if (auto* networkDataTask = _session->dataTaskForIdentifier([dataTask taskIdentifier], storedCredentials)) {
    299         Ref<NetworkDataTask> protectedNetworkDataTask(*networkDataTask);
     299        Ref<NetworkDataTaskCocoa> protectedNetworkDataTask(*networkDataTask);
    300300        auto downloadID = networkDataTask->pendingDownloadID();
    301301        auto& downloadManager = WebKit::NetworkProcess::singleton().downloadManager();
     
    315315namespace WebKit {
    316316   
    317 static NSURLSessionConfiguration *configurationForType(NetworkSession::Type type)
    318 {
    319     switch (type) {
    320     case NetworkSession::Type::Normal:
    321         return [NSURLSessionConfiguration defaultSessionConfiguration];
    322     case NetworkSession::Type::Ephemeral:
     317static NSURLSessionConfiguration *configurationForSessionID(const WebCore::SessionID& session)
     318{
     319    if (session.isEphemeral())
    323320        return [NSURLSessionConfiguration ephemeralSessionConfiguration];
    324     }
     321    return [NSURLSessionConfiguration defaultSessionConfiguration];
    325322}
    326323
     
    361358#endif
    362359
    363 void NetworkSession::setCustomProtocolManager(CustomProtocolManager* customProtocolManager)
     360void NetworkSessionCocoa::setCustomProtocolManager(CustomProtocolManager* customProtocolManager)
    364361{
    365362    ASSERT(!sessionsCreated);
     
    367364}
    368365   
    369 void NetworkSession::setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&& data)
     366void NetworkSessionCocoa::setSourceApplicationAuditTokenData(RetainPtr<CFDataRef>&& data)
    370367{
    371368    ASSERT(!sessionsCreated);
     
    373370}
    374371
    375 void NetworkSession::setSourceApplicationBundleIdentifier(const String& identifier)
     372void NetworkSessionCocoa::setSourceApplicationBundleIdentifier(const String& identifier)
    376373{
    377374    ASSERT(!sessionsCreated);
     
    379376}
    380377
    381 void NetworkSession::setSourceApplicationSecondaryIdentifier(const String& identifier)
     378void NetworkSessionCocoa::setSourceApplicationSecondaryIdentifier(const String& identifier)
    382379{
    383380    ASSERT(!sessionsCreated);
     
    386383
    387384#if PLATFORM(IOS)
    388 void NetworkSession::setCTDataConnectionServiceType(const String& type)
     385void NetworkSessionCocoa::setCTDataConnectionServiceType(const String& type)
    389386{
    390387    ASSERT(!sessionsCreated);
     
    393390#endif
    394391
    395 Ref<NetworkSession> NetworkSession::create(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
    396 {
    397     return adoptRef(*new NetworkSession(type, sessionID, customProtocolManager));
    398 }
    399 
    400 NetworkSession& NetworkSession::defaultSession()
     392Ref<NetworkSession> NetworkSessionCocoa::create(WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
     393{
     394    return adoptRef(*new NetworkSessionCocoa(sessionID, customProtocolManager));
     395}
     396
     397NetworkSession& NetworkSessionCocoa::defaultSession()
    401398{
    402399    ASSERT(isMainThread());
    403     static NetworkSession* session = &NetworkSession::create(NetworkSession::Type::Normal, WebCore::SessionID::defaultSessionID(), globalCustomProtocolManager().get()).leakRef();
     400    static NetworkSession* session = &NetworkSessionCocoa::create(WebCore::SessionID::defaultSessionID(), globalCustomProtocolManager().get()).leakRef();
    404401    return *session;
    405402}
    406403
    407 NetworkSession::NetworkSession(Type type, WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
    408     : m_sessionID(sessionID)
     404NetworkSessionCocoa::NetworkSessionCocoa(WebCore::SessionID sessionID, CustomProtocolManager* customProtocolManager)
     405    : NetworkSession(sessionID)
    409406{
    410407    relaxAdoptionRequirement();
     
    414411#endif
    415412
    416     NSURLSessionConfiguration *configuration = configurationForType(type);
     413    NSURLSessionConfiguration *configuration = configurationForSessionID(m_sessionID);
    417414
    418415    if (NetworkCache::singleton().isEnabled())
     
    446443
    447444    if (sessionID == WebCore::SessionID::defaultSessionID()) {
    448         ASSERT(type == Type::Normal);
    449445        if (CFHTTPCookieStorageRef storage = WebCore::NetworkStorageSession::defaultStorageSession().cookieStorage().get())
    450446            configuration.HTTPCookieStorage = [[[NSHTTPCookieStorage alloc] _initWithCFHTTPCookieStorage:storage] autorelease];
    451447    } else {
    452         ASSERT(type == Type::Ephemeral);
    453448        auto* storageSession = WebCore::NetworkStorageSession::storageSession(sessionID);
    454449        RELEASE_ASSERT(storageSession);
     
    466461}
    467462
    468 NetworkSession::~NetworkSession()
    469 {
    470 }
    471 
    472 void NetworkSession::invalidateAndCancel()
     463NetworkSessionCocoa::~NetworkSessionCocoa()
     464{
     465}
     466
     467void NetworkSessionCocoa::invalidateAndCancel()
    473468{
    474469    [m_sessionWithCredentialStorage invalidateAndCancel];
     
    477472
    478473
    479 WebCore::NetworkStorageSession& NetworkSession::networkStorageSession() const
    480 {
    481     auto* storageSession = WebCore::NetworkStorageSession::storageSession(m_sessionID);
    482     RELEASE_ASSERT(storageSession);
    483     return *storageSession;
    484 }
    485 
    486 void NetworkSession::clearCredentials()
     474void NetworkSessionCocoa::clearCredentials()
    487475{
    488476#if !USE(CREDENTIAL_STORAGE_WITH_NETWORK_SESSION)
     
    496484}
    497485
    498 NetworkDataTask* NetworkSession::dataTaskForIdentifier(NetworkDataTask::TaskIdentifier taskIdentifier, WebCore::StoredCredentials storedCredentials)
     486NetworkDataTaskCocoa* NetworkSessionCocoa::dataTaskForIdentifier(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier, WebCore::StoredCredentials storedCredentials)
    499487{
    500488    ASSERT(isMainThread());
     
    504492}
    505493
    506 void NetworkSession::addDownloadID(NetworkDataTask::TaskIdentifier taskIdentifier, DownloadID downloadID)
     494void NetworkSessionCocoa::addDownloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier, DownloadID downloadID)
    507495{
    508496#ifndef NDEBUG
     
    514502}
    515503
    516 DownloadID NetworkSession::downloadID(NetworkDataTask::TaskIdentifier taskIdentifier)
     504DownloadID NetworkSessionCocoa::downloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier)
    517505{
    518506    ASSERT(m_downloadMap.get(taskIdentifier).downloadID());
     
    520508}
    521509
    522 DownloadID NetworkSession::takeDownloadID(NetworkDataTask::TaskIdentifier taskIdentifier)
     510DownloadID NetworkSessionCocoa::takeDownloadID(NetworkDataTaskCocoa::TaskIdentifier taskIdentifier)
    523511{
    524512    auto downloadID = m_downloadMap.take(taskIdentifier);
  • trunk/Source/WebKit2/NetworkProcess/mac/RemoteNetworkingContext.mm

    r204466 r207813  
    9696
    9797#if USE(NETWORK_SESSION)
    98     auto networkSession = NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, NetworkProcess::singleton().supplement<CustomProtocolManager>());
     98    auto networkSession = NetworkSession::create(sessionID, NetworkProcess::singleton().supplement<CustomProtocolManager>());
    9999    SessionTracker::setSession(sessionID, WTFMove(networkSession));
    100100#endif
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkDataTaskSoup.cpp

    r207586 r207813  
    2525
    2626#include "config.h"
    27 #include "NetworkDataTask.h"
     27#include "NetworkDataTaskSoup.h"
    2828
    2929#include "AuthenticationManager.h"
     
    3333#include "NetworkLoad.h"
    3434#include "NetworkProcess.h"
    35 #include "NetworkSession.h"
     35#include "NetworkSessionSoup.h"
    3636#include "WebErrors.h"
    3737#include <WebCore/AuthenticationChallenge.h>
     
    4848static const size_t gDefaultReadBufferSize = 8192;
    4949
    50 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
    51     : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
    52     , m_session(&session)
    53     , m_client(&client)
    54     , m_storedCredentials(storedCredentials)
    55     , m_lastHTTPMethod(requestWithCredentials.httpMethod())
    56     , m_firstRequest(requestWithCredentials)
    57     , m_shouldClearReferrerOnHTTPSToHTTPRedirect(shouldClearReferrerOnHTTPSToHTTPRedirect)
     50NetworkDataTaskSoup::NetworkDataTaskSoup(NetworkSession& session, NetworkDataTaskClient& client, const ResourceRequest& requestWithCredentials, StoredCredentials storedCredentials, ContentSniffingPolicy shouldContentSniff, bool shouldClearReferrerOnHTTPSToHTTPRedirect)
     51    : NetworkDataTask(session, client, requestWithCredentials, storedCredentials, shouldClearReferrerOnHTTPSToHTTPRedirect)
    5852    , m_shouldContentSniff(shouldContentSniff)
    59     , m_timeoutSource(RunLoop::main(), this, &NetworkDataTask::timeoutFired)
    60 {
    61     ASSERT(isMainThread());
    62 
    63     m_session->m_dataTaskSet.add(this);
    64 
    65     if (!requestWithCredentials.url().isValid()) {
    66         scheduleFailure(InvalidURLFailure);
    67         return;
    68     }
    69 
    70     if (!portAllowed(requestWithCredentials.url())) {
    71         scheduleFailure(BlockedFailure);
    72         return;
    73     }
     53    , m_timeoutSource(RunLoop::main(), this, &NetworkDataTaskSoup::timeoutFired)
     54{
     55    static_cast<NetworkSessionSoup&>(m_session.get()).registerNetworkDataTask(*this);
     56    if (m_scheduledFailureType != NoFailure)
     57        return;
    7458
    7559    auto request = requestWithCredentials;
     
    9478}
    9579
    96 NetworkDataTask::~NetworkDataTask()
    97 {
    98     ASSERT(isMainThread());
    99     ASSERT(!m_client);
     80NetworkDataTaskSoup::~NetworkDataTaskSoup()
     81{
    10082    clearRequest();
    101     m_session->m_dataTaskSet.remove(this);
    102 }
    103 
    104 void NetworkDataTask::scheduleFailure(FailureType type)
    105 {
    106     ASSERT(type != NoFailure);
    107     m_scheduledFailureType = type;
    108     m_failureTimer.startOneShot(0);
    109 }
    110 
    111 void NetworkDataTask::failureTimerFired()
    112 {
    113     RefPtr<NetworkDataTask> protectedThis(this);
    114 
    115     switch (m_scheduledFailureType) {
    116     case BlockedFailure:
    117         m_scheduledFailureType = NoFailure;
    118         if (m_client)
    119             m_client->wasBlocked();
    120         return;
    121     case InvalidURLFailure:
    122         m_scheduledFailureType = NoFailure;
    123         if (m_client)
    124             m_client->cannotShowURL();
    125         return;
    126     case NoFailure:
    127         ASSERT_NOT_REACHED();
    128         break;
    129     }
    130     ASSERT_NOT_REACHED();
    131 }
    132 
    133 String NetworkDataTask::suggestedFilename()
     83    static_cast<NetworkSessionSoup&>(m_session.get()).unregisterNetworkDataTask(*this);
     84}
     85
     86String NetworkDataTaskSoup::suggestedFilename() const
    13487{
    13588    if (!m_suggestedFilename.isEmpty())
     
    14396}
    14497
    145 void NetworkDataTask::setSuggestedFilename(const String& suggestedName)
    146 {
    147     m_suggestedFilename = suggestedName;
    148 }
    149 
    150 void NetworkDataTask::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle&, bool allowOverwrite)
    151 {
    152     m_pendingDownloadLocation = filename;
     98void NetworkDataTaskSoup::setPendingDownloadLocation(const String& filename, const SandboxExtension::Handle& sandboxExtensionHandle, bool allowOverwrite)
     99{
     100    NetworkDataTask::setPendingDownloadLocation(filename, sandboxExtensionHandle, allowOverwrite);
    153101    m_allowOverwriteDownload = allowOverwrite;
    154102}
    155103
    156 bool NetworkDataTask::allowsSpecificHTTPSCertificateForHost(const AuthenticationChallenge&)
    157 {
    158     return false;
    159 }
    160 
    161 void NetworkDataTask::createRequest(const ResourceRequest& request)
     104void NetworkDataTaskSoup::createRequest(const ResourceRequest& request)
    162105{
    163106    GUniquePtr<SoupURI> soupURI = request.createSoupURI();
     
    167110    }
    168111
    169     GRefPtr<SoupRequest> soupRequest = adoptGRef(soup_session_request_uri(m_session->soupSession(), soupURI.get(), nullptr));
     112    GRefPtr<SoupRequest> soupRequest = adoptGRef(soup_session_request_uri(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), soupURI.get(), nullptr));
    170113    if (!soupRequest) {
    171114        scheduleFailure(InvalidURLFailure);
     
    219162    g_signal_connect(m_soupMessage.get(), "got-headers", G_CALLBACK(gotHeadersCallback), this);
    220163    g_signal_connect(m_soupMessage.get(), "wrote-body-data", G_CALLBACK(wroteBodyDataCallback), this);
    221     g_signal_connect(m_session->soupSession(), "authenticate",  G_CALLBACK(authenticateCallback), this);
     164    g_signal_connect(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), "authenticate",  G_CALLBACK(authenticateCallback), this);
    222165#if ENABLE(WEB_TIMING)
    223166    g_signal_connect(m_soupMessage.get(), "network-event", G_CALLBACK(networkEventCallback), this);
     
    226169    g_signal_connect(m_soupMessage.get(), "starting", G_CALLBACK(startingCallback), this);
    227170#else
    228     g_signal_connect(m_session->soupSession(), "request-started", G_CALLBACK(requestStartedCallback), this);
     171    g_signal_connect(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), "request-started", G_CALLBACK(requestStartedCallback), this);
    229172#endif
    230173#endif
    231174}
    232175
    233 void NetworkDataTask::clearRequest()
     176void NetworkDataTaskSoup::clearRequest()
    234177{
    235178    if (m_state == State::Completed)
     
    248191    if (m_soupMessage) {
    249192        g_signal_handlers_disconnect_matched(m_soupMessage.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
    250         soup_session_cancel_message(m_session->soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
     193        soup_session_cancel_message(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
    251194        m_soupMessage = nullptr;
    252195    }
    253     g_signal_handlers_disconnect_matched(m_session->soupSession(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
    254 }
    255 
    256 void NetworkDataTask::resume()
     196    g_signal_handlers_disconnect_matched(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, this);
     197}
     198
     199void NetworkDataTaskSoup::resume()
    257200{
    258201    ASSERT(m_state != State::Running);
     
    269212    startTimeout();
    270213
    271     RefPtr<NetworkDataTask> protectedThis(this);
     214    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    272215    if (m_soupRequest && !m_cancellable) {
    273216        m_cancellable = adoptGRef(g_cancellable_new());
     
    289232}
    290233
    291 void NetworkDataTask::suspend()
     234void NetworkDataTaskSoup::suspend()
    292235{
    293236    ASSERT(m_state != State::Suspended);
     
    299242}
    300243
    301 void NetworkDataTask::cancel()
     244void NetworkDataTaskSoup::cancel()
    302245{
    303246    if (m_state == State::Canceling || m_state == State::Completed)
     
    307250
    308251    if (m_soupMessage)
    309         soup_session_cancel_message(m_session->soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
     252        soup_session_cancel_message(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), m_soupMessage.get(), SOUP_STATUS_CANCELLED);
    310253
    311254    g_cancellable_cancel(m_cancellable.get());
     
    315258}
    316259
    317 void NetworkDataTask::invalidateAndCancel()
     260void NetworkDataTaskSoup::invalidateAndCancel()
    318261{
    319262    cancel();
     
    321264}
    322265
    323 NetworkDataTask::State NetworkDataTask::state() const
     266NetworkDataTask::State NetworkDataTaskSoup::state() const
    324267{
    325268    return m_state;
    326269}
    327270
    328 void NetworkDataTask::timeoutFired()
     271void NetworkDataTaskSoup::timeoutFired()
    329272{
    330273    if (m_state == State::Canceling || m_state == State::Completed || !m_client) {
     
    333276    }
    334277
    335     RefPtr<NetworkDataTask> protectedThis(this);
     278    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    336279    invalidateAndCancel();
    337280    m_client->didCompleteWithError(ResourceError::timeoutError(m_firstRequest.url()));
    338281}
    339282
    340 void NetworkDataTask::startTimeout()
     283void NetworkDataTaskSoup::startTimeout()
    341284{
    342285    if (m_firstRequest.timeoutInterval() > 0)
     
    344287}
    345288
    346 void NetworkDataTask::stopTimeout()
     289void NetworkDataTaskSoup::stopTimeout()
    347290{
    348291    m_timeoutSource.stop();
    349292}
    350293
    351 void NetworkDataTask::sendRequestCallback(SoupRequest* soupRequest, GAsyncResult* result, NetworkDataTask* task)
    352 {
    353     RefPtr<NetworkDataTask> protectedThis = adoptRef(task);
     294void NetworkDataTaskSoup::sendRequestCallback(SoupRequest* soupRequest, GAsyncResult* result, NetworkDataTaskSoup* task)
     295{
     296    RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
    354297    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
    355298        task->clearRequest();
     
    372315}
    373316
    374 void NetworkDataTask::didSendRequest(GRefPtr<GInputStream>&& inputStream)
     317void NetworkDataTaskSoup::didSendRequest(GRefPtr<GInputStream>&& inputStream)
    375318{
    376319    if (m_soupMessage) {
     
    406349}
    407350
    408 void NetworkDataTask::didReceiveResponse()
     351void NetworkDataTaskSoup::didReceiveResponse()
    409352{
    410353    ASSERT(!m_response.isNull());
     
    437380}
    438381
    439 void NetworkDataTask::tlsErrorsChangedCallback(SoupMessage* soupMessage, GParamSpec*, NetworkDataTask* task)
     382void NetworkDataTaskSoup::tlsErrorsChangedCallback(SoupMessage* soupMessage, GParamSpec*, NetworkDataTaskSoup* task)
    440383{
    441384    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
     
    448391}
    449392
    450 void NetworkDataTask::tlsErrorsChanged()
     393void NetworkDataTaskSoup::tlsErrorsChanged()
    451394{
    452395    ASSERT(m_soupRequest);
     
    455398            return;
    456399
    457         RefPtr<NetworkDataTask> protectedThis(this);
     400        RefPtr<NetworkDataTaskSoup> protectedThis(this);
    458401        invalidateAndCancel();
    459402        m_client->didCompleteWithError(error);
     
    461404}
    462405
    463 void NetworkDataTask::applyAuthenticationToRequest(ResourceRequest& request)
     406void NetworkDataTaskSoup::applyAuthenticationToRequest(ResourceRequest& request)
    464407{
    465408    // We always put the credentials into the URL. In the Coca port HTTP family credentials are applied in
     
    481424}
    482425
    483 void NetworkDataTask::authenticateCallback(SoupSession* session, SoupMessage* soupMessage, SoupAuth* soupAuth, gboolean retrying, NetworkDataTask* task)
    484 {
    485     ASSERT(session == task->m_session->soupSession());
     426void NetworkDataTaskSoup::authenticateCallback(SoupSession* session, SoupMessage* soupMessage, SoupAuth* soupAuth, gboolean retrying, NetworkDataTaskSoup* task)
     427{
     428    ASSERT(session == task->static_cast<NetworkSessionSoup&>(m_session.get()).soupSession());
    486429    if (soupMessage != task->m_soupMessage.get())
    487430        return;
     
    500443}
    501444
    502 void NetworkDataTask::authenticate(AuthenticationChallenge&& challenge)
     445void NetworkDataTaskSoup::authenticate(AuthenticationChallenge&& challenge)
    503446{
    504447    ASSERT(m_soupMessage);
     
    526469    }
    527470
    528     soup_session_pause_message(m_session->soupSession(), m_soupMessage.get());
     471    soup_session_pause_message(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), m_soupMessage.get());
    529472
    530473    // We could also do this before we even start the request, but that would be at the expense
     
    548491}
    549492
    550 void NetworkDataTask::continueAuthenticate(AuthenticationChallenge&& challenge)
     493void NetworkDataTaskSoup::continueAuthenticate(AuthenticationChallenge&& challenge)
    551494{
    552495    m_client->didReceiveChallenge(challenge, [this, protectedThis = makeRef(*this), challenge](AuthenticationChallengeDisposition disposition, const Credential& credential) {
     
    580523        }
    581524
    582         soup_session_unpause_message(m_session->soupSession(), m_soupMessage.get());
     525        soup_session_unpause_message(static_cast<NetworkSessionSoup&>(m_session.get()).soupSession(), m_soupMessage.get());
    583526    });
    584527}
    585528
    586 void NetworkDataTask::skipInputStreamForRedirectionCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTask* task)
    587 {
    588     RefPtr<NetworkDataTask> protectedThis = adoptRef(task);
     529void NetworkDataTaskSoup::skipInputStreamForRedirectionCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
     530{
     531    RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
    589532    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
    590533        task->clearRequest();
     
    603546}
    604547
    605 void NetworkDataTask::skipInputStreamForRedirection()
     548void NetworkDataTaskSoup::skipInputStreamForRedirection()
    606549{
    607550    ASSERT(m_inputStream);
    608     RefPtr<NetworkDataTask> protectedThis(this);
     551    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    609552    g_input_stream_skip_async(m_inputStream.get(), gDefaultReadBufferSize, G_PRIORITY_DEFAULT, m_cancellable.get(),
    610553        reinterpret_cast<GAsyncReadyCallback>(skipInputStreamForRedirectionCallback), protectedThis.leakRef());
    611554}
    612555
    613 void NetworkDataTask::didFinishSkipInputStreamForRedirection()
     556void NetworkDataTaskSoup::didFinishSkipInputStreamForRedirection()
    614557{
    615558    g_input_stream_close(m_inputStream.get(), nullptr, nullptr);
     
    638581}
    639582
    640 bool NetworkDataTask::shouldStartHTTPRedirection()
     583bool NetworkDataTaskSoup::shouldStartHTTPRedirection()
    641584{
    642585    ASSERT(m_soupMessage);
     
    657600}
    658601
    659 void NetworkDataTask::continueHTTPRedirection()
     602void NetworkDataTaskSoup::continueHTTPRedirection()
    660603{
    661604    ASSERT(m_soupMessage);
     
    728671}
    729672
    730 void NetworkDataTask::readCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTask* task)
    731 {
    732     RefPtr<NetworkDataTask> protectedThis = adoptRef(task);
     673void NetworkDataTaskSoup::readCallback(GInputStream* inputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
     674{
     675    RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
    733676    if (task->state() == State::Canceling || task->state() == State::Completed || (!task->m_client && !task->isDownload())) {
    734677        task->clearRequest();
     
    753696}
    754697
    755 void NetworkDataTask::read()
    756 {
    757     RefPtr<NetworkDataTask> protectedThis(this);
     698void NetworkDataTaskSoup::read()
     699{
     700    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    758701    ASSERT(m_inputStream);
    759702    m_readBuffer.grow(gDefaultReadBufferSize);
     
    762705}
    763706
    764 void NetworkDataTask::didRead(gssize bytesRead)
     707void NetworkDataTaskSoup::didRead(gssize bytesRead)
    765708{
    766709    m_readBuffer.shrink(bytesRead);
     
    775718}
    776719
    777 void NetworkDataTask::didFinishRead()
     720void NetworkDataTaskSoup::didFinishRead()
    778721{
    779722    ASSERT(m_inputStream);
     
    795738}
    796739
    797 void NetworkDataTask::requestNextPartCallback(SoupMultipartInputStream* multipartInputStream, GAsyncResult* result, NetworkDataTask* task)
    798 {
    799     RefPtr<NetworkDataTask> protectedThis = adoptRef(task);
     740void NetworkDataTaskSoup::requestNextPartCallback(SoupMultipartInputStream* multipartInputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
     741{
     742    RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
    800743    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
    801744        task->clearRequest();
     
    820763}
    821764
    822 void NetworkDataTask::requestNextPart()
    823 {
    824     RefPtr<NetworkDataTask> protectedThis(this);
     765void NetworkDataTaskSoup::requestNextPart()
     766{
     767    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    825768    ASSERT(m_multipartInputStream);
    826769    ASSERT(!m_inputStream);
     
    829772}
    830773
    831 void NetworkDataTask::didRequestNextPart(GRefPtr<GInputStream>&& inputStream)
     774void NetworkDataTaskSoup::didRequestNextPart(GRefPtr<GInputStream>&& inputStream)
    832775{
    833776    ASSERT(!m_inputStream);
     
    839782}
    840783
    841 void NetworkDataTask::didFinishRequestNextPart()
     784void NetworkDataTaskSoup::didFinishRequestNextPart()
    842785{
    843786    ASSERT(!m_inputStream);
     
    848791}
    849792
    850 void NetworkDataTask::gotHeadersCallback(SoupMessage* soupMessage, NetworkDataTask* task)
     793void NetworkDataTaskSoup::gotHeadersCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
    851794{
    852795    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
     
    858801}
    859802
    860 void NetworkDataTask::didGetHeaders()
     803void NetworkDataTaskSoup::didGetHeaders()
    861804{
    862805    // We are a bit more conservative with the persistent credential storage than the session store,
     
    871814}
    872815
    873 void NetworkDataTask::wroteBodyDataCallback(SoupMessage* soupMessage, SoupBuffer* buffer, NetworkDataTask* task)
     816void NetworkDataTaskSoup::wroteBodyDataCallback(SoupMessage* soupMessage, SoupBuffer* buffer, NetworkDataTaskSoup* task)
    874817{
    875818    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client) {
     
    881824}
    882825
    883 void NetworkDataTask::didWriteBodyData(uint64_t bytesSent)
    884 {
    885     RefPtr<NetworkDataTask> protectedThis(this);
     826void NetworkDataTaskSoup::didWriteBodyData(uint64_t bytesSent)
     827{
     828    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    886829    m_bodyDataTotalBytesSent += bytesSent;
    887830    m_client->didSendData(m_bodyDataTotalBytesSent, m_soupMessage->request_body->length);
    888831}
    889832
    890 void NetworkDataTask::download()
     833void NetworkDataTaskSoup::download()
    891834{
    892835    ASSERT(isDownload());
     
    932875}
    933876
    934 void NetworkDataTask::writeDownloadCallback(GOutputStream* outputStream, GAsyncResult* result, NetworkDataTask* task)
    935 {
    936     RefPtr<NetworkDataTask> protectedThis = adoptRef(task);
     877void NetworkDataTaskSoup::writeDownloadCallback(GOutputStream* outputStream, GAsyncResult* result, NetworkDataTaskSoup* task)
     878{
     879    RefPtr<NetworkDataTaskSoup> protectedThis = adoptRef(task);
    937880    if (task->state() == State::Canceling || task->state() == State::Completed || !task->isDownload()) {
    938881        task->clearRequest();
     
    956899}
    957900
    958 void NetworkDataTask::writeDownload()
    959 {
    960     RefPtr<NetworkDataTask> protectedThis(this);
     901void NetworkDataTaskSoup::writeDownload()
     902{
     903    RefPtr<NetworkDataTaskSoup> protectedThis(this);
    961904#if GLIB_CHECK_VERSION(2, 44, 0)
    962905    g_output_stream_write_all_async(m_downloadOutputStream.get(), m_readBuffer.data(), m_readBuffer.size(), G_PRIORITY_DEFAULT, m_cancellable.get(),
     
    967910    g_task_set_task_data(writeTask.get(), this, nullptr);
    968911    g_task_run_in_thread(writeTask.get(), [](GTask* writeTask, gpointer source, gpointer userData, GCancellable* cancellable) {
    969         auto* task = static_cast<NetworkDataTask*>(userData);
     912        auto* task = static_cast<NetworkDataTaskSoup*>(userData);
    970913        GOutputStream* outputStream = G_OUTPUT_STREAM(source);
    971914        RELEASE_ASSERT(task->m_downloadOutputStream.get() == outputStream);
     
    986929}
    987930
    988 void NetworkDataTask::didWriteDownload(gsize bytesWritten)
     931void NetworkDataTaskSoup::didWriteDownload(gsize bytesWritten)
    989932{
    990933    ASSERT(bytesWritten == m_readBuffer.size());
     
    995938}
    996939
    997 void NetworkDataTask::didFinishDownload()
     940void NetworkDataTaskSoup::didFinishDownload()
    998941{
    999942    ASSERT(!m_response.isNull());
     
    1022965}
    1023966
    1024 void NetworkDataTask::didFailDownload(const ResourceError& error)
     967void NetworkDataTaskSoup::didFailDownload(const ResourceError& error)
    1025968{
    1026969    clearRequest();
     
    1035978}
    1036979
    1037 void NetworkDataTask::cleanDownloadFiles()
     980void NetworkDataTaskSoup::cleanDownloadFiles()
    1038981{
    1039982    if (m_downloadDestinationFile) {
     
    1047990}
    1048991
    1049 void NetworkDataTask::didFail(const ResourceError& error)
     992void NetworkDataTaskSoup::didFail(const ResourceError& error)
    1050993{
    1051994    if (isDownload()) {
     
    10601003
    10611004#if ENABLE(WEB_TIMING)
    1062 void NetworkDataTask::networkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream*, NetworkDataTask* task)
     1005void NetworkDataTaskSoup::networkEventCallback(SoupMessage* soupMessage, GSocketClientEvent event, GIOStream*, NetworkDataTaskSoup* task)
    10631006{
    10641007    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client)
     
    10691012}
    10701013
    1071 void NetworkDataTask::networkEvent(GSocketClientEvent event)
     1014void NetworkDataTaskSoup::networkEvent(GSocketClientEvent event)
    10721015{
    10731016    double deltaTime = monotonicallyIncreasingTimeMS() - m_startTime;
     
    11061049
    11071050#if SOUP_CHECK_VERSION(2, 49, 91)
    1108 void NetworkDataTask::startingCallback(SoupMessage* soupMessage, NetworkDataTask* task)
     1051void NetworkDataTaskSoup::startingCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
    11091052{
    11101053    if (task->state() == State::Canceling || task->state() == State::Completed || !task->m_client)
     
    11151058}
    11161059#else
    1117 void NetworkDataTask::requestStartedCallback(SoupSession* session, SoupMessage* soupMessage, SoupSocket*, NetworkDataTask* task)
    1118 {
    1119     ASSERT(session == task->m_session->soupSession());
     1060void NetworkDataTaskSoup::requestStartedCallback(SoupSession* session, SoupMessage* soupMessage, SoupSocket*, NetworkDataTaskSoup* task)
     1061{
     1062    ASSERT(session == task->static_cast<NetworkSessionSoup&>(m_session.get()).soupSession());
    11201063    if (soupMessage != task->m_soupMessage.get())
    11211064        return;
     
    11281071#endif
    11291072
    1130 void NetworkDataTask::didStartRequest()
     1073void NetworkDataTaskSoup::didStartRequest()
    11311074{
    11321075    m_response.networkLoadTiming().requestStart = monotonicallyIncreasingTimeMS() - m_startTime;
    11331076}
    11341077
    1135 void NetworkDataTask::restartedCallback(SoupMessage* soupMessage, NetworkDataTask* task)
     1078void NetworkDataTaskSoup::restartedCallback(SoupMessage* soupMessage, NetworkDataTaskSoup* task)
    11361079{
    11371080    // Called each time the message is going to be sent again except the first time.
     
    11441087}
    11451088
    1146 void NetworkDataTask::didRestart()
     1089void NetworkDataTaskSoup::didRestart()
    11471090{
    11481091    m_startTime = monotonicallyIncreasingTimeMS();
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.cpp

    r207586 r207813  
    2525
    2626#include "config.h"
    27 #include "NetworkSession.h"
     27#include "NetworkSessionSoup.h"
    2828
     29#include "NetworkDataTaskSoup.h"
    2930#include <WebCore/NetworkStorageSession.h>
    3031#include <WebCore/SoupNetworkSession.h>
     
    3536namespace WebKit {
    3637
    37 Ref<NetworkSession> NetworkSession::create(Type type, SessionID sessionID, CustomProtocolManager*)
    38 {
    39     return adoptRef(*new NetworkSession(type, sessionID, nullptr));
    40 }
    41 
    42 NetworkSession& NetworkSession::defaultSession()
    43 {
    44     ASSERT(isMainThread());
    45     static NetworkSession* session = &NetworkSession::create(NetworkSession::Type::Normal, SessionID::defaultSessionID(), nullptr).leakRef();
    46     return *session;
    47 }
    48 
    49 NetworkStorageSession& NetworkSession::networkStorageSession() const
    50 {
    51     auto* storageSession = NetworkStorageSession::storageSession(m_sessionID);
    52     RELEASE_ASSERT(storageSession);
    53     return *storageSession;
    54 }
    55 
    56 NetworkSession::NetworkSession(Type type, SessionID sessionID, CustomProtocolManager*)
    57     : m_sessionID(sessionID)
     38NetworkSessionSoup::NetworkSessionSoup(SessionID sessionID)
     39    : NetworkSession(sessionID)
    5840{
    5941}
    6042
    61 NetworkSession::~NetworkSession()
     43NetworkSessionSoup::~NetworkSessionSoup()
    6244{
    6345}
    6446
    65 SoupSession* NetworkSession::soupSession() const
     47SoupSession* NetworkSessionSoup::soupSession() const
    6648{
    6749    return networkStorageSession().soupNetworkSession().soupSession();
    6850}
    6951
    70 void NetworkSession::invalidateAndCancel()
     52void NetworkSessionSoup::invalidateAndCancel()
    7153{
    7254    for (auto* task : m_dataTaskSet)
     
    7456}
    7557
    76 void NetworkSession::clearCredentials()
    77 {
    78 }
    79 
    8058} // namespace WebKit
  • trunk/Source/WebKit2/NetworkProcess/soup/NetworkSessionSoup.h

    r207812 r207813  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
    3  * Copyright (C) 2013 University of Szeged. All rights reserved.
    4  * Copyright (C) 2013 Company 100 Inc.
     2 * Copyright (C) 2016 Igalia S.L.
    53 *
    64 * Redistribution and use in source and binary forms, with or without
     
    2624 */
    2725
    28 #include "config.h"
    29 #include "RemoteNetworkingContext.h"
     26#pragma once
    3027
    3128#include "NetworkSession.h"
    32 #include "SessionTracker.h"
    33 #include <WebCore/NetworkStorageSession.h>
    34 #include <WebCore/NotImplemented.h>
    35 #include <WebCore/ResourceHandle.h>
     29#include <wtf/HashSet.h>
    3630
    37 using namespace WebCore;
     31typedef struct _SoupSession SoupSession;
    3832
    3933namespace WebKit {
    4034
    41 RemoteNetworkingContext::~RemoteNetworkingContext()
    42 {
    43 }
     35class NetworkDataTaskSoup;
    4436
    45 bool RemoteNetworkingContext::isValid() const
    46 {
    47     return true;
    48 }
     37class NetworkSessionSoup final : public NetworkSession {
     38public:
     39    static Ref<NetworkSession> create(WebCore::SessionID sessionID)
     40    {
     41        return adoptRef(*new NetworkSessionSoup(sessionID));
     42    }
     43    ~NetworkSessionSoup();
    4944
    50 void RemoteNetworkingContext::ensurePrivateBrowsingSession(SessionID sessionID)
    51 {
    52     ASSERT(sessionID.isEphemeral());
     45    SoupSession* soupSession() const;
    5346
    54     if (NetworkStorageSession::storageSession(sessionID))
    55         return;
     47    void registerNetworkDataTask(NetworkDataTaskSoup& task) { m_dataTaskSet.add(&task); }
     48    void unregisterNetworkDataTask(NetworkDataTaskSoup& task) { m_dataTaskSet.remove(&task); }
    5649
    57     NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
    58     SessionTracker::setSession(sessionID, NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr));
    59 }
     50private:
     51    NetworkSessionSoup(WebCore::SessionID);
    6052
    61 NetworkStorageSession& RemoteNetworkingContext::storageSession() const
    62 {
    63     if (auto session = NetworkStorageSession::storageSession(m_sessionID))
    64         return *session;
    65     return NetworkStorageSession::defaultStorageSession();
    66 }
     53    void invalidateAndCancel() override;
    6754
    68 }
     55    HashSet<NetworkDataTaskSoup*> m_dataTaskSet;
     56};
     57
     58} // namespace WebKit
  • trunk/Source/WebKit2/NetworkProcess/soup/RemoteNetworkingContextSoup.cpp

    r207586 r207813  
    5656
    5757    NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
    58     SessionTracker::setSession(sessionID, NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr));
     58    SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
    5959}
    6060
  • trunk/Source/WebKit2/PlatformEfl.cmake

    r207586 r207813  
    250250    "${WEBKIT2_DIR}/NetworkProcess/Downloads/soup"
    251251    "${WEBKIT2_DIR}/NetworkProcess/efl"
     252    "${WEBKIT2_DIR}/NetworkProcess/soup"
    252253    "${WEBKIT2_DIR}/NetworkProcess/unix"
    253254    "${WEBKIT2_DIR}/Platform/efl"
  • trunk/Source/WebKit2/PlatformGTK.cmake

    r207586 r207813  
    846846    "${WEBKIT2_DIR}/NetworkProcess/Downloads/soup"
    847847    "${WEBKIT2_DIR}/NetworkProcess/gtk"
     848    "${WEBKIT2_DIR}/NetworkProcess/soup"
    848849    "${WEBKIT2_DIR}/NetworkProcess/unix"
    849850    "${WEBKIT2_DIR}/Platform/IPC/glib"
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r207585 r207813  
    10401040                52D5A1B11C57496200DE34A3 /* WebVideoFullscreenManagerProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1AC1C57494E00DE34A3 /* WebVideoFullscreenManagerProxy.mm */; };
    10411041                52D5A1B71C574A0200DE34A3 /* WebVideoFullscreenManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1B41C5749F200DE34A3 /* WebVideoFullscreenManager.mm */; };
     1042                532159531DBAE7180054AA3C /* NetworkSession.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 532159521DBAE6FC0054AA3C /* NetworkSession.cpp */; };
     1043                532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */; };
     1044                532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */; };
     1045                532159561DBAE72D0054AA3C /* NetworkDataTaskCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */; };
    10421046                5C052F261C6D3BD30076E919 /* AuthenticationManagerCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */; };
    10431047                5C1426EC1C23F80900D41183 /* NetworkProcessCreationParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C1426E21C23F80500D41183 /* NetworkProcessCreationParameters.cpp */; };
     
    31203124                52D5A1B31C5749F200DE34A3 /* WebVideoFullscreenManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebVideoFullscreenManager.messages.in; sourceTree = "<group>"; };
    31213125                52D5A1B41C5749F200DE34A3 /* WebVideoFullscreenManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebVideoFullscreenManager.mm; sourceTree = "<group>"; };
     3126                5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTaskCocoa.h; path = NetworkProcess/cocoa/NetworkDataTaskCocoa.h; sourceTree = "<group>"; };
     3127                532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkSessionCocoa.h; path = NetworkProcess/cocoa/NetworkSessionCocoa.h; sourceTree = "<group>"; };
     3128                532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkDataTask.cpp; path = NetworkProcess/NetworkDataTask.cpp; sourceTree = "<group>"; };
     3129                532159521DBAE6FC0054AA3C /* NetworkSession.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkSession.cpp; path = NetworkProcess/NetworkSession.cpp; sourceTree = "<group>"; };
    31223130                579D18B71CCFE34B00B1974C /* PhotosSPI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PhotosSPI.h; sourceTree = "<group>"; };
    31233131                5C052F241C6D3AB60076E919 /* AuthenticationManagerCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AuthenticationManagerCocoa.mm; path = Authentication/cocoa/AuthenticationManagerCocoa.mm; sourceTree = "<group>"; };
     
    54365444                                513A164A1630A9BF005D7D22 /* NetworkConnectionToWebProcess.h */,
    54375445                                513A164B1630A9BF005D7D22 /* NetworkConnectionToWebProcess.messages.in */,
     5446                                532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */,
    54385447                                5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */,
    54395448                                839901FF1BE9A01B000F3653 /* NetworkLoad.cpp */,
     
    54545463                                5C1426E51C23F80500D41183 /* NetworkResourceLoadParameters.cpp */,
    54555464                                5C1426E61C23F80500D41183 /* NetworkResourceLoadParameters.h */,
     5465                                532159521DBAE6FC0054AA3C /* NetworkSession.cpp */,
    54565466                                5C20CB9E1BB0DD1800895BB1 /* NetworkSession.h */,
    54575467                                5CE85B1F1C88E6430070BFCE /* PingLoad.h */,
     
    58465856                        isa = PBXGroup;
    58475857                        children = (
     5858                                5321594F1DBAE6D70054AA3C /* NetworkDataTaskCocoa.h */,
    58485859                                5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */,
    58495860                                7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */,
     5861                                532159501DBAE6D70054AA3C /* NetworkSessionCocoa.h */,
    58505862                                5C20CB9B1BB0DCD200895BB1 /* NetworkSessionCocoa.mm */,
    58515863                        );
     
    81258137                                1AB474D8184D43FD0051B622 /* WKBundlePageLoaderClient.h in Headers */,
    81268138                                ED82A7F2128C6FAF004477B3 /* WKBundlePageOverlay.h in Headers */,
     8139                                532159561DBAE72D0054AA3C /* NetworkDataTaskCocoa.h in Headers */,
    81278140                                1AB474EA184D45130051B622 /* WKBundlePagePolicyClient.h in Headers */,
    81288141                                BC1B419811D41D570011E8DD /* WKBundlePagePrivate.h in Headers */,
     
    81948207                                BC06F44E12DBDF3F002D78DE /* WKGeolocationPermissionRequest.h in Headers */,
    81958208                                BC0E619812D6CD120012A72A /* WKGeolocationPosition.h in Headers */,
     8209                                532159551DBAE7290054AA3C /* NetworkSessionCocoa.h in Headers */,
    81968210                                0FCB4E4F18BBE044000FCFC9 /* WKGeolocationProviderIOS.h in Headers */,
    81978211                                BCC8B374125FB69000DE46A4 /* WKGeometry.h in Headers */,
     
    96089622                                C0337DD1127A2980008FF4F4 /* WebWheelEvent.cpp in Sources */,
    96099623                                868160D0187645570021E79D /* WindowServerConnection.mm in Sources */,
     9624                                532159531DBAE7180054AA3C /* NetworkSession.cpp in Sources */,
    96109625                                29CD55AB128E294F00133C85 /* WKAccessibilityWebPageObjectBase.mm in Sources */,
    96119626                                29232DF818B2A9AE00D0596F /* WKAccessibilityWebPageObjectIOS.mm in Sources */,
     
    96269641                                1AE00D4C182D6EB000087DD7 /* WKBrowsingContextHandle.mm in Sources */,
    96279642                                BC204EEE11C83EC8008F3375 /* WKBundle.cpp in Sources */,
     9643                                532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */,
    96289644                                935EEB9E127761AC003322B8 /* WKBundleBackForwardList.cpp in Sources */,
    96299645                                935EEBA0127761AC003322B8 /* WKBundleBackForwardListItem.cpp in Sources */,
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/mac/WebFrameNetworkingContext.mm

    r204365 r207813  
    6161    NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, base + '.' + String::number(sessionID.sessionID()));
    6262#if USE(NETWORK_SESSION)
    63     auto networkSession = NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr);
     63    auto networkSession = NetworkSession::create(sessionID);
    6464    SessionTracker::setSession(sessionID, WTFMove(networkSession));
    6565#endif
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/soup/WebFrameNetworkingContext.cpp

    r207586 r207813  
    5151
    5252    NetworkStorageSession::ensurePrivateBrowsingSession(sessionID, String::number(sessionID.sessionID()));
    53     SessionTracker::setSession(sessionID, NetworkSession::create(NetworkSession::Type::Ephemeral, sessionID, nullptr));
     53    SessionTracker::setSession(sessionID, NetworkSession::create(sessionID));
    5454}
    5555
Note: See TracChangeset for help on using the changeset viewer.