script/dom/media/
mediadeviceinfo.rs1use dom_struct::dom_struct;
6use js::context::JSContext;
7use script_bindings::reflector::{Reflector, reflect_dom_object_with_cx};
8use servo_media::streams::device_monitor::MediaDeviceKind as ServoMediaDeviceKind;
9
10use crate::conversions::Convert;
11use crate::dom::bindings::codegen::Bindings::MediaDeviceInfoBinding::{
12 MediaDeviceInfoMethods, MediaDeviceKind,
13};
14use crate::dom::bindings::root::DomRoot;
15use crate::dom::bindings::str::DOMString;
16use crate::dom::globalscope::GlobalScope;
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 cx: &mut JSContext,
45 global: &GlobalScope,
46 device_id: &str,
47 kind: MediaDeviceKind,
48 label: &str,
49 group_id: &str,
50 ) -> DomRoot<MediaDeviceInfo> {
51 reflect_dom_object_with_cx(
52 Box::new(MediaDeviceInfo::new_inherited(
53 device_id, kind, label, group_id,
54 )),
55 global,
56 cx,
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}