| Index: third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| diff --git a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| index ab02e4ffa3f5098da572d49e54d390c693cb83b4..19f24037ed37614081c54bad4e1f452ded5a2c7c 100644
|
| --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| @@ -208,42 +208,74 @@
|
| const ResourceLoaderOptions& resourceLoaderOptions,
|
| BlockingBehavior blockingBehavior)
|
| : m_workerGlobalScope(&workerGlobalScope)
|
| - , m_workerLoaderProxy(workerGlobalScope.thread()->workerLoaderProxy())
|
| - , m_client(client)
|
| - , m_threadableLoaderOptions(options)
|
| + , m_workerClientWrapper(new ThreadableLoaderClientWrapper(workerGlobalScope, client))
|
| + , m_bridge(new Bridge(m_workerClientWrapper, workerGlobalScope.thread()->workerLoaderProxy(), options, resourceLoaderOptions, blockingBehavior))
|
| +{
|
| +}
|
| +
|
| +void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& workerGlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
|
| +{
|
| + std::unique_ptr<WorkerThreadableLoader> loader = wrapUnique(new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoaderOptions, LoadSynchronously));
|
| + loader->start(request);
|
| +}
|
| +
|
| +WorkerThreadableLoader::~WorkerThreadableLoader()
|
| +{
|
| + DCHECK(m_workerClientWrapper->done());
|
| + m_bridge->destroy();
|
| +}
|
| +
|
| +void WorkerThreadableLoader::start(const ResourceRequest& request)
|
| +{
|
| + ResourceRequest requestToPass(request);
|
| + if (!requestToPass.didSetHTTPReferrer())
|
| + requestToPass.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalScope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer()));
|
| + m_bridge->start(requestToPass, *m_workerGlobalScope);
|
| +}
|
| +
|
| +void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
|
| +{
|
| + m_bridge->overrideTimeout(timeoutMilliseconds);
|
| +}
|
| +
|
| +void WorkerThreadableLoader::cancel()
|
| +{
|
| + m_bridge->cancel();
|
| +}
|
| +
|
| +WorkerThreadableLoader::Bridge::Bridge(
|
| + ThreadableLoaderClientWrapper* clientWrapper,
|
| + PassRefPtr<WorkerLoaderProxy> loaderProxy,
|
| + const ThreadableLoaderOptions& threadableLoaderOptions,
|
| + const ResourceLoaderOptions& resourceLoaderOptions,
|
| + BlockingBehavior blockingBehavior)
|
| + : m_clientWrapper(clientWrapper)
|
| + , m_loaderProxy(loaderProxy)
|
| + , m_threadableLoaderOptions(threadableLoaderOptions)
|
| , m_resourceLoaderOptions(resourceLoaderOptions)
|
| , m_blockingBehavior(blockingBehavior)
|
| {
|
| - DCHECK(client);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& workerGlobalScope, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
|
| -{
|
| - (new WorkerThreadableLoader(workerGlobalScope, &client, options, resourceLoaderOptions, LoadSynchronously))->start(request);
|
| -}
|
| -
|
| -WorkerThreadableLoader::~WorkerThreadableLoader()
|
| -{
|
| + DCHECK(!isMainThread());
|
| +}
|
| +
|
| +WorkerThreadableLoader::Bridge::~Bridge()
|
| +{
|
| + DCHECK(!isMainThread());
|
| DCHECK(!m_peer);
|
| - DCHECK(!m_client);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::start(const ResourceRequest& originalRequest)
|
| -{
|
| - ResourceRequest request(originalRequest);
|
| - if (!request.didSetHTTPReferrer())
|
| - request.setHTTPReferrer(SecurityPolicy::generateReferrer(m_workerGlobalScope->getReferrerPolicy(), request.url(), m_workerGlobalScope->outgoingReferrer()));
|
| -
|
| +}
|
| +
|
| +void WorkerThreadableLoader::Bridge::start(const ResourceRequest& request, const WorkerGlobalScope& workerGlobalScope)
|
| +{
|
| DCHECK(!isMainThread());
|
| RefPtr<WaitableEventWithTasks> eventWithTasks;
|
| if (m_blockingBehavior == LoadSynchronously)
|
| eventWithTasks = WaitableEventWithTasks::create();
|
|
|
| - m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(
|
| + m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(
|
| &Peer::createAndStart,
|
| wrapCrossThreadPersistent(this),
|
| - m_workerLoaderProxy,
|
| - wrapCrossThreadPersistent(m_workerGlobalScope->thread()->getWorkerThreadLifecycleContext()),
|
| + m_loaderProxy,
|
| + wrapCrossThreadPersistent(workerGlobalScope.thread()->getWorkerThreadLifecycleContext()),
|
| request,
|
| m_threadableLoaderOptions,
|
| m_resourceLoaderOptions,
|
| @@ -275,41 +307,44 @@
|
| }
|
| }
|
|
|
| -void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
|
| +void WorkerThreadableLoader::Bridge::overrideTimeout(unsigned long timeoutMilliseconds)
|
| {
|
| DCHECK(!isMainThread());
|
| if (!m_peer)
|
| return;
|
| - m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer::overrideTimeout, m_peer, timeoutMilliseconds));
|
| -}
|
| -
|
| -void WorkerThreadableLoader::cancel()
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (m_peer) {
|
| - m_workerLoaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer::cancel, m_peer));
|
| - m_peer = nullptr;
|
| - }
|
| -
|
| - if (!m_client)
|
| - return;
|
| -
|
| + m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer::overrideTimeout, m_peer, timeoutMilliseconds));
|
| +}
|
| +
|
| +void WorkerThreadableLoader::Bridge::cancel()
|
| +{
|
| + DCHECK(!isMainThread());
|
| + cancelPeer();
|
| +
|
| + if (m_clientWrapper->done())
|
| + return;
|
| // If the client hasn't reached a termination state, then transition it
|
| // by sending a cancellation error.
|
| // Note: no more client callbacks will be done after this method -- the
|
| // clearClient() call ensures that.
|
| ResourceError error(String(), 0, String(), String());
|
| error.setIsCancellation(true);
|
| - didFail(error);
|
| - DCHECK(!m_client);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didStart(Peer* peer)
|
| + m_clientWrapper->didFail(error);
|
| + m_clientWrapper->clearClient();
|
| +}
|
| +
|
| +void WorkerThreadableLoader::Bridge::destroy()
|
| +{
|
| + DCHECK(!isMainThread());
|
| + cancelPeer();
|
| + m_clientWrapper->clearClient();
|
| +}
|
| +
|
| +void WorkerThreadableLoader::Bridge::didStart(Peer* peer)
|
| {
|
| DCHECK(!isMainThread());
|
| DCHECK(!m_peer);
|
| DCHECK(peer);
|
| - if (!m_client) {
|
| + if (m_clientWrapper->done()) {
|
| // The loading is already cancelled.
|
| return;
|
| }
|
| @@ -317,110 +352,22 @@
|
| m_peer = peer;
|
| }
|
|
|
| -void WorkerThreadableLoader::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - m_client->didSendData(bytesSent, totalBytesToBeSent);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didReceiveResponse(unsigned long identifier, std::unique_ptr<CrossThreadResourceResponseData> responseData, std::unique_ptr<WebDataConsumerHandle> handle)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - ResourceResponse response(responseData.get());
|
| - m_client->didReceiveResponse(identifier, response, std::move(handle));
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didReceiveData(std::unique_ptr<Vector<char>> data)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - CHECK_LE(data->size(), std::numeric_limits<unsigned>::max());
|
| - if (!m_client)
|
| - return;
|
| - m_client->didReceiveData(data->data(), data->size());
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didReceiveCachedMetadata(std::unique_ptr<Vector<char>> data)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - m_client->didReceiveCachedMetadata(data->data(), data->size());
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didFinishLoading(unsigned long identifier, double finishTime)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - auto* client = m_client;
|
| - m_client = nullptr;
|
| +DEFINE_TRACE(WorkerThreadableLoader::Bridge)
|
| +{
|
| + visitor->trace(m_clientWrapper);
|
| +}
|
| +
|
| +void WorkerThreadableLoader::Bridge::cancelPeer()
|
| +{
|
| + DCHECK(!isMainThread());
|
| + if (!m_peer)
|
| + return;
|
| + m_loaderProxy->postTaskToLoader(BLINK_FROM_HERE, createCrossThreadTask(&Peer::cancel, m_peer));
|
| m_peer = nullptr;
|
| - client->didFinishLoading(identifier, finishTime);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didFail(const ResourceError& error)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - auto* client = m_client;
|
| - m_client = nullptr;
|
| - m_peer = nullptr;
|
| - client->didFail(error);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didFailAccessControlCheck(const ResourceError& error)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - auto* client = m_client;
|
| - m_client = nullptr;
|
| - m_peer = nullptr;
|
| - client->didFailAccessControlCheck(error);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didFailRedirectCheck()
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - auto* client = m_client;
|
| - m_client = nullptr;
|
| - m_peer = nullptr;
|
| - client->didFailRedirectCheck();
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didDownloadData(int dataLength)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - m_client->didDownloadData(dataLength);
|
| -}
|
| -
|
| -void WorkerThreadableLoader::didReceiveResourceTiming(std::unique_ptr<CrossThreadResourceTimingInfoData> timingData)
|
| -{
|
| - DCHECK(!isMainThread());
|
| - if (!m_client)
|
| - return;
|
| - std::unique_ptr<ResourceTimingInfo> info(ResourceTimingInfo::adopt(std::move(timingData)));
|
| - WorkerGlobalScopePerformance::performance(*m_workerGlobalScope)->addResourceTiming(*info);
|
| - m_client->didReceiveResourceTiming(*info);
|
| -}
|
| -
|
| -DEFINE_TRACE(WorkerThreadableLoader)
|
| -{
|
| - visitor->trace(m_workerGlobalScope);
|
| - ThreadableLoader::trace(visitor);
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::createAndStart(
|
| - WorkerThreadableLoader* workerLoader,
|
| + Bridge* bridge,
|
| PassRefPtr<WorkerLoaderProxy> passLoaderProxy,
|
| WorkerThreadLifecycleContext* workerThreadLifecycleContext,
|
| std::unique_ptr<CrossThreadResourceRequestData> request,
|
| @@ -444,15 +391,15 @@
|
| peer->m_forwarder = nullptr;
|
| return;
|
| }
|
| - peer->m_workerLoader = workerLoader;
|
| + peer->m_clientWrapper = bridge->clientWrapper();
|
| peer->start(*toDocument(executionContext), std::move(request), options, resourceLoaderOptions);
|
| - forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didStart, wrapCrossThreadPersistent(workerLoader), wrapCrossThreadPersistent(peer)));
|
| + forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&Bridge::didStart, wrapCrossThreadPersistent(bridge), wrapCrossThreadPersistent(peer)));
|
| }
|
|
|
| WorkerThreadableLoader::Peer::~Peer()
|
| {
|
| DCHECK(isMainThread());
|
| - DCHECK(!m_workerLoader);
|
| + DCHECK(!m_mainThreadLoader);
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::overrideTimeout(unsigned long timeoutMilliseconds)
|
| @@ -475,95 +422,95 @@
|
| void WorkerThreadableLoader::Peer::didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didSendData, workerLoader, bytesSent, totalBytesToBeSent));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didSendData, clientWrapper, bytesSent, totalBytesToBeSent));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didReceiveResponse(unsigned long identifier, const ResourceResponse& response, std::unique_ptr<WebDataConsumerHandle> handle)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didReceiveResponse, workerLoader, identifier, response, passed(std::move(handle))));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didReceiveResponse, clientWrapper, identifier, response, passed(std::move(handle))));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didReceiveData(const char* data, unsigned dataLength)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didReceiveData, workerLoader, passed(createVectorFromMemoryRegion(data, dataLength))));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didReceiveData, clientWrapper, passed(createVectorFromMemoryRegion(data, dataLength))));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didDownloadData(int dataLength)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didDownloadData, workerLoader, dataLength));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didDownloadData, clientWrapper, dataLength));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didReceiveCachedMetadata(const char* data, int dataLength)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didReceiveCachedMetadata, workerLoader, passed(createVectorFromMemoryRegion(data, dataLength))));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didReceiveCachedMetadata, clientWrapper, passed(createVectorFromMemoryRegion(data, dataLength))));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didFinishLoading(unsigned long identifier, double finishTime)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didFinishLoading, workerLoader, identifier, finishTime));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didFinishLoading, clientWrapper, identifier, finishTime));
|
| m_forwarder = nullptr;
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didFail(const ResourceError& error)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didFail, workerLoader, error));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didFail, clientWrapper, error));
|
| m_forwarder = nullptr;
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didFailAccessControlCheck(const ResourceError& error)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didFailAccessControlCheck, workerLoader, error));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didFailAccessControlCheck, clientWrapper, error));
|
| m_forwarder = nullptr;
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didFailRedirectCheck()
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didFailRedirectCheck, workerLoader));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTaskWithDoneSignal(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didFailRedirectCheck, clientWrapper));
|
| m_forwarder = nullptr;
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::didReceiveResourceTiming(const ResourceTimingInfo& info)
|
| {
|
| DCHECK(isMainThread());
|
| - CrossThreadPersistent<WorkerThreadableLoader> workerLoader = m_workerLoader.get();
|
| - if (!workerLoader || !m_forwarder)
|
| - return;
|
| - m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&WorkerThreadableLoader::didReceiveResourceTiming, workerLoader, info));
|
| + CrossThreadPersistent<ThreadableLoaderClientWrapper> clientWrapper = m_clientWrapper.get();
|
| + if (!clientWrapper || !m_forwarder)
|
| + return;
|
| + m_forwarder->forwardTask(BLINK_FROM_HERE, createCrossThreadTask(&ThreadableLoaderClientWrapper::didReceiveResourceTiming, clientWrapper, info));
|
| }
|
|
|
| void WorkerThreadableLoader::Peer::contextDestroyed()
|
| @@ -573,14 +520,13 @@
|
| m_forwarder->abort();
|
| m_forwarder = nullptr;
|
| }
|
| - m_workerLoader = nullptr;
|
| + m_clientWrapper = nullptr;
|
| cancel();
|
| }
|
|
|
| DEFINE_TRACE(WorkerThreadableLoader::Peer)
|
| {
|
| visitor->trace(m_forwarder);
|
| - visitor->trace(m_mainThreadLoader);
|
| WorkerThreadLifecycleObserver::trace(visitor);
|
| }
|
|
|
|
|