diff options
author | Gregory Terzian <gterzian@users.noreply.github.com> | 2019-06-26 00:25:48 +0800 |
---|---|---|
committer | Gregory Terzian <gterzian@users.noreply.github.com> | 2019-10-19 14:28:18 +0800 |
commit | 2f8932a6a1e2666567435114383b3acd1899aca7 (patch) | |
tree | 8490d198d1c22015afeae84ad25f21ecca462415 /components/script/dom/extendablemessageevent.rs | |
parent | c3b17c1201441c9a24c4b272108aea0196fbf1b9 (diff) | |
download | servo-2f8932a6a1e2666567435114383b3acd1899aca7.tar.gz servo-2f8932a6a1e2666567435114383b3acd1899aca7.zip |
continue messageport, transferable, postmessage options
Diffstat (limited to 'components/script/dom/extendablemessageevent.rs')
-rw-r--r-- | components/script/dom/extendablemessageevent.rs | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs index c2ede65745a..dab06b7d79d 100644 --- a/components/script/dom/extendablemessageevent.rs +++ b/components/script/dom/extendablemessageevent.rs @@ -10,10 +10,12 @@ use crate::dom::bindings::reflector::reflect_dom_object; use crate::dom::bindings::root::DomRoot; use crate::dom::bindings::str::DOMString; use crate::dom::bindings::trace::RootedTraceableBox; +use crate::dom::bindings::utils::message_ports_to_frozen_array; use crate::dom::event::Event; use crate::dom::eventtarget::EventTarget; use crate::dom::extendableevent::ExtendableEvent; use crate::dom::globalscope::GlobalScope; +use crate::dom::messageport::MessagePort; use crate::dom::serviceworkerglobalscope::ServiceWorkerGlobalScope; use crate::script_runtime::JSContext; use dom_struct::dom_struct; @@ -29,6 +31,7 @@ pub struct ExtendableMessageEvent { data: Heap<JSVal>, origin: DOMString, lastEventId: DOMString, + ports: Vec<DomRoot<MessagePort>>, } impl ExtendableMessageEvent { @@ -40,12 +43,14 @@ impl ExtendableMessageEvent { data: HandleValue, origin: DOMString, lastEventId: DOMString, + ports: Vec<DomRoot<MessagePort>>, ) -> DomRoot<ExtendableMessageEvent> { let ev = Box::new(ExtendableMessageEvent { event: ExtendableEvent::new_inherited(), data: Heap::default(), - origin: origin, - lastEventId: lastEventId, + origin, + lastEventId, + ports, }); let ev = reflect_dom_object(ev, global, ExtendableMessageEventBinding::Wrap); { @@ -71,13 +76,19 @@ impl ExtendableMessageEvent { init.data.handle(), init.origin.clone().unwrap(), init.lastEventId.clone().unwrap(), + vec![], ); Ok(ev) } } impl ExtendableMessageEvent { - pub fn dispatch_jsval(target: &EventTarget, scope: &GlobalScope, message: HandleValue) { + pub fn dispatch_jsval( + target: &EventTarget, + scope: &GlobalScope, + message: HandleValue, + ports: Vec<DomRoot<MessagePort>>, + ) { let Extendablemessageevent = ExtendableMessageEvent::new( scope, atom!("message"), @@ -86,6 +97,7 @@ impl ExtendableMessageEvent { message, DOMString::new(), DOMString::new(), + ports, ); Extendablemessageevent.upcast::<Event>().fire(target); } @@ -111,4 +123,9 @@ impl ExtendableMessageEventMethods for ExtendableMessageEvent { fn IsTrusted(&self) -> bool { self.event.IsTrusted() } + + /// https://w3c.github.io/ServiceWorker/#extendablemessage-event-ports + fn Ports(&self, cx: JSContext) -> JSVal { + message_ports_to_frozen_array(self.ports.as_slice(), cx) + } } |