Title: [286528] trunk/Source/WebCore
Revision
286528
Author
[email protected]
Date
2021-12-04 01:13:50 -0800 (Sat, 04 Dec 2021)

Log Message

Prepare for SharedWorker implementation
https://bugs.webkit.org/show_bug.cgi?id=233848

Patch by Alex Christensen <[email protected]> on 2021-12-04
Reviewed by Chris Dumez.

This splits off the parts of bug 230382 that don't change behavior.

* workers/AbstractWorker.cpp:
(WebCore::AbstractWorker::workerFetchOptions):
* workers/AbstractWorker.h:
* workers/DedicatedWorkerThread.h:
* workers/Worker.cpp:
(WebCore::Worker::Worker):
(WebCore::Worker::create):
(WebCore::Worker::notifyFinished):
* workers/Worker.h:
* workers/WorkerOptions.h:
* workers/WorkerOrWorkletScriptController.cpp:
* workers/WorkerOrWorkletScriptController.h:
* workers/WorkerThread.cpp:
(WebCore::WorkerThread::createThread):
* workers/WorkerThread.h:
(WebCore::WorkerThread::isServiceWorkerThread const): Deleted.
* workers/service/context/ServiceWorkerThread.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286527 => 286528)


--- trunk/Source/WebCore/ChangeLog	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/ChangeLog	2021-12-04 09:13:50 UTC (rev 286528)
@@ -1,3 +1,30 @@
+2021-12-04  Alex Christensen  <[email protected]>
+
+        Prepare for SharedWorker implementation
+        https://bugs.webkit.org/show_bug.cgi?id=233848
+
+        Reviewed by Chris Dumez.
+
+        This splits off the parts of bug 230382 that don't change behavior.
+
+        * workers/AbstractWorker.cpp:
+        (WebCore::AbstractWorker::workerFetchOptions):
+        * workers/AbstractWorker.h:
+        * workers/DedicatedWorkerThread.h:
+        * workers/Worker.cpp:
+        (WebCore::Worker::Worker):
+        (WebCore::Worker::create):
+        (WebCore::Worker::notifyFinished):
+        * workers/Worker.h:
+        * workers/WorkerOptions.h:
+        * workers/WorkerOrWorkletScriptController.cpp:
+        * workers/WorkerOrWorkletScriptController.h:
+        * workers/WorkerThread.cpp:
+        (WebCore::WorkerThread::createThread):
+        * workers/WorkerThread.h:
+        (WebCore::WorkerThread::isServiceWorkerThread const): Deleted.
+        * workers/service/context/ServiceWorkerThread.h:
+
 2021-12-03  Said Abou-Hallawa  <[email protected]>
 
         [GPU Process] (REGRESSION r285597): Fix SVGFilter clamping calculation

Modified: trunk/Source/WebCore/workers/AbstractWorker.cpp (286527 => 286528)


--- trunk/Source/WebCore/workers/AbstractWorker.cpp	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/AbstractWorker.cpp	2021-12-04 09:13:50 UTC (rev 286528)
@@ -32,8 +32,10 @@
 #include "AbstractWorker.h"
 
 #include "ContentSecurityPolicy.h"
+#include "FetchOptions.h"
 #include "ScriptExecutionContext.h"
 #include "SecurityOrigin.h"
+#include "WorkerOptions.h"
 #include <wtf/IsoMallocInlines.h>
 
 namespace WebCore {
@@ -40,6 +42,20 @@
 
 WTF_MAKE_ISO_ALLOCATED_IMPL(AbstractWorker);
 
+FetchOptions AbstractWorker::workerFetchOptions(const WorkerOptions& options)
+{
+    FetchOptions fetchOptions;
+    fetchOptions.mode = FetchOptions::Mode::SameOrigin;
+    if (options.type == WorkerType::Module)
+        fetchOptions.credentials = options.credentials;
+    else
+        fetchOptions.credentials = FetchOptions::Credentials::SameOrigin;
+    fetchOptions.cache = FetchOptions::Cache::Default;
+    fetchOptions.redirect = FetchOptions::Redirect::Follow;
+    fetchOptions.destination = FetchOptions::Destination::Worker;
+    return fetchOptions;
+}
+
 ExceptionOr<URL> AbstractWorker::resolveURL(const String& url, bool shouldBypassMainWorldContentSecurityPolicy)
 {
     auto& context = *scriptExecutionContext();

Modified: trunk/Source/WebCore/workers/AbstractWorker.h (286527 => 286528)


--- trunk/Source/WebCore/workers/AbstractWorker.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/AbstractWorker.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -35,6 +35,9 @@
 
 namespace WebCore {
 
+struct FetchOptions;
+struct WorkerOptions;
+
 class AbstractWorker : public RefCounted<AbstractWorker>, public EventTargetWithInlineData {
     WTF_MAKE_ISO_ALLOCATED(AbstractWorker);
 public:
@@ -41,6 +44,8 @@
     using RefCounted::ref;
     using RefCounted::deref;
 
+    static FetchOptions workerFetchOptions(const WorkerOptions&);
+
 protected:
     AbstractWorker() = default;
 

Modified: trunk/Source/WebCore/workers/DedicatedWorkerThread.h (286527 => 286528)


--- trunk/Source/WebCore/workers/DedicatedWorkerThread.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/DedicatedWorkerThread.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -57,6 +57,8 @@
 private:
     DedicatedWorkerThread(const WorkerParameters&, const ScriptBuffer& sourceCode, WorkerLoaderProxy&, WorkerDebuggerProxy&, WorkerObjectProxy&, WorkerThreadStartMode, const SecurityOrigin& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*, JSC::RuntimeFlags);
 
+    ASCIILiteral threadName() const final { return "WebCore: Worker"_s; }
+
     WorkerObjectProxy& m_workerObjectProxy;
 };
 

Modified: trunk/Source/WebCore/workers/Worker.cpp (286527 => 286528)


--- trunk/Source/WebCore/workers/Worker.cpp	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/Worker.cpp	2021-12-04 09:13:50 UTC (rev 286528)
@@ -43,7 +43,6 @@
 #include "SecurityOrigin.h"
 #include "StructuredSerializeOptions.h"
 #include "WorkerGlobalScopeProxy.h"
-#include "WorkerOptions.h"
 #include "WorkerScriptLoader.h"
 #include "WorkerThread.h"
 #include <_javascript_Core/IdentifiersFactory.h>
@@ -70,14 +69,12 @@
         worker->notifyNetworkStateChange(isOnLine);
 }
 
-inline Worker::Worker(ScriptExecutionContext& context, JSC::RuntimeFlags runtimeFlags, const WorkerOptions& options)
+Worker::Worker(ScriptExecutionContext& context, JSC::RuntimeFlags runtimeFlags, WorkerOptions&& options)
     : ActiveDOMObject(&context)
-    , m_name(options.name)
+    , m_options(WTFMove(options))
     , m_identifier("worker:" + Inspector::IdentifiersFactory::createIdentifier())
     , m_contextProxy(WorkerGlobalScopeProxy::create(*this))
     , m_runtimeFlags(runtimeFlags)
-    , m_type(options.type)
-    , m_credentials(options.credentials)
 {
     static bool addedListener;
     if (!addedListener) {
@@ -89,7 +86,7 @@
     ASSERT_UNUSED(addResult, addResult.isNewEntry);
 }
 
-ExceptionOr<Ref<Worker>> Worker::create(ScriptExecutionContext& context, JSC::RuntimeFlags runtimeFlags, const String& url, const WorkerOptions& options)
+ExceptionOr<Ref<Worker>> Worker::create(ScriptExecutionContext& context, JSC::RuntimeFlags runtimeFlags, const String& url, WorkerOptions&& options)
 {
     ASSERT(isMainThread());
 
@@ -96,7 +93,7 @@
     // We don't currently support nested workers, so workers can only be created from documents.
     ASSERT_WITH_SECURITY_IMPLICATION(context.isDocument());
 
-    auto worker = adoptRef(*new Worker(context, runtimeFlags, options));
+    auto worker = adoptRef(*new Worker(context, runtimeFlags, WTFMove(options)));
 
     worker->suspendIfNeeded();
 
@@ -116,16 +113,7 @@
     ResourceRequest request { scriptURL.releaseReturnValue() };
     request.setInitiatorIdentifier(worker->m_identifier);
 
-    FetchOptions fetchOptions;
-    fetchOptions.mode = FetchOptions::Mode::SameOrigin;
-    if (worker->m_type == WorkerType::Module)
-        fetchOptions.credentials = worker->m_credentials;
-    else
-        fetchOptions.credentials = FetchOptions::Credentials::SameOrigin;
-    fetchOptions.cache = FetchOptions::Cache::Default;
-    fetchOptions.redirect = FetchOptions::Redirect::Follow;
-    fetchOptions.destination = FetchOptions::Destination::Worker;
-    worker->m_scriptLoader->loadAsynchronously(context, WTFMove(request), WTFMove(fetchOptions), contentSecurityPolicyEnforcement, ServiceWorkersMode::All, worker.get(), WorkerRunLoop::defaultMode());
+    worker->m_scriptLoader->loadAsynchronously(context, WTFMove(request), workerFetchOptions(worker->m_options), contentSecurityPolicyEnforcement, ServiceWorkersMode::All, worker.get(), WorkerRunLoop::defaultMode());
 
     return worker;
 }
@@ -230,7 +218,7 @@
         if (m_scriptLoader->url().hasFragmentIdentifier())
             responseURL.setFragmentIdentifier(m_scriptLoader->url().fragmentIdentifier());
     }
-    m_contextProxy.startWorkerGlobalScope(responseURL, m_name, context->userAgent(responseURL), isOnline, m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_scriptLoader->crossOriginEmbedderPolicy(), m_workerCreationTime, referrerPolicy, m_type, m_credentials, m_runtimeFlags);
+    m_contextProxy.startWorkerGlobalScope(responseURL, m_options.name, context->userAgent(responseURL), isOnline, m_scriptLoader->script(), contentSecurityPolicyResponseHeaders, m_shouldBypassMainWorldContentSecurityPolicy, m_scriptLoader->crossOriginEmbedderPolicy(), m_workerCreationTime, referrerPolicy, m_options.type, m_options.credentials, m_runtimeFlags);
     InspectorInstrumentation::scriptImported(*context, m_scriptLoader->identifier(), m_scriptLoader->script().toString());
 }
 

Modified: trunk/Source/WebCore/workers/Worker.h (286527 => 286528)


--- trunk/Source/WebCore/workers/Worker.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/Worker.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -31,6 +31,7 @@
 #include "EventTarget.h"
 #include "FetchRequestCredentials.h"
 #include "MessagePort.h"
+#include "WorkerOptions.h"
 #include "WorkerScriptLoaderClient.h"
 #include "WorkerType.h"
 #include <_javascript_Core/RuntimeFlags.h>
@@ -58,7 +59,7 @@
 class Worker final : public AbstractWorker, public ActiveDOMObject, private WorkerScriptLoaderClient {
     WTF_MAKE_ISO_ALLOCATED(Worker);
 public:
-    static ExceptionOr<Ref<Worker>> create(ScriptExecutionContext&, JSC::RuntimeFlags, const String& url, const WorkerOptions&);
+    static ExceptionOr<Ref<Worker>> create(ScriptExecutionContext&, JSC::RuntimeFlags, const String& url, WorkerOptions&&);
     virtual ~Worker();
 
     ExceptionOr<void> postMessage(JSC::JSGlobalObject&, JSC::JSValue message, StructuredSerializeOptions&&);
@@ -67,7 +68,7 @@
     bool wasTerminated() const { return m_wasTerminated; }
 
     String identifier() const { return m_identifier; }
-    const String& name() const { return m_name; }
+    const String& name() const { return m_options.name; }
 
     ScriptExecutionContext* scriptExecutionContext() const final { return ActiveDOMObject::scriptExecutionContext(); }
 
@@ -78,10 +79,10 @@
     void postTaskToWorkerGlobalScope(Function<void(ScriptExecutionContext&)>&&);
 #endif
 
-    WorkerType type() const { return m_type; }
+    WorkerType type() const { return m_options.type; }
 
 private:
-    explicit Worker(ScriptExecutionContext&, JSC::RuntimeFlags, const WorkerOptions&);
+    explicit Worker(ScriptExecutionContext&, JSC::RuntimeFlags, WorkerOptions&&);
 
     EventTargetInterface eventTargetInterface() const final { return WorkerEventTargetInterfaceType; }
 
@@ -100,7 +101,7 @@
     static void networkStateChanged(bool isOnLine);
 
     RefPtr<WorkerScriptLoader> m_scriptLoader;
-    String m_name;
+    const WorkerOptions m_options;
     String m_identifier;
     WorkerGlobalScopeProxy& m_contextProxy; // The proxy outlives the worker to perform thread shutdown.
     std::optional<ContentSecurityPolicyResponseHeaders> m_contentSecurityPolicyResponseHeaders;
@@ -113,8 +114,6 @@
 #if ENABLE(WEB_RTC)
     HashSet<String> m_transformers;
 #endif
-    WorkerType m_type { WorkerType::Classic };
-    FetchRequestCredentials m_credentials { FetchRequestCredentials::SameOrigin };
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/workers/WorkerOptions.h (286527 => 286528)


--- trunk/Source/WebCore/workers/WorkerOptions.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/WorkerOptions.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -31,8 +31,8 @@
 namespace WebCore {
 
 struct WorkerOptions {
-    WorkerType type;
-    FetchRequestCredentials credentials;
+    WorkerType type { WorkerType::Classic };
+    FetchRequestCredentials credentials { FetchRequestCredentials::SameOrigin };
     String name;
 };
 

Modified: trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.cpp (286527 => 286528)


--- trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.cpp	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.cpp	2021-12-04 09:13:50 UTC (rev 286528)
@@ -82,11 +82,6 @@
     }
 }
 
-WorkerOrWorkletScriptController::WorkerOrWorkletScriptController(WorkerThreadType type, WorkerOrWorkletGlobalScope* globalScope)
-    : WorkerOrWorkletScriptController(type, JSC::VM::create(), globalScope)
-{
-}
-
 WorkerOrWorkletScriptController::~WorkerOrWorkletScriptController()
 {
     JSLockHolder lock(vm());

Modified: trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.h (286527 => 286528)


--- trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/WorkerOrWorkletScriptController.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -56,7 +56,6 @@
     WTF_MAKE_FAST_ALLOCATED;
 public:
     WorkerOrWorkletScriptController(WorkerThreadType, Ref<JSC::VM>&&, WorkerOrWorkletGlobalScope*);
-    explicit WorkerOrWorkletScriptController(WorkerThreadType, WorkerOrWorkletGlobalScope*);
     ~WorkerOrWorkletScriptController();
 
     void releaseHeapAccess();

Modified: trunk/Source/WebCore/workers/WorkerThread.cpp (286527 => 286528)


--- trunk/Source/WebCore/workers/WorkerThread.cpp	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/WorkerThread.cpp	2021-12-04 09:13:50 UTC (rev 286528)
@@ -116,7 +116,7 @@
         return Thread::current();
     }
 
-    return Thread::create(isServiceWorkerThread() ? "WebCore: Service Worker" : "WebCore: Worker", [this] {
+    return Thread::create(threadName(), [this] {
         workerOrWorkletThread();
     }, ThreadType::_javascript_);
 }

Modified: trunk/Source/WebCore/workers/WorkerThread.h (286527 => 286528)


--- trunk/Source/WebCore/workers/WorkerThread.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/WorkerThread.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -107,7 +107,7 @@
     SocketProvider* socketProvider();
 
 private:
-    virtual bool isServiceWorkerThread() const { return false; }
+    virtual ASCIILiteral threadName() const = 0;
 
     virtual void finishedEvaluatingScript() { }
 

Modified: trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h (286527 => 286528)


--- trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h	2021-12-04 08:28:31 UTC (rev 286527)
+++ trunk/Source/WebCore/workers/service/context/ServiceWorkerThread.h	2021-12-04 09:13:50 UTC (rev 286528)
@@ -87,7 +87,7 @@
 private:
     WEBCORE_EXPORT ServiceWorkerThread(ServiceWorkerContextData&&, ServiceWorkerData&&, String&& userAgent, WorkerThreadMode, const Settings::Values&, WorkerLoaderProxy&, WorkerDebuggerProxy&, IDBClient::IDBConnectionProxy*, SocketProvider*);
 
-    bool isServiceWorkerThread() const final { return true; }
+    ASCIILiteral threadName() const final { return "WebCore: ServiceWorker"_s; }
     void finishedEvaluatingScript() final;
 
     void finishedFiringInstallEvent(bool hasRejectedAnyPromise);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to