/* * Copyright (c) 2021, Luke Wilde * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include namespace Web::HTML { WindowEnvironmentSettingsObject::WindowEnvironmentSettingsObject(Window& window, JS::ExecutionContext& execution_context) : EnvironmentSettingsObject(execution_context) , m_window(window) { } // https://html.spec.whatwg.org/multipage/window-object.html#set-up-a-window-environment-settings-object void WindowEnvironmentSettingsObject::setup(AK::URL& creation_url, JS::ExecutionContext& execution_context) { // 1. Let realm be the value of execution context's Realm component. auto* realm = execution_context.realm; VERIFY(realm); // 2. Let window be realm's global object. // NOTE: We want to store the Window impl rather than the WindowObject. auto& window = verify_cast(realm->global_object()).impl(); // 3. 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 = adopt_own(*new WindowEnvironmentSettingsObject(window, execution_context)); // FIXME: 4. If reservedEnvironment is non-null, then: // FIXME: 1. Set settings object's id to reservedEnvironment's id, target browsing context to reservedEnvironment's target browsing context, and active service worker to reservedEnvironment's active service worker. // FIXME: 2. Set reservedEnvironment's id to the empty string. // FIXME: 5. Otherwise, set settings object's id to a new unique opaque string, settings object's target browsing context to null, and settings object's active service worker to null. settings_object->target_browsing_context = nullptr; // FIXME: 6. Set settings object's creation URL to creationURL, settings object's top-level creation URL to topLevelCreationURL, and settings object's top-level origin to topLevelOrigin. settings_object->creation_url = creation_url; // 7. Set realm's [[HostDefined]] field to settings object. realm->set_host_defined(move(settings_object)); } // https://html.spec.whatwg.org/multipage/window-object.html#script-settings-for-window-objects:responsible-document RefPtr WindowEnvironmentSettingsObject::responsible_document() { // Return window's associated Document. return m_window->associated_document(); } // https://html.spec.whatwg.org/multipage/window-object.html#script-settings-for-window-objects:api-url-character-encoding String WindowEnvironmentSettingsObject::api_url_character_encoding() { // Return the current character encoding of window's associated Document. return m_window->associated_document().encoding_or_default(); } // https://html.spec.whatwg.org/multipage/window-object.html#script-settings-for-window-objects:api-base-url AK::URL WindowEnvironmentSettingsObject::api_base_url() { // FIXME: Return the current base URL of window's associated Document. // (This currently just returns the current document URL, not accounting for elements and such) return m_window->associated_document().url(); } // https://html.spec.whatwg.org/multipage/window-object.html#script-settings-for-window-objects:concept-settings-object-origin Origin WindowEnvironmentSettingsObject::origin() { // Return the origin of window's associated Document. return m_window->associated_document().origin(); } // https://html.spec.whatwg.org/multipage/window-object.html#script-settings-for-window-objects:concept-settings-object-cross-origin-isolated-capability CanUseCrossOriginIsolatedAPIs WindowEnvironmentSettingsObject::cross_origin_isolated_capability() { // FIXME: Return true if both of the following hold, and false otherwise: // 1. realm's agent cluster's cross-origin-isolation mode is "concrete", and // 2. window's associated Document is allowed to use the "cross-origin-isolated" feature. TODO(); } }