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);