Index: content/browser/speech/speech_input_manager.h |
diff --git a/content/browser/speech/speech_input_manager.h b/content/browser/speech/speech_input_manager.h |
index a68e79014142291296e1e8727b39e875430afa39..afac4427d69189065779be67286041e918c337f6 100644 |
--- a/content/browser/speech/speech_input_manager.h |
+++ b/content/browser/speech/speech_input_manager.h |
@@ -5,7 +5,11 @@ |
#ifndef CONTENT_BROWSER_SPEECH_SPEECH_INPUT_MANAGER_H_ |
#define CONTENT_BROWSER_SPEECH_SPEECH_INPUT_MANAGER_H_ |
+#include <map> |
+#include <string> |
+ |
#include "base/basictypes.h" |
+#include "content/browser/speech/speech_recognizer.h" |
#include "content/common/content_export.h" |
#include "content/common/speech_input_result.h" |
#include "ui/gfx/rect.h" |
@@ -16,7 +20,7 @@ namespace speech_input { |
// handles requests received from various render views and makes sure only one |
// of them can use speech recognition at a time. It also sends recognition |
// results and status events to the render views when required. |
-class SpeechInputManager { |
+class SpeechInputManager : public SpeechRecognizerDelegate { |
public: |
// Implemented by the dispatcher host to relay events to the render views. |
class Delegate { |
@@ -54,18 +58,94 @@ class SpeechInputManager { |
const gfx::Rect& element_rect, |
const std::string& language, |
const std::string& grammar, |
- const std::string& origin_url) = 0; |
- virtual void CancelRecognition(int caller_id) = 0; |
- virtual void StopRecording(int caller_id) = 0; |
- |
- virtual void CancelAllRequestsWithDelegate(Delegate* delegate) = 0; |
+ const std::string& origin_url); |
+ virtual void CancelRecognition(int caller_id); |
+ virtual void CancelAllRequestsWithDelegate(Delegate* delegate); |
+ virtual void StopRecording(int caller_id); |
+ |
+ // SpeechRecognizer::Delegate methods. |
+ virtual void DidStartReceivingAudio(int caller_id); |
+ virtual void SetRecognitionResult(int caller_id, |
+ bool error, |
+ const SpeechInputResultArray& result); |
+ virtual void DidCompleteRecording(int caller_id); |
+ virtual void DidCompleteRecognition(int caller_id); |
+ virtual void OnRecognizerError(int caller_id, |
+ SpeechRecognizer::ErrorCode error); |
+ virtual void DidCompleteEnvironmentEstimation(int caller_id); |
+ virtual void SetInputVolume(int caller_id, float volume, float noise_volume); |
void set_censor_results(bool censor) { censor_results_ = censor; } |
bool censor_results() { return censor_results_; } |
+ protected: |
+ // The pure virtual methods are used for displaying the current state of |
+ // recognition and for fetching optional request information. |
+ |
+ // Get the optional request information if available. |
+ virtual void GetRequestInfo(bool* can_report_metrics, |
+ std::string* request_info) = 0; |
+ |
+ // Called when recognition has been requested from point |element_rect_| on |
+ // the view port for the given caller. |
+ virtual void ShowRecognitionRequested(int caller_id, |
+ int render_process_id, |
+ int render_view_id, |
+ const gfx::Rect& element_rect) = 0; |
+ |
+ // Called when recognition is starting up. |
+ virtual void ShowWarmUp(int caller_id) = 0; |
+ |
+ // Called when recognition has started. |
+ virtual void ShowRecognizing(int caller_id) = 0; |
+ |
+ // Called when recording has started. |
+ virtual void ShowRecording(int caller_id) = 0; |
+ |
+ // Continuously updated with the current input volume. |
+ virtual void ShowInputVolume(int caller_id, |
+ float volume, |
+ float noise_volume) = 0; |
+ |
+ // Called when no microphone has been found. |
+ virtual void ShowNoMicError(int caller_id) = 0; |
+ |
+ // Called when there has been a error with the recognition. |
+ virtual void ShowRecognizerError(int caller_id, |
+ SpeechRecognizer::ErrorCode error) = 0; |
+ |
+ // Called when recognition has ended or has been canceled. |
+ virtual void DoClose(int caller_id) = 0; |
+ |
+ // Cancels recognition for the specified caller if it is active. |
+ void OnFocusChanged(int caller_id); |
+ |
+ bool HasPendingRequest(int caller_id) const; |
+ |
+ // Starts/restarts recognition for an existing request. |
+ void StartRecognitionForRequest(int caller_id); |
+ |
+ void CancelRecognitionAndInformDelegate(int caller_id); |
+ |
private: |
+ struct SpeechInputRequest { |
+ SpeechInputRequest(); |
+ ~SpeechInputRequest(); |
+ |
+ Delegate* delegate; |
+ scoped_refptr<SpeechRecognizer> recognizer; |
+ bool is_active; // Set to true when recording or recognition is going on. |
+ }; |
+ |
+ Delegate* GetDelegate(int caller_id) const; |
+ |
+ typedef std::map<int, SpeechInputRequest> SpeechRecognizerMap; |
+ SpeechRecognizerMap requests_; |
+ std::string request_info_; |
+ bool can_report_metrics_; |
bool censor_results_; |
+ int recording_caller_id_; |
}; |
// This typedef is to workaround the issue with certain versions of |