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

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

Issue 235653002: WebAudio createBuffer should throw error with 0 channels. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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/AudioBuffer.h ('k') | Source/modules/webaudio/AudioContext.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/modules/webaudio/AudioBuffer.cpp
diff --git a/Source/modules/webaudio/AudioBuffer.cpp b/Source/modules/webaudio/AudioBuffer.cpp
index 52a18a3b88044e44d0aca021b10e884760f352db..70680bff6bd080ca25c9ca8206eca73c3fdfdab2 100644
--- a/Source/modules/webaudio/AudioBuffer.cpp
+++ b/Source/modules/webaudio/AudioBuffer.cpp
@@ -32,6 +32,7 @@
#include "modules/webaudio/AudioBuffer.h"
+#include "bindings/v8/ExceptionMessages.h"
#include "bindings/v8/ExceptionState.h"
#include "core/dom/ExceptionCode.h"
#include "platform/audio/AudioBus.h"
@@ -54,7 +55,7 @@ float AudioBuffer::maxAllowedSampleRate()
PassRefPtr<AudioBuffer> AudioBuffer::create(unsigned numberOfChannels, size_t numberOfFrames, float sampleRate)
{
- if (sampleRate < minAllowedSampleRate() || sampleRate > maxAllowedSampleRate() || numberOfChannels > AudioContext::maxNumberOfChannels() || !numberOfFrames)
+ if (sampleRate < minAllowedSampleRate() || sampleRate > maxAllowedSampleRate() || numberOfChannels > AudioContext::maxNumberOfChannels() || !numberOfChannels || !numberOfFrames)
return nullptr;
RefPtr<AudioBuffer> buffer = adoptRef(new AudioBuffer(numberOfChannels, numberOfFrames, sampleRate));
@@ -64,6 +65,59 @@ PassRefPtr<AudioBuffer> AudioBuffer::create(unsigned numberOfChannels, size_t nu
return buffer;
}
+PassRefPtr<AudioBuffer> AudioBuffer::create(unsigned numberOfChannels, size_t numberOfFrames, float sampleRate, ExceptionState& exceptionState)
+{
+ if (!numberOfChannels || numberOfChannels > AudioContext::maxNumberOfChannels()) {
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ ExceptionMessages::indexOutsideRange(
+ "number of channels",
+ numberOfChannels,
+ 1u,
+ ExceptionMessages::InclusiveBound,
+ AudioContext::maxNumberOfChannels(),
+ ExceptionMessages::InclusiveBound));
+ return nullptr;
+ }
+
+ if (sampleRate < AudioBuffer::minAllowedSampleRate() || sampleRate > AudioBuffer::maxAllowedSampleRate()) {
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ ExceptionMessages::indexOutsideRange(
+ "sample rate",
+ sampleRate,
+ AudioBuffer::minAllowedSampleRate(),
+ ExceptionMessages::InclusiveBound,
+ AudioBuffer::maxAllowedSampleRate(),
+ ExceptionMessages::InclusiveBound));
+ return nullptr;
+ }
+
+ if (!numberOfFrames) {
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ ExceptionMessages::indexExceedsMinimumBound(
+ "number of frames",
+ numberOfFrames,
+ static_cast<size_t>(0)));
+ return nullptr;
+ }
+
+ RefPtr<AudioBuffer> audioBuffer = create(numberOfChannels, numberOfFrames, sampleRate);
+
+ if (!audioBuffer.get()) {
+ exceptionState.throwDOMException(
+ NotSupportedError,
+ "createBuffer("
+ + String::number(numberOfChannels) + ", "
+ + String::number(numberOfFrames) + ", "
+ + String::number(sampleRate)
+ + ") failed.");
+ }
+
+ return audioBuffer;
+}
+
PassRefPtr<AudioBuffer> AudioBuffer::createFromAudioFileData(const void* data, size_t dataSize, bool mixToMono, float sampleRate)
{
RefPtr<AudioBus> bus = createBusFromInMemoryAudioFile(data, dataSize, mixToMono, sampleRate);
« no previous file with comments | « Source/modules/webaudio/AudioBuffer.h ('k') | Source/modules/webaudio/AudioContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698