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 |