| 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 ec137976cdef3c18d9b943991094f2f92c1ce139..e13196814d7e2194cbdc1761ed75fcf9122e16ba 100644
|
| --- a/content/browser/speech/speech_recognition_manager_impl.cc
|
| +++ b/content/browser/speech/speech_recognition_manager_impl.cc
|
| @@ -450,8 +450,8 @@ SpeechRecognitionManagerImpl::GetSessionContext(int session_id) const {
|
| return GetSession(session_id)->context;
|
| }
|
|
|
| -void SpeechRecognitionManagerImpl::AbortAllSessionsForListener(
|
| - SpeechRecognitionEventListener* listener) {
|
| +void SpeechRecognitionManagerImpl::AbortAllSessionsForRenderProcess(
|
| + int render_process_id) {
|
| // This method gracefully destroys sessions for the listener. However, since
|
| // the listener itself is likely to be destroyed after this call, we avoid
|
| // dispatching further events to it, marking the |listener_is_active| flag.
|
| @@ -459,7 +459,7 @@ void SpeechRecognitionManagerImpl::AbortAllSessionsForListener(
|
| for (SessionsTable::iterator it = sessions_.begin(); it != sessions_.end();
|
| ++it) {
|
| Session* session = it->second;
|
| - if (session->config.event_listener == listener) {
|
| + if (session->context.render_process_id == render_process_id) {
|
| AbortSession(session->id);
|
| session->listener_is_active = false;
|
| }
|
| @@ -656,7 +656,9 @@ SpeechRecognitionManagerImpl::GetSession(int session_id) const {
|
| SpeechRecognitionEventListener* SpeechRecognitionManagerImpl::GetListener(
|
| int session_id) const {
|
| Session* session = GetSession(session_id);
|
| - return session->listener_is_active ? session->config.event_listener : NULL;
|
| + if (session->listener_is_active && session->config.event_listener)
|
| + return session->config.event_listener.get();
|
| + return NULL;
|
| }
|
|
|
| SpeechRecognitionEventListener*
|
|
|