Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(950)

Unified Diff: content/browser/speech/speech_recognition_manager_impl.cc

Issue 170243005: Making sure that SpeechRecognitionDispatcherHost is not used after free (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed comments Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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*
« no previous file with comments | « content/browser/speech/speech_recognition_manager_impl.h ('k') | content/public/browser/speech_recognition_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698