Index: chrome/browser/speech/speech_input_manager.cc |
diff --git a/chrome/browser/speech/speech_input_manager.cc b/chrome/browser/speech/speech_input_manager.cc |
index f59a3b75a06166a60ce53f616c88a31c43325922..56a87c9dd5bc167ae04231ad07b07d2bdc00a60e 100644 |
--- a/chrome/browser/speech/speech_input_manager.cc |
+++ b/chrome/browser/speech/speech_input_manager.cc |
@@ -111,6 +111,8 @@ class SpeechInputManagerImpl : public SpeechInputManager, |
const std::string& origin_url); |
virtual void CancelRecognition(int caller_id); |
virtual void StopRecording(int caller_id); |
+ virtual void CancelAllRequestsWithDelegate( |
+ SpeechInputManagerDelegate* delegate); |
// SpeechRecognizer::Delegate methods. |
virtual void SetRecognitionResult(int caller_id, |
@@ -265,6 +267,20 @@ void SpeechInputManagerImpl::CancelRecognition(int caller_id) { |
bubble_controller_->CloseBubble(caller_id); |
} |
+void SpeechInputManagerImpl::CancelAllRequestsWithDelegate( |
+ SpeechInputManagerDelegate* delegate) { |
+ SpeechRecognizerMap::iterator it = requests_.begin(); |
+ while (it != requests_.end()) { |
+ if (it->second.delegate == delegate) { |
+ CancelRecognition(it->first); |
+ // This map will have very few elements so it is simpler to restart. |
+ it = requests_.begin(); |
+ } else { |
+ ++it; |
+ } |
+ } |
+} |
+ |
void SpeechInputManagerImpl::StopRecording(int caller_id) { |
DCHECK(HasPendingRequest(caller_id)); |
requests_[caller_id].recognizer->StopRecording(); |