diff --git a/Libraries/LibWeb/HTML/MessagePort.cpp b/Libraries/LibWeb/HTML/MessagePort.cpp index a14ed948970..f9d878a7702 100644 --- a/Libraries/LibWeb/HTML/MessagePort.cpp +++ b/Libraries/LibWeb/HTML/MessagePort.cpp @@ -37,13 +37,14 @@ static HashTable>& all_message_ports() return ports; } -GC::Ref MessagePort::create(JS::Realm& realm) +GC::Ref MessagePort::create(JS::Realm& realm, HTML::TransferType primary_interface) { - return realm.create(realm); + return realm.create(realm, primary_interface); } -MessagePort::MessagePort(JS::Realm& realm) +MessagePort::MessagePort(JS::Realm& realm, HTML::TransferType primary_interface) : DOM::EventTarget(realm) + , m_primary_interface(primary_interface) { all_message_ports().set(this); } diff --git a/Libraries/LibWeb/HTML/MessagePort.h b/Libraries/LibWeb/HTML/MessagePort.h index 24e3bbeccbf..94817214818 100644 --- a/Libraries/LibWeb/HTML/MessagePort.h +++ b/Libraries/LibWeb/HTML/MessagePort.h @@ -20,13 +20,14 @@ namespace Web::HTML { // https://html.spec.whatwg.org/multipage/web-messaging.html#message-ports -class MessagePort final : public DOM::EventTarget +class MessagePort final + : public DOM::EventTarget , public Bindings::Transferable { WEB_PLATFORM_OBJECT(MessagePort, DOM::EventTarget); GC_DECLARE_ALLOCATOR(MessagePort); public: - [[nodiscard]] static GC::Ref create(JS::Realm&); + [[nodiscard]] static GC::Ref create(JS::Realm&, HTML::TransferType primary_interface = HTML::TransferType::MessagePort); static void for_each_message_port(Function); @@ -59,14 +60,14 @@ public: // ^Transferable virtual WebIDL::ExceptionOr transfer_steps(HTML::TransferDataHolder&) override; virtual WebIDL::ExceptionOr transfer_receiving_steps(HTML::TransferDataHolder&) override; - virtual HTML::TransferType primary_interface() const override { return HTML::TransferType::MessagePort; } + virtual HTML::TransferType primary_interface() const override { return m_primary_interface; } void set_worker_event_target(GC::Ref); WebIDL::ExceptionOr message_port_post_message_steps(GC::Ptr target_port, JS::Value message, StructuredSerializeOptions const& options); private: - explicit MessagePort(JS::Realm&); + explicit MessagePort(JS::Realm&, HTML::TransferType primary_interface); virtual void initialize(JS::Realm&) override; virtual void finalize() override; @@ -79,6 +80,8 @@ private: ErrorOr send_message_on_transport(SerializedTransferRecord const&); void read_from_transport(); + HTML::TransferType m_primary_interface { HTML::TransferType::MessagePort }; + // The HTML spec implies(!) that this is MessagePort.[[RemotePort]] GC::Ptr m_remote_port;