From 2d487ee5ab1d1776a616aaf70e606983f4f290c5 Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Thu, 23 May 2024 11:14:51 +0100 Subject: [PATCH] LibWeb: Add spec comments to `WorkerEnvironmentSettingsObject::setup()` No behavior change. --- .../Scripting/WorkerEnvironmentSettingsObject.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/Userland/Libraries/LibWeb/HTML/Scripting/WorkerEnvironmentSettingsObject.cpp b/Userland/Libraries/LibWeb/HTML/Scripting/WorkerEnvironmentSettingsObject.cpp index 4db9041f7ca..19136f28908 100644 --- a/Userland/Libraries/LibWeb/HTML/Scripting/WorkerEnvironmentSettingsObject.cpp +++ b/Userland/Libraries/LibWeb/HTML/Scripting/WorkerEnvironmentSettingsObject.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2023, Andrew Kaster + * Copyright (c) 2024, Tim Ledbetter * * SPDX-License-Identifier: BSD-2-Clause */ @@ -11,16 +12,28 @@ namespace Web::HTML { JS_DEFINE_ALLOCATOR(WorkerEnvironmentSettingsObject); +// https://html.spec.whatwg.org/multipage/workers.html#set-up-a-worker-environment-settings-object JS::NonnullGCPtr WorkerEnvironmentSettingsObject::setup(JS::NonnullGCPtr page, NonnullOwnPtr execution_context /* FIXME: null or an environment reservedEnvironment, a URL topLevelCreationURL, and an origin topLevelOrigin */) { + // 1. FIXME: Let inherited origin be outside settings's origin. + + // 2. Let realm be the value of execution context's Realm component. auto realm = execution_context->realm; VERIFY(realm); + // 3. Let worker global scope be realm's global object. auto& worker = verify_cast(realm->global_object()); + // 4. Let settings object be a new environment settings object whose algorithms are defined as follows: + // NOTE: See the functions defined for this class. auto settings_object = realm->heap().allocate(*realm, move(execution_context), worker); settings_object->target_browsing_context = nullptr; + // FIXME: 5. Set settings object's id to a new unique opaque string, creation URL to worker global scope's url, top-level creation URL to null, target browsing context to null, and active service worker to null. + // FIXME: 6. If worker global scope is a DedicatedWorkerGlobalScope object, then set settings object's top-level origin to outside settings's top-level origin. + // FIXME: 7. Otherwise, set settings object's top-level origin to an implementation-defined value. + + // 8. Set realm's [[HostDefined]] field to settings object. auto intrinsics = realm->heap().allocate(*realm, *realm); auto host_defined = make(settings_object, intrinsics, page); realm->set_host_defined(move(host_defined)); @@ -29,6 +42,7 @@ JS::NonnullGCPtr WorkerEnvironmentSettingsObjec // the realm's [[HostDefined]] internal slot as the internal slot contains the web platform intrinsics worker.initialize_web_interfaces({}); + // 9. Return settings object. return settings_object; }