Skip to main content

script/dom/debugger/
debuggerevalevent.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use dom_struct::dom_struct;
6use js::context::JSContext;
7use script_bindings::domstring::TracedDOMString;
8use script_bindings::reflector::reflect_dom_object;
9use script_bindings::str::DOMString;
10
11use crate::dom::bindings::codegen::Bindings::DebuggerEvalEventBinding::DebuggerEvalEventMethods;
12use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods;
13use crate::dom::bindings::root::{Dom, DomRoot};
14use crate::dom::event::Event;
15use crate::dom::types::{GlobalScope, PipelineId};
16
17#[dom_struct]
18/// Event for Rust → JS calls in [`crate::dom::debugger::DebuggerGlobalScope`].
19pub(crate) struct DebuggerEvalEvent {
20    event: Event,
21    code: TracedDOMString,
22    pipeline_id: Dom<PipelineId>,
23    worker_id: Option<TracedDOMString>,
24    frame_actor_id: Option<TracedDOMString>,
25    eager: bool,
26}
27
28impl DebuggerEvalEvent {
29    pub(crate) fn new(
30        cx: &mut JSContext,
31        debugger_global: &GlobalScope,
32        code: DOMString,
33        pipeline_id: &PipelineId,
34        worker_id: Option<DOMString>,
35        frame_actor_id: Option<DOMString>,
36        eager: bool,
37    ) -> DomRoot<Self> {
38        let result = Box::new(Self {
39            event: Event::new_inherited(),
40            code: code.traced(),
41            pipeline_id: Dom::from_ref(pipeline_id),
42            worker_id: worker_id.map(|domstring| domstring.traced()),
43            frame_actor_id: frame_actor_id.map(|domstring| domstring.traced()),
44            eager,
45        });
46        let result = reflect_dom_object(cx, result, debugger_global);
47        result.event.init_event("eval".into(), false, false);
48
49        result
50    }
51}
52
53impl DebuggerEvalEventMethods<crate::DomTypeHolder> for DebuggerEvalEvent {
54    // check-tidy: no specs after this line
55    fn Code(&self) -> DOMString {
56        self.code.clone().root()
57    }
58
59    fn PipelineId(
60        &self,
61    ) -> DomRoot<<crate::DomTypeHolder as script_bindings::DomTypes>::PipelineId> {
62        DomRoot::from_ref(&self.pipeline_id)
63    }
64
65    fn GetWorkerId(&self) -> Option<DOMString> {
66        self.worker_id.clone().map(|domstring| domstring.root())
67    }
68
69    fn GetFrameActorId(&self) -> Option<DOMString> {
70        self.frame_actor_id
71            .clone()
72            .map(|domstring| domstring.root())
73    }
74
75    fn Eager(&self) -> bool {
76        self.eager
77    }
78
79    fn IsTrusted(&self) -> bool {
80        self.event.IsTrusted()
81    }
82}