/* * Copyright (c) 2021, Dex♪ * Copyright (c) 2022, Andreas Kling * Copyright (c) 2026, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace Web::HTML { // FIXME: Include ServiceWorker // https://html.spec.whatwg.org/multipage/comms.html#messageeventsource using MessageEventSource = Variant, GC::Root>; using NullableMessageEventSource = Variant, GC::Root, Empty>; // https://html.spec.whatwg.org/multipage/comms.html#messageeventinit struct MessageEventInit : public DOM::EventInit { JS::Value data { JS::js_null() }; Variant origin {}; String last_event_id {}; NullableMessageEventSource source { Empty {} }; Vector> ports; }; // https://html.spec.whatwg.org/multipage/comms.html#messageevent class WEB_API MessageEvent : public DOM::Event { WEB_PLATFORM_OBJECT(MessageEvent, DOM::Event); GC_DECLARE_ALLOCATOR(MessageEvent); public: [[nodiscard]] static GC::Ref create(JS::Realm&, FlyString const& event_name, MessageEventInit const& = {}); static WebIDL::ExceptionOr> construct_impl(JS::Realm&, FlyString const& event_name, MessageEventInit const&); MessageEvent(JS::Realm&, FlyString const& event_name, MessageEventInit const& event_init); virtual ~MessageEvent() override; JS::Value data() const { return m_data; } String origin() const; String const& last_event_id() const { return m_last_event_id; } GC::Ref ports() const; NullableMessageEventSource source() const; virtual Optional extract_an_origin() const override; void init_message_event(String const& type, bool bubbles, bool cancelable, JS::Value data, String const& origin, String const& last_event_id, NullableMessageEventSource source, Vector> const& ports); private: virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; using MessageEventSourceInternal = Variant, GC::Ref>; static MessageEventSourceInternal to_message_event_source_internal(NullableMessageEventSource const&); JS::Value m_data; // https://html.spec.whatwg.org/multipage/comms.html#concept-messageevent-origin // Each MessageEvent has an origin (an origin, a string, or null), initially null. Variant m_origin; String m_last_event_id; MessageEventSourceInternal m_source; Vector> m_ports; mutable GC::Ptr m_ports_array; }; }