diff options
author | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-01 12:15:40 +0000 |
---|---|---|
committer | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-01 12:15:40 +0000 |
commit | c01c348a50f45cd10d65a3ad65fb6ef9db4cab75 (patch) | |
tree | 8c91c5bf69c92816e52000845253cf02dcf96987 /chrome/browser/speech | |
parent | 3fcb52fa1b719e156ef28fc162ba7db2ee0543c7 (diff) | |
download | chromium_src-c01c348a50f45cd10d65a3ad65fb6ef9db4cab75.zip chromium_src-c01c348a50f45cd10d65a3ad65fb6ef9db4cab75.tar.gz chromium_src-c01c348a50f45cd10d65a3ad65fb6ef9db4cab75.tar.bz2 |
Language tag for speech.
This is the 3rd in a 4-sided patch to add language attribute support to speech input.
The other patches can be found here:
1st - http://codereview.chromium.org/3615005/show
2nd - https://bugs.webkit.org/show_bug.cgi?id=47089
4th - https://bugs.webkit.org/show_bug.cgi?id=47420
This patch will be submitted once the webkit change has been rolled into chromium DEPS. Also, a last webkit cleanup patch will be submitted at any point after the 2nd patch.
BUG=53598
TEST=
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=64466
Review URL: http://codereview.chromium.org/3595018
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@64596 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/speech')
11 files changed, 33 insertions, 10 deletions
diff --git a/chrome/browser/speech/speech_input_browsertest.cc b/chrome/browser/speech/speech_input_browsertest.cc index 9f12758..472e30c 100644 --- a/chrome/browser/speech/speech_input_browsertest.cc +++ b/chrome/browser/speech/speech_input_browsertest.cc @@ -47,6 +47,7 @@ class FakeSpeechInputManager : public SpeechInputManager { int render_process_id, int render_view_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar) { VLOG(1) << "StartRecognition invoked."; EXPECT_EQ(0, caller_id_); diff --git a/chrome/browser/speech/speech_input_dispatcher_host.cc b/chrome/browser/speech/speech_input_dispatcher_host.cc index 0b2ca1d..1563af3 100644 --- a/chrome/browser/speech/speech_input_dispatcher_host.cc +++ b/chrome/browser/speech/speech_input_dispatcher_host.cc @@ -141,12 +141,14 @@ void SpeechInputDispatcherHost::OnStartRecognition( int render_view_id, int request_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar) { int caller_id = callers_->CreateId(resource_message_filter_process_id_, render_view_id, request_id); manager()->StartRecognition(this, caller_id, resource_message_filter_process_id_, - render_view_id, element_rect, grammar); + render_view_id, element_rect, + language, grammar); } void SpeechInputDispatcherHost::OnCancelRecognition(int render_view_id, diff --git a/chrome/browser/speech/speech_input_dispatcher_host.h b/chrome/browser/speech/speech_input_dispatcher_host.h index db42f1e..85ca5c0 100644 --- a/chrome/browser/speech/speech_input_dispatcher_host.h +++ b/chrome/browser/speech/speech_input_dispatcher_host.h @@ -46,6 +46,7 @@ class SpeechInputDispatcherHost void OnStartRecognition(int render_view_id, int request_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar); void OnCancelRecognition(int render_view_id, int request_id); void OnStopRecording(int render_view_id, int request_id); diff --git a/chrome/browser/speech/speech_input_manager.cc b/chrome/browser/speech/speech_input_manager.cc index 24f0f5d7..181234e 100644 --- a/chrome/browser/speech/speech_input_manager.cc +++ b/chrome/browser/speech/speech_input_manager.cc @@ -29,6 +29,7 @@ class SpeechInputManagerImpl : public SpeechInputManager, int render_process_id, int render_view_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar); virtual void CancelRecognition(int caller_id); virtual void StopRecording(int caller_id); @@ -106,6 +107,7 @@ void SpeechInputManagerImpl::StartRecognition( int render_process_id, int render_view_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar) { DCHECK(!HasPendingRequest(caller_id)); @@ -114,7 +116,8 @@ void SpeechInputManagerImpl::StartRecognition( SpeechInputRequest* request = &requests_[caller_id]; request->delegate = delegate; - request->recognizer = new SpeechRecognizer(this, caller_id, grammar); + request->recognizer = new SpeechRecognizer(this, caller_id, language, + grammar); request->is_active = false; StartRecognitionForRequest(caller_id); diff --git a/chrome/browser/speech/speech_input_manager.h b/chrome/browser/speech/speech_input_manager.h index ba938b9..be9779f 100644 --- a/chrome/browser/speech/speech_input_manager.h +++ b/chrome/browser/speech/speech_input_manager.h @@ -54,6 +54,7 @@ class SpeechInputManager { int render_process_id, int render_view_id, const gfx::Rect& element_rect, + const std::string& language, const std::string& grammar) = 0; virtual void CancelRecognition(int caller_id) = 0; virtual void StopRecording(int caller_id) = 0; diff --git a/chrome/browser/speech/speech_recognition_request.cc b/chrome/browser/speech/speech_recognition_request.cc index fe901042..e17f69b1 100644 --- a/chrome/browser/speech/speech_recognition_request.cc +++ b/chrome/browser/speech/speech_recognition_request.cc @@ -4,6 +4,7 @@ #include "chrome/browser/speech/speech_recognition_request.h" +#include "app/l10n_util.h" #include "base/json/json_reader.h" #include "base/string_util.h" #include "base/utf_string_conversions.h" @@ -117,14 +118,20 @@ SpeechRecognitionRequest::SpeechRecognitionRequest( SpeechRecognitionRequest::~SpeechRecognitionRequest() {} -bool SpeechRecognitionRequest::Send(const std::string& grammar, +bool SpeechRecognitionRequest::Send(const std::string& language, + const std::string& grammar, const std::string& content_type, const std::string& audio_data) { DCHECK(!url_fetcher_.get()); std::vector<std::string> parts; - // TODO(leandro): Replace with the language tag given by WebKit. - parts.push_back("lang=en-us"); + if (!language.empty()) { + parts.push_back("lang=" + EscapeQueryParamValue(language, true)); + } else { + std::string app_locale = l10n_util::GetApplicationLocale(""); + parts.push_back("lang=" + EscapeQueryParamValue(app_locale, true)); + } + if (!grammar.empty()) parts.push_back("grammar=" + EscapeQueryParamValue(grammar, true)); GURL url(std::string(kDefaultSpeechRecognitionUrl) + JoinString(parts, '&')); diff --git a/chrome/browser/speech/speech_recognition_request.h b/chrome/browser/speech/speech_recognition_request.h index d567541..89beed1 100644 --- a/chrome/browser/speech/speech_recognition_request.h +++ b/chrome/browser/speech/speech_recognition_request.h @@ -44,7 +44,8 @@ class SpeechRecognitionRequest : public URLFetcher::Delegate { // Sends a new request with the given audio data, returns true if successful. // The same object can be used to send multiple requests but only after the // previous request has completed. - bool Send(const std::string& grammar, + bool Send(const std::string& language, + const std::string& grammar, const std::string& content_type, const std::string& audio_data); diff --git a/chrome/browser/speech/speech_recognition_request_unittest.cc b/chrome/browser/speech/speech_recognition_request_unittest.cc index 833f5c2..a87bba8 100644 --- a/chrome/browser/speech/speech_recognition_request_unittest.cc +++ b/chrome/browser/speech/speech_recognition_request_unittest.cc @@ -45,7 +45,7 @@ class SpeechRecognitionRequestTest : public SpeechRecognitionRequestDelegate, void SpeechRecognitionRequestTest::CreateAndTestRequest( bool success, const std::string& http_response) { SpeechRecognitionRequest request(NULL, this); - request.Send(std::string(), std::string(), std::string()); + request.Send(std::string(), std::string(), std::string(), std::string()); TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); ASSERT_TRUE(fetcher); URLRequestStatus status; diff --git a/chrome/browser/speech/speech_recognizer.cc b/chrome/browser/speech/speech_recognizer.cc index 2852c5e..fd32c20 100644 --- a/chrome/browser/speech/speech_recognizer.cc +++ b/chrome/browser/speech/speech_recognizer.cc @@ -109,9 +109,11 @@ void SpeexEncoder::Encode(const short* samples, SpeechRecognizer::SpeechRecognizer(Delegate* delegate, int caller_id, + const std::string& language, const std::string& grammar) : delegate_(delegate), caller_id_(caller_id), + language_(language), grammar_(grammar), encoder_(new SpeexEncoder()), endpointer_(kAudioSampleRate), @@ -210,10 +212,11 @@ void SpeechRecognizer::StopRecording() { it != audio_buffers_.end(); it++) { data.append(*(*it)); } + DCHECK(!request_.get()); request_.reset(new SpeechRecognitionRequest( Profile::GetDefaultRequestContext(), this)); - request_->Send(grammar_, kContentTypeSpeex, data); + request_->Send(language_, grammar_, kContentTypeSpeex, data); ReleaseAudioBuffers(); // No need to keep the audio anymore. } diff --git a/chrome/browser/speech/speech_recognizer.h b/chrome/browser/speech/speech_recognizer.h index 0473dde..61226f4 100644 --- a/chrome/browser/speech/speech_recognizer.h +++ b/chrome/browser/speech/speech_recognizer.h @@ -73,7 +73,9 @@ class SpeechRecognizer virtual ~Delegate() {} }; - SpeechRecognizer(Delegate* delegate, int caller_id, + SpeechRecognizer(Delegate* delegate, + int caller_id, + const std::string& language, const std::string& grammar); ~SpeechRecognizer(); @@ -118,6 +120,7 @@ class SpeechRecognizer Delegate* delegate_; int caller_id_; + std::string language_; std::string grammar_; // Buffer holding the recorded audio. Owns the strings inside the list. diff --git a/chrome/browser/speech/speech_recognizer_unittest.cc b/chrome/browser/speech/speech_recognizer_unittest.cc index 65315949..d71876f 100644 --- a/chrome/browser/speech/speech_recognizer_unittest.cc +++ b/chrome/browser/speech/speech_recognizer_unittest.cc @@ -23,7 +23,8 @@ class SpeechRecognizerTest : public SpeechRecognizerDelegate, SpeechRecognizerTest() : io_thread_(BrowserThread::IO, &message_loop_), ALLOW_THIS_IN_INITIALIZER_LIST( - recognizer_(new SpeechRecognizer(this, 1, std::string()))), + recognizer_(new SpeechRecognizer(this, 1, std::string(), + std::string()))), recording_complete_(false), recognition_complete_(false), result_received_(false), |