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

Unified Diff: third_party/WebKit/Source/core/workers/ThreadedWorkletMessagingProxy.cpp

Issue 2312493002: [worklets] Introduce ThreadedWorkletMessagingProxy and AnimationWorkletMessagaingProxy. (Closed)
Patch Set: rebase. Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/workers/ThreadedWorkletMessagingProxy.cpp
diff --git a/third_party/WebKit/Source/core/workers/ThreadedWorkletMessagingProxy.cpp b/third_party/WebKit/Source/core/workers/ThreadedWorkletMessagingProxy.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..4e3d0417fa8c19fc88402c0e8f098dc10a7e32bd
--- /dev/null
+++ b/third_party/WebKit/Source/core/workers/ThreadedWorkletMessagingProxy.cpp
@@ -0,0 +1,71 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "core/workers/ThreadedWorkletMessagingProxy.h"
+
+#include "bindings/core/v8/ScriptSourceCode.h"
+#include "bindings/core/v8/WorkerOrWorkletScriptController.h"
+#include "core/dom/Document.h"
+#include "core/dom/ExecutionContextTask.h"
+#include "core/dom/SecurityContext.h"
+#include "core/frame/csp/ContentSecurityPolicy.h"
+#include "core/origin_trials/OriginTrialContext.h"
+#include "core/workers/ThreadedWorkletObjectProxy.h"
+#include "core/workers/WorkerInspectorProxy.h"
+#include "core/workers/WorkerThreadStartupData.h"
+#include "core/workers/WorkletGlobalScope.h"
+#include "public/platform/WebTaskRunner.h"
+
+namespace blink {
+
+namespace {
+
+void evaluateScriptOnWorkletGlobalScope(const String& source, const KURL& scriptURL, ExecutionContext* executionContext)
+{
+ WorkletGlobalScope* globalScope = toWorkletGlobalScope(executionContext);
+ globalScope->scriptController()->evaluate(ScriptSourceCode(source, scriptURL));
+}
+
+} // namespace
+
+ThreadedWorkletMessagingProxy::ThreadedWorkletMessagingProxy(ExecutionContext* executionContext)
+ : ThreadedMessagingProxyBase(executionContext)
+ , m_workletObjectProxy(ThreadedWorkletObjectProxy::create(this))
+{
+}
+
+void ThreadedWorkletMessagingProxy::initialize()
+{
+ DCHECK(isParentContextThread());
+ if (askedToTerminate())
+ return;
+
+ Document* document = toDocument(getExecutionContext());
+ SecurityOrigin* starterOrigin = document->getSecurityOrigin();
+ KURL scriptURL = document->url();
+
+ ContentSecurityPolicy* csp = document->contentSecurityPolicy();
+ DCHECK(csp);
+
+ WorkerThreadStartMode startMode = workerInspectorProxy()->workerStartMode(document);
+ std::unique_ptr<WorkerSettings> workerSettings = wrapUnique(new WorkerSettings(document->settings()));
+
+ // TODO(ikilpatrick): Decide on sensible a value for referrerPolicy.
+ std::unique_ptr<WorkerThreadStartupData> startupData = WorkerThreadStartupData::create(scriptURL, document->userAgent(), String(), nullptr, startMode, csp->headers().get(), /* referrerPolicy */ String(), starterOrigin, nullptr, document->addressSpace(), OriginTrialContext::getTokens(document).get(), std::move(workerSettings));
+
+ initializeWorkerThread(std::move(startupData));
+ workerInspectorProxy()->workerThreadCreated(document, workerThread(), scriptURL);
+}
+
+void ThreadedWorkletMessagingProxy::evaluateScript(const ScriptSourceCode& scriptSourceCode)
+{
+ postTaskToWorkerGlobalScope(BLINK_FROM_HERE, createCrossThreadTask(&evaluateScriptOnWorkletGlobalScope, scriptSourceCode.source(), scriptSourceCode.url()));
+}
+
+void ThreadedWorkletMessagingProxy::terminateWorkletGlobalScope()
+{
+ terminateGlobalScope();
+}
+
+} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698