script/dom/testing/
layoutresult.rs1use dom_struct::dom_struct;
5use js::context::JSContext;
6use js::gc::MutableHandleValue;
7use script_bindings::domstring::{DOMString, TracedDOMString};
8use script_bindings::reflector::{Reflector, reflect_dom_object};
9
10use crate::dom::bindings::codegen::Bindings::ServoTestUtilsBinding::LayoutResultMethods;
11use crate::dom::bindings::root::DomRoot;
12use crate::dom::bindings::utils::to_frozen_array;
13use crate::dom::globalscope::GlobalScope;
14
15#[dom_struct]
16pub(crate) struct LayoutResult {
17 reflector_: Reflector,
18 phases: Vec<TracedDOMString>,
19 rebuilt_fragment_count: u32,
20 restyle_fragment_count: u32,
21 only_descendants_changed_count: u32,
22}
23
24impl LayoutResult {
25 pub(crate) fn new_inherited(
26 phases: Vec<DOMString>,
27 rebuilt_fragment_count: u32,
28 restyle_fragment_count: u32,
29 only_descendants_changed_count: u32,
30 ) -> Self {
31 Self {
32 reflector_: Reflector::new(),
33 phases: phases
34 .into_iter()
35 .map(|domstring| domstring.traced())
36 .collect(),
37 rebuilt_fragment_count,
38 restyle_fragment_count,
39 only_descendants_changed_count,
40 }
41 }
42
43 pub(crate) fn new(
44 cx: &mut JSContext,
45 global: &GlobalScope,
46 phases: Vec<DOMString>,
47 rebuilt_fragment_count: u32,
48 restyle_fragment_count: u32,
49 only_descendants_changed_count: u32,
50 ) -> DomRoot<Self> {
51 reflect_dom_object(
52 cx,
53 Box::new(Self::new_inherited(
54 phases,
55 rebuilt_fragment_count,
56 restyle_fragment_count,
57 only_descendants_changed_count,
58 )),
59 global,
60 )
61 }
62}
63
64impl LayoutResultMethods<crate::DomTypeHolder> for LayoutResult {
65 fn Phases(&self, cx: &mut JSContext, return_value: MutableHandleValue) {
66 to_frozen_array(cx, &self.phases, return_value);
67 }
68
69 fn RebuiltFragmentCount(&self) -> u32 {
70 self.rebuilt_fragment_count
71 }
72
73 fn RestyleFragmentCount(&self) -> u32 {
74 self.restyle_fragment_count
75 }
76
77 fn OnlyDescendantsChangedCount(&self) -> u32 {
78 self.only_descendants_changed_count
79 }
80}