| Index: third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
|
| diff --git a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
|
| index 3cd58decb843f85ad59e404f818108a9de83ccb1..1fae76c7b9ee820729837691ae23a1fa4448cd1d 100644
|
| --- a/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
|
| +++ b/third_party/WebKit/Source/core/dom/TaskRunnerHelper.cpp
|
| @@ -7,6 +7,8 @@
|
| #include "core/dom/Document.h"
|
| #include "core/dom/ExecutionContext.h"
|
| #include "core/frame/LocalFrame.h"
|
| +#include "core/workers/WorkerOrWorkletGlobalScope.h"
|
| +#include "core/workers/WorkerThread.h"
|
| #include "platform/WebFrameScheduler.h"
|
| #include "platform/WebTaskRunner.h"
|
| #include "public/platform/Platform.h"
|
| @@ -53,6 +55,8 @@ RefPtr<WebTaskRunner> TaskRunnerHelper::Get(TaskType type, LocalFrame* frame) {
|
| case TaskType::kUnthrottled:
|
| return frame ? frame->FrameScheduler()->UnthrottledTaskRunner()
|
| : Platform::Current()->CurrentThread()->GetWebTaskRunner();
|
| + case TaskType::kNumberOfTaskTypes:
|
| + break;
|
| }
|
| NOTREACHED();
|
| return nullptr;
|
| @@ -64,10 +68,15 @@ RefPtr<WebTaskRunner> TaskRunnerHelper::Get(TaskType type, Document* document) {
|
|
|
| RefPtr<WebTaskRunner> TaskRunnerHelper::Get(
|
| TaskType type,
|
| - ExecutionContext* execution_context) {
|
| - return Get(type, execution_context && execution_context->IsDocument()
|
| - ? static_cast<Document*>(execution_context)
|
| - : nullptr);
|
| + ExecutionContext* executionContext) {
|
| + if (!executionContext)
|
| + return Get(type, ToDocument(executionContext));
|
| + if (executionContext->IsDocument())
|
| + return Get(type, ToDocument(executionContext));
|
| + if (executionContext->IsWorkerOrWorkletGlobalScope())
|
| + return Get(type, ToWorkerOrWorkletGlobalScope(executionContext));
|
| + executionContext = nullptr;
|
| + return Get(type, ToDocument(executionContext));
|
| }
|
|
|
| RefPtr<WebTaskRunner> TaskRunnerHelper::Get(TaskType type,
|
| @@ -76,4 +85,48 @@ RefPtr<WebTaskRunner> TaskRunnerHelper::Get(TaskType type,
|
| script_state ? ExecutionContext::From(script_state) : nullptr);
|
| }
|
|
|
| +RefPtr<WebTaskRunner> TaskRunnerHelper::Get(
|
| + TaskType type,
|
| + WorkerOrWorkletGlobalScope* global_scope) {
|
| + DCHECK(global_scope);
|
| + // TODO(nhiroki): Add |DCHECK(global_scope->IsContextThread())| here after
|
| + // https://crbug.com/694925 is fixed.
|
| +
|
| + switch (type) {
|
| + case TaskType::kDOMManipulation:
|
| + case TaskType::kUserInteraction:
|
| + case TaskType::kNetworking:
|
| + case TaskType::kHistoryTraversal:
|
| + case TaskType::kEmbed:
|
| + case TaskType::kMediaElementEvent:
|
| + case TaskType::kCanvasBlobSerialization:
|
| + case TaskType::kMicrotask:
|
| + case TaskType::kTimer:
|
| + case TaskType::kRemoteEvent:
|
| + case TaskType::kWebSocket:
|
| + case TaskType::kPostedMessage:
|
| + case TaskType::kUnshippedPortMessage:
|
| + case TaskType::kFileReading:
|
| + case TaskType::kDatabaseAccess:
|
| + case TaskType::kPresentation:
|
| + case TaskType::kSensor:
|
| + case TaskType::kPerformanceTimeline:
|
| + case TaskType::kWebGL:
|
| + case TaskType::kMiscPlatformAPI:
|
| + case TaskType::kUnspecedTimer:
|
| + case TaskType::kUnspecedLoading:
|
| + case TaskType::kUnthrottled:
|
| + // UnthrottledTaskRunner is generally discouraged in future.
|
| + // TODO(nhiroki): Identify which tasks should be throttled and move them
|
| + // into other task runners. See also comments in Get(LocalFrame).
|
| + return global_scope->GetThread()
|
| + ->GetGlobalScopeScheduler()
|
| + ->UnthrottledTaskRunner();
|
| + case TaskType::kNumberOfTaskTypes:
|
| + break;
|
| + }
|
| + NOTREACHED();
|
| + return nullptr;
|
| +}
|
| +
|
| } // namespace blink
|
|
|