Changeset 196178 in webkit


Ignore:
Timestamp:
Feb 5, 2016 11:51:54 AM (8 years ago)
Author:
achristensen@apple.com
Message:

Move NetworkDataTask to its own header and source files
https://bugs.webkit.org/show_bug.cgi?id=153922

Reviewed by Tim Horton.

Also renamed NetworkSessionTaskClient to NetworkDataTaskClient.

  • NetworkProcess/NetworkDataTask.h: Added.

(WebKit::NetworkDataTaskClient::~NetworkDataTaskClient):
(WebKit::NetworkDataTask::create):
(WebKit::NetworkDataTask::client):
(WebKit::NetworkDataTask::pendingDownloadID):
(WebKit::NetworkDataTask::pendingDownload):
(WebKit::NetworkDataTask::setPendingDownloadID):
(WebKit::NetworkDataTask::setPendingDownload):

  • NetworkProcess/NetworkLoad.h:
  • NetworkProcess/NetworkSession.h:

(WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient): Deleted.
(WebKit::NetworkDataTask::create): Deleted.
(WebKit::NetworkDataTask::client): Deleted.
(WebKit::NetworkDataTask::pendingDownloadID): Deleted.
(WebKit::NetworkDataTask::pendingDownload): Deleted.
(WebKit::NetworkDataTask::setPendingDownloadID): Deleted.
(WebKit::NetworkDataTask::setPendingDownload): Deleted.

  • NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Added.

(WebKit::NetworkDataTask::NetworkDataTask):
(WebKit::NetworkDataTask::~NetworkDataTask):
(WebKit::NetworkDataTask::scheduleFailure):
(WebKit::NetworkDataTask::failureTimerFired):
(WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
(WebKit::NetworkDataTask::cancel):
(WebKit::NetworkDataTask::resume):
(WebKit::NetworkDataTask::suspend):

  • NetworkProcess/cocoa/NetworkSessionCocoa.mm:

(WebKit::NetworkSession::takeDownloadID):
(WebKit::NetworkDataTask::NetworkDataTask): Deleted.
(WebKit::NetworkDataTask::~NetworkDataTask): Deleted.
(WebKit::NetworkDataTask::scheduleFailure): Deleted.
(WebKit::NetworkDataTask::failureTimerFired): Deleted.
(WebKit::NetworkDataTask::tryPasswordBasedAuthentication): Deleted.
(WebKit::NetworkDataTask::cancel): Deleted.
(WebKit::NetworkDataTask::resume): Deleted.
(WebKit::NetworkDataTask::suspend): Deleted.

  • WebKit2.xcodeproj/project.pbxproj:
Location:
trunk/Source/WebKit2
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r196174 r196178  
     12016-02-05  Alex Christensen  <achristensen@webkit.org>
     2
     3        Move NetworkDataTask to its own header and source files
     4        https://bugs.webkit.org/show_bug.cgi?id=153922
     5
     6        Reviewed by Tim Horton.
     7
     8        Also renamed NetworkSessionTaskClient to NetworkDataTaskClient.
     9
     10        * NetworkProcess/NetworkDataTask.h: Added.
     11        (WebKit::NetworkDataTaskClient::~NetworkDataTaskClient):
     12        (WebKit::NetworkDataTask::create):
     13        (WebKit::NetworkDataTask::client):
     14        (WebKit::NetworkDataTask::pendingDownloadID):
     15        (WebKit::NetworkDataTask::pendingDownload):
     16        (WebKit::NetworkDataTask::setPendingDownloadID):
     17        (WebKit::NetworkDataTask::setPendingDownload):
     18        * NetworkProcess/NetworkLoad.h:
     19        * NetworkProcess/NetworkSession.h:
     20        (WebKit::NetworkSessionTaskClient::~NetworkSessionTaskClient): Deleted.
     21        (WebKit::NetworkDataTask::create): Deleted.
     22        (WebKit::NetworkDataTask::client): Deleted.
     23        (WebKit::NetworkDataTask::pendingDownloadID): Deleted.
     24        (WebKit::NetworkDataTask::pendingDownload): Deleted.
     25        (WebKit::NetworkDataTask::setPendingDownloadID): Deleted.
     26        (WebKit::NetworkDataTask::setPendingDownload): Deleted.
     27        * NetworkProcess/cocoa/NetworkDataTaskCocoa.mm: Added.
     28        (WebKit::NetworkDataTask::NetworkDataTask):
     29        (WebKit::NetworkDataTask::~NetworkDataTask):
     30        (WebKit::NetworkDataTask::scheduleFailure):
     31        (WebKit::NetworkDataTask::failureTimerFired):
     32        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication):
     33        (WebKit::NetworkDataTask::cancel):
     34        (WebKit::NetworkDataTask::resume):
     35        (WebKit::NetworkDataTask::suspend):
     36        * NetworkProcess/cocoa/NetworkSessionCocoa.mm:
     37        (WebKit::NetworkSession::takeDownloadID):
     38        (WebKit::NetworkDataTask::NetworkDataTask): Deleted.
     39        (WebKit::NetworkDataTask::~NetworkDataTask): Deleted.
     40        (WebKit::NetworkDataTask::scheduleFailure): Deleted.
     41        (WebKit::NetworkDataTask::failureTimerFired): Deleted.
     42        (WebKit::NetworkDataTask::tryPasswordBasedAuthentication): Deleted.
     43        (WebKit::NetworkDataTask::cancel): Deleted.
     44        (WebKit::NetworkDataTask::resume): Deleted.
     45        (WebKit::NetworkDataTask::suspend): Deleted.
     46        * WebKit2.xcodeproj/project.pbxproj:
     47
    1482016-02-05  Alex Christensen  <achristensen@webkit.org>
    249
  • trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h

    r196101 r196178  
    4343class NetworkLoad
    4444#if USE(NETWORK_SESSION)
    45     : public NetworkSessionTaskClient
     45    : public NetworkDataTaskClient
    4646#else
    4747    : public WebCore::ResourceHandleClient
  • trunk/Source/WebKit2/NetworkProcess/NetworkSession.h

    r196101 r196178  
    2929#if PLATFORM(COCOA)
    3030OBJC_CLASS NSURLSession;
    31 OBJC_CLASS NSURLSessionDataTask;
    3231OBJC_CLASS NSOperationQueue;
    3332OBJC_CLASS WKNetworkSessionDelegate;
     
    3534
    3635#include "DownloadID.h"
    37 #include <WebCore/FrameLoaderTypes.h>
    38 #include <WebCore/ResourceHandleTypes.h>
     36#include "NetworkDataTask.h"
    3937#include <WebCore/SessionID.h>
    40 #include <WebCore/Timer.h>
    4138#include <wtf/HashMap.h>
    4239#include <wtf/Ref.h>
    4340#include <wtf/RefCounted.h>
    44 #include <wtf/RetainPtr.h>
    45 #include <wtf/WeakPtr.h>
    46 #include <wtf/text/WTFString.h>
    47 
    48 namespace WebCore {
    49 class AuthenticationChallenge;
    50 class Credential;
    51 class ResourceError;
    52 class ResourceRequest;
    53 class ResourceResponse;
    54 class SharedBuffer;
    55 }
    5641
    5742namespace WebKit {
    58 
    59 enum class AuthenticationChallengeDisposition {
    60     UseCredential,
    61     PerformDefaultHandling,
    62     Cancel,
    63     RejectProtectionSpace
    64 };
    65 
    66 class NetworkSession;
    67 class PendingDownload;
    68 
    69 typedef std::function<void(const WebCore::ResourceRequest&)> RedirectCompletionHandler;
    70 typedef std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)> ChallengeCompletionHandler;
    71 typedef std::function<void(WebCore::PolicyAction)> ResponseCompletionHandler;
    72 
    73 class NetworkSessionTaskClient {
    74 public:
    75     virtual void willPerformHTTPRedirection(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, RedirectCompletionHandler) = 0;
    76     virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler) = 0;
    77     virtual void didReceiveResponse(const WebCore::ResourceResponse&, ResponseCompletionHandler) = 0;
    78     virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>&&) = 0;
    79     virtual void didCompleteWithError(const WebCore::ResourceError&) = 0;
    80     virtual void didBecomeDownload() = 0;
    81     virtual void didSendData(uint64_t totalBytesSent, uint64_t totalBytesExpectedToSend) = 0;
    82     virtual void wasBlocked() = 0;
    83     virtual void cannotShowURL() = 0;
    84 
    85     virtual ~NetworkSessionTaskClient() { }
    86 };
    87 
    88 class NetworkDataTask : public RefCounted<NetworkDataTask> {
    89     friend class NetworkSession;
    90 public:
    91     static Ref<NetworkDataTask> create(NetworkSession& session, NetworkSessionTaskClient& client, const WebCore::ResourceRequest& request, WebCore::StoredCredentials storedCredentials)
    92     {
    93         return adoptRef(*new NetworkDataTask(session, client, request, storedCredentials));
    94     }
    95    
    96     void suspend();
    97     void cancel();
    98     void resume();
    99 
    100     typedef uint64_t TaskIdentifier;
    101     TaskIdentifier taskIdentifier();
    102 
    103     ~NetworkDataTask();
    104 
    105     NetworkSessionTaskClient& client() { return m_client; }
    106 
    107     DownloadID pendingDownloadID() { return m_pendingDownloadID; }
    108     PendingDownload* pendingDownload() { return m_pendingDownload; }
    109     void setPendingDownloadID(DownloadID downloadID)
    110     {
    111         ASSERT(!m_pendingDownloadID.downloadID());
    112         ASSERT(downloadID.downloadID());
    113         m_pendingDownloadID = downloadID;
    114     }
    115     void setPendingDownload(PendingDownload& pendingDownload)
    116     {
    117         ASSERT(!m_pendingDownload);
    118         m_pendingDownload = &pendingDownload;
    119     }
    120     bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler);
    121    
    122 private:
    123     NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, const WebCore::ResourceRequest&, WebCore::StoredCredentials);
    124 
    125     enum FailureType {
    126         NoFailure,
    127         BlockedFailure,
    128         InvalidURLFailure
    129     };
    130     FailureType m_scheduledFailureType { NoFailure };
    131     WebCore::Timer m_failureTimer;
    132     void failureTimerFired();
    133     void scheduleFailure(FailureType);
    134    
    135     NetworkSession& m_session;
    136     NetworkSessionTaskClient& m_client;
    137     PendingDownload* m_pendingDownload { nullptr };
    138     DownloadID m_pendingDownloadID;
    139     String m_user;
    140     String m_password;
    141 #if PLATFORM(COCOA)
    142     RetainPtr<NSURLSessionDataTask> m_task;
    143 #endif
    144 };
    14543
    14644class NetworkSession {
  • trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm

    r196101 r196178  
    3535#import "SessionTracker.h"
    3636#import <Foundation/NSURLSession.h>
    37 #import <WebCore/AuthenticationChallenge.h>
    3837#import <WebCore/CFNetworkSPI.h>
    3938#import <WebCore/Credential.h>
     
    275274}
    276275
    277 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkSessionTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials, WebCore::StoredCredentials storedCredentials)
    278     : m_failureTimer(*this, &NetworkDataTask::failureTimerFired)
    279     , m_session(session)
    280     , m_client(client)
    281 {
    282     ASSERT(isMainThread());
    283 
    284     if (!requestWithCredentials.url().isValid()) {
    285         scheduleFailure(InvalidURLFailure);
    286         return;
    287     }
    288    
    289     if (!portAllowed(requestWithCredentials.url())) {
    290         scheduleFailure(BlockedFailure);
    291         return;
    292     }
    293    
    294     auto request = requestWithCredentials;
    295     m_user = request.url().user();
    296     m_password = request.url().pass();
    297     request.removeCredentials();
    298 
    299     if (storedCredentials == WebCore::AllowStoredCredentials)
    300         m_task = [m_session.m_sessionWithCredentialStorage dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)];
    301     else
    302         m_task = [m_session.m_sessionWithoutCredentialStorage dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)];
    303    
    304     ASSERT(!m_session.m_dataTaskMap.contains(taskIdentifier()));
    305     m_session.m_dataTaskMap.add(taskIdentifier(), this);
    306 }
    307 
    308 NetworkDataTask::~NetworkDataTask()
    309 {
    310     if (m_task) {
    311         ASSERT(m_session.m_dataTaskMap.contains(taskIdentifier()));
    312         ASSERT(m_session.m_dataTaskMap.get(taskIdentifier()) == this);
    313         ASSERT(isMainThread());
    314         m_session.m_dataTaskMap.remove(taskIdentifier());
    315     }
    316 }
    317 
    318 void NetworkDataTask::scheduleFailure(FailureType type)
    319 {
    320     ASSERT(type != NoFailure);
    321     m_scheduledFailureType = type;
    322     m_failureTimer.startOneShot(0);
    323 }
    324 
    325 void NetworkDataTask::failureTimerFired()
    326 {
    327     RefPtr<NetworkDataTask> protect(this);
    328 
    329     switch (m_scheduledFailureType) {
    330     case BlockedFailure:
    331         m_scheduledFailureType = NoFailure;
    332         client().wasBlocked();
    333         return;
    334     case InvalidURLFailure:
    335         m_scheduledFailureType = NoFailure;
    336         client().cannotShowURL();
    337         return;
    338     case NoFailure:
    339         ASSERT_NOT_REACHED();
    340         break;
    341     }
    342     ASSERT_NOT_REACHED();
    343 }
    344 
    345 bool NetworkDataTask::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler completionHandler)
    346 {
    347     if (!challenge.protectionSpace().isPasswordBased())
    348         return false;
    349 
    350     if (!m_user.isNull() && !m_password.isNull()) {
    351         completionHandler(AuthenticationChallengeDisposition::UseCredential, WebCore::Credential(m_user, m_password, WebCore::CredentialPersistenceForSession));
    352         m_user = String();
    353         m_password = String();
    354         return true;
    355     }
    356    
    357     if (!challenge.proposedCredential().isEmpty() && !challenge.previousFailureCount()) {
    358         completionHandler(AuthenticationChallengeDisposition::UseCredential, challenge.proposedCredential());
    359         return true;
    360     }
    361 
    362     return false;
    363 }
    364    
    365 void NetworkDataTask::cancel()
    366 {
    367     [m_task cancel];
    368 }
    369 
    370 void NetworkDataTask::resume()
    371 {
    372     if (m_scheduledFailureType != NoFailure)
    373         m_failureTimer.startOneShot(0);
    374     [m_task resume];
    375 }
    376 
    377 void NetworkDataTask::suspend()
    378 {
    379     if (m_failureTimer.isActive())
    380         m_failureTimer.stop();
    381     [m_task suspend];
    382 }
    383    
    384 auto NetworkDataTask::taskIdentifier() -> TaskIdentifier
    385 {
    386     return [m_task taskIdentifier];
    387 }
    388 
    389276}
    390277
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r196173 r196178  
    10641064                5C298DA01C3DF02100470AFE /* PendingDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */; };
    10651065                5C85C7881C3F23CE0061A4FA /* PendingDownload.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */; };
     1066                5CBC9B8D1C65279C00A8FDCF /* NetworkDataTaskCocoa.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */; };
     1067                5CBC9B8E1C652CA000A8FDCF /* NetworkDataTask.h in Headers */ = {isa = PBXBuildFile; fileRef = 5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */; };
    10661068                5DA6ED0A1490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DA6ED081490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h */; };
    10671069                5DA6ED0B1490606900B41D12 /* DynamicLinkerEnvironmentExtractor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5DA6ED091490606900B41D12 /* DynamicLinkerEnvironmentExtractor.mm */; };
     
    31683170                5C298D9E1C3DEF2900470AFE /* PendingDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PendingDownload.h; path = NetworkProcess/Downloads/PendingDownload.h; sourceTree = "<group>"; };
    31693171                5C85C7861C3F23C50061A4FA /* PendingDownload.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PendingDownload.cpp; path = NetworkProcess/Downloads/PendingDownload.cpp; sourceTree = "<group>"; };
     3172                5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkDataTask.h; path = NetworkProcess/NetworkDataTask.h; sourceTree = "<group>"; };
     3173                5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = NetworkDataTaskCocoa.mm; path = NetworkProcess/cocoa/NetworkDataTaskCocoa.mm; sourceTree = "<group>"; };
    31703174                5D442A5516D5856700AC3331 /* PluginService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PluginService.entitlements; sourceTree = "<group>"; };
    31713175                5DA6ED081490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicLinkerEnvironmentExtractor.h; sourceTree = "<group>"; };
     
    53705374                        isa = PBXGroup;
    53715375                        children = (
     5376                                5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */,
    53725377                                5C1426F21C23F82D00D41183 /* CustomProtocols */,
    53735378                                5C1426F11C23F81700D41183 /* Downloads */,
     
    57635768                        isa = PBXGroup;
    57645769                        children = (
     5770                                5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */,
    57655771                                7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */,
    57665772                                5C20CB9B1BB0DCD200895BB1 /* NetworkSessionCocoa.mm */,
     
    74907496                                512F589912A8838800629530 /* AuthenticationDecisionListener.h in Headers */,
    74917497                                518E8EF916B2091C00E91429 /* AuthenticationManager.h in Headers */,
     7498                                5CBC9B8E1C652CA000A8FDCF /* NetworkDataTask.h in Headers */,
    74927499                                512F58A312A883AD00629530 /* AuthenticationManagerMessages.h in Headers */,
    74937500                                7CD102DA1866770600ED429D /* AutoCorrectionCallback.h in Headers */,
     
    92809287                                1A7865B916CAC71500ACE83A /* PluginProcessConnectionManagerMessageReceiver.cpp in Sources */,
    92819288                                1A2BB6D014117B4D000F35D4 /* PluginProcessConnectionMessageReceiver.cpp in Sources */,
     9289                                5CBC9B8D1C65279C00A8FDCF /* NetworkDataTaskCocoa.mm in Sources */,
    92829290                                1A2D90D31281C966001EB962 /* PluginProcessCreationParameters.cpp in Sources */,
    92839291                                1AA4792312A59FD9008236C3 /* PluginProcessMac.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.