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_and_cx;
17use crate::dom::bindings::root::{Dom, DomRoot};
18use crate::dom::mediastreamtrack::MediaStreamTrack;
19use crate::dom::window::Window;
20
21#[dom_struct]
22pub(crate) struct MediaStreamTrackAudioSourceNode {
23 node: AudioNode,
24 track: Dom<MediaStreamTrack>,
25}
26
27impl MediaStreamTrackAudioSourceNode {
28 #[cfg_attr(crown, expect(crown::unrooted_must_root))]
29 pub(crate) fn new_inherited(
30 context: &AudioContext,
31 track: &MediaStreamTrack,
32 ) -> Fallible<MediaStreamTrackAudioSourceNode> {
33 let node = AudioNode::new_inherited(
34 AudioNodeInit::MediaStreamSourceNode(track.id()),
35 context.upcast(),
36 Default::default(),
37 0, 1, )?;
40 Ok(MediaStreamTrackAudioSourceNode {
41 node,
42 track: Dom::from_ref(track),
43 })
44 }
45
46 pub(crate) fn new(
47 cx: &mut js::context::JSContext,
48 window: &Window,
49 context: &AudioContext,
50 track: &MediaStreamTrack,
51 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
52 Self::new_with_proto(cx, window, None, context, track)
53 }
54
55 #[cfg_attr(crown, expect(crown::unrooted_must_root))]
56 fn new_with_proto(
57 cx: &mut js::context::JSContext,
58 window: &Window,
59 proto: Option<HandleObject>,
60 context: &AudioContext,
61 track: &MediaStreamTrack,
62 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
63 let node = MediaStreamTrackAudioSourceNode::new_inherited(context, track)?;
64 Ok(reflect_dom_object_with_proto_and_cx(
65 Box::new(node),
66 window,
67 proto,
68 cx,
69 ))
70 }
71}
72
73impl MediaStreamTrackAudioSourceNodeMethods<crate::DomTypeHolder>
74 for MediaStreamTrackAudioSourceNode
75{
76 fn Constructor(
78 cx: &mut js::context::JSContext,
79 window: &Window,
80 proto: Option<HandleObject>,
81 context: &AudioContext,
82 options: &MediaStreamTrackAudioSourceOptions,
83 ) -> Fallible<DomRoot<MediaStreamTrackAudioSourceNode>> {
84 MediaStreamTrackAudioSourceNode::new_with_proto(
85 cx,
86 window,
87 proto,
88 context,
89 &options.mediaStreamTrack,
90 )
91 }
92}