Record when prefs blocklists affect hrefTranslate translations.

This CL adds metrics recording which prefs blocklists affect
hrefTranslate translations, even if those blocklists don't end up
preventing translation from happening.

This CL also splits the kNotAutoTranslated enum value that can be
recorded for Translate.HrefHint.Status into the two separate values
kUiShownNotAutoTranslated and kNoUiShownNotAutoTranslated.

(cherry picked from commit fbd7e0df954f702fca0b0d1a4b5ed0247667de0e)

Bug: 1131240
Change-Id: Ibeb9adffe4452419559ba0fe451eb7e31e664c0e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2450847
Reviewed-by: Megan Jablonski <[email protected]>
Reviewed-by: Tarun Bansal <[email protected]>
Commit-Queue: Scott Little <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#814516}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2466506
Reviewed-by: Scott Little <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#291}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc
index 2014596..1aa2897 100644
--- a/chrome/browser/translate/translate_manager_browsertest.cc
+++ b/chrome/browser/translate/translate_manager_browsertest.cc
@@ -220,6 +220,8 @@
 
 static const char kTranslateHrefHintStatusHistogram[] =
     "Translate.HrefHint.Status";
+static const char kTranslateHrefHintPrefsFilterStatusHistogram[] =
+    "Translate.HrefHint.PrefsFilterStatus";
 
 }  // namespace
 
@@ -547,6 +549,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test that hrefTranslate doesn't auto-translate if the originator of the
@@ -594,6 +601,7 @@
   EXPECT_EQ("", chrome_translate_client->GetLanguageState().AutoTranslateTo());
 
   histograms.ExpectTotalCount(kTranslateHrefHintStatusHistogram, 0);
+  histograms.ExpectTotalCount(kTranslateHrefHintPrefsFilterStatusHistogram, 0);
 }
 
 // Test that hrefTranslate with an unsupported language doesn't trigger.
@@ -644,8 +652,13 @@
 
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kNoUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
       1);
 }
 
@@ -701,6 +714,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test an href translate link without an href lang for the landing page.
@@ -757,6 +775,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test an href translate link that's overridden by the auto translate settings.
@@ -783,6 +806,11 @@
       static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
                            kAutoTranslatedDifferentTargetLanguage),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test that hrefTranslate doesn't translate if the target language is in the
@@ -801,8 +829,13 @@
   // The page should not have been automatically translated.
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kNoUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kLanguageInBlocklist),
       1);
 }
 
@@ -821,8 +854,41 @@
   // The page should not have been automatically translated.
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kNoUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kSiteInBlocklist),
+      1);
+}
+
+// Test that hrefTranslate doesn't translate if the language is in the user's
+// language blocklist and the website is in the user's site blocklist.
+IN_PROC_BROWSER_TEST_F(TranslateManagerBrowserTest,
+                       HrefTranslateLanguageAndSiteBlocked) {
+  base::HistogramTester histograms;
+  GetChromeTranslateClient()
+      ->GetTranslateManager()
+      ->SetIgnoreMissingKeyForTesting(true);
+  GetChromeTranslateClient()->GetTranslatePrefs()->AddToLanguageList("fr",
+                                                                     true);
+  GetChromeTranslateClient()->GetTranslatePrefs()->BlacklistSite(
+      "www.google.com");
+
+  ClickFrenchHrefTranslateLinkOnGooglePage();
+
+  // The page should not have been automatically translated.
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kNoUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kBothLanguageAndSiteInBlocklist),
       1);
 }
 
@@ -861,8 +927,13 @@
   // shown alone.
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kLanguageInBlocklist),
       1);
 }
 
@@ -910,6 +981,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kLanguageInBlocklist),
+      1);
 }
 
 class OverrideSitePrefsForUiOnlyHrefTranslateBrowserTest
@@ -946,8 +1022,13 @@
   // shown alone.
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kSiteInBlocklist),
       1);
 }
 
@@ -995,6 +1076,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kSiteInBlocklist),
+      1);
 }
 
 // Test if there was an error during translation.
@@ -1561,6 +1647,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test that hrefTranslate doesn't auto-translate if the originator of the
@@ -1600,6 +1691,7 @@
   EXPECT_EQ("", chrome_translate_client->GetLanguageState().AutoTranslateTo());
 
   histograms.ExpectTotalCount(kTranslateHrefHintStatusHistogram, 0);
+  histograms.ExpectTotalCount(kTranslateHrefHintPrefsFilterStatusHistogram, 0);
 }
 
 // Test that hrefTranslate with an unsupported language doesn't trigger.
@@ -1643,8 +1735,13 @@
 
   histograms.ExpectUniqueSample(
       kTranslateHrefHintStatusHistogram,
-      static_cast<int>(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated),
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
+                           kNoUiShownNotAutoTranslated),
+      1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
       1);
 }
 
@@ -1693,6 +1790,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test an href translate link without an href lang for the landing page
@@ -1740,6 +1842,11 @@
       static_cast<int>(
           TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test an href translate link that's overridden by the auto translate settings
@@ -1790,6 +1897,11 @@
       static_cast<int>(TranslateBrowserMetrics::HrefTranslateStatus::
                            kAutoTranslatedDifferentTargetLanguage),
       1);
+  histograms.ExpectUniqueSample(
+      kTranslateHrefHintPrefsFilterStatusHistogram,
+      static_cast<int>(TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                           kNotInBlocklists),
+      1);
 }
 
 // Test if there was an error during translation.
diff --git a/components/translate/core/browser/translate_browser_metrics.cc b/components/translate/core/browser/translate_browser_metrics.cc
index 31bb52e..a545010 100644
--- a/components/translate/core/browser/translate_browser_metrics.cc
+++ b/components/translate/core/browser/translate_browser_metrics.cc
@@ -29,6 +29,8 @@
 const char kTranslateSourceLanguage[] = "Translate.SourceLanguage";
 const char kTranslateTargetLanguage[] = "Translate.TargetLanguage";
 const char kTranslateHrefHintStatus[] = "Translate.HrefHint.Status";
+const char kTranslateHrefHintPrefsFilterStatus[] =
+    "Translate.HrefHint.PrefsFilterStatus";
 const char kTranslateTargetLanguageOrigin[] = "Translate.TargetLanguage.Origin";
 
 }  // namespace
@@ -82,6 +84,11 @@
   base::UmaHistogramEnumeration(kTranslateHrefHintStatus, status);
 }
 
+void ReportTranslateHrefHintPrefsFilterStatus(
+    HrefTranslatePrefsFilterStatus status) {
+  base::UmaHistogramEnumeration(kTranslateHrefHintPrefsFilterStatus, status);
+}
+
 void ReportTranslateTargetLanguageOrigin(TargetLanguageOrigin origin) {
   base::UmaHistogramEnumeration(kTranslateTargetLanguageOrigin, origin);
 }
diff --git a/components/translate/core/browser/translate_browser_metrics.h b/components/translate/core/browser/translate_browser_metrics.h
index bc01625..9ab317f 100644
--- a/components/translate/core/browser/translate_browser_metrics.h
+++ b/components/translate/core/browser/translate_browser_metrics.h
@@ -50,10 +50,27 @@
 enum class HrefTranslateStatus {
   kAutoTranslated,
   kAutoTranslatedDifferentTargetLanguage,
-  kNotAutoTranslated,
+
+  // Deprecated, use the below values instead.
+  kDeprecatedNotAutoTranslated,
+
+  kUiShownNotAutoTranslated,
+  kNoUiShownNotAutoTranslated,
+
   // Insert new items here. Keep in sync with HrefTranslateStatus in enums.xml
   // when adding values.
-  kMaxValue = kNotAutoTranslated
+  kMaxValue = kNoUiShownNotAutoTranslated
+};
+
+enum class HrefTranslatePrefsFilterStatus {
+  kNotInBlocklists,
+  kLanguageInBlocklist,
+  kSiteInBlocklist,
+  kBothLanguageAndSiteInBlocklist,
+
+  // Insert new items here. Keep in sync with HrefTranslatePrefsFilterStatus in
+  // enums.xml when adding values.
+  kMaxValue = kBothLanguageAndSiteInBlocklist
 };
 
 enum class TargetLanguageOrigin {
@@ -99,6 +116,12 @@
 // a href translate target is present.
 void ReportTranslateHrefHintStatus(HrefTranslateStatus status);
 
+// Called when Chrome Translate is initiated, the navigation is from Google, and
+// a href translate target is present. Records the status of any user prefs
+// filtering.
+void ReportTranslateHrefHintPrefsFilterStatus(
+    HrefTranslatePrefsFilterStatus status);
+
 // Called when Chrome Translate target language is determined.
 void ReportTranslateTargetLanguageOrigin(TargetLanguageOrigin origin);
 
diff --git a/components/translate/core/browser/translate_browser_metrics_unittest.cc b/components/translate/core/browser/translate_browser_metrics_unittest.cc
index 6fe6496..c44d8ac 100644
--- a/components/translate/core/browser/translate_browser_metrics_unittest.cc
+++ b/components/translate/core/browser/translate_browser_metrics_unittest.cc
@@ -101,7 +101,8 @@
   void CheckTranslateHrefHintStatus(
       int expected_auto_translated,
       int expected_auto_translated_different_target_language,
-      int expected_not_auto_translated) {
+      int expected_ui_shown_not_auto_translated,
+      int expected_no_ui_shown_not_auto_translated) {
     Snapshot();
 
     EXPECT_EQ(expected_auto_translated,
@@ -112,10 +113,40 @@
               GetCountWithoutSnapshot(static_cast<int>(
                   translate::TranslateBrowserMetrics::HrefTranslateStatus::
                       kAutoTranslatedDifferentTargetLanguage)));
-    EXPECT_EQ(expected_not_auto_translated,
+    EXPECT_EQ(expected_ui_shown_not_auto_translated,
               GetCountWithoutSnapshot(static_cast<int>(
                   translate::TranslateBrowserMetrics::HrefTranslateStatus::
-                      kNotAutoTranslated)));
+                      kUiShownNotAutoTranslated)));
+    EXPECT_EQ(expected_no_ui_shown_not_auto_translated,
+              GetCountWithoutSnapshot(static_cast<int>(
+                  translate::TranslateBrowserMetrics::HrefTranslateStatus::
+                      kNoUiShownNotAutoTranslated)));
+  }
+
+  void CheckTranslateHrefHintPrefsFilterStatus(
+      int expected_not_in_blocklists,
+      int expected_language_in_blocklist,
+      int expected_site_in_blocklist,
+      int expected_both_language_and_site_in_blocklist) {
+    Snapshot();
+
+    EXPECT_EQ(expected_not_in_blocklists,
+              GetCountWithoutSnapshot(static_cast<int>(
+                  translate::TranslateBrowserMetrics::
+                      HrefTranslatePrefsFilterStatus::kNotInBlocklists)));
+    EXPECT_EQ(expected_language_in_blocklist,
+              GetCountWithoutSnapshot(static_cast<int>(
+                  translate::TranslateBrowserMetrics::
+                      HrefTranslatePrefsFilterStatus::kLanguageInBlocklist)));
+    EXPECT_EQ(expected_site_in_blocklist,
+              GetCountWithoutSnapshot(static_cast<int>(
+                  translate::TranslateBrowserMetrics::
+                      HrefTranslatePrefsFilterStatus::kSiteInBlocklist)));
+    EXPECT_EQ(
+        expected_both_language_and_site_in_blocklist,
+        GetCountWithoutSnapshot(static_cast<int>(
+            translate::TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                kBothLanguageAndSiteInBlocklist)));
   }
 
   void CheckTranslateTargetLanugageOrigin(int expected_recent_target,
@@ -311,18 +342,43 @@
 
 TEST(TranslateBrowserMetricsTest, ReportTranslateHrefHintStatus) {
   MetricsRecorder recorder("Translate.HrefHint.Status");
-  recorder.CheckTranslateHrefHintStatus(0, 0, 0);
+  recorder.CheckTranslateHrefHintStatus(0, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
       translate::TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated);
-  recorder.CheckTranslateHrefHintStatus(1, 0, 0);
+  recorder.CheckTranslateHrefHintStatus(1, 0, 0, 0);
   translate::TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
       translate::TranslateBrowserMetrics::HrefTranslateStatus::
           kAutoTranslatedDifferentTargetLanguage);
-  recorder.CheckTranslateHrefHintStatus(1, 1, 0);
+  recorder.CheckTranslateHrefHintStatus(1, 1, 0, 0);
   translate::TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
       translate::TranslateBrowserMetrics::HrefTranslateStatus::
-          kNotAutoTranslated);
-  recorder.CheckTranslateHrefHintStatus(1, 1, 1);
+          kUiShownNotAutoTranslated);
+  recorder.CheckTranslateHrefHintStatus(1, 1, 1, 0);
+  translate::TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
+      translate::TranslateBrowserMetrics::HrefTranslateStatus::
+          kNoUiShownNotAutoTranslated);
+  recorder.CheckTranslateHrefHintStatus(1, 1, 1, 1);
+}
+
+TEST(TranslateBrowserMetricsTest, ReportTranslateHrefHintPrefsFilterStatus) {
+  MetricsRecorder recorder("Translate.HrefHint.PrefsFilterStatus");
+  recorder.CheckTranslateHrefHintPrefsFilterStatus(0, 0, 0, 0);
+  translate::TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+      translate::TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+          kNotInBlocklists);
+  recorder.CheckTranslateHrefHintPrefsFilterStatus(1, 0, 0, 0);
+  translate::TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+      translate::TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+          kLanguageInBlocklist);
+  recorder.CheckTranslateHrefHintPrefsFilterStatus(1, 1, 0, 0);
+  translate::TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+      translate::TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+          kSiteInBlocklist);
+  recorder.CheckTranslateHrefHintPrefsFilterStatus(1, 1, 1, 0);
+  translate::TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+      translate::TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+          kBothLanguageAndSiteInBlocklist);
+  recorder.CheckTranslateHrefHintPrefsFilterStatus(1, 1, 1, 1);
 }
 
 TEST(TranslateBrowserMetricsTest, ReportTranslateTargetLanguageOrigin) {
diff --git a/components/translate/core/browser/translate_manager.cc b/components/translate/core/browser/translate_manager.cc
index fe09761..c79ed76 100644
--- a/components/translate/core/browser/translate_manager.cc
+++ b/components/translate/core/browser/translate_manager.cc
@@ -836,6 +836,8 @@
   // Don't translate any user black-listed languages.
   if (!translate_prefs->CanTranslateLanguage(accept_languages,
                                              page_language_code)) {
+    decision->SetIsInLanguageBlocklist();
+
     decision->PreventAutoTranslate();
     decision->PreventShowingUI();
     decision->PreventShowingPredefinedLanguageTranslateUI();
@@ -863,6 +865,8 @@
   // Don't translate any user black-listed URLs.
   const GURL& page_url = translate_driver_->GetVisibleURL();
   if (translate_prefs->IsSiteBlacklisted(page_url.HostNoBrackets())) {
+    decision->SetIsInSiteBlocklist();
+
     decision->PreventAutoTranslate();
     decision->PreventShowingUI();
     decision->PreventShowingPredefinedLanguageTranslateUI();
@@ -1016,9 +1020,34 @@
         TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
             TranslateBrowserMetrics::HrefTranslateStatus::kAutoTranslated);
       }
+    } else if (decision.can_show_href_translate_ui()) {
+      TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
+          TranslateBrowserMetrics::HrefTranslateStatus::
+              kUiShownNotAutoTranslated);
     } else {
       TranslateBrowserMetrics::ReportTranslateHrefHintStatus(
-          TranslateBrowserMetrics::HrefTranslateStatus::kNotAutoTranslated);
+          TranslateBrowserMetrics::HrefTranslateStatus::
+              kNoUiShownNotAutoTranslated);
+    }
+
+    if (decision.is_in_language_blocklist()) {
+      if (decision.is_in_site_blocklist()) {
+        TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+            TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                kBothLanguageAndSiteInBlocklist);
+      } else {
+        TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+            TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+                kLanguageInBlocklist);
+      }
+    } else if (decision.is_in_site_blocklist()) {
+      TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+          TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+              kSiteInBlocklist);
+    } else {
+      TranslateBrowserMetrics::ReportTranslateHrefHintPrefsFilterStatus(
+          TranslateBrowserMetrics::HrefTranslatePrefsFilterStatus::
+              kNotInBlocklists);
     }
   }
 
diff --git a/components/translate/core/browser/translate_trigger_decision.h b/components/translate/core/browser/translate_trigger_decision.h
index 167dad7..6bca27a 100644
--- a/components/translate/core/browser/translate_trigger_decision.h
+++ b/components/translate/core/browser/translate_trigger_decision.h
@@ -33,6 +33,12 @@
   void PreventShowingPredefinedLanguageTranslateUI();
   bool can_show_predefined_language_translate_ui() const;
 
+  void SetIsInLanguageBlocklist() { is_in_language_blocklist_ = true; }
+  bool is_in_language_blocklist() const { return is_in_language_blocklist_; }
+
+  void SetIsInSiteBlocklist() { is_in_site_blocklist_ = true; }
+  bool is_in_site_blocklist() const { return is_in_site_blocklist_; }
+
   void SuppressFromRanker();
   bool should_suppress_from_ranker() const;
   bool IsTriggeringPossible() const;
@@ -69,6 +75,9 @@
   bool can_show_predefined_language_translate_ui_ = true;
 
   bool should_suppress_from_ranker_ = false;
+
+  bool is_in_language_blocklist_ = false;
+  bool is_in_site_blocklist_ = false;
 };
 
 }  // namespace translate
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index b5f5663..806a728 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -35611,10 +35611,19 @@
   <int value="3" label="Training Mode"/>
 </enum>
 
+<enum name="HrefTranslatePrefsFilterStatus">
+  <int value="0" label="Not in blocklists"/>
+  <int value="1" label="Language in blocklist"/>
+  <int value="2" label="Site in blocklist"/>
+  <int value="3" label="Both language and site in blocklist"/>
+</enum>
+
 <enum name="HrefTranslateStatus">
   <int value="0" label="Auto translated"/>
   <int value="1" label="Auto translated using a different target language"/>
-  <int value="2" label="Not auto translated"/>
+  <int value="2" label="Not auto translated (Deprecated in M87)"/>
+  <int value="3" label="UI shown and not auto translated"/>
+  <int value="4" label="UI not shown and not auto translated"/>
 </enum>
 
 <enum name="Hresult">
diff --git a/tools/metrics/histograms/histograms_xml/translate/histograms.xml b/tools/metrics/histograms/histograms_xml/translate/histograms.xml
index 9cb0e17..ccb54a5 100644
--- a/tools/metrics/histograms/histograms_xml/translate/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/translate/histograms.xml
@@ -244,6 +244,21 @@
   </summary>
 </histogram>
 
+<histogram name="Translate.HrefHint.PrefsFilterStatus"
+    enum="HrefTranslatePrefsFilterStatus" expires_after="2021-06-23">
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <summary>
+    For Google navigations, the hrefTranslate hint may trigger a translation
+    automatically. If the hint is present on a Google navigation, record which
+    blocklists came into play when filtering the translation decision according
+    to user prefs. Note that this doesn't necessarily mean that translation
+    didn't happen - it's possible that the hrefTranslate translation overrode
+    one or more of these blocklists depending on which features are active.
+  </summary>
+</histogram>
+
 <histogram name="Translate.HrefHint.Status" enum="HrefTranslateStatus"
     expires_after="2021-02-07">
   <owner>[email protected]</owner>