Skip to main content

script/dom/media/
mediastreamtrack.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 script_bindings::reflector::reflect_dom_object;
7use servo_media::streams::MediaStreamType;
8use servo_media::streams::registry::MediaStreamId;
9
10use crate::dom::bindings::codegen::Bindings::MediaStreamTrackBinding::MediaStreamTrackMethods;
11use crate::dom::bindings::reflector::DomGlobal;
12use crate::dom::bindings::root::DomRoot;
13use crate::dom::bindings::str::DOMString;
14use crate::dom::eventtarget::EventTarget;
15use crate::dom::globalscope::GlobalScope;
16
17#[dom_struct]
18pub(crate) struct MediaStreamTrack {
19    eventtarget: EventTarget,
20    #[no_trace]
21    id: MediaStreamId,
22    #[no_trace]
23    ty: MediaStreamType,
24}
25
26impl MediaStreamTrack {
27    pub(crate) fn new_inherited(id: MediaStreamId, ty: MediaStreamType) -> MediaStreamTrack {
28        MediaStreamTrack {
29            eventtarget: EventTarget::new_inherited(),
30            id,
31            ty,
32        }
33    }
34
35    pub(crate) fn new(
36        cx: &mut js::context::JSContext,
37        global: &GlobalScope,
38        id: MediaStreamId,
39        ty: MediaStreamType,
40    ) -> DomRoot<MediaStreamTrack> {
41        reflect_dom_object(
42            cx,
43            Box::new(MediaStreamTrack::new_inherited(id, ty)),
44            global,
45        )
46    }
47
48    pub(crate) fn id(&self) -> MediaStreamId {
49        self.id
50    }
51
52    pub(crate) fn ty(&self) -> MediaStreamType {
53        self.ty
54    }
55}
56
57impl MediaStreamTrackMethods<crate::DomTypeHolder> for MediaStreamTrack {
58    /// <https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-kind>
59    fn Kind(&self) -> DOMString {
60        match self.ty {
61            MediaStreamType::Video => DOMString::from_static("video"),
62            MediaStreamType::Audio => DOMString::from_static("audio"),
63        }
64    }
65
66    /// <https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-id>
67    fn Id(&self) -> DOMString {
68        self.id.id().to_string().into()
69    }
70
71    /// <https://w3c.github.io/mediacapture-main/#dom-mediastreamtrack-clone>
72    fn Clone(&self, cx: &mut js::context::JSContext) -> DomRoot<MediaStreamTrack> {
73        MediaStreamTrack::new(cx, &self.global(), self.id, self.ty)
74    }
75}