| 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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 | 136 |
| 137 // Don't translate any Chrome specific page, e.g., New Tab Page, Download, | 137 // Don't translate any Chrome specific page, e.g., New Tab Page, Download, |
| 138 // History, and so on. | 138 // History, and so on. |
| 139 const GURL& page_url = translate_driver_->GetVisibleURL(); | 139 const GURL& page_url = translate_driver_->GetVisibleURL(); |
| 140 if (!translate_client_->IsTranslatableURL(page_url)) { | 140 if (!translate_client_->IsTranslatableURL(page_url)) { |
| 141 TranslateBrowserMetrics::ReportInitiationStatus( | 141 TranslateBrowserMetrics::ReportInitiationStatus( |
| 142 TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); | 142 TranslateBrowserMetrics::INITIATION_STATUS_URL_IS_NOT_SUPPORTED); |
| 143 return; | 143 return; |
| 144 } | 144 } |
| 145 | 145 |
| 146 // Get the accepted languages list. | 146 scoped_ptr<TranslatePrefs> translate_prefs( |
| 147 std::vector<std::string> accept_languages_list = base::SplitString( | 147 translate_client_->GetTranslatePrefs()); |
| 148 prefs->GetString(accept_languages_pref_name_), ",", | |
| 149 base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL); | |
| 150 | 148 |
| 151 std::string target_lang = GetTargetLanguage(accept_languages_list); | 149 std::string target_lang = GetTargetLanguage(translate_prefs.get()); |
| 152 std::string language_code = | 150 std::string language_code = |
| 153 TranslateDownloadManager::GetLanguageCode(page_lang); | 151 TranslateDownloadManager::GetLanguageCode(page_lang); |
| 154 | 152 |
| 155 // Don't translate similar languages (ex: en-US to en). | 153 // Don't translate similar languages (ex: en-US to en). |
| 156 if (language_code == target_lang) { | 154 if (language_code == target_lang) { |
| 157 TranslateBrowserMetrics::ReportInitiationStatus( | 155 TranslateBrowserMetrics::ReportInitiationStatus( |
| 158 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); | 156 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); |
| 159 return; | 157 return; |
| 160 } | 158 } |
| 161 | 159 |
| 162 // Nothing to do if either the language Chrome is in or the language of the | 160 // Nothing to do if either the language Chrome is in or the language of the |
| 163 // page is not supported by the translation server. | 161 // page is not supported by the translation server. |
| 164 if (target_lang.empty() || | 162 if (target_lang.empty() || |
| 165 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { | 163 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { |
| 166 TranslateBrowserMetrics::ReportInitiationStatus( | 164 TranslateBrowserMetrics::ReportInitiationStatus( |
| 167 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); | 165 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); |
| 168 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( | 166 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( |
| 169 language_code); | 167 language_code); |
| 170 return; | 168 return; |
| 171 } | 169 } |
| 172 | 170 |
| 173 scoped_ptr<TranslatePrefs> translate_prefs( | |
| 174 translate_client_->GetTranslatePrefs()); | |
| 175 | |
| 176 TranslateAcceptLanguages* accept_languages = | 171 TranslateAcceptLanguages* accept_languages = |
| 177 translate_client_->GetTranslateAcceptLanguages(); | 172 translate_client_->GetTranslateAcceptLanguages(); |
| 178 // Don't translate any user black-listed languages. | 173 // Don't translate any user black-listed languages. |
| 179 if (!translate_prefs->CanTranslateLanguage(accept_languages, | 174 if (!translate_prefs->CanTranslateLanguage(accept_languages, |
| 180 language_code)) { | 175 language_code)) { |
| 181 TranslateBrowserMetrics::ReportInitiationStatus( | 176 TranslateBrowserMetrics::ReportInitiationStatus( |
| 182 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); | 177 TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); |
| 183 return; | 178 return; |
| 184 } | 179 } |
| 185 | 180 |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 353 TranslateErrorDetails error_details; | 348 TranslateErrorDetails error_details; |
| 354 error_details.time = base::Time::Now(); | 349 error_details.time = base::Time::Now(); |
| 355 error_details.url = translate_driver_->GetLastCommittedURL(); | 350 error_details.url = translate_driver_->GetLastCommittedURL(); |
| 356 error_details.error = TranslateErrors::NETWORK; | 351 error_details.error = TranslateErrors::NETWORK; |
| 357 NotifyTranslateError(error_details); | 352 NotifyTranslateError(error_details); |
| 358 } | 353 } |
| 359 } | 354 } |
| 360 } | 355 } |
| 361 | 356 |
| 362 // static | 357 // static |
| 363 std::string TranslateManager::GetTargetLanguage( | 358 std::string TranslateManager::GetTargetLanguage(const TranslatePrefs* prefs) { |
| 364 const std::vector<std::string>& accept_languages_list) { | |
| 365 std::string ui_lang = TranslateDownloadManager::GetLanguageCode( | 359 std::string ui_lang = TranslateDownloadManager::GetLanguageCode( |
| 366 TranslateDownloadManager::GetInstance()->application_locale()); | 360 TranslateDownloadManager::GetInstance()->application_locale()); |
| 367 translate::ToTranslateLanguageSynonym(&ui_lang); | 361 translate::ToTranslateLanguageSynonym(&ui_lang); |
| 368 | 362 |
| 369 if (TranslateDownloadManager::IsSupportedLanguage(ui_lang)) | 363 if (TranslateDownloadManager::IsSupportedLanguage(ui_lang)) |
| 370 return ui_lang; | 364 return ui_lang; |
| 371 | 365 |
| 372 // Will translate to the first supported language on the Accepted Language | 366 // Will translate to the first supported language on the Accepted Language |
| 373 // list or not at all if no such candidate exists | 367 // list or not at all if no such candidate exists. |
| 374 std::vector<std::string>::const_iterator iter; | 368 std::vector<std::string> accept_languages_list; |
| 375 for (iter = accept_languages_list.begin(); | 369 prefs->GetLanguageList(&accept_languages_list); |
| 376 iter != accept_languages_list.end(); ++iter) { | 370 for (const auto& lang : accept_languages_list) { |
| 377 std::string lang_code = TranslateDownloadManager::GetLanguageCode(*iter); | 371 std::string lang_code = TranslateDownloadManager::GetLanguageCode(lang); |
| 378 if (TranslateDownloadManager::IsSupportedLanguage(lang_code)) | 372 if (TranslateDownloadManager::IsSupportedLanguage(lang_code)) |
| 379 return lang_code; | 373 return lang_code; |
| 380 } | 374 } |
| 381 return std::string(); | 375 return std::string(); |
| 382 } | 376 } |
| 383 | 377 |
| 384 // static | 378 // static |
| 385 std::string TranslateManager::GetAutoTargetLanguage( | 379 std::string TranslateManager::GetAutoTargetLanguage( |
| 386 const std::string& original_language, | 380 const std::string& original_language, |
| 387 TranslatePrefs* translate_prefs) { | 381 TranslatePrefs* translate_prefs) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 403 } | 397 } |
| 404 | 398 |
| 405 bool TranslateManager::ignore_missing_key_for_testing_ = false; | 399 bool TranslateManager::ignore_missing_key_for_testing_ = false; |
| 406 | 400 |
| 407 // static | 401 // static |
| 408 void TranslateManager::SetIgnoreMissingKeyForTesting(bool ignore) { | 402 void TranslateManager::SetIgnoreMissingKeyForTesting(bool ignore) { |
| 409 ignore_missing_key_for_testing_ = ignore; | 403 ignore_missing_key_for_testing_ = ignore; |
| 410 } | 404 } |
| 411 | 405 |
| 412 } // namespace translate | 406 } // namespace translate |
| OLD | NEW |