script/dom/
mediadeviceinfo.rs1use dom_struct::dom_struct;
6use servo_media::streams::device_monitor::MediaDeviceKind as ServoMediaDeviceKind;
7
8use crate::conversions::Convert;
9use crate::dom::bindings::codegen::Bindings::MediaDeviceInfoBinding::{
10 MediaDeviceInfoMethods, MediaDeviceKind,
11};
12use crate::dom::bindings::reflector::{Reflector, reflect_dom_object};
13use crate::dom::bindings::root::DomRoot;
14use crate::dom::bindings::str::DOMString;
15use crate::dom::globalscope::GlobalScope;
16use crate::script_runtime::CanGc;
17
18#[dom_struct]
19pub(crate) struct MediaDeviceInfo {
20 reflector_: Reflector,
21 device_id: DOMString,
22 kind: MediaDeviceKind,
23 label: DOMString,
24 group_id: DOMString,
25}
26
27impl MediaDeviceInfo {
28 fn new_inherited(
29 device_id: &str,
30 kind: MediaDeviceKind,
31 label: &str,
32 group_id: &str,
33 ) -> MediaDeviceInfo {
34 MediaDeviceInfo {
35 reflector_: Reflector::new(),
36 device_id: DOMString::from(device_id),
37 kind,
38 label: DOMString::from(label),
39 group_id: DOMString::from(group_id),
40 }
41 }
42
43 pub(crate) fn new(
44 global: &GlobalScope,
45 device_id: &str,
46 kind: MediaDeviceKind,
47 label: &str,
48 group_id: &str,
49 can_gc: CanGc,
50 ) -> DomRoot<MediaDeviceInfo> {
51 reflect_dom_object(
52 Box::new(MediaDeviceInfo::new_inherited(
53 device_id, kind, label, group_id,
54 )),
55 global,
56 can_gc,
57 )
58 }
59}
60
61impl MediaDeviceInfoMethods<crate::DomTypeHolder> for MediaDeviceInfo {
62 fn DeviceId(&self) -> DOMString {
64 self.device_id.clone()
65 }
66
67 fn Kind(&self) -> MediaDeviceKind {
69 self.kind
70 }
71
72 fn Label(&self) -> DOMString {
74 self.label.clone()
75 }
76
77 fn GroupId(&self) -> DOMString {
79 self.group_id.clone()
80 }
81}
82
83impl Convert<MediaDeviceKind> for ServoMediaDeviceKind {
84 fn convert(self) -> MediaDeviceKind {
85 match self {
86 ServoMediaDeviceKind::AudioInput => MediaDeviceKind::Audioinput,
87 ServoMediaDeviceKind::AudioOutput => MediaDeviceKind::Audiooutput,
88 ServoMediaDeviceKind::VideoInput => MediaDeviceKind::Videoinput,
89 }
90 }
91}