Chromium Code Reviews| Index: third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp |
| diff --git a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp |
| index a9ee5414ee4122ee94c343cb0b9e4ad1d30a6ffb..2289766570e55e79233810b588314585c81ac9e3 100644 |
| --- a/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp |
| +++ b/third_party/WebKit/Source/modules/webaudio/AudioBufferSourceNode.cpp |
| @@ -72,7 +72,8 @@ AudioBufferSourceHandler::AudioBufferSourceHandler( |
| is_grain_(false), |
| grain_offset_(0.0), |
| grain_duration_(kDefaultGrainDuration), |
| - min_playback_rate_(1.0) { |
| + min_playback_rate_(1.0), |
| + buffer_has_been_set_(false) { |
| // Default to mono. A call to setBuffer() will set the number of output |
| // channels to that of the buffer. |
| AddOutput(1); |
| @@ -388,10 +389,11 @@ void AudioBufferSourceHandler::SetBuffer(AudioBuffer* buffer, |
| ExceptionState& exception_state) { |
| DCHECK(IsMainThread()); |
| - if (buffer_) { |
| - exception_state.ThrowDOMException( |
| - kInvalidStateError, |
| - "Cannot set buffer after it has been already been set"); |
| + if (buffer && buffer_has_been_set_) { |
| + exception_state.ThrowDOMException(kInvalidStateError, |
| + "Cannot set buffer to non-null after it " |
| + "has been already been set to a non-null " |
| + "buffer"); |
|
hongchan
2017/07/28 18:45:32
I am not so sure about the term "a non-null buffer
Raymond Toy
2017/07/28 19:16:55
This is the absn.buffer attribute, so you can set
|
| return; |
| } |
| @@ -403,6 +405,8 @@ void AudioBufferSourceHandler::SetBuffer(AudioBuffer* buffer, |
| MutexLocker process_locker(process_lock_); |
| if (buffer) { |
| + buffer_has_been_set_ = true; |
| + |
| // Do any necesssary re-configuration to the buffer's number of channels. |
| unsigned number_of_channels = buffer->numberOfChannels(); |