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;