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) |