diff --git a/Libraries/LibWeb/WebAudio/AudioNode.cpp b/Libraries/LibWeb/WebAudio/AudioNode.cpp index 965bf590db4..4a2dc6a50e3 100644 --- a/Libraries/LibWeb/WebAudio/AudioNode.cpp +++ b/Libraries/LibWeb/WebAudio/AudioNode.cpp @@ -101,10 +101,17 @@ void AudioNode::disconnect() } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-output -void AudioNode::disconnect(WebIDL::UnsignedLong output) +WebIDL::ExceptionOr AudioNode::disconnect(WebIDL::UnsignedLong output) { - (void)output; + // The output parameter is an index describing which output of the AudioNode to disconnect. + // It disconnects all outgoing connections from the given output. + // If this parameter is out-of-bounds, an IndexSizeError exception MUST be thrown. + if (output >= number_of_outputs()) { + return WebIDL::IndexSizeError::create(realm(), MUST(String::formatted("Output index {} exceeds number of outputs", output))); + } + dbgln("FIXME: Implement AudioNode::disconnect(output)"); + return {}; } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-destinationnode @@ -115,20 +122,37 @@ void AudioNode::disconnect(GC::Ref destination_node) } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-destinationnode-output -void AudioNode::disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output) +WebIDL::ExceptionOr AudioNode::disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output) { (void)destination_node; - (void)output; + // The output parameter is an index describing which output of the AudioNode from which to disconnect. + // If this parameter is out-of-bounds, an IndexSizeError exception MUST be thrown. + if (output >= number_of_outputs()) { + return WebIDL::IndexSizeError::create(realm(), MUST(String::formatted("Output index {} exceeds number of outputs", output))); + } + dbgln("FIXME: Implement AudioNode::disconnect(destination_node, output)"); + return {}; } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-destinationnode-output-input -void AudioNode::disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output, WebIDL::UnsignedLong input) +WebIDL::ExceptionOr AudioNode::disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output, WebIDL::UnsignedLong input) { (void)destination_node; - (void)output; - (void)input; + // The output parameter is an index describing which output of the AudioNode from which to disconnect. + // If this parameter is out-of-bounds, an IndexSizeError exception MUST be thrown. + if (output >= number_of_outputs()) { + return WebIDL::IndexSizeError::create(realm(), MUST(String::formatted("Output index {} exceeds number of outputs", output))); + } + + // The input parameter is an index describing which input of the destination AudioNode to disconnect. + // If this parameter is out-of-bounds, an IndexSizeError exception MUST be thrown. + if (input >= destination_node->number_of_inputs()) { + return WebIDL::IndexSizeError::create(realm(), MUST(String::formatted("Input index '{}' exceeds number of inputs", input))); + } + dbgln("FIXME: Implement AudioNode::disconnect(destination_node, output, input)"); + return {}; } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-destinationparam @@ -139,11 +163,17 @@ void AudioNode::disconnect(GC::Ref destination_param) } // https://webaudio.github.io/web-audio-api/#dom-audionode-disconnect-destinationparam-output -void AudioNode::disconnect(GC::Ref destination_param, WebIDL::UnsignedLong output) +WebIDL::ExceptionOr AudioNode::disconnect(GC::Ref destination_param, WebIDL::UnsignedLong output) { (void)destination_param; - (void)output; + // The output parameter is an index describing which output of the AudioNode from which to disconnect. + // If this parameter is out-of-bounds, an IndexSizeError exception MUST be thrown. + if (output >= number_of_outputs()) { + return WebIDL::IndexSizeError::create(realm(), MUST(String::formatted("Output index {} exceeds number of outputs", output))); + } + dbgln("FIXME: Implement AudioNode::disconnect(destination_param, output)"); + return {}; } // https://webaudio.github.io/web-audio-api/#dom-audionode-channelcount diff --git a/Libraries/LibWeb/WebAudio/AudioNode.h b/Libraries/LibWeb/WebAudio/AudioNode.h index d854f5a88f5..0e6bc32f93b 100644 --- a/Libraries/LibWeb/WebAudio/AudioNode.h +++ b/Libraries/LibWeb/WebAudio/AudioNode.h @@ -40,12 +40,12 @@ public: WebIDL::ExceptionOr connect(GC::Ref destination_param, WebIDL::UnsignedLong output = 0); void disconnect(); - void disconnect(WebIDL::UnsignedLong output); + WebIDL::ExceptionOr disconnect(WebIDL::UnsignedLong output); void disconnect(GC::Ref destination_node); - void disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output); - void disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output, WebIDL::UnsignedLong input); + WebIDL::ExceptionOr disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output); + WebIDL::ExceptionOr disconnect(GC::Ref destination_node, WebIDL::UnsignedLong output, WebIDL::UnsignedLong input); void disconnect(GC::Ref destination_param); - void disconnect(GC::Ref destination_param, WebIDL::UnsignedLong output); + WebIDL::ExceptionOr disconnect(GC::Ref destination_param, WebIDL::UnsignedLong output); // https://webaudio.github.io/web-audio-api/#dom-audionode-context GC::Ref context() const