Index: third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp |
diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp |
index d7c888848d0e54971342da1dda9e783cc74c0342..c00a21e11ec70df2727e4d1a1ae532ab682e6bdc 100644 |
--- a/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp |
+++ b/third_party/WebKit/Source/modules/webaudio/AudioBuffer.cpp |
@@ -151,6 +151,13 @@ AudioBuffer::AudioBuffer(unsigned numberOfChannels, size_t numberOfFrames, float |
RefPtr<DOMFloat32Array> channelDataArray = createFloat32ArrayOrNull(m_length); |
// If the channel data array could not be created, just return. The caller will need to |
// check that the desired number of channels were created. |
+ |
+ // TODO(junov) crbug.com/536816 |
+ // According to ECMAScript spec, failure to allocate should result in a |
+ // RangeError exception being thrown: |
+ // http://ecma-international.org/ecma-262/6.0/#sec-createbytedatablock |
+ // The spec for createBuffer does not specify whether such an exception |
+ // should be re-thrown. |
if (!channelDataArray) { |
return; |
} |
@@ -171,6 +178,11 @@ AudioBuffer::AudioBuffer(AudioBus* bus) |
RefPtr<DOMFloat32Array> channelDataArray = createFloat32ArrayOrNull(m_length); |
// If the channel data array could not be created, just return. The caller will need to |
// check that the desired number of channels were created. |
+ |
+ // TODO(junov): crbug.com/536816 |
+ // According to ECMAScript spec, failure to allocate should result in a |
+ // RangeError exception being thrown: |
+ // http://ecma-international.org/ecma-262/6.0/#sec-createbytedatablock |
if (!channelDataArray) |
return; |
@@ -190,7 +202,9 @@ PassRefPtr<DOMFloat32Array> AudioBuffer::getChannelData(unsigned channelIndex, E |
} |
DOMFloat32Array* channelData = m_channels[channelIndex].get(); |
- return DOMFloat32Array::create(channelData->buffer(), channelData->byteOffset(), channelData->length()); |
+ RefPtr<DOMArrayBuffer> buffer = channelData->bufferOrNull(); |
+ RELEASE_ASSERT(buffer); // crbug.com/536816 |
+ return DOMFloat32Array::create(buffer.release(), channelData->byteOffset(), channelData->length()); |
} |
DOMFloat32Array* AudioBuffer::getChannelData(unsigned channelIndex) |