script/dom/workers/
sharedworkerglobalscope.rs1use crossbeam_channel::{Sender, unbounded};
6use dom_struct::dom_struct;
7
8use crate::dom::abstractworker::WorkerScriptMsg;
9use crate::dom::bindings::codegen::Bindings::SharedWorkerGlobalScopeBinding::SharedWorkerGlobalScopeMethods;
10use crate::dom::bindings::inheritance::Castable;
11use crate::dom::bindings::str::DOMString;
12use crate::dom::bindings::trace::CustomTraceable;
13use crate::dom::workerglobalscope::WorkerGlobalScope;
14use crate::messaging::{ScriptEventLoopReceiver, ScriptEventLoopSender};
15
16pub(crate) enum SharedWorkerScriptMsg {
17 CommonWorker(WorkerScriptMsg),
18}
19
20#[dom_struct]
22pub(crate) struct SharedWorkerGlobalScope {
23 workerglobalscope: WorkerGlobalScope,
24 own_sender: Sender<SharedWorkerScriptMsg>,
25}
26
27impl SharedWorkerGlobalScope {
28 pub(crate) fn event_loop_sender(&self) -> ScriptEventLoopSender {
29 ScriptEventLoopSender::SharedWorker(self.own_sender.clone())
30 }
31
32 pub(crate) fn new_script_pair(&self) -> (ScriptEventLoopSender, ScriptEventLoopReceiver) {
33 let (sender, receiver) = unbounded();
34 (
35 ScriptEventLoopSender::SharedWorker(sender),
36 ScriptEventLoopReceiver::SharedWorker(receiver),
37 )
38 }
39}
40
41impl SharedWorkerGlobalScopeMethods<crate::DomTypeHolder> for SharedWorkerGlobalScope {
42 fn Name(&self) -> DOMString {
44 self.workerglobalscope.worker_name()
47 }
48
49 fn Close(&self) {
51 self.upcast::<WorkerGlobalScope>().close()
53 }
54
55 event_handler!(connect, GetOnconnect, SetOnconnect);
57}