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