Changeset 196178 in webkit
- Timestamp:
- Feb 5, 2016 11:51:54 AM (8 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r196174 r196178 1 2016-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 1 48 2016-02-05 Alex Christensen <achristensen@webkit.org> 2 49 -
trunk/Source/WebKit2/NetworkProcess/NetworkLoad.h
r196101 r196178 43 43 class NetworkLoad 44 44 #if USE(NETWORK_SESSION) 45 : public Network SessionTaskClient45 : public NetworkDataTaskClient 46 46 #else 47 47 : public WebCore::ResourceHandleClient -
trunk/Source/WebKit2/NetworkProcess/NetworkSession.h
r196101 r196178 29 29 #if PLATFORM(COCOA) 30 30 OBJC_CLASS NSURLSession; 31 OBJC_CLASS NSURLSessionDataTask;32 31 OBJC_CLASS NSOperationQueue; 33 32 OBJC_CLASS WKNetworkSessionDelegate; … … 35 34 36 35 #include "DownloadID.h" 37 #include <WebCore/FrameLoaderTypes.h> 38 #include <WebCore/ResourceHandleTypes.h> 36 #include "NetworkDataTask.h" 39 37 #include <WebCore/SessionID.h> 40 #include <WebCore/Timer.h>41 38 #include <wtf/HashMap.h> 42 39 #include <wtf/Ref.h> 43 40 #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 }56 41 57 42 namespace WebKit { 58 59 enum class AuthenticationChallengeDisposition {60 UseCredential,61 PerformDefaultHandling,62 Cancel,63 RejectProtectionSpace64 };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 InvalidURLFailure129 };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 #endif144 };145 43 146 44 class NetworkSession { -
trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r196101 r196178 35 35 #import "SessionTracker.h" 36 36 #import <Foundation/NSURLSession.h> 37 #import <WebCore/AuthenticationChallenge.h>38 37 #import <WebCore/CFNetworkSPI.h> 39 38 #import <WebCore/Credential.h> … … 275 274 } 276 275 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 else302 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() -> TaskIdentifier385 {386 return [m_task taskIdentifier];387 }388 389 276 } 390 277 -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r196173 r196178 1064 1064 5C298DA01C3DF02100470AFE /* PendingDownload.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */; }; 1065 1065 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 */; }; 1066 1068 5DA6ED0A1490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h in Headers */ = {isa = PBXBuildFile; fileRef = 5DA6ED081490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h */; }; 1067 1069 5DA6ED0B1490606900B41D12 /* DynamicLinkerEnvironmentExtractor.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5DA6ED091490606900B41D12 /* DynamicLinkerEnvironmentExtractor.mm */; }; … … 3168 3170 5C298D9E1C3DEF2900470AFE /* PendingDownload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PendingDownload.h; path = NetworkProcess/Downloads/PendingDownload.h; sourceTree = "<group>"; }; 3169 3171 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>"; }; 3170 3174 5D442A5516D5856700AC3331 /* PluginService.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = PluginService.entitlements; sourceTree = "<group>"; }; 3171 3175 5DA6ED081490606900B41D12 /* DynamicLinkerEnvironmentExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicLinkerEnvironmentExtractor.h; sourceTree = "<group>"; }; … … 5370 5374 isa = PBXGroup; 5371 5375 children = ( 5376 5CBC9B891C6524A500A8FDCF /* NetworkDataTask.h */, 5372 5377 5C1426F21C23F82D00D41183 /* CustomProtocols */, 5373 5378 5C1426F11C23F81700D41183 /* Downloads */, … … 5763 5768 isa = PBXGroup; 5764 5769 children = ( 5770 5CBC9B8B1C65257300A8FDCF /* NetworkDataTaskCocoa.mm */, 5765 5771 7EC4F0F918E4A945008056AF /* NetworkProcessCocoa.mm */, 5766 5772 5C20CB9B1BB0DCD200895BB1 /* NetworkSessionCocoa.mm */, … … 7490 7496 512F589912A8838800629530 /* AuthenticationDecisionListener.h in Headers */, 7491 7497 518E8EF916B2091C00E91429 /* AuthenticationManager.h in Headers */, 7498 5CBC9B8E1C652CA000A8FDCF /* NetworkDataTask.h in Headers */, 7492 7499 512F58A312A883AD00629530 /* AuthenticationManagerMessages.h in Headers */, 7493 7500 7CD102DA1866770600ED429D /* AutoCorrectionCallback.h in Headers */, … … 9280 9287 1A7865B916CAC71500ACE83A /* PluginProcessConnectionManagerMessageReceiver.cpp in Sources */, 9281 9288 1A2BB6D014117B4D000F35D4 /* PluginProcessConnectionMessageReceiver.cpp in Sources */, 9289 5CBC9B8D1C65279C00A8FDCF /* NetworkDataTaskCocoa.mm in Sources */, 9282 9290 1A2D90D31281C966001EB962 /* PluginProcessCreationParameters.cpp in Sources */, 9283 9291 1AA4792312A59FD9008236C3 /* PluginProcessMac.mm in Sources */,
Note: See TracChangeset
for help on using the changeset viewer.