| Index: media/audio/fake_audio_input_stream.cc | 
| diff --git a/media/audio/fake_audio_input_stream.cc b/media/audio/fake_audio_input_stream.cc | 
| index 7fe3f825d28096114f6b4e867324765b1e8336e5..43804cb82689ab3497ea1e1c6ab231245600b0c9 100644 | 
| --- a/media/audio/fake_audio_input_stream.cc | 
| +++ b/media/audio/fake_audio_input_stream.cc | 
| @@ -185,7 +185,7 @@ void FakeAudioInputStream::DoCallback() { | 
| next_callback_time = base::TimeDelta(); | 
|  | 
| if (PlayingFromFile()) { | 
| -    PlayFileLooping(); | 
| +    PlayFile(); | 
| } else { | 
| PlayBeep(); | 
| } | 
| @@ -214,14 +214,16 @@ bool FakeAudioInputStream::PlayingFromFile() { | 
| return wav_audio_handler_.get() != nullptr; | 
| } | 
|  | 
| -void FakeAudioInputStream::PlayFileLooping() { | 
| +void FakeAudioInputStream::PlayFile() { | 
| +  // Stop playing if we've played out the whole file. | 
| +  if (wav_audio_handler_->AtEnd(wav_file_read_pos_)) | 
| +    return; | 
| + | 
| // Unfilled frames will be zeroed by CopyTo. | 
| size_t bytes_written; | 
| wav_audio_handler_->CopyTo(audio_bus_.get(), wav_file_read_pos_, | 
| &bytes_written); | 
| wav_file_read_pos_ += bytes_written; | 
| -  if (wav_audio_handler_->AtEnd(wav_file_read_pos_)) | 
| -    wav_file_read_pos_ = 0; | 
| callback_->OnData(this, audio_bus_.get(), buffer_size_, 1.0); | 
| } | 
|  | 
|  |