Changeset 195509 in webkit
- Timestamp:
- Jan 23, 2016 1:44:10 AM (8 years ago)
- Location:
- trunk/Source
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r195508 r195509 1 2016-01-23 Alex Christensen <achristensen@webkit.org> 2 3 Use credentials from a URL with NetworkSession like we did with ResourceHandle 4 https://bugs.webkit.org/show_bug.cgi?id=153328 5 6 Reviewed by Alexey Proskuryakov. 7 8 This patch fixes at least http/tests/xmlhttprequest/basic-auth-credentials-escaping.html when using NetworkSession. 9 10 * platform/network/ProtectionSpaceBase.h: 11 (WebCore::ProtectionSpaceBase::encodingRequiresPlatformData): 12 * platform/network/ResourceRequestBase.h: 13 Add some WEBCORE_EXPORT macros for functions that are now used in WebKit2. 14 1 15 2016-01-23 Brady Eidson <beidson@apple.com> 2 16 -
trunk/Source/WebCore/platform/network/ProtectionSpaceBase.h
r187691 r195509 69 69 70 70 bool receivesCredentialSecurely() const; 71 bool isPasswordBased() const;71 WEBCORE_EXPORT bool isPasswordBased() const; 72 72 73 73 bool encodingRequiresPlatformData() const { return false; } -
trunk/Source/WebCore/platform/network/ResourceRequestBase.h
r195450 r195509 66 66 WEBCORE_EXPORT void setURL(const URL& url); 67 67 68 void removeCredentials();68 WEBCORE_EXPORT void removeCredentials(); 69 69 70 70 WEBCORE_EXPORT ResourceRequestCachePolicy cachePolicy() const; -
trunk/Source/WebKit2/ChangeLog
r195506 r195509 1 2016-01-23 Alex Christensen <achristensen@webkit.org> 2 3 Use credentials from a URL with NetworkSession like we did with ResourceHandle 4 https://bugs.webkit.org/show_bug.cgi?id=153328 5 6 Reviewed by Alexey Proskuryakov. 7 8 * NetworkProcess/NetworkLoad.cpp: 9 (WebKit::NetworkLoad::NetworkLoad): 10 createDataTaskWithRequest is being removed, so use std::make_unique<NetworkDataTask> directly instead. 11 Also, create the task even if we are deferring loading. Don't call resume if we are deferring loading. 12 * NetworkProcess/NetworkSession.h: 13 Callbacks are not just used in NetworkSessionTaskClient, so declare them outside. 14 The NetworkDataTask now takes a ResourceRequest so we can strip its credentials. 15 * NetworkProcess/cocoa/NetworkSessionCocoa.mm: 16 (-[WKNetworkSessionDelegate URLSession:task:didReceiveChallenge:completionHandler:]): 17 Try credentials stored with the NetworkDataTask before asking the client for credentials. 18 (WebKit::NetworkSession::~NetworkSession): 19 (WebKit::NetworkSession::dataTaskForIdentifier): 20 (WebKit::NetworkSession::takeDownloadID): 21 (WebKit::NetworkDataTask::NetworkDataTask): 22 Strip the credentials from the url before creating the task because we do not know the authentication type. 23 We will use these credentials when a challenge is received. 24 (WebKit::NetworkDataTask::~NetworkDataTask): 25 (WebKit::NetworkDataTask::tryPasswordBasedAuthentication): 26 If we have credentials from the initial URL, try using them if it is appropriate. 27 (WebKit::NetworkDataTask::cancel): 28 (WebKit::NetworkSession::createDataTaskWithRequest): Deleted. 29 * Shared/Authentication/AuthenticationManager.h: 30 1 31 2016-01-22 Dan Bernstein <mitz@apple.com> 2 32 -
trunk/Source/WebKit2/NetworkProcess/NetworkLoad.cpp
r194810 r195509 51 51 { 52 52 #if USE(NETWORK_SESSION) 53 if ( !parameters.defersLoading) {54 if (auto* networkSession = SessionTracker::networkSession(parameters.sessionID)) {55 m_task = networkSession->createDataTaskWithRequest(parameters.request, *this);53 if (auto* networkSession = SessionTracker::networkSession(parameters.sessionID)) { 54 m_task = std::make_unique<NetworkDataTask>(*networkSession, *this, parameters.request); 55 if (!parameters.defersLoading) 56 56 m_task->resume(); 57 } else 58 ASSERT_NOT_REACHED(); 59 } 57 } else 58 ASSERT_NOT_REACHED(); 60 59 #else 61 60 m_handle = ResourceHandle::create(m_networkingContext.get(), parameters.request, this, parameters.defersLoading, parameters.contentSniffingPolicy == SniffContent); -
trunk/Source/WebKit2/NetworkProcess/NetworkSession.h
r194810 r195509 42 42 #include <wtf/RetainPtr.h> 43 43 #include <wtf/WeakPtr.h> 44 #include <wtf/text/WTFString.h> 44 45 45 46 namespace WebCore { … … 64 65 class PendingDownload; 65 66 67 typedef std::function<void(const WebCore::ResourceRequest&)> RedirectCompletionHandler; 68 typedef std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)> ChallengeCompletionHandler; 69 typedef std::function<void(WebCore::PolicyAction)> ResponseCompletionHandler; 70 66 71 class NetworkSessionTaskClient { 67 72 public: 68 typedef std::function<void(const WebCore::ResourceRequest&)> RedirectCompletionHandler;69 73 virtual void willPerformHTTPRedirection(const WebCore::ResourceResponse&, const WebCore::ResourceRequest&, RedirectCompletionHandler) = 0; 70 typedef std::function<void(AuthenticationChallengeDisposition, const WebCore::Credential&)> ChallengeCompletionHandler;71 74 virtual void didReceiveChallenge(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler) = 0; 72 typedef std::function<void(WebCore::PolicyAction)> ResponseCompletionHandler;73 75 virtual void didReceiveResponse(const WebCore::ResourceResponse&, ResponseCompletionHandler) = 0; 74 76 virtual void didReceiveData(RefPtr<WebCore::SharedBuffer>&&) = 0; … … 82 84 friend class NetworkSession; 83 85 public: 84 #if PLATFORM(COCOA) 85 explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, RetainPtr<NSURLSessionDataTask>&&); 86 #else 87 explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&); 88 #endif 86 explicit NetworkDataTask(NetworkSession&, NetworkSessionTaskClient&, const WebCore::ResourceRequest&); 89 87 90 88 void suspend(); … … 112 110 m_pendingDownload = &pendingDownload; 113 111 } 112 bool tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler); 114 113 115 114 private: … … 118 117 PendingDownload* m_pendingDownload { nullptr }; 119 118 DownloadID m_pendingDownloadID; 119 String m_user; 120 String m_password; 120 121 #if PLATFORM(COCOA) 121 122 RetainPtr<NSURLSessionDataTask> m_task; … … 134 135 135 136 static NetworkSession& defaultSession(); 136 137 std::unique_ptr<NetworkDataTask> createDataTaskWithRequest(const WebCore::ResourceRequest&, NetworkSessionTaskClient&);138 137 139 138 NetworkDataTask* dataTaskForIdentifier(NetworkDataTask::TaskIdentifier); -
trunk/Source/WebKit2/NetworkProcess/cocoa/NetworkSessionCocoa.mm
r195005 r195509 111 111 if (auto* networkDataTask = _session->dataTaskForIdentifier(task.taskIdentifier)) { 112 112 auto completionHandlerCopy = Block_copy(completionHandler); 113 networkDataTask->client().didReceiveChallenge(challenge, [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential) { 113 auto challengeCompletionHandler = [completionHandlerCopy](WebKit::AuthenticationChallengeDisposition disposition, const WebCore::Credential& credential) 114 { 114 115 completionHandlerCopy(toNSURLSessionAuthChallengeDisposition(disposition), credential.nsCredential()); 115 116 Block_release(completionHandlerCopy); 116 }); 117 }; 118 119 if (networkDataTask->tryPasswordBasedAuthentication(challenge, challengeCompletionHandler)) 120 return; 121 122 networkDataTask->client().didReceiveChallenge(challenge, challengeCompletionHandler); 117 123 } 118 124 } … … 230 236 } 231 237 232 std::unique_ptr<NetworkDataTask> NetworkSession::createDataTaskWithRequest(const WebCore::ResourceRequest& request, NetworkSessionTaskClient& client)233 {234 return std::make_unique<NetworkDataTask>(*this, client, [m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]);235 }236 237 238 NetworkDataTask* NetworkSession::dataTaskForIdentifier(NetworkDataTask::TaskIdentifier taskIdentifier) 238 239 { … … 264 265 } 265 266 266 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkSessionTaskClient& client, RetainPtr<NSURLSessionDataTask>&& task)267 NetworkDataTask::NetworkDataTask(NetworkSession& session, NetworkSessionTaskClient& client, const WebCore::ResourceRequest& requestWithCredentials) 267 268 : m_session(session) 268 269 , m_client(client) 269 , m_task(WTFMove(task)) 270 { 270 { 271 ASSERT(isMainThread()); 272 273 auto request = requestWithCredentials; 274 m_user = request.url().user(); 275 m_password = request.url().pass(); 276 request.removeCredentials(); 277 278 m_task = [m_session.m_session dataTaskWithRequest:request.nsURLRequest(WebCore::UpdateHTTPBody)]; 279 271 280 ASSERT(!m_session.m_dataTaskMap.contains(taskIdentifier())); 272 ASSERT(isMainThread());273 281 m_session.m_dataTaskMap.add(taskIdentifier(), this); 274 282 } … … 282 290 } 283 291 292 bool NetworkDataTask::tryPasswordBasedAuthentication(const WebCore::AuthenticationChallenge& challenge, ChallengeCompletionHandler completionHandler) 293 { 294 if (!challenge.protectionSpace().isPasswordBased()) 295 return false; 296 297 if (!m_user.isNull() && !m_password.isNull()) { 298 completionHandler(AuthenticationChallengeDisposition::UseCredential, WebCore::Credential(m_user, m_password, WebCore::CredentialPersistenceForSession)); 299 m_user = String(); 300 m_password = String(); 301 return true; 302 } 303 304 return false; 305 } 306 284 307 void NetworkDataTask::cancel() 285 308 { -
trunk/Source/WebKit2/Shared/Authentication/AuthenticationManager.h
r194902 r195509 57 57 58 58 #if USE(NETWORK_SESSION) 59 typedef NetworkSessionTaskClient::ChallengeCompletionHandler ChallengeCompletionHandler;60 59 void didReceiveAuthenticationChallenge(uint64_t pageID, uint64_t frameID, const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler); 61 60 void didReceiveAuthenticationChallenge(PendingDownload&, const WebCore::AuthenticationChallenge&, ChallengeCompletionHandler);
Note: See TracChangeset
for help on using the changeset viewer.