shill: UMA stats Network.Shill.WiFi.Security and Network.Shill.WiFi.PhyMode

Add code to send WiFi security and physical mode UMA metrics.

BUG=chromium-os:24441
TEST=Unit tests

Change-Id: I30bf90d55110dc543f105c06e916b58f73692637
Reviewed-on: https://gerrit.chromium.org/gerrit/13765
Reviewed-by: Thieu Le <thieule@chromium.org>
Tested-by: Thieu Le <thieule@chromium.org>
Commit-Ready: Thieu Le <thieule@chromium.org>
diff --git a/metrics.cc b/metrics.cc
index 1810164..eb31772 100644
--- a/metrics.cc
+++ b/metrics.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
@@ -8,6 +8,7 @@
 #include <base/logging.h>
 #include <base/string_util.h>
 #include <base/stringprintf.h>
+#include <chromeos/dbus/service_constants.h>
 
 #include "shill/wifi_service.h"
 
@@ -21,6 +22,10 @@
 // static
 const char Metrics::kMetricNetworkChannel[] = "Network.Shill.%s.Channel";
 const int Metrics::kMetricNetworkChannelMax = Metrics::kWiFiChannelMax;
+const char Metrics::kMetricNetworkPhyMode[] = "Network.Shill.%s.PhyMode";
+const int Metrics::kMetricNetworkPhyModeMax = Metrics::kWiFiNetworkPhyModeMax;
+const char Metrics::kMetricNetworkSecurity[] = "Network.Shill.%s.Security";
+const int Metrics::kMetricNetworkSecurityMax = Metrics::kWiFiSecurityMax;
 const char Metrics::kMetricNetworkServiceErrors[] =
     "Network.Shill.ServiceErrors";
 const int Metrics::kMetricNetworkServiceErrorsMax = Service::kFailureMax;
@@ -113,6 +118,26 @@
   return channel;
 }
 
+// static
+Metrics::WiFiSecurity Metrics::WiFiSecurityStringToEnum(
+    const std::string &security) {
+  if (security == flimflam::kSecurityNone) {
+    return kWiFiSecurityNone;
+  } else if (security == flimflam::kSecurityWep) {
+    return kWiFiSecurityWep;
+  } else if (security == flimflam::kSecurityWpa) {
+    return kWiFiSecurityWpa;
+  } else if (security == flimflam::kSecurityRsn) {
+    return kWiFiSecurityRsn;
+  } else if (security == flimflam::kSecurity8021x) {
+    return kWiFiSecurity8021x;
+  } else if (security == flimflam::kSecurityPsk) {
+    return kWiFiSecurityPsk;
+  } else {
+    return kWiFiSecurityUnknown;
+  }
+}
+
 void Metrics::RegisterService(const Service *service) {
   shared_ptr<ServiceMetrics> service_metrics(new ServiceMetrics);
   services_metrics_[service] = service_metrics;