Serenity Operating System
at master 59 lines 2.3 kB view raw
1/* 2 * Copyright (c) 2022, Ben Abraham <ben.d.abraham@gmail.com> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/URL.h> 10#include <LibWeb/Bindings/DedicatedWorkerExposedInterfaces.h> 11#include <LibWeb/DOM/Document.h> 12#include <LibWeb/Forward.h> 13 14namespace Web::HTML { 15 16class WorkerEnvironmentSettingsObject final 17 : public EnvironmentSettingsObject { 18 JS_CELL(WindowEnvironmentSettingsObject, EnvironmentSettingsObject); 19 20public: 21 WorkerEnvironmentSettingsObject(NonnullOwnPtr<JS::ExecutionContext> execution_context) 22 : EnvironmentSettingsObject(move(execution_context)) 23 { 24 } 25 26 static JS::NonnullGCPtr<WorkerEnvironmentSettingsObject> setup(NonnullOwnPtr<JS::ExecutionContext> execution_context /* FIXME: null or an environment reservedEnvironment, a URL topLevelCreationURL, and an origin topLevelOrigin */) 27 { 28 auto* realm = execution_context->realm; 29 VERIFY(realm); 30 auto settings_object = realm->heap().allocate<WorkerEnvironmentSettingsObject>(*realm, move(execution_context)).release_allocated_value_but_fixme_should_propagate_errors(); 31 settings_object->target_browsing_context = nullptr; 32 33 auto intrinsics = realm->heap().allocate<Bindings::Intrinsics>(*realm, *realm).release_allocated_value_but_fixme_should_propagate_errors(); 34 auto host_defined = make<Bindings::HostDefined>(settings_object, intrinsics); 35 realm->set_host_defined(move(host_defined)); 36 37 // FIXME: Shared workers should use the shared worker method 38 Bindings::add_dedicated_worker_exposed_interfaces(realm->global_object()); 39 40 return settings_object; 41 } 42 43 virtual ~WorkerEnvironmentSettingsObject() override = default; 44 45 JS::GCPtr<DOM::Document> responsible_document() override { return nullptr; } 46 DeprecatedString api_url_character_encoding() override { return m_api_url_character_encoding; } 47 AK::URL api_base_url() override { return m_url; } 48 Origin origin() override { return m_origin; } 49 PolicyContainer policy_container() override { return m_policy_container; } 50 CanUseCrossOriginIsolatedAPIs cross_origin_isolated_capability() override { TODO(); } 51 52private: 53 DeprecatedString m_api_url_character_encoding; 54 AK::URL m_url; 55 HTML::Origin m_origin; 56 HTML::PolicyContainer m_policy_container; 57}; 58 59}