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