/* * Copyright (c) 2023, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace Web::HTML { JS_DEFINE_ALLOCATOR(WorkerEnvironmentSettingsObject); JS::NonnullGCPtr WorkerEnvironmentSettingsObject::setup(JS::NonnullGCPtr page, NonnullOwnPtr execution_context /* FIXME: null or an environment reservedEnvironment, a URL topLevelCreationURL, and an origin topLevelOrigin */) { auto realm = execution_context->realm; VERIFY(realm); auto& worker = verify_cast(realm->global_object()); auto settings_object = realm->heap().allocate(*realm, move(execution_context), worker); settings_object->target_browsing_context = nullptr; auto intrinsics = realm->heap().allocate(*realm, *realm); auto host_defined = make(settings_object, intrinsics, page); realm->set_host_defined(move(host_defined)); // Non-Standard: We cannot fully initialize worker object until *after* the we set up // the realm's [[HostDefined]] internal slot as the internal slot contains the web platform intrinsics worker.initialize_web_interfaces({}); return settings_object; } void WorkerEnvironmentSettingsObject::visit_edges(JS::Cell::Visitor& visitor) { Base::visit_edges(visitor); visitor.visit(m_global_scope); } }