Browse Source

LibWeb: Add MessageEvent.source

Luke Wilde 1 năm trước cách đây
mục cha
commit
1607b2c978

+ 9 - 0
Userland/Libraries/LibWeb/HTML/MessageEvent.cpp

@@ -24,6 +24,7 @@ MessageEvent::MessageEvent(JS::Realm& realm, FlyString const& event_name, Messag
     , m_data(event_init.data)
     , m_data(event_init.data)
     , m_origin(event_init.origin)
     , m_origin(event_init.origin)
     , m_last_event_id(event_init.last_event_id)
     , m_last_event_id(event_init.last_event_id)
+    , m_source(event_init.source)
 {
 {
 }
 }
 
 
@@ -41,4 +42,12 @@ void MessageEvent::visit_edges(Cell::Visitor& visitor)
     visitor.visit(m_data);
     visitor.visit(m_data);
 }
 }
 
 
+Variant<JS::Handle<WindowProxy>, JS::Handle<MessagePort>, Empty> MessageEvent::source() const
+{
+    if (!m_source.has_value())
+        return Empty {};
+
+    return m_source.value().downcast<JS::Handle<WindowProxy>, JS::Handle<MessagePort>>();
+}
+
 }
 }

+ 6 - 0
Userland/Libraries/LibWeb/HTML/MessageEvent.h

@@ -12,10 +12,14 @@
 
 
 namespace Web::HTML {
 namespace Web::HTML {
 
 
+// FIXME: Include ServiceWorker
+using MessageEventSource = Variant<JS::Handle<WindowProxy>, JS::Handle<MessagePort>>;
+
 struct MessageEventInit : public DOM::EventInit {
 struct MessageEventInit : public DOM::EventInit {
     JS::Value data { JS::js_null() };
     JS::Value data { JS::js_null() };
     String origin;
     String origin;
     String last_event_id;
     String last_event_id;
+    Optional<MessageEventSource> source;
 };
 };
 
 
 class MessageEvent : public DOM::Event {
 class MessageEvent : public DOM::Event {
@@ -31,6 +35,7 @@ public:
     JS::Value data() const { return m_data; }
     JS::Value data() const { return m_data; }
     String const& origin() const { return m_origin; }
     String const& origin() const { return m_origin; }
     String const& last_event_id() const { return m_last_event_id; }
     String const& last_event_id() const { return m_last_event_id; }
+    Variant<JS::Handle<WindowProxy>, JS::Handle<MessagePort>, Empty> source() const;
 
 
 private:
 private:
     virtual void initialize(JS::Realm&) override;
     virtual void initialize(JS::Realm&) override;
@@ -39,6 +44,7 @@ private:
     JS::Value m_data;
     JS::Value m_data;
     String m_origin;
     String m_origin;
     String m_last_event_id;
     String m_last_event_id;
+    Optional<MessageEventSource> m_source;
 };
 };
 
 
 }
 }

+ 6 - 2
Userland/Libraries/LibWeb/HTML/MessageEvent.idl

@@ -1,4 +1,8 @@
 #import <DOM/Event.idl>
 #import <DOM/Event.idl>
+#import <HTML/MessagePort.idl>
+
+// FIXME: typedef (WindowProxy or MessagePort or ServiceWorker) MessageEventSource;
+typedef (WindowProxy or MessagePort) MessageEventSource;
 
 
 // https://html.spec.whatwg.org/multipage/comms.html#messageevent
 // https://html.spec.whatwg.org/multipage/comms.html#messageevent
 [Exposed=(Window,Worker)]
 [Exposed=(Window,Worker)]
@@ -8,7 +12,7 @@ interface MessageEvent : Event {
     readonly attribute any data;
     readonly attribute any data;
     readonly attribute USVString origin;
     readonly attribute USVString origin;
     readonly attribute DOMString lastEventId;
     readonly attribute DOMString lastEventId;
-    // FIXME: readonly attribute MessageEventSource? source;
+    readonly attribute MessageEventSource? source;
     // FIXME: readonly attribute FrozenArray<MessagePort> ports;
     // FIXME: readonly attribute FrozenArray<MessagePort> ports;
 };
 };
 
 
@@ -16,6 +20,6 @@ dictionary MessageEventInit : EventInit {
     any data = null;
     any data = null;
     USVString origin = "";
     USVString origin = "";
     DOMString lastEventId = "";
     DOMString lastEventId = "";
-    // FIXME: MessageEventSource? source = null;
+    MessageEventSource? source = null;
     // FIXME: sequence<MessagePort> ports = [];
     // FIXME: sequence<MessagePort> ports = [];
 };
 };