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

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

Issue 2912743002: [WIP] Worklet: Merge MainThreadWorklet and ThreadedWorklet into Worklet
Patch Set: WIP Created 3 years, 6 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/ThreadedWorkletMessagingProxy.h" 5 #include "core/workers/ThreadedWorkletMessagingProxy.h"
6 6
7 #include "bindings/core/v8/ScriptSourceCode.h" 7 #include "bindings/core/v8/ScriptSourceCode.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/dom/SecurityContext.h" 9 #include "core/dom/SecurityContext.h"
10 #include "core/dom/TaskRunnerHelper.h" 10 #include "core/dom/TaskRunnerHelper.h"
11 #include "core/frame/csp/ContentSecurityPolicy.h" 11 #include "core/frame/csp/ContentSecurityPolicy.h"
12 #include "core/loader/WorkletScriptLoader.h"
12 #include "core/origin_trials/OriginTrialContext.h" 13 #include "core/origin_trials/OriginTrialContext.h"
13 #include "core/workers/ThreadedWorkletObjectProxy.h" 14 #include "core/workers/ThreadedWorkletObjectProxy.h"
14 #include "core/workers/WorkerInspectorProxy.h" 15 #include "core/workers/WorkerInspectorProxy.h"
15 #include "core/workers/WorkerThreadStartupData.h" 16 #include "core/workers/WorkerThreadStartupData.h"
16 #include "core/workers/WorkletGlobalScope.h" 17 #include "core/workers/WorkletGlobalScope.h"
17 #include "platform/CrossThreadFunctional.h" 18 #include "platform/CrossThreadFunctional.h"
18 #include "platform/WebTaskRunner.h" 19 #include "platform/WebTaskRunner.h"
19 20
20 namespace blink { 21 namespace blink {
21 22
23 namespace {
24
25 // TODO(nhiroki): This will be replaced with WorkletModuleTreeClient when module
26 // loading is ready for threaded worklets.
27 class LoaderClient final : public GarbageCollected<LoaderClient>,
28 public WorkletScriptLoader::Client {
29 USING_GARBAGE_COLLECTED_MIXIN(LoaderClient);
30
31 public:
32 LoaderClient(WorkletPendingTasks* pending_tasks,
33 ThreadedWorkletMessagingProxy* proxy)
34 : pending_tasks_(pending_tasks), proxy_(proxy) {}
35
36 // WorkletScriptLoader::Client
37 void NotifyWorkletScriptLoadingFinished(
38 WorkletScriptLoader* script_loader,
39 const ScriptSourceCode& source_code) final {
40 DCHECK(IsMainThread());
41 if (!script_loader->WasScriptLoadSuccessful()) {
42 pending_tasks_->Abort();
43 return;
44 }
45 proxy_->EvaluateScript(source_code);
46 pending_tasks_->DecrementCounter();
47 }
48
49 DEFINE_INLINE_TRACE() { visitor->Trace(pending_tasks_); }
50
51 private:
52 Member<WorkletPendingTasks> pending_tasks_;
53 ThreadedWorkletMessagingProxy* proxy_;
54 };
55
56 } // namespace
57
22 ThreadedWorkletMessagingProxy::ThreadedWorkletMessagingProxy( 58 ThreadedWorkletMessagingProxy::ThreadedWorkletMessagingProxy(
23 ExecutionContext* execution_context) 59 ExecutionContext* execution_context)
24 : ThreadedMessagingProxyBase(execution_context), weak_ptr_factory_(this) { 60 : ThreadedMessagingProxyBase(execution_context), weak_ptr_factory_(this) {
25 worklet_object_proxy_ = ThreadedWorkletObjectProxy::Create( 61 worklet_object_proxy_ = ThreadedWorkletObjectProxy::Create(
26 weak_ptr_factory_.CreateWeakPtr(), GetParentFrameTaskRunners()); 62 weak_ptr_factory_.CreateWeakPtr(), GetParentFrameTaskRunners());
27 } 63 }
28 64
29 void ThreadedWorkletMessagingProxy::Initialize() { 65 void ThreadedWorkletMessagingProxy::Initialize() {
30 DCHECK(IsParentContextThread()); 66 DCHECK(IsParentContextThread());
31 if (AskedToTerminate()) 67 if (AskedToTerminate())
(...skipping 18 matching lines...) Expand all
50 csp->Headers().get(), /* referrerPolicy */ String(), starter_origin, 86 csp->Headers().get(), /* referrerPolicy */ String(), starter_origin,
51 nullptr, document->AddressSpace(), 87 nullptr, document->AddressSpace(),
52 OriginTrialContext::GetTokens(document).get(), 88 OriginTrialContext::GetTokens(document).get(),
53 std::move(worker_settings), WorkerV8Settings::Default()); 89 std::move(worker_settings), WorkerV8Settings::Default());
54 90
55 InitializeWorkerThread(std::move(startup_data)); 91 InitializeWorkerThread(std::move(startup_data));
56 GetWorkerInspectorProxy()->WorkerThreadCreated(document, GetWorkerThread(), 92 GetWorkerInspectorProxy()->WorkerThreadCreated(document, GetWorkerThread(),
57 script_url); 93 script_url);
58 } 94 }
59 95
96 void ThreadedWorkletMessagingProxy::FetchAndInvokeScript(
97 const KURL& module_url_record,
98 WebURLRequest::FetchCredentialsMode credentials_mode,
99 WorkletPendingTasks* pending_tasks) {
100 DCHECK(IsMainThread());
101 LoaderClient* client = new LoaderClient(pending_tasks, this);
102 WorkletScriptLoader* script_loader = WorkletScriptLoader::Create(
103 ToDocument(GetExecutionContext())->Fetcher(), client);
104 script_loader->FetchScript(module_url_record);
105 }
106
60 void ThreadedWorkletMessagingProxy::EvaluateScript( 107 void ThreadedWorkletMessagingProxy::EvaluateScript(
61 const ScriptSourceCode& script_source_code) { 108 const ScriptSourceCode& script_source_code) {
109 DCHECK(IsMainThread());
62 TaskRunnerHelper::Get(TaskType::kMiscPlatformAPI, GetWorkerThread()) 110 TaskRunnerHelper::Get(TaskType::kMiscPlatformAPI, GetWorkerThread())
63 ->PostTask( 111 ->PostTask(
64 BLINK_FROM_HERE, 112 BLINK_FROM_HERE,
65 CrossThreadBind(&ThreadedWorkletObjectProxy::EvaluateScript, 113 CrossThreadBind(&ThreadedWorkletObjectProxy::EvaluateScript,
66 CrossThreadUnretained(worklet_object_proxy_.get()), 114 CrossThreadUnretained(worklet_object_proxy_.get()),
67 script_source_code.Source(), script_source_code.Url(), 115 script_source_code.Source(), script_source_code.Url(),
68 CrossThreadUnretained(GetWorkerThread()))); 116 CrossThreadUnretained(GetWorkerThread())));
69 } 117 }
70 118
71 void ThreadedWorkletMessagingProxy::TerminateWorkletGlobalScope() { 119 void ThreadedWorkletMessagingProxy::TerminateWorkletGlobalScope() {
120 DCHECK(IsMainThread());
72 TerminateGlobalScope(); 121 TerminateGlobalScope();
73 } 122 }
74 123
75 } // namespace blink 124 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698