Index: content/browser/speech/speech_recognition_manager_impl.cc |
diff --git a/content/browser/speech/speech_recognition_manager_impl.cc b/content/browser/speech/speech_recognition_manager_impl.cc |
index 51cf027817428de733465691890019ae81ff6182..bdc9d1ce218422a7735d8b3e64524d3bf06a3610 100644 |
--- a/content/browser/speech/speech_recognition_manager_impl.cc |
+++ b/content/browser/speech/speech_recognition_manager_impl.cc |
@@ -184,10 +184,15 @@ void SpeechRecognitionManagerImpl::RecognitionAllowedCallback(int session_id, |
if (!SessionExists(session_id)) |
return; |
+ SessionsTable::iterator iter = sessions_.find(session_id); |
+ DCHECK(iter != sessions_.end()); |
+ Session* session = iter->second; |
+ |
+ if (session->abort_requested) |
+ return; |
+ |
if (ask_user) { |
- SessionsTable::iterator iter = sessions_.find(session_id); |
- DCHECK(iter != sessions_.end()); |
- SpeechRecognitionSessionContext& context = iter->second->context; |
+ SpeechRecognitionSessionContext& context = session->context; |
context.label = media_stream_manager_->MakeMediaAccessRequest( |
context.render_process_id, |
context.render_view_id, |
@@ -253,6 +258,11 @@ void SpeechRecognitionManagerImpl::AbortSession(int session_id) { |
SessionsTable::iterator iter = sessions_.find(session_id); |
iter->second->ui.reset(); |
+ if (iter->second->abort_requested) |
+ return; |
+ |
+ iter->second->abort_requested = true; |
+ |
base::MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&SpeechRecognitionManagerImpl::DispatchEvent, |
@@ -676,6 +686,7 @@ void SpeechRecognitionManagerImpl::ShowAudioInputSettings() { |
SpeechRecognitionManagerImpl::Session::Session() |
: id(kSessionIDInvalid), |
+ abort_requested(false), |
listener_is_active(true) { |
} |