Chromium Code Reviews| Index: media/filters/decrypting_audio_decoder.cc |
| diff --git a/media/filters/decrypting_audio_decoder.cc b/media/filters/decrypting_audio_decoder.cc |
| index 6a2dd3b7b741e45c0bc8a7ae12adec4b935e944d..b3114468d441fce8324cd6156c8e0f0deb07ec9e 100644 |
| --- a/media/filters/decrypting_audio_decoder.cc |
| +++ b/media/filters/decrypting_audio_decoder.cc |
| @@ -149,6 +149,10 @@ void DecryptingAudioDecoder::Stop(const base::Closure& closure) { |
| DVLOG(2) << "Stop() - state: " << state_; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| + // Invalidate all weak pointers so that pending callbacks won't be fired into |
| + // this object. |
| + weak_factory_.InvalidateWeakPtrs(); |
| + |
| if (decryptor_) { |
| decryptor_->RegisterNewKeyCB(Decryptor::kAudio, Decryptor::NewKeyCB()); |
| decryptor_->DeinitializeDecoder(Decryptor::kAudio); |
| @@ -163,6 +167,7 @@ void DecryptingAudioDecoder::Stop(const base::Closure& closure) { |
| base::ResetAndReturn(&read_cb_).Run(kAborted, NULL); |
| if (!reset_cb_.is_null()) |
| base::ResetAndReturn(&reset_cb_).Run(); |
| + |
| state_ = kStopped; |
| task_runner_->PostTask(FROM_HERE, closure); |
| } |
| @@ -189,10 +194,6 @@ DecryptingAudioDecoder::~DecryptingAudioDecoder() { |
| void DecryptingAudioDecoder::SetDecryptor(Decryptor* decryptor) { |
| DVLOG(2) << "SetDecryptor()"; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| - |
| - if (state_ == kStopped) |
|
acolwell GONE FROM CHROMIUM
2014/02/18 18:07:24
nit: DCHECK_NE(state_, kStopped) here and below to
xhwang
2014/02/18 18:46:11
We check below that
DCHECK_EQ(state_, kDecryptorR
|
| - return; |
| - |
| DCHECK_EQ(state_, kDecryptorRequested) << state_; |
| DCHECK(!init_cb_.is_null()); |
| DCHECK(!set_decryptor_ready_cb_.is_null()); |
| @@ -232,10 +233,6 @@ void DecryptingAudioDecoder::SetDecryptor(Decryptor* decryptor) { |
| void DecryptingAudioDecoder::FinishInitialization(bool success) { |
| DVLOG(2) << "FinishInitialization()"; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| - |
| - if (state_ == kStopped) |
| - return; |
| - |
| DCHECK_EQ(state_, kPendingDecoderInit) << state_; |
| DCHECK(!init_cb_.is_null()); |
| DCHECK(reset_cb_.is_null()); // No Reset() before initialization finished. |
| @@ -375,10 +372,6 @@ void DecryptingAudioDecoder::DeliverFrame( |
| const Decryptor::AudioBuffers& frames) { |
| DVLOG(3) << "DeliverFrame() - status: " << status; |
| DCHECK(task_runner_->BelongsToCurrentThread()); |
| - |
| - if (state_ == kStopped) |
| - return; |
| - |
| DCHECK_EQ(state_, kPendingDecode) << state_; |
| DCHECK(!read_cb_.is_null()); |
| DCHECK(pending_buffer_to_decode_.get()); |