| 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 0a5d0ddf6142c05a7761fafbf346a1222d479ddd..a63be36a66b406f015433902e069001c006419d0 100644
|
| --- a/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| +++ b/third_party/WebKit/Source/core/loader/WorkerThreadableLoader.cpp
|
| @@ -65,8 +65,8 @@ std::unique_ptr<Vector<char>> CreateVectorFromMemoryRegion(
|
| class WorkerThreadableLoader::AsyncTaskForwarder final
|
| : public WorkerThreadableLoader::TaskForwarder {
|
| public:
|
| - explicit AsyncTaskForwarder(PassRefPtr<WorkerLoaderProxy> loader_proxy)
|
| - : loader_proxy_(std::move(loader_proxy)) {
|
| + explicit AsyncTaskForwarder(RefPtr<WebTaskRunner> worker_loading_task_runner)
|
| + : worker_loading_task_runner_(std::move(worker_loading_task_runner)) {
|
| DCHECK(IsMainThread());
|
| }
|
| ~AsyncTaskForwarder() override { DCHECK(IsMainThread()); }
|
| @@ -74,18 +74,18 @@ class WorkerThreadableLoader::AsyncTaskForwarder final
|
| void ForwardTask(const WebTraceLocation& location,
|
| std::unique_ptr<CrossThreadClosure> task) override {
|
| DCHECK(IsMainThread());
|
| - loader_proxy_->PostTaskToWorkerGlobalScope(location, std::move(task));
|
| + worker_loading_task_runner_->PostTask(location, std::move(task));
|
| }
|
| void ForwardTaskWithDoneSignal(
|
| const WebTraceLocation& location,
|
| std::unique_ptr<CrossThreadClosure> task) override {
|
| DCHECK(IsMainThread());
|
| - loader_proxy_->PostTaskToWorkerGlobalScope(location, std::move(task));
|
| + worker_loading_task_runner_->PostTask(location, std::move(task));
|
| }
|
| void Abort() override { DCHECK(IsMainThread()); }
|
|
|
| private:
|
| - RefPtr<WorkerLoaderProxy> loader_proxy_;
|
| + RefPtr<WebTaskRunner> worker_loading_task_runner_;
|
| };
|
|
|
| struct WorkerThreadableLoader::TaskWithLocation final {
|
| @@ -199,6 +199,8 @@ WorkerThreadableLoader::WorkerThreadableLoader(
|
| : worker_global_scope_(&worker_global_scope),
|
| worker_loader_proxy_(
|
| worker_global_scope.GetThread()->GetWorkerLoaderProxy()),
|
| + parent_frame_task_runners_(
|
| + worker_global_scope.GetThread()->GetParentFrameTaskRunners()),
|
| client_(client),
|
| threadable_loader_options_(options),
|
| resource_loader_options_(resource_loader_options),
|
| @@ -235,15 +237,19 @@ void WorkerThreadableLoader::Start(const ResourceRequest& original_request) {
|
| if (blocking_behavior_ == kLoadSynchronously)
|
| event_with_tasks = WaitableEventWithTasks::Create();
|
|
|
| - worker_loader_proxy_->PostTaskToLoader(
|
| - BLINK_FROM_HERE,
|
| - CrossThreadBind(
|
| - &MainThreadLoaderHolder::CreateAndStart,
|
| - WrapCrossThreadPersistent(this), worker_loader_proxy_,
|
| - WrapCrossThreadPersistent(worker_global_scope_->GetThread()
|
| - ->GetWorkerThreadLifecycleContext()),
|
| - request, threadable_loader_options_, resource_loader_options_,
|
| - event_with_tasks));
|
| + RefPtr<WebTaskRunner> worker_loading_task_runner = TaskRunnerHelper::Get(
|
| + TaskType::kUnspecedLoading, worker_global_scope_.Get());
|
| + parent_frame_task_runners_->Get(TaskType::kUnspecedLoading)
|
| + ->PostTask(
|
| + BLINK_FROM_HERE,
|
| + CrossThreadBind(&MainThreadLoaderHolder::CreateAndStart,
|
| + WrapCrossThreadPersistent(this), worker_loader_proxy_,
|
| + std::move(worker_loading_task_runner),
|
| + WrapCrossThreadPersistent(
|
| + worker_global_scope_->GetThread()
|
| + ->GetWorkerThreadLifecycleContext()),
|
| + request, threadable_loader_options_,
|
| + resource_loader_options_, event_with_tasks));
|
|
|
| if (blocking_behavior_ == kLoadAsynchronously)
|
| return;
|
| @@ -271,18 +277,20 @@ void WorkerThreadableLoader::OverrideTimeout(
|
| DCHECK(!IsMainThread());
|
| if (!main_thread_loader_holder_)
|
| return;
|
| - worker_loader_proxy_->PostTaskToLoader(
|
| - BLINK_FROM_HERE,
|
| - CrossThreadBind(&MainThreadLoaderHolder::OverrideTimeout,
|
| - main_thread_loader_holder_, timeout_milliseconds));
|
| + parent_frame_task_runners_->Get(TaskType::kUnspecedLoading)
|
| + ->PostTask(
|
| + BLINK_FROM_HERE,
|
| + CrossThreadBind(&MainThreadLoaderHolder::OverrideTimeout,
|
| + main_thread_loader_holder_, timeout_milliseconds));
|
| }
|
|
|
| void WorkerThreadableLoader::Cancel() {
|
| DCHECK(!IsMainThread());
|
| if (main_thread_loader_holder_) {
|
| - worker_loader_proxy_->PostTaskToLoader(
|
| - BLINK_FROM_HERE, CrossThreadBind(&MainThreadLoaderHolder::Cancel,
|
| - main_thread_loader_holder_));
|
| + parent_frame_task_runners_->Get(TaskType::kUnspecedLoading)
|
| + ->PostTask(BLINK_FROM_HERE,
|
| + CrossThreadBind(&MainThreadLoaderHolder::Cancel,
|
| + main_thread_loader_holder_));
|
| main_thread_loader_holder_ = nullptr;
|
| }
|
|
|
| @@ -306,10 +314,11 @@ void WorkerThreadableLoader::DidStart(
|
| DCHECK(main_thread_loader_holder);
|
| if (!client_) {
|
| // The thread is terminating.
|
| - worker_loader_proxy_->PostTaskToLoader(
|
| - BLINK_FROM_HERE,
|
| - CrossThreadBind(&MainThreadLoaderHolder::Cancel,
|
| - WrapCrossThreadPersistent(main_thread_loader_holder)));
|
| + parent_frame_task_runners_->Get(TaskType::kUnspecedLoading)
|
| + ->PostTask(BLINK_FROM_HERE,
|
| + CrossThreadBind(
|
| + &MainThreadLoaderHolder::Cancel,
|
| + WrapCrossThreadPersistent(main_thread_loader_holder)));
|
| return;
|
| }
|
|
|
| @@ -429,6 +438,7 @@ DEFINE_TRACE(WorkerThreadableLoader) {
|
| void WorkerThreadableLoader::MainThreadLoaderHolder::CreateAndStart(
|
| WorkerThreadableLoader* worker_loader,
|
| RefPtr<WorkerLoaderProxy> loader_proxy,
|
| + RefPtr<WebTaskRunner> worker_loading_task_runner,
|
| WorkerThreadLifecycleContext* worker_thread_lifecycle_context,
|
| std::unique_ptr<CrossThreadResourceRequestData> request,
|
| const ThreadableLoaderOptions& options,
|
| @@ -443,7 +453,7 @@ void WorkerThreadableLoader::MainThreadLoaderHolder::CreateAndStart(
|
| if (event_with_tasks)
|
| forwarder = new SyncTaskForwarder(std::move(event_with_tasks));
|
| else
|
| - forwarder = new AsyncTaskForwarder(std::move(loader_proxy));
|
| + forwarder = new AsyncTaskForwarder(std::move(worker_loading_task_runner));
|
|
|
| MainThreadLoaderHolder* main_thread_loader_holder =
|
| new MainThreadLoaderHolder(forwarder, worker_thread_lifecycle_context);
|
|
|