[ntp][modules] Add NewTabPage.ShoppingTasks.[Product|RelatedSearch]Click

These histograms let us analyze usage of the shopping task module in
more granularity than what NewTabPage.Modules.Usage.shopping_tasks
allows.

(cherry picked from commit 41b76929242c1370b20f9733a60673755225875c)

Bug: 1133904
Change-Id: Id7470f6b2f0cbb7553dba406e57d5f62afd788c6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2443392
Reviewed-by: Emily Stark <[email protected]>
Reviewed-by: Mark Pearson <[email protected]>
Reviewed-by: Moe Ahmadi <[email protected]>
Commit-Queue: Tibor Goldschwendt <[email protected]>
Auto-Submit: Tibor Goldschwendt <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#814394}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2459253
Reviewed-by: Tibor Goldschwendt <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#168}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.html b/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.html
index 97ca0da2..39538f0f 100644
--- a/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.html
+++ b/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.html
@@ -134,8 +134,8 @@
 <div id="products">
   <template is="dom-repeat" id="productsRepeat"
       items="[[shoppingTask.products]]" on-dom-change="onDomChange_">
-    <a class="product" href="[[item.targetUrl.url]]" on-click="onClick_"
-        on-auxclick="onClick_">
+    <a class="product" href="[[item.targetUrl.url]]" on-click="onProductClick_"
+        on-auxclick="onProductClick_">
       <div class="image">
         <img is="ntp-img" auto-src="[[item.imageUrl.url]]"></img>
       </div>
@@ -148,8 +148,8 @@
 <div id="relatedSearches">
   <template is="dom-repeat" id="relatedSearchesRepeat"
       items="[[shoppingTask.relatedSearches]]" on-dom-change="onDomChange_">
-    <a class="pill" href="[[item.targetUrl.url]]" on-click="onClick_"
-        on-auxclick="onClick_">
+    <a class="pill" href="[[item.targetUrl.url]]" on-click="onPillClick_"
+        on-auxclick="onPillClick_">
       <div class="loupe"></div>
       <div class="search-text">[[item.text]]</div>
     </a>
diff --git a/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.js b/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.js
index 6c9a5c5..2e555a5d 100644
--- a/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.js
+++ b/chrome/browser/resources/new_tab_page/modules/shopping_tasks/module.js
@@ -41,8 +41,24 @@
     this.intersectionObserver_ = null;
   }
 
-  /** @private */
-  onClick_() {
+  /**
+   * @param {!Event} e
+   * @private
+   */
+  onProductClick_(e) {
+    const index = this.$.productsRepeat.indexForElement(e.target);
+    ShoppingTasksHandlerProxy.getInstance().handler.onProductClicked(index);
+    this.dispatchEvent(new Event('usage', {bubbles: true, composed: true}));
+  }
+
+  /**
+   * @param {!Event} e
+   * @private
+   */
+  onPillClick_(e) {
+    const index = this.$.relatedSearchesRepeat.indexForElement(e.target);
+    ShoppingTasksHandlerProxy.getInstance().handler.onRelatedSearchClicked(
+        index);
     this.dispatchEvent(new Event('usage', {bubbles: true, composed: true}));
   }
 
diff --git a/chrome/browser/search/shopping_tasks/shopping_tasks.mojom b/chrome/browser/search/shopping_tasks/shopping_tasks.mojom
index b3e635b..fb708bc 100644
--- a/chrome/browser/search/shopping_tasks/shopping_tasks.mojom
+++ b/chrome/browser/search/shopping_tasks/shopping_tasks.mojom
@@ -49,4 +49,8 @@
   DismissShoppingTask(string task_name);
   // Restores the task with the given name and remembers that setting.
   RestoreShoppingTask(string task_name);
+  // Logs that the product at position |index| has been clicked.
+  OnProductClicked(uint32 index);
+  // Logs that the related search pill at position |index| has been clicked.
+  OnRelatedSearchClicked(uint32 index);
 };
diff --git a/chrome/browser/search/shopping_tasks/shopping_tasks_handler.cc b/chrome/browser/search/shopping_tasks/shopping_tasks_handler.cc
index ebac0f99..bcb18ce 100644
--- a/chrome/browser/search/shopping_tasks/shopping_tasks_handler.cc
+++ b/chrome/browser/search/shopping_tasks/shopping_tasks_handler.cc
@@ -4,6 +4,7 @@
 
 #include "chrome/browser/search/shopping_tasks/shopping_tasks_handler.h"
 
+#include "base/metrics/histogram_functions.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/search/shopping_tasks/shopping_tasks_service.h"
 #include "chrome/browser/search/shopping_tasks/shopping_tasks_service_factory.h"
@@ -31,3 +32,12 @@
   ShoppingTasksServiceFactory::GetForProfile(profile_)->RestoreShoppingTask(
       task_name);
 }
+
+void ShoppingTasksHandler::OnProductClicked(uint32_t index) {
+  base::UmaHistogramCounts100("NewTabPage.ShoppingTasks.ProductClick", index);
+}
+
+void ShoppingTasksHandler::OnRelatedSearchClicked(uint32_t index) {
+  base::UmaHistogramCounts100("NewTabPage.ShoppingTasks.RelatedSearchClick",
+                              index);
+}
diff --git a/chrome/browser/search/shopping_tasks/shopping_tasks_handler.h b/chrome/browser/search/shopping_tasks/shopping_tasks_handler.h
index 2e04d8a..843bf7ec 100644
--- a/chrome/browser/search/shopping_tasks/shopping_tasks_handler.h
+++ b/chrome/browser/search/shopping_tasks/shopping_tasks_handler.h
@@ -27,6 +27,8 @@
   void GetPrimaryShoppingTask(GetPrimaryShoppingTaskCallback callback) override;
   void DismissShoppingTask(const std::string& task_name) override;
   void RestoreShoppingTask(const std::string& task_name) override;
+  void OnProductClicked(uint32_t index) override;
+  void OnRelatedSearchClicked(uint32_t index) override;
 
  private:
   mojo::Receiver<shopping_tasks::mojom::ShoppingTasksHandler> receiver_;
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 f0eb38a..cd466fe 100644
--- a/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
+++ b/tools/metrics/histograms/histograms_xml/new_tab_page/histograms.xml
@@ -1135,6 +1135,28 @@
   </summary>
 </histogram>
 
+<histogram name="NewTabPage.ShoppingTasks.ProductClick" units="index"
+    expires_after="2021-01-01">
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <summary>
+    Logged when a user clicked on a product in the shopping tasks module. The
+    value is equal to the index of the product.
+  </summary>
+</histogram>
+
+<histogram name="NewTabPage.ShoppingTasks.RelatedSearchClick" units="index"
+    expires_after="2021-01-01">
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <owner>[email protected]</owner>
+  <summary>
+    Logged when a user clicked on a related search pill in the shopping tasks
+    module. The value is equal to the index of the pill.
+  </summary>
+</histogram>
+
 <histogram name="NewTabPage.Snippets.DatabaseLoadTime" units="ms"
     expires_after="M85">
   <owner>[email protected]</owner>