OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/translate/core/browser/translate_manager.h" | 5 #include "components/translate/core/browser/translate_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 g_callback_list_ = new TranslateErrorCallbackList; | 66 g_callback_list_ = new TranslateErrorCallbackList; |
67 return g_callback_list_->Add(callback); | 67 return g_callback_list_->Add(callback); |
68 } | 68 } |
69 | 69 |
70 TranslateManager::TranslateManager( | 70 TranslateManager::TranslateManager( |
71 TranslateClient* translate_client, | 71 TranslateClient* translate_client, |
72 const std::string& accept_languages_pref_name) | 72 const std::string& accept_languages_pref_name) |
73 : accept_languages_pref_name_(accept_languages_pref_name), | 73 : accept_languages_pref_name_(accept_languages_pref_name), |
74 translate_client_(translate_client), | 74 translate_client_(translate_client), |
75 translate_driver_(translate_client_->GetTranslateDriver()), | 75 translate_driver_(translate_client_->GetTranslateDriver()), |
76 weak_method_factory_(this) {} | 76 language_state_(translate_driver_), |
| 77 weak_method_factory_(this) { |
| 78 } |
77 | 79 |
78 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { | 80 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { |
79 return weak_method_factory_.GetWeakPtr(); | 81 return weak_method_factory_.GetWeakPtr(); |
80 } | 82 } |
81 | 83 |
82 void TranslateManager::InitiateTranslation(const std::string& page_lang) { | 84 void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
83 // Short-circuit out if not in a state where initiating translation makes | 85 // Short-circuit out if not in a state where initiating translation makes |
84 // sense (this method may be called muhtiple times for a given page). | 86 // sense (this method may be called muhtiple times for a given page). |
85 LanguageState& language_state = translate_driver_->GetLanguageState(); | 87 if (!language_state_.page_needs_translation() || |
86 if (!language_state.page_needs_translation() || | 88 language_state_.translation_pending() || |
87 language_state.translation_pending() || | 89 language_state_.translation_declined() || |
88 language_state.translation_declined() || | 90 language_state_.IsPageTranslated()) { |
89 language_state.IsPageTranslated()) { | |
90 return; | 91 return; |
91 } | 92 } |
92 | 93 |
93 PrefService* prefs = translate_client_->GetPrefs(); | 94 PrefService* prefs = translate_client_->GetPrefs(); |
94 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { | 95 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { |
95 TranslateBrowserMetrics::ReportInitiationStatus( | 96 TranslateBrowserMetrics::ReportInitiationStatus( |
96 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); | 97 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); |
97 const std::string& locale = | 98 const std::string& locale = |
98 TranslateDownloadManager::GetInstance()->application_locale(); | 99 TranslateDownloadManager::GetInstance()->application_locale(); |
99 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); | 100 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 std::string auto_target_lang = | 184 std::string auto_target_lang = |
184 GetAutoTargetLanguage(language_code, translate_prefs.get()); | 185 GetAutoTargetLanguage(language_code, translate_prefs.get()); |
185 if (!auto_target_lang.empty()) { | 186 if (!auto_target_lang.empty()) { |
186 TranslateBrowserMetrics::ReportInitiationStatus( | 187 TranslateBrowserMetrics::ReportInitiationStatus( |
187 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); | 188 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); |
188 TranslatePage(language_code, auto_target_lang, false); | 189 TranslatePage(language_code, auto_target_lang, false); |
189 return; | 190 return; |
190 } | 191 } |
191 } | 192 } |
192 | 193 |
193 std::string auto_translate_to = language_state.AutoTranslateTo(); | 194 std::string auto_translate_to = language_state_.AutoTranslateTo(); |
194 if (!auto_translate_to.empty()) { | 195 if (!auto_translate_to.empty()) { |
195 // This page was navigated through a click from a translated page. | 196 // This page was navigated through a click from a translated page. |
196 TranslateBrowserMetrics::ReportInitiationStatus( | 197 TranslateBrowserMetrics::ReportInitiationStatus( |
197 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); | 198 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); |
198 TranslatePage(language_code, auto_translate_to, false); | 199 TranslatePage(language_code, auto_translate_to, false); |
199 return; | 200 return; |
200 } | 201 } |
201 | 202 |
202 TranslateBrowserMetrics::ReportInitiationStatus( | 203 TranslateBrowserMetrics::ReportInitiationStatus( |
203 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); | 204 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 // script. Once it is downloaded we'll do the translate. | 246 // script. Once it is downloaded we'll do the translate. |
246 TranslateScript::RequestCallback callback = base::Bind( | 247 TranslateScript::RequestCallback callback = base::Bind( |
247 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), | 248 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), |
248 translate_driver_->GetCurrentPageID(), source_lang, target_lang); | 249 translate_driver_->GetCurrentPageID(), source_lang, target_lang); |
249 | 250 |
250 script->Request(callback); | 251 script->Request(callback); |
251 } | 252 } |
252 | 253 |
253 void TranslateManager::RevertTranslation() { | 254 void TranslateManager::RevertTranslation() { |
254 translate_driver_->RevertTranslation(); | 255 translate_driver_->RevertTranslation(); |
255 translate_driver_->GetLanguageState().SetCurrentLanguage( | 256 language_state_.SetCurrentLanguage(language_state_.original_language()); |
256 translate_driver_->GetLanguageState().original_language()); | |
257 } | 257 } |
258 | 258 |
259 void TranslateManager::ReportLanguageDetectionError() { | 259 void TranslateManager::ReportLanguageDetectionError() { |
260 TranslateBrowserMetrics::ReportLanguageDetectionError(); | 260 TranslateBrowserMetrics::ReportLanguageDetectionError(); |
261 | 261 |
262 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL); | 262 GURL report_error_url = GURL(kReportLanguageDetectionErrorURL); |
263 | 263 |
264 report_error_url = | 264 report_error_url = |
265 net::AppendQueryParameter(report_error_url, | 265 net::AppendQueryParameter(report_error_url, |
266 kUrlQueryName, | 266 kUrlQueryName, |
267 translate_driver_->GetActiveURL().spec()); | 267 translate_driver_->GetActiveURL().spec()); |
268 | 268 |
269 report_error_url = net::AppendQueryParameter( | 269 report_error_url = |
270 report_error_url, | 270 net::AppendQueryParameter(report_error_url, |
271 kSourceLanguageQueryName, | 271 kSourceLanguageQueryName, |
272 translate_driver_->GetLanguageState().original_language()); | 272 language_state_.original_language()); |
273 | 273 |
274 report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url); | 274 report_error_url = TranslateURLUtil::AddHostLocaleToUrl(report_error_url); |
275 report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url); | 275 report_error_url = TranslateURLUtil::AddApiKeyToUrl(report_error_url); |
276 | 276 |
277 translate_client_->ShowReportLanguageDetectionErrorUI(report_error_url); | 277 translate_client_->ShowReportLanguageDetectionErrorUI(report_error_url); |
278 } | 278 } |
279 | 279 |
280 void TranslateManager::DoTranslatePage(const std::string& translate_script, | 280 void TranslateManager::DoTranslatePage(const std::string& translate_script, |
281 const std::string& source_lang, | 281 const std::string& source_lang, |
282 const std::string& target_lang) { | 282 const std::string& target_lang) { |
283 translate_driver_->GetLanguageState().set_translation_pending(true); | 283 language_state_.set_translation_pending(true); |
284 translate_driver_->TranslatePage(translate_script, source_lang, target_lang); | 284 translate_driver_->TranslatePage(translate_script, source_lang, target_lang); |
285 } | 285 } |
286 | 286 |
287 void TranslateManager::PageTranslated(const std::string& source_lang, | 287 void TranslateManager::PageTranslated(const std::string& source_lang, |
288 const std::string& target_lang, | 288 const std::string& target_lang, |
289 TranslateErrors::Type error_type) { | 289 TranslateErrors::Type error_type) { |
290 translate_driver_->GetLanguageState().SetCurrentLanguage(target_lang); | 290 language_state_.SetCurrentLanguage(target_lang); |
291 translate_driver_->GetLanguageState().set_translation_pending(false); | 291 language_state_.set_translation_pending(false); |
292 | 292 |
293 if ((error_type == TranslateErrors::NONE) && | 293 if ((error_type == TranslateErrors::NONE) && |
294 source_lang != translate::kUnknownLanguageCode && | 294 source_lang != translate::kUnknownLanguageCode && |
295 !TranslateDownloadManager::IsSupportedLanguage(source_lang)) { | 295 !TranslateDownloadManager::IsSupportedLanguage(source_lang)) { |
296 error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; | 296 error_type = TranslateErrors::UNSUPPORTED_LANGUAGE; |
297 } | 297 } |
298 | 298 |
299 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_AFTER_TRANSLATE, | 299 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
300 source_lang, | 300 source_lang, |
301 target_lang, | 301 target_lang, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
378 &auto_target_lang)) { | 378 &auto_target_lang)) { |
379 // We need to confirm that the saved target language is still supported. | 379 // We need to confirm that the saved target language is still supported. |
380 // Also, GetLanguageCode will take care of removing country code if any. | 380 // Also, GetLanguageCode will take care of removing country code if any. |
381 auto_target_lang = | 381 auto_target_lang = |
382 TranslateDownloadManager::GetLanguageCode(auto_target_lang); | 382 TranslateDownloadManager::GetLanguageCode(auto_target_lang); |
383 if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang)) | 383 if (TranslateDownloadManager::IsSupportedLanguage(auto_target_lang)) |
384 return auto_target_lang; | 384 return auto_target_lang; |
385 } | 385 } |
386 return std::string(); | 386 return std::string(); |
387 } | 387 } |
| 388 |
| 389 LanguageState& TranslateManager::GetLanguageState() { |
| 390 return language_state_; |
| 391 } |
OLD | NEW |