[ntp][modules] Log histogram for module visibility

The new NewTabPage.Modules.Visible lets us track the ratio of NTP loads
with modules visible.

(cherry picked from commit b13aa4a24c73481c27ce7e257814d8ec9de6e985)

Bug: 1135393
Change-Id: I15a9fd064b7e189420e2eac2e9cecc72587f8fc1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2454733
Commit-Queue: Tibor Goldschwendt <[email protected]>
Auto-Submit: Tibor Goldschwendt <[email protected]>
Reviewed-by: Weilun Shi <[email protected]>
Reviewed-by: Ilya Sherman <[email protected]>
Reviewed-by: Moe Ahmadi <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#815244}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2466485
Reviewed-by: Tibor Goldschwendt <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#315}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/chrome/browser/ui/search/ntp_user_data_logger.cc b/chrome/browser/ui/search/ntp_user_data_logger.cc
index 647773b..be890d922 100644
--- a/chrome/browser/ui/search/ntp_user_data_logger.cc
+++ b/chrome/browser/ui/search/ntp_user_data_logger.cc
@@ -614,6 +614,10 @@
   base::UmaHistogramExactLinear("NewTabPage.Modules.Usage." + id, 1, 1);
 }
 
+void NTPUserDataLogger::SetModulesVisible(bool visible) {
+  modules_visible_ = visible;
+}
+
 NTPUserDataLogger::NTPUserDataLogger(content::WebContents* contents)
     : content::WebContentsObserver(contents),
       has_emitted_(false),
@@ -739,6 +743,11 @@
     }
   }
 
+  if (base::FeatureList::IsEnabled(ntp_features::kModules)) {
+    base::UmaHistogramBoolean("NewTabPage.Modules.VisibleOnNTPLoad",
+                              modules_visible_);
+  }
+
   has_emitted_ = true;
   during_startup_ = false;
 }
diff --git a/chrome/browser/ui/search/ntp_user_data_logger.h b/chrome/browser/ui/search/ntp_user_data_logger.h
index 31946df6..c5800c0 100644
--- a/chrome/browser/ui/search/ntp_user_data_logger.h
+++ b/chrome/browser/ui/search/ntp_user_data_logger.h
@@ -78,6 +78,9 @@
   // Logs a navigation on one of the NTP tiles by a given impression.
   void LogMostVisitedNavigation(const ntp_tiles::NTPTileImpression& impression);
 
+  // Sets visibility of modules to be later logged.
+  void SetModulesVisible(bool visible);
+
  protected:
   explicit NTPUserDataLogger(content::WebContents* contents);
 
@@ -145,6 +148,8 @@
 
   bool should_record_doodle_load_time_;
 
+  bool modules_visible_;
+
   // Are stats being logged during Chrome startup?
   bool during_startup_;
 
diff --git a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
index 660693a8..12a7b14 100644
--- a/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
+++ b/chrome/browser/ui/webui/new_tab_page/new_tab_page_handler.cc
@@ -388,6 +388,8 @@
   OmniboxTabHelper::FromWebContents(web_contents_)->AddObserver(this);
   promo_service_observer_.Add(promo_service_);
   one_google_bar_service_observer_.Add(one_google_bar_service_);
+  logger_->SetModulesVisible(
+      profile_->GetPrefs()->GetBoolean(kModulesVisiblePrefName));
 }
 
 NewTabPageHandler::~NewTabPageHandler() {
diff --git a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
index cd466fe..1f2f516 100644
--- a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
@@ -821,6 +821,14 @@
   </summary>
 </histogram>
 
+<histogram name="NewTabPage.Modules.VisibleOnNTPLoad" enum="BooleanVisible"
+    expires_after="M90">
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <summary>Logs whether the NTP modules are visible at NTP load.</summary>
+</histogram>
+
 <histogram name="NewTabPage.MostVisited" enum="MostVisitedTileIndex"
     expires_after="never">
 <!-- expires-never: part of top-line metric (internal: go/chrome-browser-nsm) -->