Metric report for result of user-initiated wifi connection

Added an UMA metric for result of user-initiated wifi connection.

BUG=chromium:369135
TEST=unit tests, manual
Manual Test:
1. Initiate a connection to a wifi service on a chrome device.
2. Browse to "chrome://histograms" after connection is established.
3. Verify there is a historgram for
   "Network.Shill.WiFi.UserInitiatedConnectionResult", and there
   is a hit for value 0 (success).
4. Initiate a connection to a secure wifi service, and intentionally
   enter a wrong password.
5. Browse to "chrome://histograms" after connection is failed, and
   verify there is a hit for value 1 (failure).
6. Initiate a connection to a wifi service, and then initiated another
   connection to a different wifi service before the connection is
   established to the first wifi service.
7. Browse to "chrome://histograms", verify there is a hit for
   value 2 (aborted).

Conflicts:
	metrics.cc
	metrics.h
	metrics_unittest.cc
	mock_metrics.h

Change-Id: I6d7ffe9f73334715775d76d17a9b977a926c4b94
Reviewed-on: https://chromium-review.googlesource.com/197813
Reviewed-by: Peter Qiu <zqiu@chromium.org>
Commit-Queue: Peter Qiu <zqiu@chromium.org>
Tested-by: Peter Qiu <zqiu@chromium.org>
diff --git a/metrics.h b/metrics.h
index 1d9c03a..4306388 100644
--- a/metrics.h
+++ b/metrics.h
@@ -278,6 +278,13 @@
     kUserInitiatedEventMax
   };
 
+  enum UserInitiatedConnectionResult {
+    kUserInitiatedConnectionResultSuccess = 0,
+    kUserInitiatedConnectionResultFailure = 1,
+    kUserInitiatedConnectionResultAborted = 2,
+    kUserInitiatedConnectionResultMax
+  };
+
   static const char kMetricDisconnectSuffix[];
   static const int kMetricDisconnectMax;
   static const int kMetricDisconnectMin;
@@ -475,6 +482,9 @@
   static const int kMetricWifiTxBitrateMin;
   static const int kMetricWifiTxBitrateNumBuckets;
 
+  // User-initiated wifi connection attempt result.
+  static const char kMetricWifiUserInitiatedConnectionResult[];
+
   explicit Metrics(EventDispatcher *dispatcher);
   virtual ~Metrics();
 
@@ -647,6 +657,11 @@
   // Notifies this object about WIFI TX bitrate in Mbps.
   virtual void NotifyWifiTxBitrate(int bitrate);
 
+  // Notifies this object about the result of user-initiated connection
+  // attempt.
+  virtual void NotifyUserInitiatedConnectionResult(const std::string &name,
+                                                   int result);
+
   // Notifies this object about a corrupted profile.
   virtual void NotifyCorruptedProfile();