script/dom/audio/
mediastreamtrackaudiosourcenode.rs1use dom_struct::dom_struct;
6use js::rust::HandleObject;
7use servo_media::audio::node::AudioNodeInit;
8
9use crate::dom::audio::audiocontext::AudioContext;
10use crate::dom::audio::audionode::AudioNode;
11use crate::dom::bindings::codegen::Bindings::MediaStreamTrackAudioSourceNodeBinding::{
12 MediaStreamTrackAudioSourceNodeMethods, MediaStreamTrackAudioSourceOptions,
13};
14use crate::dom::bindings::error::Fallible;
15use crate::dom::bindings::inheritance::Castable;
16use crate::dom::bindings::reflector::reflect_dom_object_with_proto;
17use crate::dom::bindings::root::{Dom, DomRoot};
18use crate::dom::mediastreamtrack::MediaStreamTrack;
19use crate::dom::window::Window;
20use crate::script_runtime::CanGc;
21
22#[dom_struct]
23pub(crate) struct MediaStreamTrackAudioSourceNode {
24 node: AudioNode,
25 track: Dom<MediaStreamTrack>,
26}
27
28impl MediaStreamTrackAudioSourceNode {
29 #[cfg_attr(crown, allow(crown::unrooted_must_root))]
30 pub(crate) fn new_inherited(
31 context: &AudioContext,
32 track: &MediaStreamTrack,
33 ) -> Fallible<MediaStreamTrackAudioSourceNode> {
34 let node = AudioNode::new_inherited(
35 AudioNodeInit::MediaStreamSourceNode(track.id()),
36 context.upcast(),
37 Default::default(),
38 0, 1, )?;
41 Ok(MediaStreamTrackAudioSourceNode {
42 node,
43 track: Dom::from_ref(track),
44 })
45 }
46
47 pub(crate) fn new(
48 window: &Window,
49 context: &AudioContext,
50 track: &MediaStreamTrack,
51 can_gc: CanGc,
52 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
53 Self::new_with_proto(window, None, context, track, can_gc)
54 }
55
56 #[cfg_attr(crown, allow(crown::unrooted_must_root))]
57 fn new_with_proto(
58 window: &Window,
59 proto: Option<HandleObject>,
60 context: &AudioContext,
61 track: &MediaStreamTrack,
62 can_gc: CanGc,
63 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
64 let node = MediaStreamTrackAudioSourceNode::new_inherited(context, track)?;
65 Ok(reflect_dom_object_with_proto(
66 Box::new(node),
67 window,
68 proto,
69 can_gc,
70 ))
71 }
72}
73
74impl MediaStreamTrackAudioSourceNodeMethods<crate::DomTypeHolder>
75 for MediaStreamTrackAudioSourceNode
76{
77 fn Constructor(
79 window: &Window,
80 proto: Option<HandleObject>,
81 can_gc: CanGc,
82 context: &AudioContext,
83 options: &MediaStreamTrackAudioSourceOptions,
84 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
85 MediaStreamTrackAudioSourceNode::new_with_proto(
86 window,
87 proto,
88 context,
89 &options.mediaStreamTrack,
90 can_gc,
91 )
92 }
93}