Commit b26dc862 authored by Scott Little's avatar Scott Little Committed by Commit Bot

Add support for overriding translate blocklists for hrefTranslate.

This CL adds support for overriding the translate language blocklist and
the URL host blocklist (each behind separate flags) when a link is
clicked that has hrefTranslate set. Each of these flags also supports a
parameter to indicate how much behavior should override these
blocklists: just the behavior of showing the translate UI, or the
automatic translation behavior as well.

Bug: 1131240
Change-Id: I1b4912ed1e369b04f1d326255c1a77763d825c0b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2425085
Commit-Queue: Scott Little <sclittle@chromium.org>
Reviewed-by: default avatarMegan Jablonski <megjablon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#812190}
parent 4f332060
...@@ -125,6 +125,7 @@ ...@@ -125,6 +125,7 @@
#include "components/sync/base/sync_base_switches.h" #include "components/sync/base/sync_base_switches.h"
#include "components/sync/driver/sync_driver_switches.h" #include "components/sync/driver/sync_driver_switches.h"
#include "components/tracing/common/tracing_switches.h" #include "components/tracing/common/tracing_switches.h"
#include "components/translate/core/browser/translate_manager.h"
#include "components/translate/core/browser/translate_prefs.h" #include "components/translate/core/browser/translate_prefs.h"
#include "components/translate/core/browser/translate_ranker_impl.h" #include "components/translate/core/browser/translate_ranker_impl.h"
#include "components/translate/core/common/translate_util.h" #include "components/translate/core/common/translate_util.h"
...@@ -1505,6 +1506,21 @@ const FeatureEntry::FeatureVariation ...@@ -1505,6 +1506,21 @@ const FeatureEntry::FeatureVariation
base::size(kTranslateForceTriggerOnEnglishBackoff), nullptr}}; base::size(kTranslateForceTriggerOnEnglishBackoff), nullptr}};
#endif // defined(OS_ANDROID) #endif // defined(OS_ANDROID)
const FeatureEntry::FeatureParam kOverridePrefsForHrefTranslateForceAuto[] = {
{translate::kForceAutoTranslateKey, "true"}};
const FeatureEntry::FeatureVariation
kOverrideLanguagePrefsForHrefTranslateVariations[] = {
{"(Force automatic translation of blocked languages for hrefTranslate)",
kOverridePrefsForHrefTranslateForceAuto,
base::size(kOverridePrefsForHrefTranslateForceAuto), nullptr}};
const FeatureEntry::FeatureVariation
kOverrideSitePrefsForHrefTranslateVariations[] = {
{"(Force automatic translation of blocked sites for hrefTranslate)",
kOverridePrefsForHrefTranslateForceAuto,
base::size(kOverridePrefsForHrefTranslateForceAuto), nullptr}};
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
const FeatureEntry::FeatureParam kExploreSitesExperimental = { const FeatureEntry::FeatureParam kExploreSitesExperimental = {
chrome::android::explore_sites::kExploreSitesVariationParameterName, chrome::android::explore_sites::kExploreSitesVariationParameterName,
...@@ -2897,6 +2913,22 @@ const FeatureEntry kFeatureEntries[] = { ...@@ -2897,6 +2913,22 @@ const FeatureEntry kFeatureEntries[] = {
"OverrideTranslateTriggerInIndia")}, "OverrideTranslateTriggerInIndia")},
#endif // OS_ANDROID #endif // OS_ANDROID
{"override-language-prefs-for-href-translate",
flag_descriptions::kOverrideLanguagePrefsForHrefTranslateName,
flag_descriptions::kOverrideLanguagePrefsForHrefTranslateDescription,
kOsAll,
FEATURE_WITH_PARAMS_VALUE_TYPE(
translate::kOverrideLanguagePrefsForHrefTranslate,
kOverrideLanguagePrefsForHrefTranslateVariations,
"OverrideLanguagePrefsForHrefTranslate")},
{"override-site-prefs-for-href-translate",
flag_descriptions::kOverrideSitePrefsForHrefTranslateName,
flag_descriptions::kOverrideSitePrefsForHrefTranslateDescription, kOsAll,
FEATURE_WITH_PARAMS_VALUE_TYPE(
translate::kOverrideSitePrefsForHrefTranslate,
kOverrideSitePrefsForHrefTranslateVariations,
"OverrideSitePrefsForHrefTranslate")},
#if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS) #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
{"enable-native-notifications", {"enable-native-notifications",
flag_descriptions::kNotificationsNativeFlagName, flag_descriptions::kNotificationsNativeFlagName,
......
...@@ -3577,6 +3577,16 @@ ...@@ -3577,6 +3577,16 @@
// customize switches. // customize switches.
"expiry_milestone": -1 "expiry_milestone": -1
}, },
{
"name": "override-language-prefs-for-href-translate",
"owners": [ "sclittle", "chrome-language" ],
"expiry_milestone": 91
},
{
"name": "override-site-prefs-for-href-translate",
"owners": [ "sclittle", "chrome-language" ],
"expiry_milestone": 91
},
{ {
"name": "overscroll-history-navigation", "name": "overscroll-history-navigation",
"owners": [ "mohsen", "jinsukkim" ], "owners": [ "mohsen", "jinsukkim" ],
......
...@@ -1779,6 +1779,17 @@ const char kOverlayStrategiesOccludedAndUnoccluded[] = ...@@ -1779,6 +1779,17 @@ const char kOverlayStrategiesOccludedAndUnoccluded[] =
"Occluded and unoccluded buffers " "Occluded and unoccluded buffers "
"(single-fullscreen,single-on-top,underlay)"; "(single-fullscreen,single-on-top,underlay)";
const char kOverrideLanguagePrefsForHrefTranslateName[] =
"Override user-blocklisted languages for hrefTranslate";
const char kOverrideLanguagePrefsForHrefTranslateDescription[] =
"When using hrefTranslate, ignore the user's blocklist of languages that "
"shouldn't be translated.";
const char kOverrideSitePrefsForHrefTranslateName[] =
"Override user-blocklisted sites for hrefTranslate";
const char kOverrideSitePrefsForHrefTranslateDescription[] =
"When using hrefTranslate, ignore the user's blocklist of websites that "
"shouldn't be translated.";
const char kOverscrollHistoryNavigationName[] = "Overscroll history navigation"; const char kOverscrollHistoryNavigationName[] = "Overscroll history navigation";
const char kOverscrollHistoryNavigationDescription[] = const char kOverscrollHistoryNavigationDescription[] =
"History navigation in response to horizontal overscroll."; "History navigation in response to horizontal overscroll.";
......
...@@ -1021,6 +1021,11 @@ extern const char kOverlayStrategiesUnoccludedFullscreen[]; ...@@ -1021,6 +1021,11 @@ extern const char kOverlayStrategiesUnoccludedFullscreen[];
extern const char kOverlayStrategiesUnoccluded[]; extern const char kOverlayStrategiesUnoccluded[];
extern const char kOverlayStrategiesOccludedAndUnoccluded[]; extern const char kOverlayStrategiesOccludedAndUnoccluded[];
extern const char kOverrideLanguagePrefsForHrefTranslateName[];
extern const char kOverrideLanguagePrefsForHrefTranslateDescription[];
extern const char kOverrideSitePrefsForHrefTranslateName[];
extern const char kOverrideSitePrefsForHrefTranslateDescription[];
extern const char kUpdateHoverAtBeginFrameName[]; extern const char kUpdateHoverAtBeginFrameName[];
extern const char kUpdateHoverAtBeginFrameDescription[]; extern const char kUpdateHoverAtBeginFrameDescription[];
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/command_line.h" #include "base/command_line.h"
#include "base/metrics/field_trial.h" #include "base/metrics/field_trial.h"
#include "base/metrics/field_trial_params.h"
#include "base/metrics/histogram.h" #include "base/metrics/histogram.h"
#include "base/stl_util.h" #include "base/stl_util.h"
#include "base/strings/string_number_conversions.h" #include "base/strings/string_number_conversions.h"
...@@ -100,7 +101,15 @@ void MoveSkippedLanguagesToEndIfNecessary( ...@@ -100,7 +101,15 @@ void MoveSkippedLanguagesToEndIfNecessary(
} // namespace } // namespace
TranslateManager::~TranslateManager() {} const base::Feature kOverrideLanguagePrefsForHrefTranslate{
"OverrideLanguagePrefsForHrefTranslate", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kOverrideSitePrefsForHrefTranslate{
"OverrideSitePrefsForHrefTranslate", base::FEATURE_DISABLED_BY_DEFAULT};
const char kForceAutoTranslateKey[] = "force-auto-translate";
TranslateManager::~TranslateManager() = default;
// static // static
std::unique_ptr<TranslateManager::TranslateErrorCallbackList::Subscription> std::unique_ptr<TranslateManager::TranslateErrorCallbackList::Subscription>
...@@ -827,7 +836,24 @@ void TranslateManager::FilterForUserPrefs( ...@@ -827,7 +836,24 @@ void TranslateManager::FilterForUserPrefs(
// Don't translate any user black-listed languages. // Don't translate any user black-listed languages.
if (!translate_prefs->CanTranslateLanguage(accept_languages, if (!translate_prefs->CanTranslateLanguage(accept_languages,
page_language_code)) { page_language_code)) {
decision->PreventAllTriggering(); decision->PreventAutoTranslate();
decision->PreventShowingUI();
decision->PreventShowingPredefinedLanguageTranslateUI();
// Disable showing the translate UI for hrefTranslate unless hrefTranslate
// is supposed to override the language blocklist.
if (!base::FeatureList::IsEnabled(kOverrideLanguagePrefsForHrefTranslate)) {
decision->PreventShowingHrefTranslateUI();
}
// Disable auto-translating the page for hrefTranslate unless hrefTranslate
// is supposed to override the language blocklist for auto-translation as
// well.
if (!base::GetFieldTrialParamByFeatureAsBool(
kOverrideLanguagePrefsForHrefTranslate, kForceAutoTranslateKey,
false)) {
decision->PreventAutoHrefTranslate();
}
decision->initiation_statuses.push_back( decision->initiation_statuses.push_back(
TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
decision->ranker_events.push_back( decision->ranker_events.push_back(
...@@ -837,7 +863,23 @@ void TranslateManager::FilterForUserPrefs( ...@@ -837,7 +863,23 @@ void TranslateManager::FilterForUserPrefs(
// Don't translate any user black-listed URLs. // Don't translate any user black-listed URLs.
const GURL& page_url = translate_driver_->GetVisibleURL(); const GURL& page_url = translate_driver_->GetVisibleURL();
if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) { if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) {
decision->PreventAllTriggering(); decision->PreventAutoTranslate();
decision->PreventShowingUI();
decision->PreventShowingPredefinedLanguageTranslateUI();
// Disable showing the translate UI for hrefTranslate unless hrefTranslate
// is supposed to override the site blocklist.
if (!base::FeatureList::IsEnabled(kOverrideSitePrefsForHrefTranslate)) {
decision->PreventShowingHrefTranslateUI();
}
// Disable auto-translating the page for hrefTranslate unless hrefTranslate
// is supposed to override the site blocklist for auto-translation as well.
if (!base::GetFieldTrialParamByFeatureAsBool(
kOverrideSitePrefsForHrefTranslate, kForceAutoTranslateKey,
false)) {
decision->PreventAutoHrefTranslate();
}
decision->initiation_statuses.push_back( decision->initiation_statuses.push_back(
TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG); TranslateBrowserMetrics::INITIATION_STATUS_DISABLED_BY_CONFIG);
decision->ranker_events.push_back( decision->ranker_events.push_back(
......
...@@ -43,6 +43,10 @@ class TranslateManagerTest; ...@@ -43,6 +43,10 @@ class TranslateManagerTest;
struct TranslateErrorDetails; struct TranslateErrorDetails;
struct TranslateInitDetails; struct TranslateInitDetails;
extern const base::Feature kOverrideLanguagePrefsForHrefTranslate;
extern const base::Feature kOverrideSitePrefsForHrefTranslate;
extern const char kForceAutoTranslateKey[];
// The TranslateManager class is responsible for showing an info-bar when a page // The TranslateManager class is responsible for showing an info-bar when a page
// in a language different than the user language is loaded. It triggers the // in a language different than the user language is loaded. It triggers the
// page translation the user requests. // page translation the user requests.
......
...@@ -41385,6 +41385,7 @@ from previous Chrome versions. ...@@ -41385,6 +41385,7 @@ from previous Chrome versions.
<int value="-1620568042" label="FeaturePolicy:disabled"/> <int value="-1620568042" label="FeaturePolicy:disabled"/>
<int value="-1620046590" label="UseMediaHistoryStore:enabled"/> <int value="-1620046590" label="UseMediaHistoryStore:enabled"/>
<int value="-1619757314" label="touch-scrolling-mode"/> <int value="-1619757314" label="touch-scrolling-mode"/>
<int value="-1619146163" label="OverrideSitePrefsForHrefTranslate:disabled"/>
<int value="-1618707999" label="enable-webfonts-intervention-v2"/> <int value="-1618707999" label="enable-webfonts-intervention-v2"/>
<int value="-1617183455" label="OfflineRecentPages:disabled"/> <int value="-1617183455" label="OfflineRecentPages:disabled"/>
<int value="-1616855537" label="enable-manual-password-generation:disabled"/> <int value="-1616855537" label="enable-manual-password-generation:disabled"/>
...@@ -41535,6 +41536,8 @@ from previous Chrome versions. ...@@ -41535,6 +41536,8 @@ from previous Chrome versions.
<int value="-1477686864" label="OmniboxRichAutocompletion:enabled"/> <int value="-1477686864" label="OmniboxRichAutocompletion:enabled"/>
<int value="-1477560322" label="kiosk"/> <int value="-1477560322" label="kiosk"/>
<int value="-1476930281" label="Windows10CustomTitlebar:enabled"/> <int value="-1476930281" label="Windows10CustomTitlebar:enabled"/>
<int value="-1474724634"
label="OverrideLanguagePrefsForHrefTranslate:enabled"/>
<int value="-1473878093" label="HideArcMediaNotifications:disabled"/> <int value="-1473878093" label="HideArcMediaNotifications:disabled"/>
<int value="-1473668019" label="token-binding:disabled"/> <int value="-1473668019" label="token-binding:disabled"/>
<int value="-1473136627" label="enable-web-payments"/> <int value="-1473136627" label="enable-web-payments"/>
...@@ -43740,6 +43743,8 @@ from previous Chrome versions. ...@@ -43740,6 +43743,8 @@ from previous Chrome versions.
<int value="752939691" label="disable-tab-for-desktop-share"/> <int value="752939691" label="disable-tab-for-desktop-share"/>
<int value="757645375" label="AndroidDarkSearch:disabled"/> <int value="757645375" label="AndroidDarkSearch:disabled"/>
<int value="760542355" label="ServiceWorkerScriptFullCodeCache:enabled"/> <int value="760542355" label="ServiceWorkerScriptFullCodeCache:enabled"/>
<int value="761770770"
label="OverrideLanguagePrefsForHrefTranslate:disabled"/>
<int value="762700519" label="enable-checker-imaging"/> <int value="762700519" label="enable-checker-imaging"/>
<int value="763947368" label="HomepageLocationPolicy:disabled"/> <int value="763947368" label="HomepageLocationPolicy:disabled"/>
<int value="765266228" label="TabGroupsCollapse:disabled"/> <int value="765266228" label="TabGroupsCollapse:disabled"/>
...@@ -44540,6 +44545,7 @@ from previous Chrome versions. ...@@ -44540,6 +44545,7 @@ from previous Chrome versions.
<int value="1600850069" label="MobileIdentityConsistency:disabled"/> <int value="1600850069" label="MobileIdentityConsistency:disabled"/>
<int value="1600926040" label="TranslateCompactUI:enabled"/> <int value="1600926040" label="TranslateCompactUI:enabled"/>
<int value="1601582484" label="enable-crash-reporter-for-testing"/> <int value="1601582484" label="enable-crash-reporter-for-testing"/>
<int value="1602627012" label="OverrideSitePrefsForHrefTranslate:enabled"/>
<int value="1602869271" label="ChromeShareScreenshot:disabled"/> <int value="1602869271" label="ChromeShareScreenshot:disabled"/>
<int value="1603578716" label="CaptionSettings:disabled"/> <int value="1603578716" label="CaptionSettings:disabled"/>
<int value="1604893983" label="VizForWebView:disabled"/> <int value="1604893983" label="VizForWebView:disabled"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment