diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp index b5d5693783f..41f8eb94775 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,24 @@ void BaseAudioContext::initialize(JS::Realm& realm) WEB_SET_PROTOTYPE_FOR_INTERFACE(BaseAudioContext); } +void BaseAudioContext::visit_edges(Cell::Visitor& visitor) +{ + Base::visit_edges(visitor); + visitor.visit(m_destination); +} + +// https://webaudio.github.io/web-audio-api/#dom-baseaudiocontext-destination +JS::NonnullGCPtr BaseAudioContext::destination() +{ + auto& realm = this->realm(); + + dbgln("FIXME: Properly implement BaseAudioContext::destination"); + + if (!m_destination) + m_destination = realm.heap().allocate(realm, realm, *this); + return *m_destination; +} + void BaseAudioContext::set_onstatechange(WebIDL::CallbackType* event_handler) { set_event_handler_attribute(HTML::EventNames::statechange, event_handler); diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h index a11f13ce1bb..e0a337135f1 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.h @@ -55,17 +55,22 @@ public: WebIDL::ExceptionOr> create_dynamics_compressor(); JS::NonnullGCPtr create_gain(); + JS::NonnullGCPtr destination(); + protected: explicit BaseAudioContext(JS::Realm&, float m_sample_rate = 0); virtual void initialize(JS::Realm&) override; + virtual void visit_edges(Cell::Visitor& visitor) override; + private: float m_sample_rate { 0 }; double m_current_time { 0 }; Bindings::AudioContextState m_control_thread_state = Bindings::AudioContextState::Suspended; Bindings::AudioContextState m_rendering_thread_state = Bindings::AudioContextState::Suspended; + JS::GCPtr m_destination; }; } diff --git a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl index c28c3915760..f768efe82f4 100644 --- a/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl +++ b/Userland/Libraries/LibWeb/WebAudio/BaseAudioContext.idl @@ -2,6 +2,7 @@ #import #import #import +#import #import #import #import @@ -16,7 +17,7 @@ enum AudioContextState { "suspended", "running", "closed" }; // https://webaudio.github.io/web-audio-api/#BaseAudioContext [Exposed=Window] interface BaseAudioContext : EventTarget { - [FIXME] readonly attribute AudioDestinationNode destination; + readonly attribute AudioDestinationNode destination; readonly attribute float sampleRate; readonly attribute double currentTime; [FIXME] readonly attribute AudioListener listener;