Chromium Code Reviews| Index: components/translate/core/browser/translate_manager.cc |
| diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc |
| index ed9d73548dd99f7cfb8149ba7201446aa4eb22ea..e0726eaeb1739872945e0997a6bf7f93cb6a72e3 100644 |
| --- a/components/translate/core/browser/translate_manager.cc |
| +++ b/components/translate/core/browser/translate_manager.cc |
| @@ -165,8 +165,7 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| if (net::NetworkChangeNotifier::IsOffline()) |
| return; |
| - if (!ignore_missing_key_for_testing_ && |
| - !::google_apis::HasKeysConfigured()) { |
| + if (!ignore_missing_key_for_testing_ && !::google_apis::HasKeysConfigured()) { |
| // Without an API key, translate won't work, so don't offer to translate |
| // in the first place. Leave prefs::kEnableTranslate on, though, because |
| // that settings syncs and we don't want to turn off translate everywhere |
| @@ -228,22 +227,13 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| return; |
| } |
| - bool ranker_should_offer_translation = true; |
| - if (translate_ranker_->IsQueryEnabled() || |
| - translate_ranker_->IsEnforcementEnabled()) { |
| - ranker_should_offer_translation = translate_ranker_->ShouldOfferTranslation( |
| - *translate_prefs, language_code, target_lang); |
| - translate_event_->set_ranker_request_timestamp_sec( |
| - (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
| - translate_event_->set_ranker_version(translate_ranker_->GetModelVersion()); |
| - translate_event_->set_ranker_response( |
| - ranker_should_offer_translation |
| - ? metrics::TranslateEventProto::SHOW |
| - : metrics::TranslateEventProto::DONT_SHOW); |
| - } |
| + // Querying the ranker now, but not exiting immediately so that we may log |
| + // other potential suppression reasons. |
| + bool should_offer_translation = translate_ranker_->ShouldOfferTranslation( |
| + *translate_prefs, language_code, target_lang, translate_event_.get()); |
| - // Nothing to do if either the language Chrome is in or the language of the |
| - // page is not supported by the translation server. |
| + // Nothing to do if either the language Chrome is in or the language of |
| + // the page is not supported by the translation server. |
| if (target_lang.empty() || |
| !TranslateDownloadManager::IsSupportedLanguage(language_code)) { |
| TranslateBrowserMetrics::ReportInitiationStatus( |
| @@ -257,8 +247,7 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| TranslateAcceptLanguages* accept_languages = |
| translate_client_->GetTranslateAcceptLanguages(); |
| // Don't translate any user black-listed languages. |
| - if (!translate_prefs->CanTranslateLanguage(accept_languages, |
| - language_code)) { |
| + if (!translate_prefs->CanTranslateLanguage(accept_languages, language_code)) { |
| TranslateBrowserMetrics::ReportInitiationStatus( |
| TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); |
| RecordTranslateEvent( |
| @@ -312,8 +301,7 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| return; |
| } |
| - if (!ranker_should_offer_translation && |
| - translate_ranker_->IsEnforcementEnabled()) { |
| + if (!should_offer_translation) { |
| TranslateBrowserMetrics::ReportInitiationStatus( |
| TranslateBrowserMetrics::INITIATION_STATUS_ABORTED_BY_RANKER); |
| RecordTranslateEvent(metrics::TranslateEventProto::DISABLED_BY_RANKER); |
| @@ -325,10 +313,8 @@ void TranslateManager::InitiateTranslation(const std::string& page_lang) { |
| // Prompts the user if they want the page translated. |
| translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_BEFORE_TRANSLATE, |
| - language_code, |
| - target_lang, |
| - TranslateErrors::NONE, |
| - false); |
| + language_code, target_lang, |
| + TranslateErrors::NONE, false); |
| } |
| bool TranslateManager::LanguageInULP(const std::string& language) const { |
| @@ -375,11 +361,9 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang, |
| } |
| // Trigger the "translating now" UI. |
| - translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_TRANSLATING, |
| - source_lang, |
| - target_lang, |
| - TranslateErrors::NONE, |
| - triggered_from_menu); |
| + translate_client_->ShowTranslateUI( |
| + translate::TRANSLATE_STEP_TRANSLATING, source_lang, target_lang, |
| + TranslateErrors::NONE, triggered_from_menu); |
| TranslateScript* script = TranslateDownloadManager::GetInstance()->script(); |
| DCHECK(script != NULL); |
| @@ -392,9 +376,9 @@ void TranslateManager::TranslatePage(const std::string& original_source_lang, |
| // The script is not available yet. Queue that request and query for the |
| // script. Once it is downloaded we'll do the translate. |
| - TranslateScript::RequestCallback callback = base::Bind( |
| - &TranslateManager::OnTranslateScriptFetchComplete, GetWeakPtr(), |
| - source_lang, target_lang); |
| + TranslateScript::RequestCallback callback = |
| + base::Bind(&TranslateManager::OnTranslateScriptFetchComplete, |
| + GetWeakPtr(), source_lang, target_lang); |
| script->Request(callback); |
| } |
| @@ -418,8 +402,7 @@ void TranslateManager::ReportLanguageDetectionError() { |
| translate_driver_->GetLastCommittedURL().spec()); |
| report_error_url = |
| - net::AppendQueryParameter(report_error_url, |
| - kSourceLanguageQueryName, |
| + net::AppendQueryParameter(report_error_url, kSourceLanguageQueryName, |
| language_state_.original_language()); |
| report_error_url = translate::AddHostLocaleToUrl(report_error_url); |
| @@ -432,8 +415,8 @@ void TranslateManager::DoTranslatePage(const std::string& translate_script, |
| const std::string& source_lang, |
| const std::string& target_lang) { |
| language_state_.set_translation_pending(true); |
| - translate_driver_->TranslatePage( |
| - page_seq_no_, translate_script, source_lang, target_lang); |
| + translate_driver_->TranslatePage(page_seq_no_, translate_script, source_lang, |
| + target_lang); |
| } |
| // Notifies |g_callback_list_| of translate errors. |
| @@ -463,9 +446,7 @@ void TranslateManager::PageTranslated(const std::string& source_lang, |
| } |
| translate_client_->ShowTranslateUI(translate::TRANSLATE_STEP_AFTER_TRANSLATE, |
| - source_lang, |
| - target_lang, |
| - error_type, |
| + source_lang, target_lang, error_type, |
| false); |
| NotifyTranslateError(error_type); |
| } |
| @@ -486,11 +467,8 @@ void TranslateManager::OnTranslateScriptFetchComplete( |
| DoTranslatePage(translate_script->data(), source_lang, target_lang); |
| } else { |
| translate_client_->ShowTranslateUI( |
| - translate::TRANSLATE_STEP_TRANSLATE_ERROR, |
| - source_lang, |
| - target_lang, |
| - TranslateErrors::NETWORK, |
| - false); |
| + translate::TRANSLATE_STEP_TRANSLATE_ERROR, source_lang, target_lang, |
| + TranslateErrors::NETWORK, false); |
| NotifyTranslateError(TranslateErrors::NETWORK); |
| } |
| } |
| @@ -601,13 +579,35 @@ void TranslateManager::InitTranslateEvent(const std::string& src_lang, |
| } |
| void TranslateManager::RecordTranslateEvent(int event_type) { |
| - DCHECK(metrics::TranslateEventProto::EventType_IsValid(event_type)); |
| - translate_event_->set_event_type( |
| - static_cast<metrics::TranslateEventProto::EventType>(event_type)); |
| - translate_event_->set_event_timestamp_sec( |
| - (base::TimeTicks::Now() - base::TimeTicks()).InSeconds()); |
| - translate_ranker_->AddTranslateEvent(*translate_event_, |
| - translate_driver_->GetVisibleURL()); |
| + translate_ranker_->RecordTranslateEvent( |
| + event_type, translate_driver_->GetVisibleURL(), translate_event_.get()); |
| +} |
| + |
| +bool TranslateManager::ShouldOverrideDecision(int event_type) { |
| + return translate_ranker_->ShouldOverrideDecision( |
| + event_type, translate_driver_->GetVisibleURL(), translate_event_.get()); |
| +} |
| + |
| +bool TranslateManager::ShouldSuppressBubbleUI( |
| + bool triggered_from_menu, |
| + const std::string& source_language) { |
| + language_state_.SetTranslateEnabled(true); |
| + return ( // Suppress the UI if the user navigates to a page with |
| + // the same language as the previous page. In the new UI, |
| + // continue offering translation after the user navigates |
| + // to another page. |
| + (!base::FeatureList::IsEnabled(translate::kTranslateUI2016Q2) && |
| + !language_state_.HasLanguageChanged() && |
| + !ShouldOverrideDecision( |
| + metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE))) || |
| + ( // Suppress the UI if the user denied translation for this language |
| + // too often. |
| + (!triggered_from_menu && |
| + translate_client_->GetTranslatePrefs()->IsTooOftenDenied( |
| + source_language) && |
| + !ShouldOverrideDecision( |
| + metrics::TranslateEventProto:: |
| + LANGUAGE_DISABLED_BY_AUTO_BLACKLIST))); |
|
Roger McFarlane (Chromium)
2017/04/19 16:16:16
nit: I'd rather see this as seperate clauses
//
hamelphi
2017/04/19 18:19:48
Done.
|
| } |
| } // namespace translate |