script/dom/audio/
offlineaudiocompletionevent.rs

1/* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
5use 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    // https://webaudio.github.io/web-audio-api/#dom-offlineaudiocompletionevent-offlineaudiocompletionevent
77    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    // https://webaudio.github.io/web-audio-api/#dom-offlineaudiocompletionevent-renderedbuffer
98    fn RenderedBuffer(&self) -> DomRoot<AudioBuffer> {
99        DomRoot::from_ref(&*self.rendered_buffer)
100    }
101
102    // https://dom.spec.whatwg.org/#dom-event-istrusted
103    fn IsTrusted(&self) -> bool {
104        self.event.IsTrusted()
105    }
106}