script/dom/media/
mediastreamtrack.rs1use 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 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 fn Id(&self) -> DOMString {
68 self.id.id().to_string().into()
69 }
70
71 fn Clone(&self, cx: &mut js::context::JSContext) -> DomRoot<MediaStreamTrack> {
73 MediaStreamTrack::new(cx, &self.global(), self.id, self.ty)
74 }
75}