/* * Copyright (c) 2021, Dex♪ * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include namespace Web::HTML { // FIXME: Include ServiceWorker using MessageEventSource = Variant, JS::Handle>; struct MessageEventInit : public DOM::EventInit { JS::Value data { JS::js_null() }; String origin {}; String last_event_id {}; Optional source; Vector> ports; }; class MessageEvent : public DOM::Event { WEB_PLATFORM_OBJECT(MessageEvent, DOM::Event); JS_DECLARE_ALLOCATOR(MessageEvent); public: [[nodiscard]] static JS::NonnullGCPtr 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 const& origin() const { return m_origin; } String const& last_event_id() const { return m_last_event_id; } JS::NonnullGCPtr ports() const; Variant, JS::Handle, Empty> source() const; void init_message_event(String const& type, bool bubbles, bool cancelable, JS::Value data, String const& origin, String const& last_event_id, Optional source, Vector> const& ports); private: virtual void initialize(JS::Realm&) override; virtual void visit_edges(Cell::Visitor&) override; JS::Value m_data; String m_origin; String m_last_event_id; Optional m_source; Vector> m_ports; mutable JS::GCPtr m_ports_array; }; }