| 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 987696ef3699001c0d23eca1d5a306a374fc751a..010f0a1f94a799a6da4f41acfe5ae06d19768775 100644
|
| --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| @@ -51,12 +51,11 @@
|
|
|
| namespace blink {
|
|
|
| -WorkerThreadableLoader::WorkerThreadableLoader(WorkerGlobalScope& workerGlobalScope, PassRefPtr<ThreadableLoaderClientWrapper> clientWrapper, PassOwnPtr<ThreadableLoaderClient> clientBridge, const ResourceRequest& request, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
|
| +WorkerThreadableLoader::WorkerThreadableLoader(WorkerGlobalScope& workerGlobalScope, PassRefPtr<ThreadableLoaderClientWrapper> clientWrapper, PassOwnPtr<ThreadableLoaderClient> clientBridge, const ThreadableLoaderOptions& options, const ResourceLoaderOptions& resourceLoaderOptions)
|
| : m_workerGlobalScope(&workerGlobalScope)
|
| , m_workerClientWrapper(clientWrapper)
|
| - , m_bridge(*(new MainThreadBridge(m_workerClientWrapper, clientBridge, workerGlobalScope.thread()->workerLoaderProxy(), request, options, resourceLoaderOptions, workerGlobalScope.referrerPolicy(), workerGlobalScope.url().strippedForUseAsReferrer())))
|
| + , m_bridge(*(new MainThreadBridge(m_workerClientWrapper, clientBridge, workerGlobalScope.thread()->workerLoaderProxy(), options, resourceLoaderOptions)))
|
| {
|
| - m_workerClientWrapper->setResourceTimingClient(this);
|
| }
|
|
|
| WorkerThreadableLoader::~WorkerThreadableLoader()
|
| @@ -82,7 +81,8 @@ void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker
|
| // This must be valid while loader is around.
|
| WorkerLoaderClientBridgeSyncHelper* clientBridgePtr = clientBridge.get();
|
|
|
| - RefPtr<WorkerThreadableLoader> loader = WorkerThreadableLoader::create(workerGlobalScope, clientWrapper, clientBridge.release(), request, options, resourceLoaderOptions);
|
| + RefPtr<WorkerThreadableLoader> loader = WorkerThreadableLoader::create(workerGlobalScope, clientWrapper, clientBridge.release(), options, resourceLoaderOptions);
|
| + loader->start(request);
|
|
|
| WebWaitableEvent* signalled;
|
| {
|
| @@ -97,6 +97,12 @@ void WorkerThreadableLoader::loadResourceSynchronously(WorkerGlobalScope& worker
|
| clientBridgePtr->run();
|
| }
|
|
|
| +void WorkerThreadableLoader::start(const ResourceRequest& request)
|
| +{
|
| + m_bridge.start(request, m_workerGlobalScope->referrerPolicy(), m_workerGlobalScope->url().strippedForUseAsReferrer());
|
| + m_workerClientWrapper->setResourceTimingClient(this);
|
| +}
|
| +
|
| void WorkerThreadableLoader::overrideTimeout(unsigned long timeoutMilliseconds)
|
| {
|
| m_bridge.overrideTimeout(timeoutMilliseconds);
|
| @@ -116,11 +122,8 @@ WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(
|
| PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper,
|
| PassOwnPtr<ThreadableLoaderClient> clientBridge,
|
| PassRefPtr<WorkerLoaderProxy> loaderProxy,
|
| - const ResourceRequest& request,
|
| const ThreadableLoaderOptions& options,
|
| - const ResourceLoaderOptions& resourceLoaderOptions,
|
| - const ReferrerPolicy referrerPolicy,
|
| - const String& outgoingReferrer)
|
| + const ResourceLoaderOptions& resourceLoaderOptions)
|
| : m_clientBridge(clientBridge)
|
| , m_workerClientWrapper(workerClientWrapper)
|
| , m_loaderProxy(loaderProxy)
|
| @@ -128,27 +131,38 @@ WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(
|
| ASSERT(m_workerClientWrapper.get());
|
| ASSERT(m_clientBridge.get());
|
| m_loaderProxy->postTaskToLoader(
|
| - createCrossThreadTask(&MainThreadBridge::mainThreadCreateLoader, this, request, options, resourceLoaderOptions, referrerPolicy, outgoingReferrer));
|
| + createCrossThreadTask(&MainThreadBridge::mainThreadCreateLoader, this, options, resourceLoaderOptions));
|
| }
|
|
|
| WorkerThreadableLoader::MainThreadBridge::~MainThreadBridge()
|
| {
|
| }
|
|
|
| -void WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader(PassOwnPtr<CrossThreadResourceRequestData> requestData, ThreadableLoaderOptions options, ResourceLoaderOptions resourceLoaderOptions, const ReferrerPolicy referrerPolicy, const String& outgoingReferrer, ExecutionContext* context)
|
| +void WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader(ThreadableLoaderOptions options, ResourceLoaderOptions resourceLoaderOptions, ExecutionContext* context)
|
| {
|
| ASSERT(isMainThread());
|
| Document* document = toDocument(context);
|
|
|
| + resourceLoaderOptions.requestInitiatorContext = WorkerContext;
|
| + m_mainThreadLoader = DocumentThreadableLoader::create(*document, this, options, resourceLoaderOptions);
|
| + ASSERT(m_mainThreadLoader);
|
| +}
|
| +
|
| +void WorkerThreadableLoader::MainThreadBridge::mainThreadStart(PassOwnPtr<CrossThreadResourceRequestData> requestData, const ReferrerPolicy referrerPolicy, const String& outgoingReferrer)
|
| +{
|
| + ASSERT(isMainThread());
|
| + ASSERT(m_mainThreadLoader);
|
| +
|
| ResourceRequest request(requestData.get());
|
| if (!request.didSetHTTPReferrer())
|
| request.setHTTPReferrer(SecurityPolicy::generateReferrer(referrerPolicy, request.url(), outgoingReferrer));
|
| - resourceLoaderOptions.requestInitiatorContext = WorkerContext;
|
| - m_mainThreadLoader = DocumentThreadableLoader::create(*document, this, request, options, resourceLoaderOptions);
|
| - if (!m_mainThreadLoader) {
|
| - // DocumentThreadableLoader::create may return 0 when the document loader has been already changed.
|
| - didFail(ResourceError(errorDomainBlinkInternal, 0, request.url().string(), "The parent document page has been unloaded."));
|
| - }
|
| + m_mainThreadLoader->start(request);
|
| +}
|
| +
|
| +void WorkerThreadableLoader::MainThreadBridge::start(const ResourceRequest& request, const ReferrerPolicy referrerPolicy, const String& outgoingReferrer)
|
| +{
|
| + m_loaderProxy->postTaskToLoader(
|
| + createCrossThreadTask(&MainThreadBridge::mainThreadStart, this, request, referrerPolicy, outgoingReferrer));
|
| }
|
|
|
| void WorkerThreadableLoader::MainThreadBridge::mainThreadDestroy(ExecutionContext* context)
|
|
|