summaryrefslogtreecommitdiffstats
path: root/chrome/browser/speech
diff options
context:
space:
mode:
authorleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-01 12:15:40 +0000
committerleandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-11-01 12:15:40 +0000
commitc01c348a50f45cd10d65a3ad65fb6ef9db4cab75 (patch)
tree8c91c5bf69c92816e52000845253cf02dcf96987 /chrome/browser/speech
parent3fcb52fa1b719e156ef28fc162ba7db2ee0543c7 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/speech/speech_input_browsertest.cc1
-rw-r--r--chrome/browser/speech/speech_input_dispatcher_host.cc4
-rw-r--r--chrome/browser/speech/speech_input_dispatcher_host.h1
-rw-r--r--chrome/browser/speech/speech_input_manager.cc5
-rw-r--r--chrome/browser/speech/speech_input_manager.h1
-rw-r--r--chrome/browser/speech/speech_recognition_request.cc13
-rw-r--r--chrome/browser/speech/speech_recognition_request.h3
-rw-r--r--chrome/browser/speech/speech_recognition_request_unittest.cc2
-rw-r--r--chrome/browser/speech/speech_recognizer.cc5
-rw-r--r--chrome/browser/speech/speech_recognizer.h5
-rw-r--r--chrome/browser/speech/speech_recognizer_unittest.cc3
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),