Index: third_party/WebKit/Source/core/workers/MainThreadWorklet.cpp |
diff --git a/third_party/WebKit/Source/core/workers/MainThreadWorklet.cpp b/third_party/WebKit/Source/core/workers/MainThreadWorklet.cpp |
index 43ac12846daf9ddca9a6050301035f5223636844..1b1c7d1de6b2f8b36c7740695cc215b59a0ef7b3 100644 |
--- a/third_party/WebKit/Source/core/workers/MainThreadWorklet.cpp |
+++ b/third_party/WebKit/Source/core/workers/MainThreadWorklet.cpp |
@@ -31,7 +31,8 @@ WebURLRequest::FetchCredentialsMode ParseCredentialsOption( |
} // namespace |
-MainThreadWorklet::MainThreadWorklet(LocalFrame* frame) : Worklet(frame) {} |
+MainThreadWorklet::MainThreadWorklet(LocalFrame* frame) |
+ : Worklet(frame), global_scope_manager_(new WorkletGlobalScopeManager) {} |
// Implementation of the second half of the "addModule(moduleURL, options)" |
// algorithm: |
@@ -67,15 +68,15 @@ void MainThreadWorklet::FetchAndInvokeScript(const KURL& module_url_record, |
// 10.2: "Add the WorkletGlobalScope to worklet's WorkletGlobalScopes." |
// "Depending on the type of worklet the user agent may create additional |
// WorkletGlobalScopes at this time." |
- // TODO(nhiroki): Create WorkletGlobalScopes at this point. |
+ while (NeedsToCreateGlobalScope()) |
+ GetGlobalScopeManager().AddGlobalScope(CreateGlobalScope()); |
+ DCHECK_LT(0u, GetGlobalScopeManager().GetNumberOfGlobalScopes()); |
// Step 11: "Let pendingTaskStruct be a new pending tasks struct with counter |
// initialized to the length of worklet's WorkletGlobalScopes." |
- // TODO(nhiroki): Introduce the concept of "worklet's WorkletGlobalScopes" and |
- // use the length of it here. |
- constexpr int number_of_global_scopes = 1; |
+ size_t length = GetGlobalScopeManager().GetNumberOfGlobalScopes(); |
WorkletPendingTasks* pending_tasks = |
- new WorkletPendingTasks(number_of_global_scopes, resolver); |
+ new WorkletPendingTasks(length, resolver); |
// Step 12: "For each workletGlobalScope in the worklet's |
// WorkletGlobalScopes, queue a task on the workletGlobalScope to fetch and |
@@ -83,16 +84,17 @@ void MainThreadWorklet::FetchAndInvokeScript(const KURL& module_url_record, |
// moduleResponsesMap, credentialOptions, outsideSettings, pendingTaskStruct, |
// and promise." |
// TODO(nhiroki): Queue a task instead of executing this here. |
- GetWorkletGlobalScopeProxy()->FetchAndInvokeScript( |
+ GetGlobalScopeManager().AddModuleToGlobalScopes( |
module_url_record, credentials_mode, pending_tasks); |
} |
void MainThreadWorklet::ContextDestroyed(ExecutionContext* execution_context) { |
DCHECK(IsMainThread()); |
- GetWorkletGlobalScopeProxy()->TerminateWorkletGlobalScope(); |
+ GetGlobalScopeManager().TerminateGlobalScopes(); |
} |
DEFINE_TRACE(MainThreadWorklet) { |
+ visitor->Trace(global_scope_manager_); |
Worklet::Trace(visitor); |
} |