script/dom/audio/
offlineaudiocompletionevent.rs1use dom_struct::dom_struct;
6use js::rust::HandleObject;
7use stylo_atoms::Atom;
8
9use crate::dom::audio::audiobuffer::AudioBuffer;
10use crate::dom::bindings::codegen::Bindings::EventBinding::EventMethods;
11use crate::dom::bindings::codegen::Bindings::OfflineAudioCompletionEventBinding::{
12 OfflineAudioCompletionEventInit, OfflineAudioCompletionEventMethods,
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::bindings::str::DOMString;
19use crate::dom::event::{Event, EventBubbles, EventCancelable};
20use crate::dom::window::Window;
21use crate::script_runtime::CanGc;
22
23#[dom_struct]
24pub(crate) struct OfflineAudioCompletionEvent {
25 event: Event,
26 rendered_buffer: Dom<AudioBuffer>,
27}
28
29impl OfflineAudioCompletionEvent {
30 pub(crate) fn new_inherited(rendered_buffer: &AudioBuffer) -> OfflineAudioCompletionEvent {
31 OfflineAudioCompletionEvent {
32 event: Event::new_inherited(),
33 rendered_buffer: Dom::from_ref(rendered_buffer),
34 }
35 }
36
37 pub(crate) fn new(
38 window: &Window,
39 type_: Atom,
40 bubbles: EventBubbles,
41 cancelable: EventCancelable,
42 rendered_buffer: &AudioBuffer,
43 can_gc: CanGc,
44 ) -> DomRoot<OfflineAudioCompletionEvent> {
45 Self::new_with_proto(
46 window,
47 None,
48 type_,
49 bubbles,
50 cancelable,
51 rendered_buffer,
52 can_gc,
53 )
54 }
55
56 fn new_with_proto(
57 window: &Window,
58 proto: Option<HandleObject>,
59 type_: Atom,
60 bubbles: EventBubbles,
61 cancelable: EventCancelable,
62 rendered_buffer: &AudioBuffer,
63 can_gc: CanGc,
64 ) -> DomRoot<OfflineAudioCompletionEvent> {
65 let event = Box::new(OfflineAudioCompletionEvent::new_inherited(rendered_buffer));
66 let ev = reflect_dom_object_with_proto(event, window, proto, can_gc);
67 {
68 let event = ev.upcast::<Event>();
69 event.init_event(type_, bool::from(bubbles), bool::from(cancelable));
70 }
71 ev
72 }
73}
74
75impl OfflineAudioCompletionEventMethods<crate::DomTypeHolder> for OfflineAudioCompletionEvent {
76 fn Constructor(
78 window: &Window,
79 proto: Option<HandleObject>,
80 can_gc: CanGc,
81 type_: DOMString,
82 init: &OfflineAudioCompletionEventInit,
83 ) -> Fallible<DomRoot<OfflineAudioCompletionEvent>> {
84 let bubbles = EventBubbles::from(init.parent.bubbles);
85 let cancelable = EventCancelable::from(init.parent.cancelable);
86 Ok(OfflineAudioCompletionEvent::new_with_proto(
87 window,
88 proto,
89 Atom::from(type_),
90 bubbles,
91 cancelable,
92 &init.renderedBuffer,
93 can_gc,
94 ))
95 }
96
97 fn RenderedBuffer(&self) -> DomRoot<AudioBuffer> {
99 DomRoot::from_ref(&*self.rendered_buffer)
100 }
101
102 fn IsTrusted(&self) -> bool {
104 self.event.IsTrusted()
105 }
106}