script/dom/
visibilitystateentry.rs1use std::ops::Deref;
6
7use base::cross_process_instant::CrossProcessInstant;
8use dom_struct::dom_struct;
9use time::Duration;
10
11use crate::dom::bindings::codegen::Bindings::DocumentBinding::DocumentVisibilityState;
12use crate::dom::bindings::codegen::Bindings::PerformanceEntryBinding::PerformanceEntryMethods;
13use crate::dom::bindings::codegen::Bindings::VisibilityStateEntryBinding::VisibilityStateEntryMethods;
14use crate::dom::bindings::num::Finite;
15use crate::dom::bindings::reflector::reflect_dom_object;
16use crate::dom::bindings::root::DomRoot;
17use crate::dom::bindings::str::DOMString;
18use crate::dom::globalscope::GlobalScope;
19use crate::dom::performanceentry::PerformanceEntry;
20use crate::script_runtime::CanGc;
21
22#[dom_struct]
23pub(crate) struct VisibilityStateEntry {
24 entry: PerformanceEntry,
25}
26
27impl VisibilityStateEntry {
28 #[cfg_attr(crown, allow(crown::unrooted_must_root))]
29 fn new_inherited(
30 state: DocumentVisibilityState,
31 timestamp: CrossProcessInstant,
32 ) -> VisibilityStateEntry {
33 let name = match state {
34 DocumentVisibilityState::Visible => DOMString::from("visible"),
35 DocumentVisibilityState::Hidden => DOMString::from("hidden"),
36 };
37 VisibilityStateEntry {
38 entry: PerformanceEntry::new_inherited(
39 name,
40 DOMString::from("visibility-state"),
41 Some(timestamp),
42 Duration::ZERO,
43 ),
44 }
45 }
46
47 pub(crate) fn new(
48 global: &GlobalScope,
49 state: DocumentVisibilityState,
50 timestamp: CrossProcessInstant,
51 can_gc: CanGc,
52 ) -> DomRoot<VisibilityStateEntry> {
53 reflect_dom_object(
54 Box::new(VisibilityStateEntry::new_inherited(state, timestamp)),
55 global,
56 can_gc,
57 )
58 }
59}
60
61impl VisibilityStateEntryMethods<crate::DomTypeHolder> for VisibilityStateEntry {
62 fn Name(&self) -> DOMString {
64 self.entry.Name()
65 }
66
67 fn EntryType(&self) -> DOMString {
69 self.entry.EntryType()
70 }
71
72 fn StartTime(&self) -> Finite<f64> {
74 self.entry.StartTime()
75 }
76
77 fn Duration(&self) -> u32 {
79 *self.entry.Duration().deref() as u32
80 }
81}