Changeset 246401 in webkit
- Timestamp:
- Jun 13, 2019 7:06:18 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r246400 r246401 1 2019-06-13 Takashi Komori <Takashi.Komori@sony.com> 2 3 [curl] Remove member objects of CurlRequest not to share by different threads. 4 https://bugs.webkit.org/show_bug.cgi?id=198747 5 6 Reviewed by Fujii Hironori. 7 8 Removed m_certificateInfo and m_networkLoadMetrics. 9 Before patch those objects were updated by different threads. 10 11 No tests needed, no functionality changes. 12 13 * platform/network/curl/CurlDownload.cpp: 14 (WebCore::CurlDownload::curlDidReceiveResponse): 15 (WebCore::CurlDownload::curlDidReceiveBuffer): 16 (WebCore::CurlDownload::curlDidComplete): 17 (WebCore::CurlDownload::curlDidFailWithError): 18 * platform/network/curl/CurlDownload.h: 19 * platform/network/curl/CurlRequest.cpp: 20 (WebCore::CurlRequest::start): 21 (WebCore::CurlRequest::didReceiveHeader): 22 (WebCore::CurlRequest::didCompleteTransfer): 23 (WebCore::CurlRequest::invokeDidReceiveResponse): 24 (WebCore::CurlRequest::networkLoadMetrics): 25 (WebCore::CurlRequest::updateNetworkLoadMetrics): Deleted. 26 * platform/network/curl/CurlRequest.h: 27 (WebCore::CurlRequest::setStartTime): 28 (WebCore::CurlRequest::certificateInfo const): Deleted. 29 (WebCore::CurlRequest::networkLoadMetrics const): Deleted. 30 * platform/network/curl/CurlRequestClient.h: 31 * platform/network/curl/CurlResourceHandleDelegate.cpp: 32 (WebCore::CurlResourceHandleDelegate::curlDidSendData): 33 (WebCore::CurlResourceHandleDelegate::curlDidReceiveResponse): 34 (WebCore::CurlResourceHandleDelegate::curlDidReceiveBuffer): 35 (WebCore::CurlResourceHandleDelegate::curlDidComplete): 36 (WebCore::CurlResourceHandleDelegate::curlDidFailWithError): 37 * platform/network/curl/CurlResourceHandleDelegate.h: 38 * platform/network/curl/CurlResponse.h: 39 (WebCore::CurlResponse::isolatedCopy const): 40 * platform/network/curl/ResourceResponseCurl.cpp: 41 (WebCore::ResourceResponse::ResourceResponse): 42 1 43 2019-06-13 Zan Dobersek <zdobersek@igalia.com> 2 44 -
trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp
r228577 r246401 81 81 } 82 82 83 void CurlDownload::curlDidReceiveResponse(CurlRequest& request, const CurlResponse& response)83 void CurlDownload::curlDidReceiveResponse(CurlRequest& request, CurlResponse&& response) 84 84 { 85 85 ASSERT(isMainThread()); … … 102 102 103 103 104 void CurlDownload::curlDidReceiveBuffer(CurlRequest& request, Ref<SharedBuffer>&& buffer)104 void CurlDownload::curlDidReceiveBuffer(CurlRequest&, Ref<SharedBuffer>&& buffer) 105 105 { 106 106 ASSERT(isMainThread()); … … 113 113 } 114 114 115 void CurlDownload::curlDidComplete(CurlRequest& request )115 void CurlDownload::curlDidComplete(CurlRequest& request, NetworkLoadMetrics&&) 116 116 { 117 117 ASSERT(isMainThread()); … … 129 129 } 130 130 131 void CurlDownload::curlDidFailWithError(CurlRequest& request, const ResourceError& resourceError)131 void CurlDownload::curlDidFailWithError(CurlRequest& request, ResourceError&&, CertificateInfo&&) 132 132 { 133 133 ASSERT(isMainThread()); -
trunk/Source/WebCore/platform/network/curl/CurlDownload.h
r238263 r246401 72 72 Ref<CurlRequest> createCurlRequest(ResourceRequest&); 73 73 void curlDidSendData(CurlRequest&, unsigned long long, unsigned long long) override { } 74 void curlDidReceiveResponse(CurlRequest&, const CurlResponse&) override;74 void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) override; 75 75 void curlDidReceiveBuffer(CurlRequest&, Ref<SharedBuffer>&&) override; 76 void curlDidComplete(CurlRequest& ) override;77 void curlDidFailWithError(CurlRequest&, const ResourceError&) override;76 void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) override; 77 void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) override; 78 78 79 79 bool shouldRedirectAsGET(const ResourceRequest&, bool crossOrigin); -
trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp
r246143 r246401 29 29 #if USE(CURL) 30 30 31 #include "CertificateInfo.h" 31 32 #include "CurlRequestClient.h" 32 33 #include "CurlRequestScheduler.h" 33 34 #include "MIMETypeRegistry.h" 35 #include "NetworkLoadMetrics.h" 34 36 #include "ResourceError.h" 35 37 #include "SharedBuffer.h" … … 108 110 109 111 if (std::isnan(m_requestStartTime)) 110 m_requestStartTime = MonotonicTime::now() ;112 m_requestStartTime = MonotonicTime::now().isolatedCopy(); 111 113 112 114 if (url.isLocalFile()) … … 351 353 m_response.httpVersion = *version; 352 354 353 updateNetworkLoadMetrics();354 355 355 if (m_response.availableProxyAuth) 356 356 CurlContext::singleton().setProxyAuthMethod(m_response.availableProxyAuth); 357 357 358 358 if (auto info = m_curlHandle->certificateInfo()) 359 m_certificateInfo = *info; 359 m_response.certificateInfo = WTFMove(*info); 360 361 m_response.networkLoadMetrics = networkLoadMetrics(); 360 362 361 363 if (m_enableMultipart) … … 452 454 m_multipartHandle->didComplete(); 453 455 454 updateNetworkLoadMetrics();456 auto metrics = networkLoadMetrics(); 455 457 456 458 finalizeTransfer(); 457 callClient([ this, protectedThis = makeRef(*this)](CurlRequest& request, CurlRequestClient& client){458 m_networkLoadMetrics.responseEnd = MonotonicTime::now() - m_requestStartTime;459 m_networkLoadMetrics.markComplete();460 461 client.curlDidComplete(request );459 callClient([requestStartTime = m_requestStartTime.isolatedCopy(), networkLoadMetrics = WTFMove(metrics)](CurlRequest& request, CurlRequestClient& client) mutable { 460 networkLoadMetrics.responseEnd = MonotonicTime::now() - requestStartTime; 461 networkLoadMetrics.markComplete(); 462 463 client.curlDidComplete(request, WTFMove(networkLoadMetrics)); 462 464 }); 463 465 } else { … … 466 468 if (auto sslErrors = m_curlHandle->sslErrors()) 467 469 resourceError.setSslErrors(sslErrors); 470 471 CertificateInfo certificateInfo; 468 472 if (auto info = m_curlHandle->certificateInfo()) 469 m_certificateInfo = *info;473 certificateInfo = WTFMove(*info); 470 474 471 475 finalizeTransfer(); 472 callClient([error = resourceError.isolatedCopy()](CurlRequest& request, CurlRequestClient& client){473 client.curlDidFailWithError(request, error);476 callClient([error = WTFMove(resourceError), certificateInfo = WTFMove(certificateInfo)](CurlRequest& request, CurlRequestClient& client) mutable { 477 client.curlDidFailWithError(request, WTFMove(error), WTFMove(certificateInfo)); 474 478 }); 475 479 } … … 605 609 m_actionAfterInvoke = behaviorAfterInvoke; 606 610 607 callClient([response = response.isolatedCopy()](CurlRequest& request, CurlRequestClient& client) { 608 client.curlDidReceiveResponse(request, response); 611 // FIXME: Replace this isolatedCopy with WTFMove. 612 callClient([response = response.isolatedCopy()](CurlRequest& request, CurlRequestClient& client) mutable { 613 client.curlDidReceiveResponse(request, WTFMove(response)); 609 614 }); 610 615 } … … 716 721 } 717 722 718 void CurlRequest::updateNetworkLoadMetrics() 719 { 723 NetworkLoadMetrics CurlRequest::networkLoadMetrics() 724 { 725 ASSERT(m_curlHandle); 726 720 727 auto domainLookupStart = m_performStartTime - m_requestStartTime; 721 722 if (auto metrics = m_curlHandle->getNetworkLoadMetrics(domainLookupStart)) { 723 m_networkLoadMetrics = *metrics; 724 725 if (m_captureExtraMetrics) { 726 m_curlHandle->addExtraNetworkLoadMetrics(m_networkLoadMetrics); 727 m_networkLoadMetrics.requestHeaders = m_requestHeaders; 728 m_networkLoadMetrics.responseBodyDecodedSize = m_totalReceivedSize; 729 } 730 } 728 auto networkLoadMetrics = m_curlHandle->getNetworkLoadMetrics(domainLookupStart); 729 if (!networkLoadMetrics) 730 return NetworkLoadMetrics(); 731 732 if (m_captureExtraMetrics) { 733 m_curlHandle->addExtraNetworkLoadMetrics(*networkLoadMetrics); 734 networkLoadMetrics->requestHeaders = m_requestHeaders; 735 networkLoadMetrics->responseBodyDecodedSize = m_totalReceivedSize; 736 } 737 738 return WTFMove(*networkLoadMetrics); 731 739 } 732 740 -
trunk/Source/WebCore/platform/network/curl/CurlRequest.h
r246143 r246401 26 26 #pragma once 27 27 28 #include "CertificateInfo.h"29 28 #include "CurlFormDataStream.h" 30 29 #include "CurlMultipartHandle.h" … … 32 31 #include "CurlRequestSchedulerClient.h" 33 32 #include "CurlResponse.h" 34 #include "NetworkLoadMetrics.h"35 33 #include "ProtectionSpace.h" 36 34 #include "ResourceRequest.h" … … 43 41 44 42 class CurlRequestClient; 43 class NetworkLoadMetrics; 45 44 class ResourceError; 46 45 class SharedBuffer; … … 77 76 bool isServerTrustEvaluationDisabled() { return m_shouldDisableServerTrustEvaluation; } 78 77 void disableServerTrustEvaluation() { m_shouldDisableServerTrustEvaluation = true; } 79 void setStartTime(const MonotonicTime& startTime) { m_requestStartTime = startTime ; }78 void setStartTime(const MonotonicTime& startTime) { m_requestStartTime = startTime.isolatedCopy(); } 80 79 81 80 void start(); … … 98 97 void enableDownloadToFile(); 99 98 const String& getDownloadedFilePath(); 100 101 const CertificateInfo& certificateInfo() const { return m_certificateInfo; }102 const NetworkLoadMetrics& networkLoadMetrics() const { return m_networkLoadMetrics; }103 99 104 100 private: … … 155 151 bool isHandlePaused() const; 156 152 157 void updateNetworkLoadMetrics();153 NetworkLoadMetrics networkLoadMetrics(); 158 154 159 155 // Download … … 212 208 FileSystem::PlatformFileHandle m_downloadFileHandle { FileSystem::invalidPlatformFileHandle }; 213 209 214 CertificateInfo m_certificateInfo;215 210 bool m_captureExtraMetrics; 216 NetworkLoadMetrics m_networkLoadMetrics;217 211 HTTPHeaderMap m_requestHeaders; 218 212 MonotonicTime m_requestStartTime { MonotonicTime::nan() }; -
trunk/Source/WebCore/platform/network/curl/CurlRequestClient.h
r228577 r246401 30 30 namespace WebCore { 31 31 32 class CertificateInfo; 32 33 class CurlRequest; 33 34 class CurlResponse; 35 class NetworkLoadMetrics; 34 36 class ResourceError; 35 37 class SharedBuffer; … … 41 43 42 44 virtual void curlDidSendData(CurlRequest&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) = 0; 43 virtual void curlDidReceiveResponse(CurlRequest&, const CurlResponse&) = 0;45 virtual void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) = 0; 44 46 virtual void curlDidReceiveBuffer(CurlRequest&, Ref<SharedBuffer>&&) = 0; 45 virtual void curlDidComplete(CurlRequest& ) = 0;46 virtual void curlDidFailWithError(CurlRequest&, const ResourceError&) = 0;47 virtual void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) = 0; 48 virtual void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) = 0; 47 49 }; 48 50 -
trunk/Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.cpp
r242517 r246401 75 75 } 76 76 77 void CurlResourceHandleDelegate::curlDidSendData(CurlRequest& request, unsigned long long bytesSent, unsigned long long totalBytesToBeSent)77 void CurlResourceHandleDelegate::curlDidSendData(CurlRequest&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) 78 78 { 79 UNUSED_PARAM(request);80 79 ASSERT(isMainThread()); 81 80 … … 100 99 } 101 100 102 void CurlResourceHandleDelegate::curlDidReceiveResponse(CurlRequest& request, const CurlResponse& receivedResponse)101 void CurlResourceHandleDelegate::curlDidReceiveResponse(CurlRequest& request, CurlResponse&& receivedResponse) 103 102 { 104 103 ASSERT(isMainThread()); … … 109 108 110 109 m_response = ResourceResponse(receivedResponse); 111 112 m_response.setCertificateInfo(request.certificateInfo().isolatedCopy()); 113 m_response.setDeprecatedNetworkLoadMetrics(request.networkLoadMetrics().isolatedCopy()); 110 m_response.setCertificateInfo(WTFMove(receivedResponse.certificateInfo)); 111 m_response.setDeprecatedNetworkLoadMetrics(WTFMove(receivedResponse.networkLoadMetrics)); 114 112 115 113 handleCookieHeaders(d(), request.resourceRequest(), receivedResponse); … … 146 144 } 147 145 148 void CurlResourceHandleDelegate::curlDidReceiveBuffer(CurlRequest& request, Ref<SharedBuffer>&& buffer)146 void CurlResourceHandleDelegate::curlDidReceiveBuffer(CurlRequest&, Ref<SharedBuffer>&& buffer) 149 147 { 150 UNUSED_PARAM(request);151 148 ASSERT(isMainThread()); 152 149 … … 158 155 } 159 156 160 void CurlResourceHandleDelegate::curlDidComplete(CurlRequest& request)157 void CurlResourceHandleDelegate::curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) 161 158 { 162 159 ASSERT(isMainThread()); … … 165 162 return; 166 163 167 m_response.setDeprecatedNetworkLoadMetrics(request.networkLoadMetrics().isolatedCopy());168 169 164 CurlCacheManager::singleton().didFinishLoading(m_handle); 170 165 client()->didFinishLoading(&m_handle); 171 166 } 172 167 173 void CurlResourceHandleDelegate::curlDidFailWithError(CurlRequest& request, const ResourceError& resourceError)168 void CurlResourceHandleDelegate::curlDidFailWithError(CurlRequest&, ResourceError&& resourceError, CertificateInfo&&) 174 169 { 175 UNUSED_PARAM(request);176 170 ASSERT(isMainThread()); 177 171 -
trunk/Source/WebCore/platform/network/curl/CurlResourceHandleDelegate.h
r228927 r246401 53 53 54 54 void curlDidSendData(CurlRequest&, unsigned long long bytesSent, unsigned long long totalBytesToBeSent) final; 55 void curlDidReceiveResponse(CurlRequest&, const CurlResponse&) final;55 void curlDidReceiveResponse(CurlRequest&, CurlResponse&&) final; 56 56 void curlDidReceiveBuffer(CurlRequest&, Ref<SharedBuffer>&&) final; 57 void curlDidComplete(CurlRequest& ) final;58 void curlDidFailWithError(CurlRequest&, const ResourceError&) final;57 void curlDidComplete(CurlRequest&, NetworkLoadMetrics&&) final; 58 void curlDidFailWithError(CurlRequest&, ResourceError&&, CertificateInfo&&) final; 59 59 60 60 private: -
trunk/Source/WebCore/platform/network/curl/CurlResponse.h
r238771 r246401 26 26 #pragma once 27 27 28 #include "CertificateInfo.h" 29 #include "NetworkLoadMetrics.h" 28 30 #include <wtf/URL.h> 29 31 … … 51 53 copy.httpVersion = httpVersion; 52 54 55 copy.certificateInfo = certificateInfo.isolatedCopy(); 56 copy.networkLoadMetrics = networkLoadMetrics.isolatedCopy(); 57 53 58 return copy; 54 59 } … … 64 69 long availableProxyAuth { 0 }; 65 70 long httpVersion { 0 }; 71 72 CertificateInfo certificateInfo; 73 NetworkLoadMetrics networkLoadMetrics; 66 74 }; 67 75 -
trunk/Source/WebCore/platform/network/curl/ResourceResponseCurl.cpp
r234311 r246401 79 79 80 80 ResourceResponse::ResourceResponse(const CurlResponse& response) 81 : ResourceResponseBase(response.url, "", response.expectedContentLength, "") 82 { 81 : ResourceResponseBase() 82 { 83 setURL(response.url); 84 setExpectedContentLength(response.expectedContentLength); 83 85 setHTTPStatusCode(response.statusCode ? response.statusCode : response.httpConnectCode); 84 86 … … 102 104 break; 103 105 } 106 104 107 setMimeType(extractMIMETypeFromMediaType(httpHeaderField(HTTPHeaderName::ContentType)).convertToASCIILowercase()); 105 108 setTextEncodingName(extractCharsetFromMediaType(httpHeaderField(HTTPHeaderName::ContentType))); -
trunk/Source/WebKit/ChangeLog
r246400 r246401 1 2019-06-13 Takashi Komori <Takashi.Komori@sony.com> 2 3 [curl] Remove member objects of CurlRequest not to share by different threads. 4 https://bugs.webkit.org/show_bug.cgi?id=198747 5 6 Reviewed by Fujii Hironori. 7 8 * NetworkProcess/curl/NetworkDataTaskCurl.cpp: 9 (WebKit::NetworkDataTaskCurl::curlDidReceiveResponse): 10 (WebKit::NetworkDataTaskCurl::curlDidComplete): 11 (WebKit::NetworkDataTaskCurl::curlDidFailWithError): 12 * NetworkProcess/curl/NetworkDataTaskCurl.h: 13 1 14 2019-06-13 Zan Dobersek <zdobersek@igalia.com> 2 15 -
trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.cpp
r245215 r246401 33 33 #include <WebCore/CookieJar.h> 34 34 #include <WebCore/CurlRequest.h> 35 #include <WebCore/NetworkLoadMetrics.h> 35 36 #include <WebCore/NetworkStorageSession.h> 36 37 #include <WebCore/NotImplemented.h> … … 141 142 } 142 143 143 void NetworkDataTaskCurl::curlDidReceiveResponse(CurlRequest& request, const CurlResponse& receivedResponse)144 void NetworkDataTaskCurl::curlDidReceiveResponse(CurlRequest& request, CurlResponse&& receivedResponse) 144 145 { 145 146 auto protectedThis = makeRef(*this); … … 148 149 149 150 m_response = ResourceResponse(receivedResponse); 150 m_response.setDeprecatedNetworkLoadMetrics(request.networkLoadMetrics().isolatedCopy()); 151 m_response.setCertificateInfo(WTFMove(receivedResponse.certificateInfo)); 152 m_response.setDeprecatedNetworkLoadMetrics(WTFMove(receivedResponse.networkLoadMetrics)); 151 153 152 154 handleCookieHeaders(request.resourceRequest(), receivedResponse); … … 180 182 } 181 183 182 void NetworkDataTaskCurl::curlDidComplete(CurlRequest& request)184 void NetworkDataTaskCurl::curlDidComplete(CurlRequest&, NetworkLoadMetrics&& networkLoadMetrics) 183 185 { 184 186 if (state() == State::Canceling || state() == State::Completed || (!m_client && !isDownload())) 185 187 return; 186 188 187 m_response.setDeprecatedNetworkLoadMetrics(request.networkLoadMetrics().isolatedCopy()); 188 189 m_client->didCompleteWithError({ }, m_response.deprecatedNetworkLoadMetrics()); 190 } 191 192 void NetworkDataTaskCurl::curlDidFailWithError(CurlRequest& request, const ResourceError& resourceError) 189 m_client->didCompleteWithError({ }, WTFMove(networkLoadMetrics)); 190 } 191 192 void NetworkDataTaskCurl::curlDidFailWithError(CurlRequest& request, ResourceError&& resourceError, CertificateInfo&& certificateInfo) 193 193 { 194 194 if (state() == State::Canceling || state() == State::Completed || (!m_client && !isDownload())) … … 196 196 197 197 if (resourceError.isSSLCertVerificationError()) { 198 tryServerTrustEvaluation(AuthenticationChallenge(request.resourceRequest().url(), request.certificateInfo(), resourceError));198 tryServerTrustEvaluation(AuthenticationChallenge(request.resourceRequest().url(), certificateInfo, resourceError)); 199 199 return; 200 200 } -
trunk/Source/WebKit/NetworkProcess/curl/NetworkDataTaskCurl.h
r244443 r246401 28 28 #include "NetworkDataTask.h" 29 29 #include <WebCore/CurlRequestClient.h> 30 #include <WebCore/NetworkLoadMetrics.h>31 30 #include <WebCore/ProtectionSpace.h> 32 31 #include <WebCore/ResourceResponse.h> … … 65 64 Ref<WebCore::CurlRequest> createCurlRequest(WebCore::ResourceRequest&&, RequestStatus = RequestStatus::NewRequest); 66 65 void curlDidSendData(WebCore::CurlRequest&, unsigned long long, unsigned long long) override; 67 void curlDidReceiveResponse(WebCore::CurlRequest&, const WebCore::CurlResponse&) override;66 void curlDidReceiveResponse(WebCore::CurlRequest&, WebCore::CurlResponse&&) override; 68 67 void curlDidReceiveBuffer(WebCore::CurlRequest&, Ref<WebCore::SharedBuffer>&&) override; 69 void curlDidComplete(WebCore::CurlRequest& ) override;70 void curlDidFailWithError(WebCore::CurlRequest&, const WebCore::ResourceError&) override;68 void curlDidComplete(WebCore::CurlRequest&, WebCore::NetworkLoadMetrics&&) override; 69 void curlDidFailWithError(WebCore::CurlRequest&, WebCore::ResourceError&&, WebCore::CertificateInfo&&) override; 71 70 72 71 void invokeDidReceiveResponse();
Note: See TracChangeset
for help on using the changeset viewer.