| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/speech/speech_recognition_request.h" | 5 #include "chrome/browser/speech/speech_recognition_request.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "app/l10n_util.h" | 9 #include "app/l10n_util.h" |
| 10 #include "base/json/json_reader.h" | 10 #include "base/json/json_reader.h" |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 113 | 113 |
| 114 SpeechRecognitionRequest::SpeechRecognitionRequest( | 114 SpeechRecognitionRequest::SpeechRecognitionRequest( |
| 115 URLRequestContextGetter* context, Delegate* delegate) | 115 URLRequestContextGetter* context, Delegate* delegate) |
| 116 : url_context_(context), | 116 : url_context_(context), |
| 117 delegate_(delegate) { | 117 delegate_(delegate) { |
| 118 DCHECK(delegate); | 118 DCHECK(delegate); |
| 119 } | 119 } |
| 120 | 120 |
| 121 SpeechRecognitionRequest::~SpeechRecognitionRequest() {} | 121 SpeechRecognitionRequest::~SpeechRecognitionRequest() {} |
| 122 | 122 |
| 123 bool SpeechRecognitionRequest::Send(const std::string& language, | 123 void SpeechRecognitionRequest::Start(const std::string& language, |
| 124 const std::string& grammar, | 124 const std::string& grammar, |
| 125 const std::string& hardware_info, | 125 const std::string& hardware_info, |
| 126 const std::string& content_type, | 126 const std::string& content_type) { |
| 127 const std::string& audio_data) { | |
| 128 DCHECK(!url_fetcher_.get()); | 127 DCHECK(!url_fetcher_.get()); |
| 129 | 128 |
| 130 std::vector<std::string> parts; | 129 std::vector<std::string> parts; |
| 131 | 130 |
| 132 std::string lang_param = language; | 131 std::string lang_param = language; |
| 133 if (lang_param.empty() && url_context_) { | 132 if (lang_param.empty() && url_context_) { |
| 134 // If no language is provided then we use the first from the accepted | 133 // If no language is provided then we use the first from the accepted |
| 135 // language list. If this list is empty then it defaults to "en-US". | 134 // language list. If this list is empty then it defaults to "en-US". |
| 136 // Example of the contents of this list: "es,en-GB;q=0.8", "" | 135 // Example of the contents of this list: "es,en-GB;q=0.8", "" |
| 137 URLRequestContext* request_context = url_context_->GetURLRequestContext(); | 136 URLRequestContext* request_context = url_context_->GetURLRequestContext(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 151 // TODO(satish): Remove this hardcoded value once the page is allowed to | 150 // TODO(satish): Remove this hardcoded value once the page is allowed to |
| 152 // set this via an attribute. | 151 // set this via an attribute. |
| 153 parts.push_back("maxresults=3"); | 152 parts.push_back("maxresults=3"); |
| 154 | 153 |
| 155 GURL url(std::string(kDefaultSpeechRecognitionUrl) + JoinString(parts, '&')); | 154 GURL url(std::string(kDefaultSpeechRecognitionUrl) + JoinString(parts, '&')); |
| 156 | 155 |
| 157 url_fetcher_.reset(URLFetcher::Create(url_fetcher_id_for_tests, | 156 url_fetcher_.reset(URLFetcher::Create(url_fetcher_id_for_tests, |
| 158 url, | 157 url, |
| 159 URLFetcher::POST, | 158 URLFetcher::POST, |
| 160 this)); | 159 this)); |
| 161 url_fetcher_->set_upload_data(content_type, audio_data); | 160 url_fetcher_->set_chunked_upload(content_type); |
| 162 url_fetcher_->set_request_context(url_context_); | 161 url_fetcher_->set_request_context(url_context_); |
| 163 | 162 |
| 164 // The speech recognition API does not require user identification as part | 163 // The speech recognition API does not require user identification as part |
| 165 // of requests, so we don't send cookies or auth data for these requests to | 164 // of requests, so we don't send cookies or auth data for these requests to |
| 166 // prevent any accidental connection between users who are logged into the | 165 // prevent any accidental connection between users who are logged into the |
| 167 // domain for other services (e.g. bookmark sync) with the speech requests. | 166 // domain for other services (e.g. bookmark sync) with the speech requests. |
| 168 url_fetcher_->set_load_flags( | 167 url_fetcher_->set_load_flags( |
| 169 net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES | | 168 net::LOAD_DO_NOT_SAVE_COOKIES | net::LOAD_DO_NOT_SEND_COOKIES | |
| 170 net::LOAD_DO_NOT_SEND_AUTH_DATA); | 169 net::LOAD_DO_NOT_SEND_AUTH_DATA); |
| 171 url_fetcher_->Start(); | 170 url_fetcher_->Start(); |
| 172 return true; | 171 } |
| 172 |
| 173 void SpeechRecognitionRequest::UploadAudioChunk(const std::string& audio_data) { |
| 174 DCHECK(url_fetcher_.get()); |
| 175 url_fetcher_->AppendChunkToUpload(audio_data); |
| 176 } |
| 177 |
| 178 void SpeechRecognitionRequest::FinishAudioUpload() { |
| 179 DCHECK(url_fetcher_.get()); |
| 180 url_fetcher_->MarkEndOfChunks(); |
| 173 } | 181 } |
| 174 | 182 |
| 175 void SpeechRecognitionRequest::OnURLFetchComplete( | 183 void SpeechRecognitionRequest::OnURLFetchComplete( |
| 176 const URLFetcher* source, | 184 const URLFetcher* source, |
| 177 const GURL& url, | 185 const GURL& url, |
| 178 const net::URLRequestStatus& status, | 186 const net::URLRequestStatus& status, |
| 179 int response_code, | 187 int response_code, |
| 180 const ResponseCookies& cookies, | 188 const ResponseCookies& cookies, |
| 181 const std::string& data) { | 189 const std::string& data) { |
| 182 DCHECK_EQ(url_fetcher_.get(), source); | 190 DCHECK_EQ(url_fetcher_.get(), source); |
| 183 | 191 |
| 184 bool error = !status.is_success() || response_code != 200; | 192 bool error = !status.is_success() || response_code != 200; |
| 185 SpeechInputResultArray result; | 193 SpeechInputResultArray result; |
| 186 if (!error) | 194 if (!error) |
| 187 error = !ParseServerResponse(data, &result); | 195 error = !ParseServerResponse(data, &result); |
| 188 url_fetcher_.reset(); | 196 url_fetcher_.reset(); |
| 189 | 197 |
| 190 DVLOG(1) << "SpeechRecognitionRequest: Invoking delegate with result."; | 198 DVLOG(1) << "SpeechRecognitionRequest: Invoking delegate with result."; |
| 191 delegate_->SetRecognitionResult(error, result); | 199 delegate_->SetRecognitionResult(error, result); |
| 192 } | 200 } |
| 193 | 201 |
| 194 } // namespace speech_input | 202 } // namespace speech_input |
| OLD | NEW |