Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2100)

Unified Diff: Source/modules/webaudio/AudioNode.cpp

Issue 24877002: Add more informative messages for DOM exceptions. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Upload again Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/modules/webaudio/AudioContext.cpp ('k') | Source/modules/webaudio/DefaultAudioDestinationNode.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webaudio/AudioNode.cpp
diff --git a/Source/modules/webaudio/AudioNode.cpp b/Source/modules/webaudio/AudioNode.cpp
index 0e66fd12f366797aac7a1b8de3ae1f9cfc7fffc1..ee7576c05742d50ff282b5620170749c1b32181b 100644
--- a/Source/modules/webaudio/AudioNode.cpp
+++ b/Source/modules/webaudio/AudioNode.cpp
@@ -28,6 +28,7 @@
#include "modules/webaudio/AudioNode.h"
+#include "bindings/v8/ExceptionMessages.h"
#include "bindings/v8/ExceptionState.h"
#include "core/dom/ExceptionCode.h"
#include "modules/webaudio/AudioContext.h"
@@ -130,23 +131,43 @@ void AudioNode::connect(AudioNode* destination, unsigned outputIndex, unsigned i
AudioContext::AutoLocker locker(context());
if (!destination) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "invalid destination node."));
return;
}
// Sanity check input and output indices.
if (outputIndex >= numberOfOutputs()) {
- es.throwUninformativeAndGenericDOMException(IndexSizeError);
+ es.throwDOMException(
+ IndexSizeError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "output index (" + String::number(outputIndex) + ") exceeds number of outputs (" + String::number(numberOfOutputs()) + ")."));
return;
}
if (destination && inputIndex >= destination->numberOfInputs()) {
- es.throwUninformativeAndGenericDOMException(IndexSizeError);
+ es.throwDOMException(
+ IndexSizeError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "input index (" + String::number(inputIndex) + ") exceeds number of inputs (" + String::number(destination->numberOfInputs()) + ")."));
return;
}
if (context() != destination->context()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "cannot connect to a destination belonging to a different audio context."));
return;
}
@@ -164,17 +185,32 @@ void AudioNode::connect(AudioParam* param, unsigned outputIndex, ExceptionState&
AudioContext::AutoLocker locker(context());
if (!param) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "invalid AudioParam."));
return;
}
if (outputIndex >= numberOfOutputs()) {
- es.throwUninformativeAndGenericDOMException(IndexSizeError);
+ es.throwDOMException(
+ IndexSizeError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "output index (" + String::number(outputIndex) + ") exceeds number of outputs (" + String::number(numberOfOutputs()) + ")."));
return;
}
if (context() != param->context()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToExecute(
+ "connect",
+ "AudioNode",
+ "cannot connect to an AudioParam belonging to a different audio context."));
return;
}
@@ -189,7 +225,12 @@ void AudioNode::disconnect(unsigned outputIndex, ExceptionState& es)
// Sanity check input and output indices.
if (outputIndex >= numberOfOutputs()) {
- es.throwUninformativeAndGenericDOMException(IndexSizeError);
+ es.throwDOMException(
+ IndexSizeError,
+ ExceptionMessages::failedToExecute(
+ "disconnect",
+ "AudioNode",
+ "output index (" + String::number(outputIndex) + ") exceeds number of outputs (" + String::number(numberOfOutputs()) + ")."));
return;
}
@@ -214,7 +255,14 @@ void AudioNode::setChannelCount(unsigned long channelCount, ExceptionState& es)
updateChannelsForInputs();
}
} else {
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToSet(
+ "channelCount",
+ "AudioNode",
+ "channel count (" + String::number(channelCount)
+ + ") must be between 1 and "
+ + String::number(AudioContext::maxNumberOfChannels()) + "."));
}
}
@@ -239,14 +287,20 @@ void AudioNode::setChannelCountMode(const String& mode, ExceptionState& es)
ChannelCountMode oldMode = m_channelCountMode;
- if (mode == "max")
+ if (mode == "max") {
m_channelCountMode = Max;
- else if (mode == "clamped-max")
+ } else if (mode == "clamped-max") {
m_channelCountMode = ClampedMax;
- else if (mode == "explicit")
+ } else if (mode == "explicit") {
m_channelCountMode = Explicit;
- else
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ } else {
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToSet(
+ "channelCountMode",
+ "AudioNode",
+ "invalid mode '" + mode + "'; must be 'max', 'clamped-max', or 'explicit'."));
+ }
if (m_channelCountMode != oldMode)
updateChannelsForInputs();
@@ -269,12 +323,18 @@ void AudioNode::setChannelInterpretation(const String& interpretation, Exception
ASSERT(isMainThread());
AudioContext::AutoLocker locker(context());
- if (interpretation == "speakers")
+ if (interpretation == "speakers") {
m_channelInterpretation = AudioBus::Speakers;
- else if (interpretation == "discrete")
+ } else if (interpretation == "discrete") {
m_channelInterpretation = AudioBus::Discrete;
- else
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ } else {
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToSet(
+ "channelInterpretation",
+ "AudioNode",
+ "invalid interpretation '" + interpretation + "'; must be 'speakers' or 'discrete'."));
+ }
}
void AudioNode::updateChannelsForInputs()
« no previous file with comments | « Source/modules/webaudio/AudioContext.cpp ('k') | Source/modules/webaudio/DefaultAudioDestinationNode.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698