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::performance::performanceentry::{EntryType, PerformanceEntry};
20use crate::script_runtime::CanGc;
21
22#[dom_struct]
23pub(crate) struct VisibilityStateEntry {
24 entry: PerformanceEntry,
25}
26
27impl VisibilityStateEntry {
28 fn new_inherited(
29 state: DocumentVisibilityState,
30 timestamp: CrossProcessInstant,
31 ) -> VisibilityStateEntry {
32 let name = match state {
33 DocumentVisibilityState::Visible => DOMString::from("visible"),
34 DocumentVisibilityState::Hidden => DOMString::from("hidden"),
35 };
36 VisibilityStateEntry {
37 entry: PerformanceEntry::new_inherited(
38 name,
39 EntryType::VisibilityState,
40 Some(timestamp),
41 Duration::ZERO,
42 ),
43 }
44 }
45
46 pub(crate) fn new(
47 global: &GlobalScope,
48 state: DocumentVisibilityState,
49 timestamp: CrossProcessInstant,
50 can_gc: CanGc,
51 ) -> DomRoot<VisibilityStateEntry> {
52 reflect_dom_object(
53 Box::new(VisibilityStateEntry::new_inherited(state, timestamp)),
54 global,
55 can_gc,
56 )
57 }
58}
59
60impl VisibilityStateEntryMethods<crate::DomTypeHolder> for VisibilityStateEntry {
61 fn Name(&self) -> DOMString {
63 self.entry.Name()
64 }
65
66 fn EntryType(&self) -> DOMString {
68 self.entry.EntryType()
69 }
70
71 fn StartTime(&self) -> Finite<f64> {
73 self.entry.StartTime()
74 }
75
76 fn Duration(&self) -> u32 {
78 *self.entry.Duration().deref() as u32
79 }
80}