mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
Add new Window globals as debuggees
Signed-off-by: Delan Azabani <dazabani@igalia.com> Co-authored-by: atbrakhi <atbrakhi@igalia.com>
This commit is contained in:
parent
c59ee57b5d
commit
e2eabd41c9
7 changed files with 107 additions and 1 deletions
64
components/script/dom/debuggerevent.rs
Normal file
64
components/script/dom/debuggerevent.rs
Normal file
|
@ -0,0 +1,64 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||
|
||||
use std::default::Default;
|
||||
use std::ptr::NonNull;
|
||||
|
||||
use dom_struct::dom_struct;
|
||||
use js::jsapi::{JSObject, Value};
|
||||
use script_bindings::conversions::SafeToJSValConvertible;
|
||||
use script_bindings::reflector::DomObject;
|
||||
|
||||
use crate::dom::bindings::codegen::Bindings::DebuggerEventBinding::DebuggerEventMethods;
|
||||
use crate::dom::bindings::codegen::Bindings::EventBinding::Event_Binding::EventMethods;
|
||||
use crate::dom::bindings::reflector::reflect_dom_object;
|
||||
use crate::dom::bindings::root::{DomRoot, MutNullableDom};
|
||||
use crate::dom::event::Event;
|
||||
use crate::dom::types::GlobalScope;
|
||||
use crate::script_runtime::CanGc;
|
||||
|
||||
#[dom_struct]
|
||||
/// Event for Rust → JS calls in [`crate::dom::DebuggerGlobalScope`].
|
||||
pub(crate) struct DebuggerEvent {
|
||||
event: Event,
|
||||
global: MutNullableDom<GlobalScope>,
|
||||
}
|
||||
|
||||
impl DebuggerEvent {
|
||||
pub(crate) fn new(
|
||||
debugger_global: &GlobalScope,
|
||||
global: &GlobalScope,
|
||||
can_gc: CanGc,
|
||||
) -> DomRoot<Self> {
|
||||
let result = Box::new(Self {
|
||||
event: Event::new_inherited(),
|
||||
global: Default::default(),
|
||||
});
|
||||
// TODO: make these fields not optional somehow?
|
||||
result.global.set(Some(global));
|
||||
|
||||
result.event.init_event("addDebuggee".into(), false, false);
|
||||
|
||||
reflect_dom_object(result, debugger_global, can_gc)
|
||||
}
|
||||
}
|
||||
|
||||
impl DebuggerEventMethods<crate::DomTypeHolder> for DebuggerEvent {
|
||||
// check-tidy: no specs after this line
|
||||
fn Global(&self, r#cx: script_bindings::script_runtime::JSContext) -> NonNull<JSObject> {
|
||||
// Convert the debuggee global’s reflector to a Value, wrapping it from its originating realm (debuggee realm)
|
||||
// into the active realm (debugger realm) so that it can be passed across compartments.
|
||||
rooted!(in(*cx) let mut result: Value);
|
||||
self.global
|
||||
.get()
|
||||
.expect("Guaranteed by new")
|
||||
.reflector()
|
||||
.safe_to_jsval(cx, result.handle_mut());
|
||||
NonNull::new(result.to_object()).unwrap()
|
||||
}
|
||||
|
||||
fn IsTrusted(&self) -> bool {
|
||||
self.event.IsTrusted()
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue