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

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

Issue 24877002: Add more informative messages for DOM exceptions. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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
Index: Source/modules/webaudio/AudioContext.cpp
diff --git a/Source/modules/webaudio/AudioContext.cpp b/Source/modules/webaudio/AudioContext.cpp
index e0c7792062c7f1edc01bed3342e2272e1f0e2b44..eefed5e05024316602a327524cb97a9aa7a011eb 100644
--- a/Source/modules/webaudio/AudioContext.cpp
+++ b/Source/modules/webaudio/AudioContext.cpp
@@ -28,6 +28,7 @@
#include "modules/webaudio/AudioContext.h"
+#include "bindings/v8/ExceptionMessages.h"
#include "bindings/v8/ExceptionState.h"
#include "core/dom/Document.h"
#include "core/dom/ExceptionCode.h"
@@ -293,7 +294,11 @@ PassRefPtr<AudioBuffer> AudioContext::createBuffer(unsigned numberOfChannels, si
{
RefPtr<AudioBuffer> audioBuffer = AudioBuffer::create(numberOfChannels, numberOfFrames, sampleRate);
if (!audioBuffer.get()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "AudioBuffer",
+ "invalid number of channels, frames, or sample rate."));
Mike West 2013/09/27 06:44:39 For these kinds of errors, it would be nice to tel
Raymond Toy (Google) 2013/09/27 16:24:10 Agreed. I'll try to make this (and all others) mor
return 0;
}
@@ -304,13 +309,21 @@ PassRefPtr<AudioBuffer> AudioContext::createBuffer(ArrayBuffer* arrayBuffer, boo
{
ASSERT(arrayBuffer);
if (!arrayBuffer) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "AudioBuffer",
+ "invalid ArrayBuffer."));
return 0;
}
RefPtr<AudioBuffer> audioBuffer = AudioBuffer::createFromAudioFileData(arrayBuffer->data(), arrayBuffer->byteLength(), mixToMono, sampleRate());
if (!audioBuffer.get()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "AudioBuffer",
+ "invalid audio data in ArrayBuffer."));
return 0;
}
@@ -320,7 +333,12 @@ PassRefPtr<AudioBuffer> AudioContext::createBuffer(ArrayBuffer* arrayBuffer, boo
void AudioContext::decodeAudioData(ArrayBuffer* audioData, PassRefPtr<AudioBufferCallback> successCallback, PassRefPtr<AudioBufferCallback> errorCallback, ExceptionState& es)
{
if (!audioData) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToExecute(
+ "decodeAudioData",
+ "AudioContext",
+ "invalid ArrayBuffer for audioData."));
return;
}
m_audioDecoder.decodeAsync(audioData, sampleRate(), successCallback, errorCallback);
@@ -341,9 +359,12 @@ PassRefPtr<AudioBufferSourceNode> AudioContext::createBufferSource()
PassRefPtr<MediaElementAudioSourceNode> AudioContext::createMediaElementSource(HTMLMediaElement* mediaElement, ExceptionState& es)
{
- ASSERT(mediaElement);
Mike West 2013/09/27 06:44:39 Why drop the ASSERT?
Raymond Toy (Google) 2013/09/27 16:24:10 When running the webaudio layout tests in debug mo
if (!mediaElement) {
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToConstruct(
+ "MediaElementAudioSourceNode",
+ "invalid HTMLMedialElement."));
return 0;
}
@@ -352,7 +373,11 @@ PassRefPtr<MediaElementAudioSourceNode> AudioContext::createMediaElementSource(H
// First check if this media element already has a source node.
if (mediaElement->audioSourceNode()) {
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToConstruct(
+ "MediaElementAudioSourceNode",
+ "invalid HTMLMediaElement."));
return 0;
}
@@ -366,9 +391,10 @@ PassRefPtr<MediaElementAudioSourceNode> AudioContext::createMediaElementSource(H
PassRefPtr<MediaStreamAudioSourceNode> AudioContext::createMediaStreamSource(MediaStream* mediaStream, ExceptionState& es)
{
- ASSERT(mediaStream);
if (!mediaStream) {
- es.throwUninformativeAndGenericDOMException(InvalidStateError);
+ es.throwDOMException(
+ InvalidStateError,
+ ExceptionMessages::failedToConstruct("MediaStreamAudioSourceNode"));
Mike West 2013/09/27 06:44:39 "invalid MediaStream source"?
return 0;
}
@@ -423,7 +449,11 @@ PassRefPtr<ScriptProcessorNode> AudioContext::createScriptProcessor(size_t buffe
RefPtr<ScriptProcessorNode> node = ScriptProcessorNode::create(this, m_destinationNode->sampleRate(), bufferSize, numberOfInputChannels, numberOfOutputChannels);
if (!node.get()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "ScriptProcessorNode",
+ "invalid buffer size, or number of input/outputs."));
return 0;
}
@@ -510,7 +540,11 @@ PassRefPtr<ChannelSplitterNode> AudioContext::createChannelSplitter(size_t numbe
RefPtr<ChannelSplitterNode> node = ChannelSplitterNode::create(this, m_destinationNode->sampleRate(), numberOfOutputs);
if (!node.get()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "ChannelSplitterNode",
+ "invalid number of outputs."));
Mike West 2013/09/27 06:44:39 "The number of outputs (" + String::number(numberO
return 0;
}
@@ -531,7 +565,11 @@ PassRefPtr<ChannelMergerNode> AudioContext::createChannelMerger(size_t numberOfI
RefPtr<ChannelMergerNode> node = ChannelMergerNode::create(this, m_destinationNode->sampleRate(), numberOfInputs);
if (!node.get()) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "ChannelMergerNode",
+ "invalid number of inputs."));
Mike West 2013/09/27 06:44:39 Same as for outputs.
return 0;
}
@@ -557,7 +595,11 @@ PassRefPtr<PeriodicWave> AudioContext::createPeriodicWave(Float32Array* real, Fl
ASSERT(isMainThread());
if (!real || !imag || (real->length() != imag->length())) {
- es.throwUninformativeAndGenericDOMException(SyntaxError);
+ es.throwDOMException(
+ SyntaxError,
+ ExceptionMessages::failedToConstruct(
+ "WaveTable",
+ "invalid real or imag arrays for wave table."));
Mike West 2013/09/27 06:44:39 One option would be to split this up into multiple
return 0;
}

Powered by Google App Engine
This is Rietveld 408576698