script/dom/debugger/
debuggeradddebuggeeevent.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use js::conversions::ToJSValConvertible;
8use js::jsapi::{Heap, JSObject, Value};
9use js::rust::MutableHandleObject;
10use script_bindings::domstring::TracedDOMString;
11use script_bindings::reflector::{DomObject, reflect_dom_object};
12use script_bindings::str::DOMString;
13
14use crate::dom::bindings::codegen::Bindings::DebuggerAddDebuggeeEventBinding::DebuggerAddDebuggeeEventMethods;
15use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods;
16use crate::dom::bindings::root::{Dom, DomRoot};
17use crate::dom::event::Event;
18use crate::dom::types::{GlobalScope, PipelineId};
19
20#[dom_struct]
21pub(crate) struct DebuggerAddDebuggeeEvent {
23 event: Event,
24 #[ignore_malloc_size_of = "Measured by the JS engine"]
25 global: Heap<*mut JSObject>,
26 pipeline_id: Dom<PipelineId>,
27 worker_id: Option<TracedDOMString>,
28}
29
30impl DebuggerAddDebuggeeEvent {
31 pub(crate) fn new(
32 cx: &mut JSContext,
33 debugger_global: &GlobalScope,
34 global: &GlobalScope,
35 pipeline_id: &PipelineId,
36 worker_id: Option<DOMString>,
37 ) -> DomRoot<Self> {
38 let result = Box::new(Self {
39 event: Event::new_inherited(),
40 global: Heap::default(),
41 pipeline_id: Dom::from_ref(pipeline_id),
42 worker_id: worker_id.map(|domstring| domstring.traced()),
43 });
44 let result = reflect_dom_object(cx, result, debugger_global);
45 result.event.init_event("addDebuggee".into(), false, false);
46
47 rooted!(&in(cx) let mut wrapped_global: Value);
50 global.reflector().to_jsval(cx, wrapped_global.handle_mut());
51 result.global.set(wrapped_global.to_object());
52
53 result
54 }
55}
56
57impl DebuggerAddDebuggeeEventMethods<crate::DomTypeHolder> for DebuggerAddDebuggeeEvent {
58 fn Global(&self, mut return_value: MutableHandleObject) {
60 return_value.set(self.global.get());
61 }
62
63 fn PipelineId(
64 &self,
65 ) -> DomRoot<<crate::DomTypeHolder as script_bindings::DomTypes>::PipelineId> {
66 DomRoot::from_ref(&self.pipeline_id)
67 }
68
69 fn GetWorkerId(&self) -> Option<DOMString> {
70 self.worker_id.clone().map(|domstring| domstring.root())
71 }
72
73 fn IsTrusted(&self) -> bool {
74 self.event.IsTrusted()
75 }
76}