Changeset 224037 in webkit
- Timestamp:
- Oct 26, 2017 11:58:29 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 added
- 8 edited
- 3 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r224034 r224037 1 2017-10-26 Basuke Suzuki <Basuke.Suzuki@sony.com> 2 3 [Curl] Rename CurlJobManager to CurlRequestScheduler 4 https://bugs.webkit.org/show_bug.cgi?id=178775 5 6 To match the meaning of the class. 7 It was originally meant to be more generic purpose, but as 8 other classes was introduced, the objective of the class is 9 now only to handle the life cycle of curl requests. 10 11 The delegate is also renamed to CurlRequestSchedulerClient. 12 13 Reviewed by Alex Christensen. 14 15 * platform/Curl.cmake: 16 * platform/network/curl/CurlDownload.cpp: 17 (WebCore::CurlDownload::~CurlDownload): 18 (WebCore::CurlDownload::willSendRequest): 19 * platform/network/curl/CurlDownload.h: 20 * platform/network/curl/CurlRequest.cpp: 21 (WebCore::CurlRequest::CurlRequest): 22 (WebCore::CurlRequest::start): 23 (WebCore::CurlRequest::startWithJobManager): 24 (WebCore::CurlRequest::cancel): 25 (WebCore::CurlRequest::callClient): 26 (WebCore::CurlRequest::didReceiveData): 27 (WebCore::CurlRequest::didCompleteTransfer): 28 (WebCore::CurlRequest::invokeDidReceiveResponseForFile): 29 (WebCore::CurlRequest::invokeDidReceiveResponse): 30 (WebCore::CurlRequest::completeDidReceiveResponse): 31 (WebCore::CurlRequest::pausedStatusChanged): 32 (WebCore::CurlRequest::callDelegate): Deleted. 33 * platform/network/curl/CurlRequest.h: 34 (WebCore::CurlRequest::create): 35 (WebCore::CurlRequest::setClient): 36 (WebCore::CurlRequest::setDelegate): Deleted. 37 * platform/network/curl/CurlRequestClient.h: Renamed from Source/WebCore/platform/network/curl/CurlRequestDelegate.h. 38 * platform/network/curl/CurlRequestScheduler.cpp: Renamed from Source/WebCore/platform/network/curl/CurlJobManager.cpp. 39 (WebCore::CurlJobList::startJobs): 40 (WebCore::CurlJobList::finishJobs): 41 (WebCore::CurlRequestScheduler::singleton): 42 (WebCore::CurlRequestScheduler::add): 43 (WebCore::CurlRequestScheduler::cancel): 44 (WebCore::CurlRequestScheduler::callOnWorkerThread): 45 (WebCore::CurlRequestScheduler::startThreadIfNeeded): 46 (WebCore::CurlRequestScheduler::stopThreadIfNoMoreJobRunning): 47 (WebCore::CurlRequestScheduler::stopThread): 48 (WebCore::CurlRequestScheduler::updateJobList): 49 (WebCore::CurlRequestScheduler::workerThread): 50 * platform/network/curl/CurlRequestScheduler.h: Renamed from Source/WebCore/platform/network/curl/CurlJobManager.h. 51 (WebCore::CurlRequestScheduler::~CurlRequestScheduler): 52 * platform/network/curl/CurlRequestSchedulerClient.h: Added. 53 (WebCore::CurlRequestSchedulerClient::~CurlRequestSchedulerClient): 54 * platform/network/curl/ResourceHandleCurlDelegate.cpp: 55 (WebCore::ResourceHandleCurlDelegate::~ResourceHandleCurlDelegate): 56 (WebCore::ResourceHandleCurlDelegate::setAuthentication): 57 (WebCore::ResourceHandleCurlDelegate::continueAfterWillSendRequest): 58 * platform/network/curl/ResourceHandleCurlDelegate.h: 59 1 60 2017-10-26 Antti Koivisto <antti@apple.com> 2 61 -
trunk/Source/WebCore/platform/Curl.cmake
r222665 r224037 11 11 platform/network/curl/CurlContext.cpp 12 12 platform/network/curl/CurlDownload.cpp 13 platform/network/curl/CurlJobManager.cpp14 13 platform/network/curl/CurlRequest.cpp 14 platform/network/curl/CurlRequestScheduler.cpp 15 15 platform/network/curl/CurlSSLHandle.cpp 16 16 platform/network/curl/CurlSSLVerifier.cpp -
trunk/Source/WebCore/platform/network/curl/CurlDownload.cpp
r222828 r224037 41 41 { 42 42 if (m_curlRequest) 43 m_curlRequest->set Delegate(nullptr);43 m_curlRequest->setClient(nullptr); 44 44 } 45 45 … … 197 197 198 198 m_curlRequest->cancel(); 199 m_curlRequest->set Delegate(nullptr);199 m_curlRequest->setClient(nullptr); 200 200 201 201 m_curlRequest = createCurlRequest(newRequest); -
trunk/Source/WebCore/platform/network/curl/CurlDownload.h
r222828 r224037 31 31 32 32 #include "CurlRequest.h" 33 #include "CurlRequest Delegate.h"33 #include "CurlRequestClient.h" 34 34 #include "ResourceRequest.h" 35 35 #include "ResourceResponse.h" … … 48 48 }; 49 49 50 class CurlDownload : public ThreadSafeRefCounted<CurlDownload>, public CurlRequest Delegate{50 class CurlDownload : public ThreadSafeRefCounted<CurlDownload>, public CurlRequestClient { 51 51 public: 52 52 CurlDownload() = default; -
trunk/Source/WebCore/platform/network/curl/CurlRequest.cpp
r223995 r224037 29 29 #if USE(CURL) 30 30 31 #include "CurlRequestDelegate.h" 31 #include "CurlRequestClient.h" 32 #include "CurlRequestScheduler.h" 32 33 #include "MIMETypeRegistry.h" 33 34 #include "ResourceError.h" … … 37 38 namespace WebCore { 38 39 39 CurlRequest::CurlRequest(const ResourceRequest&request, CurlRequest Delegate* delegate, bool shouldSuspend)40 CurlRequest::CurlRequest(const ResourceRequest&request, CurlRequestClient* client, bool shouldSuspend) 40 41 : m_request(request.isolatedCopy()) 41 42 , m_shouldSuspend(shouldSuspend) … … 43 44 ASSERT(isMainThread()); 44 45 45 set Delegate(delegate);46 setClient(client); 46 47 resolveBlobReferences(m_request); 47 48 } … … 73 74 74 75 if (!m_isSyncRequest) { 75 // For asynchronous, use Curl JobManager. Curl processes runs on sub thread.76 // For asynchronous, use CurlRequestScheduler. Curl processes runs on sub thread. 76 77 if (url.isLocalFile()) 77 78 invokeDidReceiveResponseForFile(url); … … 79 80 startWithJobManager(); 80 81 } else { 81 // For synchronous, does not use Curl JobManager. Curl processes runs on main thread.82 // For synchronous, does not use CurlRequestScheduler. Curl processes runs on main thread. 82 83 // curl_easy_perform blocks until the transfer is finished. 83 84 retain(); … … 96 97 ASSERT(isMainThread()); 97 98 98 Curl JobManager::singleton().add(this);99 CurlRequestScheduler::singleton().add(this); 99 100 } 100 101 … … 109 110 110 111 if (!m_isSyncRequest) 111 Curl JobManager::singleton().cancel(this);112 CurlRequestScheduler::singleton().cancel(this); 112 113 113 114 setRequestPaused(false); … … 130 131 131 132 /* `this` is protected inside this method. */ 132 void CurlRequest::call Delegate(WTF::Function<void(CurlRequestDelegate*)> task)133 void CurlRequest::callClient(WTF::Function<void(CurlRequestClient*)> task) 133 134 { 134 135 if (isMainThread()) { 135 if (CurlRequest Delegate* delegate = m_delegate)136 task( delegate);136 if (CurlRequestClient* client = m_client) 137 task(client); 137 138 } else { 138 139 callOnMainThread([protectedThis = makeRef(*this), task = WTFMove(task)]() mutable { 139 if (CurlRequest Delegate* delegate = protectedThis->m_delegate)140 task( delegate);140 if (CurlRequestClient* client = protectedThis->m_client) 141 task(client); 141 142 }); 142 143 } … … 329 330 330 331 if (receiveBytes) { 331 call Delegate([this, buffer = WTFMove(buffer)](CurlRequestDelegate* delegate) mutable {332 if ( delegate)333 delegate->curlDidReceiveBuffer(WTFMove(buffer));332 callClient([this, buffer = WTFMove(buffer)](CurlRequestClient* client) mutable { 333 if (client) 334 client->curlDidReceiveBuffer(WTFMove(buffer)); 334 335 }); 335 336 } … … 357 358 358 359 finalizeTransfer(); 359 call Delegate([this](CurlRequestDelegate* delegate) {360 if ( delegate)361 delegate->curlDidComplete();360 callClient([this](CurlRequestClient* client) { 361 if (client) 362 client->curlDidComplete(); 362 363 }); 363 364 } … … 368 369 369 370 finalizeTransfer(); 370 call Delegate([this, error = resourceError.isolatedCopy()](CurlRequestDelegate* delegate) {371 if ( delegate)372 delegate->curlDidFailWithError(error);371 callClient([this, error = resourceError.isolatedCopy()](CurlRequestClient* client) { 372 if (client) 373 client->curlDidFailWithError(error); 373 374 }); 374 375 } … … 497 498 if (!m_isSyncRequest) { 498 499 // DidReceiveResponse must not be called immediately 499 Curl JobManager::singleton().callOnJobThread([protectedThis = makeRef(*this)]() {500 CurlRequestScheduler::singleton().callOnWorkerThread([protectedThis = makeRef(*this)]() { 500 501 protectedThis->invokeDidReceiveResponse(Action::StartTransfer); 501 502 }); … … 513 514 m_actionAfterInvoke = behaviorAfterInvoke; 514 515 515 call Delegate([this, response = m_response.isolatedCopy()](CurlRequestDelegate* delegate) {516 if ( delegate)517 delegate->curlDidReceiveResponse(response);516 callClient([this, response = m_response.isolatedCopy()](CurlRequestClient* client) { 517 if (client) 518 client->curlDidReceiveResponse(response); 518 519 }); 519 520 } … … 539 540 // Keep the calling thread of didCompleteTransfer() 540 541 if (!m_isSyncRequest) { 541 Curl JobManager::singleton().callOnJobThread([protectedThis = makeRef(*this), finishedResultCode = m_finishedResultCode]() {542 CurlRequestScheduler::singleton().callOnWorkerThread([protectedThis = makeRef(*this), finishedResultCode = m_finishedResultCode]() { 542 543 protectedThis->didCompleteTransfer(finishedResultCode); 543 544 }); … … 581 582 582 583 if (!m_isSyncRequest && isMainThread()) { 583 Curl JobManager::singleton().callOnJobThread([protectedThis = makeRef(*this), paused = isPaused()]() {584 CurlRequestScheduler::singleton().callOnWorkerThread([protectedThis = makeRef(*this), paused = isPaused()]() { 584 585 if (protectedThis->m_cancelled) 585 586 return; -
trunk/Source/WebCore/platform/network/curl/CurlRequest.h
r223995 r224037 26 26 #pragma once 27 27 28 #include "Curl JobManager.h"28 #include "CurlRequestSchedulerClient.h" 29 29 #include "CurlResponse.h" 30 30 #include "CurlSSLVerifier.h" … … 37 37 namespace WebCore { 38 38 39 class CurlRequest Delegate;39 class CurlRequestClient; 40 40 class ResourceError; 41 41 class SharedBuffer; 42 42 43 class CurlRequest : public ThreadSafeRefCounted<CurlRequest>, public Curl JobClient {43 class CurlRequest : public ThreadSafeRefCounted<CurlRequest>, public CurlRequestSchedulerClient { 44 44 WTF_MAKE_NONCOPYABLE(CurlRequest); 45 45 46 46 public: 47 static Ref<CurlRequest> create(const ResourceRequest& request, CurlRequest Delegate* delegate, bool shouldSuspend = false)47 static Ref<CurlRequest> create(const ResourceRequest& request, CurlRequestClient* client, bool shouldSuspend = false) 48 48 { 49 return adoptRef(*new CurlRequest(request, delegate, shouldSuspend));49 return adoptRef(*new CurlRequest(request, client, shouldSuspend)); 50 50 } 51 51 52 52 virtual ~CurlRequest() = default; 53 53 54 void set Delegate(CurlRequestDelegate* delegate) { m_delegate = delegate; }54 void setClient(CurlRequestClient* client) { m_client = client; } 55 55 void setUserPass(const String&, const String&); 56 56 … … 79 79 }; 80 80 81 CurlRequest(const ResourceRequest&, CurlRequest Delegate*, bool shouldSuspend);81 CurlRequest(const ResourceRequest&, CurlRequestClient*, bool shouldSuspend); 82 82 83 83 void retain() override { ref(); } … … 87 87 void startWithJobManager(); 88 88 89 void call Delegate(WTF::Function<void(CurlRequestDelegate*)>);89 void callClient(WTF::Function<void(CurlRequestClient*)>); 90 90 91 91 // Transfer processing of Request body, Response header/body … … 127 127 128 128 129 std::atomic<CurlRequest Delegate*> m_delegate{ };129 std::atomic<CurlRequestClient*> m_client { }; 130 130 bool m_isSyncRequest { false }; 131 131 bool m_cancelled { false }; -
trunk/Source/WebCore/platform/network/curl/CurlRequestClient.h
r224036 r224037 34 34 class SharedBuffer; 35 35 36 class CurlRequest Delegate{36 class CurlRequestClient { 37 37 public: 38 38 virtual void curlDidReceiveResponse(const CurlResponse&) = 0; -
trunk/Source/WebCore/platform/network/curl/CurlRequestScheduler.cpp
r224036 r224037 27 27 28 28 #include "config.h" 29 #include "Curl JobManager.h"29 #include "CurlRequestScheduler.h" 30 30 31 31 #if USE(CURL) 32 32 33 #include "CurlRequestSchedulerClient.h" 33 34 #include <wtf/NeverDestroyed.h> 34 35 … … 42 43 bool isEmpty() const { return m_activeJobs.isEmpty(); } 43 44 44 void startJobs(HashSet<Curl JobClient*>&& jobs)45 void startJobs(HashSet<CurlRequestSchedulerClient*>&& jobs) 45 46 { 46 47 auto localJobs = WTFMove(jobs); … … 55 56 } 56 57 57 void finishJobs(HashMap<CURL*, CURLcode>&& tickets, WTF::Function<void(Curl JobClient*, CURLcode)> completionHandler)58 void finishJobs(HashMap<CURL*, CURLcode>&& tickets, WTF::Function<void(CurlRequestSchedulerClient*, CURLcode)> completionHandler) 58 59 { 59 60 auto localTickets = WTFMove(tickets); … … 64 65 CURL* handle = ticket.key; 65 66 CURLcode result = ticket.value; 66 Curl JobClient* client = m_activeJobs.inlineGet(handle);67 CurlRequestSchedulerClient* client = m_activeJobs.inlineGet(handle); 67 68 68 69 removeHandle(handle); … … 77 78 78 79 private: 79 HashMap<CURL*, Curl JobClient*> m_activeJobs;80 HashMap<CURL*, CurlRequestSchedulerClient*> m_activeJobs; 80 81 }; 81 82 82 Curl JobManager& CurlJobManager::singleton()83 { 84 static NeverDestroyed<Curl JobManager> sharedInstance;83 CurlRequestScheduler& CurlRequestScheduler::singleton() 84 { 85 static NeverDestroyed<CurlRequestScheduler> sharedInstance; 85 86 return sharedInstance; 86 87 } 87 88 88 bool Curl JobManager::add(CurlJobClient* client)89 bool CurlRequestScheduler::add(CurlRequestSchedulerClient* client) 89 90 { 90 91 ASSERT(isMainThread()); … … 105 106 } 106 107 107 void Curl JobManager::cancel(CurlJobClient* client)108 void CurlRequestScheduler::cancel(CurlRequestSchedulerClient* client) 108 109 { 109 110 ASSERT(isMainThread()); … … 116 117 } 117 118 118 void Curl JobManager::callOnJobThread(WTF::Function<void()>&& task)119 void CurlRequestScheduler::callOnWorkerThread(WTF::Function<void()>&& task) 119 120 { 120 121 { … … 126 127 } 127 128 128 void Curl JobManager::startThreadIfNeeded()129 void CurlRequestScheduler::startThreadIfNeeded() 129 130 { 130 131 ASSERT(isMainThread()); … … 143 144 } 144 145 145 void Curl JobManager::stopThreadIfNoMoreJobRunning()146 void CurlRequestScheduler::stopThreadIfNoMoreJobRunning() 146 147 { 147 148 ASSERT(!isMainThread()); … … 153 154 } 154 155 155 void Curl JobManager::stopThread()156 void CurlRequestScheduler::stopThread() 156 157 { 157 158 m_runThread = false; … … 163 164 } 164 165 165 void Curl JobManager::updateJobList(CurlJobList& jobs)166 void CurlRequestScheduler::updateJobList(CurlJobList& jobs) 166 167 { 167 168 ASSERT(!isMainThread()); 168 169 169 HashSet<Curl JobClient*> pendingJobs;170 HashSet<CurlRequestSchedulerClient*> pendingJobs; 170 171 HashMap<CURL*, CURLcode> cancelledJobs; 171 172 Vector<WTF::Function<void()>> taskQueue; … … 184 185 jobs.startJobs(WTFMove(pendingJobs)); 185 186 186 jobs.finishJobs(WTFMove(cancelledJobs), [](Curl JobClient* client, CURLcode) {187 jobs.finishJobs(WTFMove(cancelledJobs), [](CurlRequestSchedulerClient* client, CURLcode) { 187 188 client->didCancelTransfer(); 188 189 }); 189 190 190 jobs.finishJobs(WTFMove(m_finishedJobs), [](Curl JobClient* client, CURLcode result) {191 jobs.finishJobs(WTFMove(m_finishedJobs), [](CurlRequestSchedulerClient* client, CURLcode result) { 191 192 client->didCompleteTransfer(result); 192 193 }); 193 194 } 194 195 195 void Curl JobManager::workerThread()196 void CurlRequestScheduler::workerThread() 196 197 { 197 198 ASSERT(!isMainThread()); -
trunk/Source/WebCore/platform/network/curl/CurlRequestScheduler.h
r224036 r224037 38 38 39 39 class CurlJobList; 40 class CurlRequestSchedulerClient; 40 41 41 class CurlJobClient { 42 class CurlRequestScheduler { 43 WTF_MAKE_NONCOPYABLE(CurlRequestScheduler); 44 friend NeverDestroyed<CurlRequestScheduler>; 42 45 public: 43 virtual void retain() = 0; 44 virtual void release() = 0; 46 static CurlRequestScheduler& singleton(); 45 47 46 virtual CURL* handle() = 0; 47 virtual CURL* setupTransfer() = 0; 48 virtual void didCompleteTransfer(CURLcode) = 0; 49 virtual void didCancelTransfer() = 0; 50 }; 48 ~CurlRequestScheduler() { stopThread(); } 51 49 52 class CurlJobManager { 53 WTF_MAKE_NONCOPYABLE(CurlJobManager); 54 friend NeverDestroyed<CurlJobManager>; 55 public: 56 static CurlJobManager& singleton(); 50 bool add(CurlRequestSchedulerClient*); 51 void cancel(CurlRequestSchedulerClient*); 57 52 58 ~CurlJobManager() { stopThread(); } 59 60 bool add(CurlJobClient*); 61 void cancel(CurlJobClient*); 62 63 void callOnJobThread(WTF::Function<void()>&&); 53 void callOnWorkerThread(WTF::Function<void()>&&); 64 54 65 55 private: 66 Curl JobManager() = default;56 CurlRequestScheduler() = default; 67 57 68 58 void startThreadIfNeeded(); … … 75 65 76 66 RefPtr<Thread> m_thread; 77 HashSet<Curl JobClient*> m_pendingJobs;67 HashSet<CurlRequestSchedulerClient*> m_pendingJobs; 78 68 HashMap<CURL*, CURLcode> m_finishedJobs; 79 69 HashMap<CURL*, CURLcode> m_cancelledJobs; -
trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.cpp
r223752 r224037 62 62 { 63 63 if (m_curlRequest) 64 m_curlRequest->set Delegate(nullptr);64 m_curlRequest->setClient(nullptr); 65 65 } 66 66 … … 125 125 bool isSyncRequest = m_curlRequest->isSyncRequest(); 126 126 m_curlRequest->cancel(); 127 m_curlRequest->set Delegate(nullptr);127 m_curlRequest->setClient(nullptr); 128 128 129 129 m_curlRequest = createCurlRequest(m_currentRequest); … … 391 391 bool isSyncRequest = m_curlRequest->isSyncRequest(); 392 392 m_curlRequest->cancel(); 393 m_curlRequest->set Delegate(nullptr);393 m_curlRequest->setClient(nullptr); 394 394 395 395 m_curlRequest = createCurlRequest(m_currentRequest); -
trunk/Source/WebCore/platform/network/curl/ResourceHandleCurlDelegate.h
r222828 r224037 30 30 31 31 #include "Credential.h" 32 #include "CurlRequest Delegate.h"32 #include "CurlRequestClient.h" 33 33 #include "ResourceRequest.h" 34 34 … … 40 40 class ResourceResponse; 41 41 42 class ResourceHandleCurlDelegate final : public ThreadSafeRefCounted<ResourceHandleCurlDelegate>, public CurlRequest Delegate{42 class ResourceHandleCurlDelegate final : public ThreadSafeRefCounted<ResourceHandleCurlDelegate>, public CurlRequestClient { 43 43 public: 44 44 ResourceHandleCurlDelegate(ResourceHandle*);
Note: See TracChangeset
for help on using the changeset viewer.