| 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 <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 std::unique_ptr<TranslateManager::TranslateErrorCallbackList::Subscription> | 124 std::unique_ptr<TranslateManager::TranslateErrorCallbackList::Subscription> |
| 125 TranslateManager::RegisterTranslateErrorCallback( | 125 TranslateManager::RegisterTranslateErrorCallback( |
| 126 const TranslateManager::TranslateErrorCallback& callback) { | 126 const TranslateManager::TranslateErrorCallback& callback) { |
| 127 if (!g_callback_list_) | 127 if (!g_callback_list_) |
| 128 g_callback_list_ = new TranslateErrorCallbackList; | 128 g_callback_list_ = new TranslateErrorCallbackList; |
| 129 return g_callback_list_->Add(callback); | 129 return g_callback_list_->Add(callback); |
| 130 } | 130 } |
| 131 | 131 |
| 132 TranslateManager::TranslateManager( | 132 TranslateManager::TranslateManager( |
| 133 TranslateClient* translate_client, | 133 TranslateClient* translate_client, |
| 134 TranslateRanker* translate_ranker, | |
| 135 const std::string& accept_languages_pref_name) | 134 const std::string& accept_languages_pref_name) |
| 136 : page_seq_no_(0), | 135 : page_seq_no_(0), |
| 137 accept_languages_pref_name_(accept_languages_pref_name), | 136 accept_languages_pref_name_(accept_languages_pref_name), |
| 138 translate_client_(translate_client), | 137 translate_client_(translate_client), |
| 139 translate_driver_(translate_client_->GetTranslateDriver()), | 138 translate_driver_(translate_client_->GetTranslateDriver()), |
| 140 translate_ranker_(translate_ranker), | |
| 141 language_state_(translate_driver_), | 139 language_state_(translate_driver_), |
| 142 translate_event_(base::MakeUnique<metrics::TranslateEventProto>()), | 140 translate_event_(base::MakeUnique<metrics::TranslateEventProto>()), |
| 143 weak_method_factory_(this) {} | 141 weak_method_factory_(this) { |
| 142 if (TranslateRanker::IsEnabled()) |
| 143 TranslateRanker::GetInstance()->FetchModelData(); // Asynchronous. |
| 144 } |
| 144 | 145 |
| 145 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { | 146 base::WeakPtr<TranslateManager> TranslateManager::GetWeakPtr() { |
| 146 return weak_method_factory_.GetWeakPtr(); | 147 return weak_method_factory_.GetWeakPtr(); |
| 147 } | 148 } |
| 148 | 149 |
| 149 void TranslateManager::InitiateTranslation(const std::string& page_lang) { | 150 void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| 150 // TODO(rogerm): Remove ScopedTracker below once crbug.com/646711 is closed. | 151 // TODO(rogerm): Remove ScopedTracker below once crbug.com/646711 is closed. |
| 151 tracked_objects::ScopedTracker tracking_profile( | 152 tracked_objects::ScopedTracker tracking_profile( |
| 152 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 153 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 153 "646711 translate::TranslateManager::InitiateTranslation")); | 154 "646711 translate::TranslateManager::InitiateTranslation")); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 | 225 |
| 225 // Don't translate similar languages (ex: en-US to en). | 226 // Don't translate similar languages (ex: en-US to en). |
| 226 // Also do not offer to translate between Simplified and Traditional Chinese. | 227 // Also do not offer to translate between Simplified and Traditional Chinese. |
| 227 if (language_code == target_lang || | 228 if (language_code == target_lang || |
| 228 (language_code == "zh-CN" && target_lang == "zh-TW") || | 229 (language_code == "zh-CN" && target_lang == "zh-TW") || |
| 229 (language_code == "zh-TW" && target_lang == "zh-CN")) { | 230 (language_code == "zh-TW" && target_lang == "zh-CN")) { |
| 230 TranslateBrowserMetrics::ReportInitiationStatus( | 231 TranslateBrowserMetrics::ReportInitiationStatus( |
| 231 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); | 232 TranslateBrowserMetrics::INITIATION_STATUS_SIMILAR_LANGUAGES); |
| 232 return; | 233 return; |
| 233 } | 234 } |
| 234 | |
| 235 bool ranker_should_offer_translation = true; | |
| 236 if (translate_ranker_->IsQueryEnabled() || | |
| 237 translate_ranker_->IsLoggingEnabled() || | |
| 238 translate_ranker_->IsEnforcementEnabled()) { | |
| 239 ranker_should_offer_translation = translate_ranker_->ShouldOfferTranslation( | |
| 240 *translate_prefs, language_code, target_lang); | |
| 241 translate_event_->set_ranker_request_timestamp_sec( | |
| 242 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); | |
| 243 translate_event_->set_ranker_version(translate_ranker_->GetModelVersion()); | |
| 244 translate_event_->set_ranker_response( | |
| 245 ranker_should_offer_translation | |
| 246 ? metrics::TranslateEventProto::SHOW | |
| 247 : metrics::TranslateEventProto::DONT_SHOW); | |
| 248 } | |
| 249 | |
| 250 // Nothing to do if either the language Chrome is in or the language of the | 235 // Nothing to do if either the language Chrome is in or the language of the |
| 251 // page is not supported by the translation server. | 236 // page is not supported by the translation server. |
| 252 if (target_lang.empty() || | 237 if (target_lang.empty() || |
| 253 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { | 238 !TranslateDownloadManager::IsSupportedLanguage(language_code)) { |
| 254 TranslateBrowserMetrics::ReportInitiationStatus( | 239 TranslateBrowserMetrics::ReportInitiationStatus( |
| 255 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); | 240 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IS_NOT_SUPPORTED); |
| 256 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( | 241 TranslateBrowserMetrics::ReportUnsupportedLanguageAtInitiation( |
| 257 language_code); | 242 language_code); |
| 258 RecordTranslateEvent(metrics::TranslateEventProto::UNSUPPORTED_LANGUAGE); | 243 RecordTranslateEvent(metrics::TranslateEventProto::UNSUPPORTED_LANGUAGE); |
| 259 return; | 244 return; |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 return; | 295 return; |
| 311 } | 296 } |
| 312 | 297 |
| 313 if (LanguageInULP(language_code)) { | 298 if (LanguageInULP(language_code)) { |
| 314 TranslateBrowserMetrics::ReportInitiationStatus( | 299 TranslateBrowserMetrics::ReportInitiationStatus( |
| 315 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IN_ULP); | 300 TranslateBrowserMetrics::INITIATION_STATUS_LANGUAGE_IN_ULP); |
| 316 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_PREF); | 301 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_PREF); |
| 317 return; | 302 return; |
| 318 } | 303 } |
| 319 | 304 |
| 320 if (!ranker_should_offer_translation && | 305 if (TranslateRanker::IsEnabled()) { |
| 321 translate_ranker_->IsEnforcementEnabled()) { | 306 TranslateRanker* translate_ranker = TranslateRanker::GetInstance(); |
| 322 TranslateBrowserMetrics::ReportInitiationStatus( | 307 bool should_offer_translation = translate_ranker->ShouldOfferTranslation( |
| 323 TranslateBrowserMetrics::INITIATION_STATUS_ABORTED_BY_RANKER); | 308 *translate_prefs, language_code, target_lang); |
| 324 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_RANKER); | 309 translate_event_->set_ranker_request_timestamp_sec( |
| 325 return; | 310 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
| 311 translate_event_->set_ranker_version(translate_ranker->GetModelVersion()); |
| 312 translate_event_->set_ranker_response( |
| 313 should_offer_translation ? metrics::TranslateEventProto::SHOW |
| 314 : metrics::TranslateEventProto::DONT_SHOW); |
| 315 if (!should_offer_translation && TranslateRanker::IsEnforcementEnabled()) { |
| 316 TranslateBrowserMetrics::ReportInitiationStatus( |
| 317 TranslateBrowserMetrics::INITIATION_STATUS_ABORTED_BY_RANKER); |
| 318 RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_RANKER); |
| 319 return; |
| 320 } |
| 326 } | 321 } |
| 327 | 322 |
| 328 TranslateBrowserMetrics::ReportInitiationStatus( | 323 TranslateBrowserMetrics::ReportInitiationStatus( |
| 329 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); | 324 TranslateBrowserMetrics::INITIATION_STATUS_SHOW_INFOBAR); |
| 330 | 325 |
| 331 // Prompts the user if they want the page translated. | 326 // Prompts the user if they want the page translated. |
| 332 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, | 327 translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
| 333 language_code, | 328 language_code, |
| 334 target_lang, | 329 target_lang, |
| 335 TranslateErrors::NONE, | 330 TranslateErrors::NONE, |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 translate_event_->set_event_type(metrics::TranslateEventProto::UNKNOWN); | 597 translate_event_->set_event_type(metrics::TranslateEventProto::UNKNOWN); |
| 603 // TODO(rogerm): Populate the language list. | 598 // TODO(rogerm): Populate the language list. |
| 604 } | 599 } |
| 605 | 600 |
| 606 void TranslateManager::RecordTranslateEvent(int event_type) { | 601 void TranslateManager::RecordTranslateEvent(int event_type) { |
| 607 DCHECK(metrics::TranslateEventProto::EventType_IsValid(event_type)); | 602 DCHECK(metrics::TranslateEventProto::EventType_IsValid(event_type)); |
| 608 translate_event_->set_event_type( | 603 translate_event_->set_event_type( |
| 609 static_cast<metrics::TranslateEventProto::EventType>(event_type)); | 604 static_cast<metrics::TranslateEventProto::EventType>(event_type)); |
| 610 translate_event_->set_event_timestamp_sec( | 605 translate_event_->set_event_timestamp_sec( |
| 611 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); | 606 (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
| 612 translate_ranker_->AddTranslateEvent(*translate_event_); | 607 TranslateRanker::GetInstance()->RecordTranslateEvent(*translate_event_); |
| 613 } | 608 } |
| 614 | 609 |
| 615 } // namespace translate | 610 } // namespace translate |
| OLD | NEW |