script/dom/
permissionstatus.rs1use std::cell::Cell;
6
7use dom_struct::dom_struct;
8
9use crate::dom::bindings::codegen::Bindings::PermissionStatusBinding::{
10 PermissionDescriptor, PermissionName, PermissionState, PermissionStatusMethods,
11};
12use crate::dom::bindings::reflector::reflect_dom_object;
13use crate::dom::bindings::root::DomRoot;
14use crate::dom::eventtarget::EventTarget;
15use crate::dom::globalscope::GlobalScope;
16use crate::script_runtime::CanGc;
17
18#[dom_struct]
20pub(crate) struct PermissionStatus {
21 eventtarget: EventTarget,
22 state: Cell<PermissionState>,
23 query: Cell<PermissionName>,
24}
25
26impl PermissionStatus {
27 pub(crate) fn new_inherited(query: PermissionName) -> PermissionStatus {
28 PermissionStatus {
29 eventtarget: EventTarget::new_inherited(),
30 state: Cell::new(PermissionState::Denied),
31 query: Cell::new(query),
32 }
33 }
34
35 pub(crate) fn new(
36 global: &GlobalScope,
37 query: &PermissionDescriptor,
38 can_gc: CanGc,
39 ) -> DomRoot<PermissionStatus> {
40 reflect_dom_object(
41 Box::new(PermissionStatus::new_inherited(query.name)),
42 global,
43 can_gc,
44 )
45 }
46
47 pub(crate) fn set_state(&self, state: PermissionState) {
48 self.state.set(state);
49 }
50
51 pub(crate) fn get_query(&self) -> PermissionName {
52 self.query.get()
53 }
54}
55
56impl PermissionStatusMethods<crate::DomTypeHolder> for PermissionStatus {
57 fn State(&self) -> PermissionState {
59 self.state.get()
60 }
61
62 event_handler!(change, GetOnchange, SetOnchange);
64}