mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-11 17:37:33 +02:00
Previously we were inconsistent by generating code for enum definitions but not generating code for dictionaries. With future changes to the IDL generator to expose helpers to convert to and from IDL values this produced circular depdendencies. To solve this problem, also generate the dictionary definitions in bindings headers.
69 lines
2.9 KiB
C++
69 lines
2.9 KiB
C++
/*
|
|
* Copyright (c) 2021, Dex♪ <dexes.ttp@gmail.com>
|
|
* Copyright (c) 2022, Andreas Kling <andreas@ladybird.org>
|
|
* Copyright (c) 2026, Sam Atkins <sam@ladybird.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <AK/FlyString.h>
|
|
#include <LibWeb/Bindings/MessageEvent.h>
|
|
#include <LibWeb/DOM/Event.h>
|
|
#include <LibWeb/Export.h>
|
|
|
|
namespace Web::HTML {
|
|
|
|
// FIXME: Include ServiceWorker
|
|
// https://html.spec.whatwg.org/multipage/comms.html#messageeventsource
|
|
using MessageEventSource = Variant<GC::Root<WindowProxy>, GC::Root<MessagePort>>;
|
|
using NullableMessageEventSource = Variant<GC::Root<WindowProxy>, GC::Root<MessagePort>, Empty>;
|
|
|
|
// 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<MessageEvent> create(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const& = {});
|
|
[[nodiscard]] static GC::Ref<MessageEvent> create(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const&, URL::Origin const&);
|
|
static WebIDL::ExceptionOr<GC::Ref<MessageEvent>> construct_impl(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const&);
|
|
|
|
MessageEvent(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const& event_init);
|
|
MessageEvent(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const& event_init, URL::Origin const&);
|
|
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<JS::Object> ports() const;
|
|
|
|
NullableMessageEventSource source() const;
|
|
|
|
virtual Optional<URL::Origin> 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<GC::Root<MessagePort>> const& ports);
|
|
|
|
private:
|
|
virtual void initialize(JS::Realm&) override;
|
|
virtual void visit_edges(Cell::Visitor&) override;
|
|
|
|
using MessageEventSourceInternal = Variant<Empty, GC::Ref<WindowProxy>, GC::Ref<MessagePort>>;
|
|
static MessageEventSourceInternal to_message_event_source_internal(NullableMessageEventSource const&);
|
|
MessageEvent(JS::Realm&, FlyString const& event_name, Bindings::MessageEventInit const& event_init, Variant<URL::Origin, String, Empty>);
|
|
|
|
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<URL::Origin, String, Empty> m_origin;
|
|
|
|
String m_last_event_id;
|
|
MessageEventSourceInternal m_source;
|
|
Vector<GC::Ref<JS::Object>> m_ports;
|
|
mutable GC::Ptr<JS::Array> m_ports_array;
|
|
};
|
|
|
|
}
|