diff --git a/components/script/dom/extendablemessageevent.rs b/components/script/dom/extendablemessageevent.rs index 8d1a965808b..19bca33c6ca 100644 --- a/components/script/dom/extendablemessageevent.rs +++ b/components/script/dom/extendablemessageevent.rs @@ -28,11 +28,16 @@ use servo_atoms::Atom; #[dom_struct] #[allow(non_snake_case)] pub struct ExtendableMessageEvent { + /// https://w3c.github.io/ServiceWorker/#extendableevent event: ExtendableEvent, + /// https://w3c.github.io/ServiceWorker/#dom-extendablemessageevent-data #[ignore_malloc_size_of = "mozjs"] data: Heap, + /// origin: DOMString, + /// https://w3c.github.io/ServiceWorker/#dom-extendablemessageevent-lasteventid lastEventId: DOMString, + /// https://w3c.github.io/ServiceWorker/#dom-extendablemessageevent-ports ports: Vec>, #[ignore_malloc_size_of = "mozjs"] frozen_ports: DomRefCell>>, @@ -95,8 +100,8 @@ impl ExtendableMessageEvent { init.parent.parent.bubbles, init.parent.parent.cancelable, init.data.handle(), - init.origin.clone().unwrap(), - init.lastEventId.clone().unwrap(), + init.origin.clone(), + init.lastEventId.clone(), vec![], ); Ok(ev) @@ -123,6 +128,21 @@ impl ExtendableMessageEvent { ); Extendablemessageevent.upcast::().fire(target); } + + pub fn dispatch_error(target: &EventTarget, scope: &GlobalScope) { + let init = ExtendableMessageEventBinding::ExtendableMessageEventInit::empty(); + let ExtendableMsgEvent = ExtendableMessageEvent::new( + scope, + atom!("messageerror"), + init.parent.parent.bubbles, + init.parent.parent.cancelable, + init.data.handle(), + init.origin.clone(), + init.lastEventId.clone(), + init.ports.clone(), + ); + ExtendableMsgEvent.upcast::().fire(target); + } } impl ExtendableMessageEventMethods for ExtendableMessageEvent { diff --git a/components/script/dom/serviceworkerglobalscope.rs b/components/script/dom/serviceworkerglobalscope.rs index 2e742ec9360..0c5a37709c4 100644 --- a/components/script/dom/serviceworkerglobalscope.rs +++ b/components/script/dom/serviceworkerglobalscope.rs @@ -19,7 +19,6 @@ use crate::dom::extendableevent::ExtendableEvent; use crate::dom::extendablemessageevent::ExtendableMessageEvent; use crate::dom::globalscope::GlobalScope; use crate::dom::identityhub::Identities; -use crate::dom::messageevent::MessageEvent; use crate::dom::worker::TrustedWorkerAddress; use crate::dom::workerglobalscope::WorkerGlobalScope; use crate::fetch::load_whole_resource; @@ -446,7 +445,7 @@ impl ServiceWorkerGlobalScope { ports, ); } else { - MessageEvent::dispatch_error(target, scope.upcast()); + ExtendableMessageEvent::dispatch_error(target, scope.upcast()); } }, CommonWorker(WorkerScriptMsg::Common(msg)) => { diff --git a/components/script/dom/webidls/ExtendableMessageEvent.webidl b/components/script/dom/webidls/ExtendableMessageEvent.webidl index 1976fd77dd8..247c08e7989 100644 --- a/components/script/dom/webidls/ExtendableMessageEvent.webidl +++ b/components/script/dom/webidls/ExtendableMessageEvent.webidl @@ -16,9 +16,9 @@ interface ExtendableMessageEvent : ExtendableEvent { }; dictionary ExtendableMessageEventInit : ExtendableEventInit { - any data; - DOMString origin; - DOMString lastEventId; + any data = null; + DOMString origin = ""; + DOMString lastEventId = ""; // (Client or ServiceWorker /*or MessagePort*/)? source; - // sequence? ports; + sequence ports = []; };