Changeset 256787 in webkit
- Timestamp:
- Feb 17, 2020 3:45:16 PM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r256780 r256787 1 2020-02-17 Youenn Fablet <youenn@apple.com> 2 3 Fix regression in NSURLSessionWebSocketTask WSS support 4 https://bugs.webkit.org/show_bug.cgi?id=207855 5 6 Reviewed by Alex Christensen. 7 8 Covered by http/tests/websocket/tests/hybi/simple-wss.html passing with NSURLSessionWebSocketTask code path. 9 When having an authentication challenge, we need to get the session from the task. 10 This was not working for websocket tasks. 11 Fix this by retrieving the session from the web socket data task, which is retrieved from the task identifier. 12 13 * NetworkProcess/Downloads/DownloadID.h: 14 (WebKit::DownloadID::operator bool const): 15 Add operator bool for convenience. 16 * NetworkProcess/NetworkSocketChannel.cpp: 17 (WebKit::NetworkSocketChannel::session): 18 * NetworkProcess/NetworkSocketChannel.h: 19 * NetworkProcess/cocoa/NetworkSessionCocoa.mm: 20 (-[WKNetworkSessionDelegate sessionFromTask:]): 21 (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]): 22 * NetworkProcess/cocoa/WebSocketTaskCocoa.h: 23 * NetworkProcess/cocoa/WebSocketTaskCocoa.mm: 24 (WebKit::WebSocketTask::networkSession): 25 1 26 2020-02-17 Alex Christensen <achristensen@webkit.org> 2 27 -
trunk/Source/WebKit/NetworkProcess/Downloads/DownloadID.h
r252274 r256787 48 48 bool operator!=(DownloadID other) const { return m_downloadID != other.m_downloadID; } 49 49 50 explicit operator bool() const { return downloadID(); } 51 50 52 uint64_t downloadID() const { return m_downloadID; } 51 53 private: -
trunk/Source/WebKit/NetworkProcess/NetworkSocketChannel.cpp
r256303 r256787 129 129 } 130 130 131 NetworkSession* NetworkSocketChannel::session() 132 { 133 return m_session.get(); 134 } 135 131 136 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkSocketChannel.h
r256303 r256787 73 73 void close(int32_t code, const String& reason); 74 74 75 NetworkSession* session(); 76 75 77 IPC::Connection* messageSenderConnection() const final; 76 78 uint64_t messageSenderDestinationID() const final { return m_identifier.toUInt64(); } -
trunk/Source/WebKit/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r256632 r256787 610 610 #endif 611 611 612 - (NetworkSessionCocoa*)sessionFromTask:(NSURLSessionTask *)task { 613 if (auto* networkDataTask = [self existingTask:task]) 614 return static_cast<NetworkSessionCocoa*>(networkDataTask->networkSession()); 615 616 if (auto downloadID = _sessionWrapper->downloadMap.get(task.taskIdentifier)) { 617 if (auto download = _session->networkProcess().downloadManager().download(downloadID)) 618 return static_cast<NetworkSessionCocoa*>(_session->networkProcess().networkSession(download->sessionID())); 619 return nullptr; 620 } 621 622 #if HAVE(NSURLSESSION_WEBSOCKET) 623 if (auto* webSocketTask = _sessionWrapper->webSocketDataTaskMap.get(task.taskIdentifier)) 624 return webSocketTask->networkSession(); 625 #endif 626 627 return nullptr; 628 } 629 612 630 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler 613 631 { 614 auto* networkDataTask = [self existingTask:task]; 615 auto* sessionCocoa = networkDataTask ? static_cast<NetworkSessionCocoa*>(networkDataTask->networkSession()) : nullptr; 616 if (!networkDataTask) { 617 ASSERT(!sessionCocoa); 618 auto downloadID = _sessionWrapper->downloadMap.get(task.taskIdentifier); 619 auto download = downloadID.downloadID() ? _session->networkProcess().downloadManager().download(downloadID) : nil; 620 sessionCocoa = download ? static_cast<NetworkSessionCocoa*>(_session->networkProcess().networkSession(download->sessionID())) : nil; 621 } 632 auto* sessionCocoa = [self sessionFromTask: task]; 622 633 if (!sessionCocoa || [task state] == NSURLSessionTaskStateCanceling) { 623 634 completionHandler(NSURLSessionAuthChallengeCancelAuthenticationChallenge, nil); … … 658 669 if (sessionCocoa->fastServerTrustEvaluationEnabled() && negotiatedLegacyTLS == NegotiatedLegacyTLS::No) { 659 670 #if HAVE(CFNETWORK_NSURLSESSION_STRICTRUSTEVALUATE) 671 auto* networkDataTask = [self existingTask:task]; 660 672 auto decisionHandler = makeBlockPtr([weakSelf = WeakObjCPtr<WKNetworkSessionDelegate>(self), sessionCocoa = makeWeakPtr(sessionCocoa), completionHandler = makeBlockPtr(completionHandler), taskIdentifier, networkDataTask = makeRefPtr(networkDataTask), negotiatedLegacyTLS](NSURLAuthenticationChallenge *challenge, OSStatus trustResult) mutable { 661 673 auto strongSelf = weakSelf.get(); -
trunk/Source/WebKit/NetworkProcess/cocoa/WebSocketTaskCocoa.h
r248762 r256787 39 39 namespace WebKit { 40 40 class NetworkSession; 41 class NetworkSessionCocoa; 41 42 class NetworkSocketChannel; 42 43 … … 60 61 TaskIdentifier identifier() const; 61 62 63 NetworkSessionCocoa* networkSession(); 64 62 65 private: 63 66 void readNextMessage(); -
trunk/Source/WebKit/NetworkProcess/cocoa/WebSocketTaskCocoa.mm
r256662 r256787 30 30 31 31 #import "DataReference.h" 32 #import "NetworkSessionCocoa.h" 32 33 #import "NetworkSocketChannel.h" 33 34 #import <Foundation/NSURLSession.h> … … 134 135 } 135 136 137 NetworkSessionCocoa* WebSocketTask::networkSession() 138 { 139 return static_cast<NetworkSessionCocoa*>(m_channel.session()); 140 } 141 136 142 } 137 143
Note: See TracChangeset
for help on using the changeset viewer.