Changeset 227449 in webkit
- Timestamp:
- Jan 23, 2018 2:30:39 PM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r227442 r227449 1 2018-01-23 Basuke Suzuki <Basuke.Suzuki@sony.com> 2 3 [Curl] CurlRequest must protect its client from disposal while it's on duty. 4 https://bugs.webkit.org/show_bug.cgi?id=181875 5 6 Reviewed by Alex Christensen. 7 8 No new tests. It's covered by existing tests. 9 10 * platform/network/curl/CurlDownload.h: 11 * platform/network/curl/CurlRequest.cpp: 12 (WebCore::CurlRequest::callClient): 13 (WebCore::CurlRequest::didReceiveData): 14 (WebCore::CurlRequest::didReceiveDataFromMultipart): 15 (WebCore::CurlRequest::didCompleteTransfer): 16 (WebCore::CurlRequest::invokeDidReceiveResponse): 17 * platform/network/curl/CurlRequest.h: 18 * platform/network/curl/CurlRequestClient.h: 19 * platform/network/curl/ResourceHandleCurlDelegate.h: 20 1 21 2018-01-23 Commit Queue <commit-queue@webkit.org> 2 22 -
trunk/Source/WebCore/platform/network/curl/CurlDownload.h
r225998 r227449 53 53 ~CurlDownload(); 54 54 55 void ref() override { ThreadSafeRefCounted<CurlDownload>::ref(); } 56 void deref() override { ThreadSafeRefCounted<CurlDownload>::deref(); } 57 55 58 void init(CurlDownloadListener&, const URL&); 56 59 void init(CurlDownloadListener&, ResourceHandle*, const ResourceRequest&, const ResourceResponse&); -
trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp
r227237 r227449 143 143 144 144 /* `this` is protected inside this method. */ 145 void CurlRequest::callClient(WTF::Function<void(CurlRequestClient *)> task)145 void CurlRequest::callClient(WTF::Function<void(CurlRequestClient&)> task) 146 146 { 147 147 if (isMainThread()) { 148 if (CurlRequestClient* client = m_client) 149 task(client); 148 if (CurlRequestClient* client = m_client) { 149 RefPtr<CurlRequestClient> protectedClient(client); 150 task(*client); 151 } 150 152 } else { 151 153 callOnMainThread([protectedThis = makeRef(*this), task = WTFMove(task)]() mutable { 152 if (CurlRequestClient* client = protectedThis->m_client) 153 task(client); 154 if (CurlRequestClient* client = protectedThis->m_client) { 155 RefPtr<CurlRequestClient> protectedClient(client); 156 task(*client); 157 } 154 158 }); 155 159 } … … 357 361 m_multipartHandle->didReceiveData(buffer); 358 362 else { 359 callClient([this, buffer = WTFMove(buffer)](CurlRequestClient* client) mutable { 360 if (client) 361 client->curlDidReceiveBuffer(WTFMove(buffer)); 363 callClient([buffer = WTFMove(buffer)](CurlRequestClient& client) mutable { 364 client.curlDidReceiveBuffer(WTFMove(buffer)); 362 365 }); 363 366 } … … 390 393 391 394 if (receiveBytes) { 392 callClient([this, buffer = WTFMove(buffer)](CurlRequestClient* client) mutable { 393 if (client) 394 client->curlDidReceiveBuffer(WTFMove(buffer)); 395 callClient([buffer = WTFMove(buffer)](CurlRequestClient& client) mutable { 396 client.curlDidReceiveBuffer(WTFMove(buffer)); 395 397 }); 396 398 } … … 419 421 420 422 finalizeTransfer(); 421 callClient([this](CurlRequestClient* client) { 422 if (client) 423 client->curlDidComplete(); 423 callClient([](CurlRequestClient& client) { 424 client.curlDidComplete(); 424 425 }); 425 426 } … … 431 432 432 433 finalizeTransfer(); 433 callClient([this, error = resourceError.isolatedCopy()](CurlRequestClient* client) { 434 if (client) 435 client->curlDidFailWithError(error); 434 callClient([error = resourceError.isolatedCopy()](CurlRequestClient& client) { 435 client.curlDidFailWithError(error); 436 436 }); 437 437 } … … 532 532 m_actionAfterInvoke = behaviorAfterInvoke; 533 533 534 callClient([this, response = response.isolatedCopy()](CurlRequestClient* client) { 535 if (client) 536 client->curlDidReceiveResponse(response); 534 callClient([response = response.isolatedCopy()](CurlRequestClient& client) { 535 client.curlDidReceiveResponse(response); 537 536 }); 538 537 } -
trunk/Source/WebCore/platform/network/curl/CurlRequest.h
r226800 r227449 103 103 void startWithJobManager(); 104 104 105 void callClient(WTF::Function<void(CurlRequestClient *)>);105 void callClient(WTF::Function<void(CurlRequestClient&)>); 106 106 107 107 // Transfer processing of Request body, Response header/body -
trunk/Source/WebCore/platform/network/curl/CurlRequestClient.h
r224037 r227449 36 36 class CurlRequestClient { 37 37 public: 38 virtual void ref() = 0; 39 virtual void deref() = 0; 40 38 41 virtual void curlDidReceiveResponse(const CurlResponse&) = 0; 39 42 virtual void curlDidReceiveBuffer(Ref<SharedBuffer>&&) = 0; -
trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h
r226800 r227449 43 43 ResourceHandleCurlDelegate(ResourceHandle*); 44 44 ~ResourceHandleCurlDelegate(); 45 46 void ref() override { ThreadSafeRefCounted<ResourceHandleCurlDelegate>::ref(); } 47 void deref() override { ThreadSafeRefCounted<ResourceHandleCurlDelegate>::deref(); } 45 48 46 49 bool hasHandle() const;
Note: See TracChangeset
for help on using the changeset viewer.