/* * Copyright (c) 2025, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include namespace Web::HTML { // https://html.spec.whatwg.org/multipage/workers.html#dedicated-workers-and-the-worker-interface class SharedWorker final : public DOM::EventTarget , public HTML::AbstractWorker { WEB_PLATFORM_OBJECT(SharedWorker, DOM::EventTarget); GC_DECLARE_ALLOCATOR(SharedWorker); public: static WebIDL::ExceptionOr> construct_impl(JS::Realm&, String const& script_url, Variant& options); virtual ~SharedWorker(); GC::Ref port() { return m_port; } void set_agent(WorkerAgentParent& agent) { m_agent = agent; } private: SharedWorker(JS::Realm&, URL::URL script_url, WorkerOptions, MessagePort&); // ^AbstractWorker virtual DOM::EventTarget& this_event_target() override { return *this; } virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; URL::URL m_script_url; WorkerOptions m_options; GC::Ref m_port; GC::Ptr m_agent; }; }