LibWeb: Validate AudioParam context in AudioNode::connect()

An exception is now thown if an `AudioNode` attempts to connect to an
`AudioParam` from a different `BaseAudioContext`.
This commit is contained in:
Tim Ledbetter
2025-01-08 20:04:28 +00:00
committed by Tim Ledbetter
parent 2edd0812ca
commit 5c57acf140
14 changed files with 54 additions and 43 deletions

View File

@@ -7,14 +7,16 @@
#include <LibWeb/Bindings/AudioParamPrototype.h>
#include <LibWeb/Bindings/Intrinsics.h>
#include <LibWeb/WebAudio/AudioParam.h>
#include <LibWeb/WebAudio/BaseAudioContext.h>
#include <LibWeb/WebIDL/ExceptionOr.h>
namespace Web::WebAudio {
GC_DEFINE_ALLOCATOR(AudioParam);
AudioParam::AudioParam(JS::Realm& realm, float default_value, float min_value, float max_value, Bindings::AutomationRate automation_rate)
AudioParam::AudioParam(JS::Realm& realm, GC::Ref<BaseAudioContext> context, float default_value, float min_value, float max_value, Bindings::AutomationRate automation_rate)
: Bindings::PlatformObject(realm)
, m_context(context)
, m_current_value(default_value)
, m_default_value(default_value)
, m_min_value(min_value)
@@ -23,9 +25,9 @@ AudioParam::AudioParam(JS::Realm& realm, float default_value, float min_value, f
{
}
GC::Ref<AudioParam> AudioParam::create(JS::Realm& realm, float default_value, float min_value, float max_value, Bindings::AutomationRate automation_rate)
GC::Ref<AudioParam> AudioParam::create(JS::Realm& realm, GC::Ref<BaseAudioContext> context, float default_value, float min_value, float max_value, Bindings::AutomationRate automation_rate)
{
return realm.create<AudioParam>(realm, default_value, min_value, max_value, automation_rate);
return realm.create<AudioParam>(realm, context, default_value, min_value, max_value, automation_rate);
}
AudioParam::~AudioParam() = default;
@@ -143,6 +145,7 @@ void AudioParam::initialize(JS::Realm& realm)
void AudioParam::visit_edges(Cell::Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_context);
}
}