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 7a0d5c814104717152dd983d5494f704fc31f756..2da52ef6a9be9bc764ee09696d5bb064bdad93de 100644 |
--- a/content/browser/speech/speech_recognition_manager_impl.cc |
+++ b/content/browser/speech/speech_recognition_manager_impl.cc |
@@ -327,6 +327,12 @@ void SpeechRecognitionManagerImpl::AbortAllSessionsForListener( |
void SpeechRecognitionManagerImpl::DispatchEvent(int session_id, |
FSMEvent event) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ |
+ // There are some corner cases in which the session might be deleted (due to |
+ // an EndRecognition event) between a request (e.g. Abort) and its dispatch. |
+ if (!SessionExists(session_id)) |
+ return; |
+ |
const Session& session = GetSession(session_id); |
FSMState session_state = GetSessionState(session_id); |
DCHECK_LE(session_state, SESSION_STATE_MAX_VALUE); |