| 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..f09b9d7f8caa2b9f94933238af989b88c1b473be 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,41 @@ 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) {
|
| + // 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.
|
| + language_state_.SetTranslateEnabled(true);
|
| + if (!base::FeatureList::IsEnabled(translate::kTranslateUI2016Q2) &&
|
| + !language_state_.HasLanguageChanged() &&
|
| + !ShouldOverrideDecision(
|
| + metrics::TranslateEventProto::MATCHES_PREVIOUS_LANGUAGE)) {
|
| + return true;
|
| + }
|
| +
|
| + // Suppress the UI if the user denied translation for this language
|
| + // too often.
|
| + if (!triggered_from_menu &&
|
| + translate_client_->GetTranslatePrefs()->IsTooOftenDenied(
|
| + source_language) &&
|
| + !ShouldOverrideDecision(
|
| + metrics::TranslateEventProto::LANGUAGE_DISABLED_BY_AUTO_BLACKLIST)) {
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| }
|
|
|
| } // namespace translate
|
|
|