script/dom/
mediadeviceinfo.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use 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    /// <https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-deviceid>
63    fn DeviceId(&self) -> DOMString {
64        self.device_id.clone()
65    }
66
67    /// <https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-kind>
68    fn Kind(&self) -> MediaDeviceKind {
69        self.kind
70    }
71
72    /// <https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-label>
73    fn Label(&self) -> DOMString {
74        self.label.clone()
75    }
76
77    /// <https://w3c.github.io/mediacapture-main/#dom-mediadeviceinfo-groupid>
78    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}