aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/extendablemessageevent.rs
diff options
context:
space:
mode:
authorGregory Terzian <gterzian@users.noreply.github.com>2019-06-26 00:25:48 +0800
committerGregory Terzian <gterzian@users.noreply.github.com>2019-10-19 14:28:18 +0800
commit2f8932a6a1e2666567435114383b3acd1899aca7 (patch)
tree8490d198d1c22015afeae84ad25f21ecca462415 /components/script/dom/extendablemessageevent.rs
parentc3b17c1201441c9a24c4b272108aea0196fbf1b9 (diff)
downloadservo-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.rs23
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)
+ }
}