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

Unified Diff: chrome/browser/speech/speech_input_manager.cc

Issue 3167011: Revert 56006 - Revert 56002 - Adds SpeechInputManagerImpl to handle requests ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 10 years, 4 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
« no previous file with comments | « chrome/browser/speech/speech_input_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/speech/speech_input_manager.cc
===================================================================
--- chrome/browser/speech/speech_input_manager.cc (revision 56006)
+++ chrome/browser/speech/speech_input_manager.cc (working copy)
@@ -4,11 +4,96 @@
#include "chrome/browser/speech/speech_input_manager.h"
+#include "base/ref_counted.h"
+#include "chrome/browser/speech/speech_recognizer.h"
+#include <map>
+
namespace speech_input {
-SpeechInputManager* SpeechInputManager::Create(Listener* listener) {
- // TODO(satish): Implement a real speech input manager.
- return NULL;
+class SpeechInputManagerImpl : public SpeechInputManager,
+ public SpeechRecognizerDelegate {
+public:
+ explicit SpeechInputManagerImpl(SpeechInputManagerDelegate* delegate);
+ virtual ~SpeechInputManagerImpl();
+
+ // SpeechInputManager methods.
+ void StartRecognition(int render_view_id);
+ void CancelRecognition(int render_view_id);
+ void StopRecording(int render_view_id);
+
+ // SpeechRecognizer::Delegate methods.
+ void SetRecognitionResult(int render_view_id, bool error,
+ const string16& value);
+ void DidCompleteRecording(int render_view_id);
+ void DidCompleteRecognition(int render_view_id);
+
+private:
+ SpeechInputManagerDelegate* delegate_;
+ typedef std::map<int, scoped_refptr<SpeechRecognizer> > SpeechRecognizerMap;
+ SpeechRecognizerMap recognizers_;
+ int recording_render_view_id_;
+};
+
+SpeechInputManager* SpeechInputManager::Create(
+ SpeechInputManagerDelegate* delegate) {
+ return new SpeechInputManagerImpl(delegate);
}
+SpeechInputManagerImpl::SpeechInputManagerImpl(
+ SpeechInputManagerDelegate* delegate)
+ : delegate_(delegate),
+ recording_render_view_id_(0) {
+}
+
+SpeechInputManagerImpl::~SpeechInputManagerImpl() {
+ while (recognizers_.begin() != recognizers_.end())
+ recognizers_.begin()->second->CancelRecognition();
+}
+
+void SpeechInputManagerImpl::StartRecognition(int render_view_id) {
+ // Make sure we are not already doing recognition for this render view.
+ DCHECK(recognizers_.find(render_view_id) == recognizers_.end());
+ if (recognizers_.find(render_view_id) != recognizers_.end())
+ return;
+
+ // If we are currently recording audio for another caller, abort that now.
+ if (recording_render_view_id_)
+ CancelRecognition(recording_render_view_id_);
+
+ recording_render_view_id_ = render_view_id;
+ recognizers_[render_view_id] = new SpeechRecognizer(this, render_view_id);
+ recognizers_[render_view_id]->StartRecording();
+}
+
+void SpeechInputManagerImpl::CancelRecognition(int render_view_id) {
+ DCHECK(recognizers_.find(render_view_id) != recognizers_.end());
+ if (recognizers_.find(render_view_id) != recognizers_.end()) {
+ recognizers_[render_view_id]->CancelRecognition();
+ }
+}
+
+void SpeechInputManagerImpl::StopRecording(int render_view_id) {
+ DCHECK(recognizers_.find(render_view_id) != recognizers_.end());
+ if (recognizers_.find(render_view_id) != recognizers_.end()) {
+ recognizers_[render_view_id]->StopRecording();
+ }
+}
+
+void SpeechInputManagerImpl::SetRecognitionResult(int render_view_id,
+ bool error,
+ const string16& value) {
+ delegate_->SetRecognitionResult(render_view_id, (error ? string16() : value));
+}
+
+void SpeechInputManagerImpl::DidCompleteRecording(int render_view_id) {
+ DCHECK(recording_render_view_id_ == render_view_id);
+ recording_render_view_id_ = 0;
+ delegate_->DidCompleteRecording(render_view_id);
+}
+
+void SpeechInputManagerImpl::DidCompleteRecognition(int render_view_id) {
+ recognizers_.erase(render_view_id);
+ delegate_->DidCompleteRecognition(render_view_id);
+}
+
} // namespace speech_input
« no previous file with comments | « chrome/browser/speech/speech_input_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698