shill: WiFiService: Report EAP Authentication Type Metrics

When an 802.1x WiFi connection completes, report the inner and
outer authentication methods configured for this connection.

BUG=chromium-os:39424
TEST=Unit tests; Connect to a PEAP/MSCHAPv2 access point and look
at chrome://histograms.

Change-Id: Ic66b470cbd7019fe551e094c47782eb47bc1338f
Reviewed-on: https://gerrit.chromium.org/gerrit/44422
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
Commit-Queue: Paul Stewart <pstew@chromium.org>
diff --git a/metrics.h b/metrics.h
index 9d7942f..9ed5ec5 100644
--- a/metrics.h
+++ b/metrics.h
@@ -92,6 +92,31 @@
     kWiFiNetworkPhyModeMax
   };
 
+  enum EapOuterProtocol {
+    kEapOuterProtocolUnknown = 0,
+    kEapOuterProtocolLeap = 1,
+    kEapOuterProtocolPeap = 2,
+    kEapOuterProtocolTls = 3,
+    kEapOuterProtocolTtls = 4,
+
+    kEapOuterProtocolMax
+  };
+
+  enum EapInnerProtocol {
+    kEapInnerProtocolUnknown = 0,
+    kEapInnerProtocolNone = 1,
+    kEapInnerProtocolPeapMd5 = 2,
+    kEapInnerProtocolPeapMschapv2 = 3,
+    kEapInnerProtocolTtlsEapMd5 = 4,
+    kEapInnerProtocolTtlsEapMschapv2 = 5,
+    kEapInnerProtocolTtlsMschapv2 = 6,
+    kEapInnerProtocolTtlsMschap = 7,
+    kEapInnerProtocolTtlsPap = 8,
+    kEapInnerProtocolTtlsChap = 9,
+
+    kEapInnerProtocolMax
+  };
+
   enum WiFiSecurity {
     kWiFiSecurityUnknown = 0,
     kWiFiSecurityNone = 1,
@@ -183,6 +208,10 @@
   static const int kMetricDisconnectNumBuckets;
   static const char kMetricNetworkChannel[];
   static const int kMetricNetworkChannelMax;
+  static const char kMetricNetworkEapInnerProtocol[];
+  static const int kMetricNetworkEapInnerProtocolMax;
+  static const char kMetricNetworkEapOuterProtocol[];
+  static const int kMetricNetworkEapOuterProtocolMax;
   static const char kMetricNetworkPhyMode[];
   static const int kMetricNetworkPhyModeMax;
   static const char kMetricNetworkSecurity[];
@@ -314,6 +343,14 @@
   // Converts a flimflam security string into its UMA security enumerator.
   static WiFiSecurity WiFiSecurityStringToEnum(const std::string &security);
 
+  // Converts a flimflam EAP outer protocol string into its UMA enumerator.
+  static EapOuterProtocol EapOuterProtocolStringToEnum(
+      const std::string &outer);
+
+  // Converts a flimflam EAP inner protocol string into its UMA enumerator.
+  static EapInnerProtocol EapInnerProtocolStringToEnum(
+      const std::string &inner);
+
   // Converts portal detection result to UMA portal result enumerator.
   static PortalResult PortalDetectionResultToEnum(
       const PortalDetector::Result &result);