[Global Media Controls] Add UMA to HardwareKeyMediaController

This CL records key presses in HardwareKeyMediaController for each
supported MediaSessionAction.

Bug: 921281
Change-Id: I0e2cbecc3a25fa2b850ff51830ecd9fc71023dce
Reviewed-on: https://chromium-review.googlesource.com/c/1435905
Commit-Queue: Tommy Steimel <steimel@chromium.org>
Reviewed-by: Mounir Lamouri <mlamouri@chromium.org>
Reviewed-by: Steven Holte <holte@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#627732}(cherry picked from commit f36cc732d6568d9182516504715df9148a137573)
Reviewed-on: https://chromium-review.googlesource.com/c/1452461
Reviewed-by: Tommy Steimel <steimel@chromium.org>
Cr-Commit-Position: refs/branch-heads/3683@{#170}
Cr-Branched-From: e51029943e0a38dd794b73caaf6373d5496ae783-refs/heads/master@{#625896}
diff --git a/content/browser/media/hardware_key_media_controller.cc b/content/browser/media/hardware_key_media_controller.cc
index 26be8a4..f7cf052 100644
--- a/content/browser/media/hardware_key_media_controller.cc
+++ b/content/browser/media/hardware_key_media_controller.cc
@@ -8,6 +8,7 @@
 #include <utility>
 #include <vector>
 
+#include "base/metrics/histogram_macros.h"
 #include "content/public/browser/media_keys_listener_manager.h"
 #include "services/media_session/public/mojom/constants.mojom.h"
 #include "services/service_manager/public/cpp/connector.h"
@@ -112,18 +113,23 @@
   switch (action) {
     case MediaSessionAction::kPreviousTrack:
       media_controller_ptr_->PreviousTrack();
+      RecordAction(MediaHardwareKeyAction::kActionPreviousTrack);
       return;
     case MediaSessionAction::kPlay:
       media_controller_ptr_->Resume();
+      RecordAction(MediaHardwareKeyAction::kActionPlay);
       return;
     case MediaSessionAction::kPause:
       media_controller_ptr_->Suspend();
+      RecordAction(MediaHardwareKeyAction::kActionPause);
       return;
     case MediaSessionAction::kNextTrack:
       media_controller_ptr_->NextTrack();
+      RecordAction(MediaHardwareKeyAction::kActionNextTrack);
       return;
     case MediaSessionAction::kStop:
       media_controller_ptr_->Stop();
+      RecordAction(MediaHardwareKeyAction::kActionStop);
       return;
     case MediaSessionAction::kSeekBackward:
     case MediaSessionAction::kSeekForward:
@@ -133,6 +139,10 @@
   }
 }
 
+void HardwareKeyMediaController::RecordAction(MediaHardwareKeyAction action) {
+  UMA_HISTOGRAM_ENUMERATION("Media.HardwareKeyPressed", action);
+}
+
 MediaSessionAction HardwareKeyMediaController::KeyCodeToMediaSessionAction(
     ui::KeyboardCode key_code) const {
   switch (key_code) {
diff --git a/content/browser/media/hardware_key_media_controller.h b/content/browser/media/hardware_key_media_controller.h
index 1e5d40e..b9ecba2 100644
--- a/content/browser/media/hardware_key_media_controller.h
+++ b/content/browser/media/hardware_key_media_controller.h
@@ -50,6 +50,17 @@
   }
 
  private:
+  // These values are persisted to logs. Entries should not be renumbered and
+  // numeric values should never be reused.
+  enum class MediaHardwareKeyAction {
+    kActionPlay = 0,
+    kActionPause,
+    kActionStop,
+    kActionNextTrack,
+    kActionPreviousTrack,
+    kMaxValue = kActionPreviousTrack
+  };
+
   // Used for converting between MediaSessionAction and KeyboardCode.
   media_session::mojom::MediaSessionAction KeyCodeToMediaSessionAction(
       ui::KeyboardCode key_code) const;
@@ -61,6 +72,7 @@
 
   bool SupportsAction(media_session::mojom::MediaSessionAction action) const;
   void PerformAction(media_session::mojom::MediaSessionAction action);
+  void RecordAction(MediaHardwareKeyAction action);
 
   // Used to control the active session.
   media_session::mojom::MediaControllerPtr media_controller_ptr_;
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml
index de60370..cc6f84c9 100644
--- a/tools/metrics/histograms/enums.xml
+++ b/tools/metrics/histograms/enums.xml
@@ -34596,6 +34596,14 @@
   <int value="27" label="iPhoto file system used this session (obsolete)"/>
 </enum>
 
+<enum name="MediaHardwareKeyAction">
+  <int value="0" label="Play"/>
+  <int value="1" label="Pause"/>
+  <int value="2" label="Stop"/>
+  <int value="3" label="Next Track"/>
+  <int value="4" label="Previous Track"/>
+</enum>
+
 <enum name="MediaKeyError">
   <int value="1" label="kUnknownError"/>
   <int value="2" label="kClientError"/>
diff --git a/tools/metrics/histograms/histograms.xml b/tools/metrics/histograms/histograms.xml
index 4b5c863..4db4711f3 100644
--- a/tools/metrics/histograms/histograms.xml
+++ b/tools/metrics/histograms/histograms.xml
@@ -48152,6 +48152,15 @@
   </summary>
 </histogram>
 
+<histogram name="Media.HardwareKeyPressed" enum="MediaHardwareKeyAction">
+  <owner>steimel@chromium.org</owner>
+  <owner>media-dev@chromium.org</owner>
+  <summary>
+    Records media key presses that are handled by the
+    HardwareKeyMediaController.
+  </summary>
+</histogram>
+
 <histogram name="Media.HasEverPlayed" enum="BooleanHasPlayed">
   <owner>dalecurtis@chromium.org</owner>
   <summary>