Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Side by Side Diff: third_party/WebKit/Source/core/workers/Worklet.cpp

Issue 2939773005: [POC] Implement "module responses map" concept (Closed)
Patch Set: rebase Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/workers/Worklet.h" 5 #include "core/workers/Worklet.h"
6 6
7 #include "bindings/core/v8/ScriptPromiseResolver.h" 7 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "core/dom/DOMException.h" 8 #include "core/dom/DOMException.h"
9 #include "core/dom/Document.h" 9 #include "core/dom/Document.h"
10 #include "core/dom/TaskRunnerHelper.h" 10 #include "core/dom/TaskRunnerHelper.h"
(...skipping 15 matching lines...) Expand all
26 return WebURLRequest::kFetchCredentialsModeSameOrigin; 26 return WebURLRequest::kFetchCredentialsModeSameOrigin;
27 if (credentials_option == "include") 27 if (credentials_option == "include")
28 return WebURLRequest::kFetchCredentialsModeInclude; 28 return WebURLRequest::kFetchCredentialsModeInclude;
29 NOTREACHED(); 29 NOTREACHED();
30 return WebURLRequest::kFetchCredentialsModeOmit; 30 return WebURLRequest::kFetchCredentialsModeOmit;
31 } 31 }
32 32
33 } // namespace 33 } // namespace
34 34
35 Worklet::Worklet(LocalFrame* frame) 35 Worklet::Worklet(LocalFrame* frame)
36 : ContextLifecycleObserver(frame->GetDocument()) { 36 : ContextLifecycleObserver(frame->GetDocument()),
37 module_responses_map_(new WorkletModuleResponsesMap) {
37 DCHECK(IsMainThread()); 38 DCHECK(IsMainThread());
38 } 39 }
39 40
40 Worklet::~Worklet() { 41 Worklet::~Worklet() {
41 for (const auto& proxy : proxies_) 42 for (const auto& proxy : proxies_)
42 proxy->WorkletObjectDestroyed(); 43 proxy->WorkletObjectDestroyed();
43 } 44 }
44 45
45 // Implementation of the first half of the "addModule(moduleURL, options)" 46 // Implementation of the first half of the "addModule(moduleURL, options)"
46 // algorithm: 47 // algorithm:
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 117
117 // Step 7: "Let outsideSettings be the relevant settings object of this." 118 // Step 7: "Let outsideSettings be the relevant settings object of this."
118 // In the specification, outsideSettings is used for posting a task to the 119 // In the specification, outsideSettings is used for posting a task to the
119 // document's responsible event loop. In our implementation, we use the 120 // document's responsible event loop. In our implementation, we use the
120 // document's UnspecedLoading task runner as that is what we commonly use for 121 // document's UnspecedLoading task runner as that is what we commonly use for
121 // module loading. 122 // module loading.
122 RefPtr<WebTaskRunner> outside_settings_task_runner = 123 RefPtr<WebTaskRunner> outside_settings_task_runner =
123 TaskRunnerHelper::Get(TaskType::kUnspecedLoading, GetExecutionContext()); 124 TaskRunnerHelper::Get(TaskType::kUnspecedLoading, GetExecutionContext());
124 125
125 // Step 8: "Let moduleResponsesMap be worklet's module responses map." 126 // Step 8: "Let moduleResponsesMap be worklet's module responses map."
126 // TODO(nhiroki): Implement moduleResponsesMap (https://crbug.com/627945). 127 WorkletModuleResponsesMap* module_responses_map = module_responses_map_;
127 128
128 // Step 9: "Let workletGlobalScopeType be worklet's worklet global scope 129 // Step 9: "Let workletGlobalScopeType be worklet's worklet global scope
129 // type." 130 // type."
130 // workletGlobalScopeType is encoded into the class name (e.g., PaintWorklet). 131 // workletGlobalScopeType is encoded into the class name (e.g., PaintWorklet).
131 132
132 // Step 10: "If the worklet's WorkletGlobalScopes is empty, run the following 133 // Step 10: "If the worklet's WorkletGlobalScopes is empty, run the following
133 // steps:" 134 // steps:"
134 // 10.1: "Create a WorkletGlobalScope given workletGlobalScopeType, 135 // 10.1: "Create a WorkletGlobalScope given workletGlobalScopeType,
135 // moduleResponsesMap, and outsideSettings." 136 // moduleResponsesMap, and outsideSettings."
136 // 10.2: "Add the WorkletGlobalScope to worklet's WorkletGlobalScopes." 137 // 10.2: "Add the WorkletGlobalScope to worklet's WorkletGlobalScopes."
137 // "Depending on the type of worklet the user agent may create additional 138 // "Depending on the type of worklet the user agent may create additional
138 // WorkletGlobalScopes at this time." 139 // WorkletGlobalScopes at this time."
139 while (NeedsToCreateGlobalScope()) 140 while (NeedsToCreateGlobalScope())
140 proxies_.insert(CreateGlobalScope()); 141 proxies_.insert(CreateGlobalScope());
141 DCHECK_EQ(1u, GetNumberOfGlobalScopes()); 142 DCHECK_EQ(1u, GetNumberOfGlobalScopes());
142 143
143 // Step 11: "Let pendingTaskStruct be a new pending tasks struct with counter 144 // Step 11: "Let pendingTaskStruct be a new pending tasks struct with counter
144 // initialized to the length of worklet's WorkletGlobalScopes." 145 // initialized to the length of worklet's WorkletGlobalScopes."
145 WorkletPendingTasks* pending_tasks = 146 WorkletPendingTasks* pending_tasks =
146 new WorkletPendingTasks(GetNumberOfGlobalScopes(), resolver); 147 new WorkletPendingTasks(GetNumberOfGlobalScopes(), resolver);
147 148
148 // Step 12: "For each workletGlobalScope in the worklet's 149 // Step 12: "For each workletGlobalScope in the worklet's
149 // WorkletGlobalScopes, queue a task on the workletGlobalScope to fetch and 150 // WorkletGlobalScopes, queue a task on the workletGlobalScope to fetch and
150 // invoke a worklet script given workletGlobalScope, moduleURLRecord, 151 // invoke a worklet script given workletGlobalScope, moduleURLRecord,
151 // moduleResponsesMap, credentialOptions, outsideSettings, pendingTaskStruct, 152 // moduleResponsesMap, credentialOptions, outsideSettings, pendingTaskStruct,
152 // and promise." 153 // and promise."
153 // TODO(nhiroki): Queue a task instead of executing this here. 154 // TODO(nhiroki): Queue a task instead of executing this here.
154 for (const auto& proxy : proxies_) { 155 for (const auto& proxy : proxies_) {
155 proxy->FetchAndInvokeScript(module_url_record, credentials_mode, 156 proxy->FetchAndInvokeScript(module_url_record, module_responses_map,
156 outside_settings_task_runner, pending_tasks); 157 credentials_mode, outside_settings_task_runner,
158 pending_tasks);
157 } 159 }
158 } 160 }
159 161
160 DEFINE_TRACE(Worklet) { 162 DEFINE_TRACE(Worklet) {
161 visitor->Trace(proxies_); 163 visitor->Trace(proxies_);
164 visitor->Trace(module_responses_map_);
162 ContextLifecycleObserver::Trace(visitor); 165 ContextLifecycleObserver::Trace(visitor);
163 } 166 }
164 167
165 } // namespace blink 168 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/workers/Worklet.h ('k') | third_party/WebKit/Source/core/workers/WorkletGlobalScopeProxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698