| 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 language_state_(translate_driver_), | |
| 77 weak_method_factory_(this) {} | 76 weak_method_factory_(this) {} |
| 78 | 77 |
| 79 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { | 78 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { |
| 80 return weak_method_factory_.GetWeakPtr(); | 79 return weak_method_factory_.GetWeakPtr(); |
| 81 } | 80 } |
| 82 | 81 |
| 83 void TranslateManager::InitiateTranslation(const std::string& page_lang) { | 82 void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| 84 // Short-circuit out if not in a state where initiating translation makes | 83 // Short-circuit out if not in a state where initiating translation makes |
| 85 // sense (this method may be called muhtiple times for a given page). | 84 // sense (this method may be called muhtiple times for a given page). |
| 86 if (!language_state_.page_needs_translation() || | 85 LanguageState& language_state = translate_driver_->GetLanguageState(); |
| 87 language_state_.translation_pending() || | 86 if (!language_state.page_needs_translation() || |
| 88 language_state_.translation_declined() || | 87 language_state.translation_pending() || |
| 89 language_state_.IsPageTranslated()) { | 88 language_state.translation_declined() || |
| 89 language_state.IsPageTranslated()) { |
| 90 return; | 90 return; |
| 91 } | 91 } |
| 92 | 92 |
| 93 PrefService* prefs = translate_client_->GetPrefs(); | 93 PrefService* prefs = translate_client_->GetPrefs(); |
| 94 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { | 94 if (!prefs->GetBoolean(prefs::kEnableTranslate)) { |
| 95 TranslateBrowserMetrics::ReportInitiationStatus( | 95 TranslateBrowserMetrics::ReportInitiationStatus( |
| 96 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); | 96 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_PREFS); |
| 97 const std::string& locale = | 97 const std::string& locale = |
| 98 TranslateDownloadManager::GetInstance()->application_locale(); | 98 TranslateDownloadManager::GetInstance()->application_locale(); |
| 99 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); | 99 TranslateBrowserMetrics::ReportLocalesOnDisabledByPrefs(locale); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 std::string auto_target_lang = | 183 std::string auto_target_lang = |
| 184 GetAutoTargetLanguage(language_code, translate_prefs.get()); | 184 GetAutoTargetLanguage(language_code, translate_prefs.get()); |
| 185 if (!auto_target_lang.empty()) { | 185 if (!auto_target_lang.empty()) { |
| 186 TranslateBrowserMetrics::ReportInitiationStatus( | 186 TranslateBrowserMetrics::ReportInitiationStatus( |
| 187 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); | 187 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_CONFIG); |
| 188 TranslatePage(language_code, auto_target_lang, false); | 188 TranslatePage(language_code, auto_target_lang, false); |
| 189 return; | 189 return; |
| 190 } | 190 } |
| 191 } | 191 } |
| 192 | 192 |
| 193 std::string auto_translate_to = language_state_.AutoTranslateTo(); | 193 std::string auto_translate_to = language_state.AutoTranslateTo(); |
| 194 if (!auto_translate_to.empty()) { | 194 if (!auto_translate_to.empty()) { |
| 195 // This page was navigated through a click from a translated page. | 195 // This page was navigated through a click from a translated page. |
| 196 TranslateBrowserMetrics::ReportInitiationStatus( | 196 TranslateBrowserMetrics::ReportInitiationStatus( |
| 197 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); | 197 TranslateBrowserMetrics::INITIATION_STATUS_AUTO_BY_LINK); |
| 198 TranslatePage(language_code, auto_translate_to, false); | 198 TranslatePage(language_code, auto_translate_to, false); |
| 199 return; | 199 return; |
| 200 } | 200 } |
| 201 | 201 |
| 202 TranslateBrowserMetrics::ReportInitiationStatus( | 202 TranslateBrowserMetrics::ReportInitiationStatus( |
| 203 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); | 203 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. | 245 // script. Once it is downloaded we'll do the translate. |
| 246 TranslateScript::RequestCallback callback = base::Bind( | 246 TranslateScript::RequestCallback callback = base::Bind( |
| 247 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), | 247 &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), |
| 248 translate_driver_->GetCurrentPageID(), source_lang, target_lang); | 248 translate_driver_->GetCurrentPageID(), source_lang, target_lang); |
| 249 | 249 |
| 250 script->Request(callback); | 250 script->Request(callback); |
| 251 } | 251 } |
| 252 | 252 |
| 253 void TranslateManager::RevertTranslation() { | 253 void TranslateManager::RevertTranslation() { |
| 254 translate_driver_->RevertTranslation(); | 254 translate_driver_->RevertTranslation(); |
| 255 language_state_.SetCurrentLanguage( | 255 translate_driver_->GetLanguageState().SetCurrentLanguage( |
| 256 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 = net::AppendQueryParameter( |
| 270 report_error_url, | 270 report_error_url, |
| 271 kSourceLanguageQueryName, | 271 kSourceLanguageQueryName, |
| 272 language_state_.original_language()); | 272 translate_driver_->GetLanguageState().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 language_state_.set_translation_pending(true); | 283 translate_driver_->GetLanguageState().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 language_state_.SetCurrentLanguage(target_lang); | 290 translate_driver_->GetLanguageState().SetCurrentLanguage(target_lang); |
| 291 language_state_.set_translation_pending(false); | 291 translate_driver_->GetLanguageState().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 |