Update FallbackDNSTestResult metric.

Update the metric for FallbackDNSTestResult to be technology specific.

BUG=chromium:366301
TEST=unit tests, manaul
Manual Test:
1. Connect a chrome device to an AP with no internet access, then
   browse to "chrome://histograms" and verify there is a histogram
   for "Network.Shill.Wifi.FallbackDNSTestResult".

Change-Id: I12606d34bede86557d00e0cb5b32b0c12ad37710
Reviewed-on: https://chromium-review.googlesource.com/200573
Reviewed-by: Peter Qiu <zqiu@chromium.org>
Tested-by: Peter Qiu <zqiu@chromium.org>
Commit-Queue: Peter Qiu <zqiu@chromium.org>
diff --git a/device.cc b/device.cc
index b4a4a22..806ce00 100644
--- a/device.cc
+++ b/device.cc
@@ -910,11 +910,11 @@
 }
 
 void Device::DNSClientCallback(const Error &error, const IPAddress& ip) {
-  int result = Metrics::kDNSTestResultFailure;
+  int result = Metrics::kFallbackDNSTestResultFailure;
   if (error.IsSuccess()) {
-    result = Metrics::kDNSTestResultSuccess;
+    result = Metrics::kFallbackDNSTestResultSuccess;
   }
-  metrics()->NotifyFallbackDNSTestResult(result);
+  metrics()->NotifyFallbackDNSTestResult(technology_, result);
   fallback_dns_test_client_.reset();
 }
 
diff --git a/device_unittest.cc b/device_unittest.cc
index bc5ad9b..9fa9c76 100644
--- a/device_unittest.cc
+++ b/device_unittest.cc
@@ -1408,12 +1408,14 @@
 
 TEST_F(DevicePortalDetectionTest, DNSClientCallback) {
   EXPECT_CALL(metrics_,
-      NotifyFallbackDNSTestResult(Metrics::kDNSTestResultFailure)).Times(1);
+      NotifyFallbackDNSTestResult(_, Metrics::kFallbackDNSTestResultFailure))
+          .Times(1);
   InvokeDNSClientCallback(false);
   Mock::VerifyAndClearExpectations(&metrics_);
 
   EXPECT_CALL(metrics_,
-      NotifyFallbackDNSTestResult(Metrics::kDNSTestResultSuccess)).Times(1);
+      NotifyFallbackDNSTestResult(_, Metrics::kFallbackDNSTestResultSuccess))
+          .Times(1);
   InvokeDNSClientCallback(true);
 }
 
diff --git a/metrics.cc b/metrics.cc
index d42e2b3..b11f20d 100644
--- a/metrics.cc
+++ b/metrics.cc
@@ -301,8 +301,8 @@
     "Network.Shill.WiFi.UserInitiatedConnectionResult";
 
 // static
-const char Metrics::kMetricFallbackDNSTestResult[] =
-    "Network.Shill.FallbackDNSTestResult";
+const char Metrics::kMetricFallbackDNSTestResultSuffix[] =
+    "FallbackDNSTestResult";
 
 // static
 const char Metrics::kMetricNetworkProblemDetectedSuffix[] =
@@ -1132,10 +1132,13 @@
                 kUserInitiatedConnectionResultMax);
 }
 
-void Metrics::NotifyFallbackDNSTestResult(int result) {
-  SendEnumToUMA(kMetricFallbackDNSTestResult,
+void Metrics::NotifyFallbackDNSTestResult(Technology::Identifier technology_id,
+                                          int result) {
+  string histogram = GetFullMetricName(kMetricFallbackDNSTestResultSuffix,
+                                       technology_id);
+  SendEnumToUMA(histogram,
                 result,
-                kDNSTestResultMax);
+                kFallbackDNSTestResultMax);
 }
 
 void Metrics::NotifyNetworkProblemDetected(Technology::Identifier technology_id,
diff --git a/metrics.h b/metrics.h
index 9abdd0e..457346d 100644
--- a/metrics.h
+++ b/metrics.h
@@ -286,9 +286,9 @@
   };
 
   enum DNSTestResult {
-    kDNSTestResultSuccess = 0,
-    kDNSTestResultFailure,
-    kDNSTestResultMax
+    kFallbackDNSTestResultSuccess = 0,
+    kFallbackDNSTestResultFailure,
+    kFallbackDNSTestResultMax
   };
 
   // Network problem detected by traffic monitor.
@@ -499,7 +499,7 @@
   static const char kMetricWifiUserInitiatedConnectionResult[];
 
   // DNS test result.
-  static const char kMetricFallbackDNSTestResult[];
+  static const char kMetricFallbackDNSTestResultSuffix[];
 
   // Network problem detected by traffic monitor
   static const char kMetricNetworkProblemDetectedSuffix[];
@@ -691,7 +691,8 @@
   virtual void NotifyUserInitiatedEvent(int event);
 
   // Notifies this object about the result of the fallback DNS test.
-  virtual void NotifyFallbackDNSTestResult(int result);
+  virtual void NotifyFallbackDNSTestResult(Technology::Identifier technology_id,
+                                           int result);
 
   // Notifies this object about a network problem detected on the currently
   // connected network.
diff --git a/metrics_unittest.cc b/metrics_unittest.cc
index 111d8a4..0f2da45 100644
--- a/metrics_unittest.cc
+++ b/metrics_unittest.cc
@@ -793,10 +793,11 @@
 
 TEST_F(MetricsTest, NotifyFallbackDNSTestResult) {
   EXPECT_CALL(library_,
-      SendEnumToUMA(Metrics::kMetricFallbackDNSTestResult,
-                    Metrics::kDNSTestResultSuccess,
-                    Metrics::kDNSTestResultMax));
-  metrics_.NotifyFallbackDNSTestResult(Metrics::kDNSTestResultSuccess);
+      SendEnumToUMA("Network.Shill.Wifi.FallbackDNSTestResult",
+                    Metrics::kFallbackDNSTestResultSuccess,
+                    Metrics::kFallbackDNSTestResultMax));
+  metrics_.NotifyFallbackDNSTestResult(Technology::kWifi,
+                                       Metrics::kFallbackDNSTestResultSuccess);
 }
 
 TEST_F(MetricsTest, NotifyNetworkProblemDetected) {
diff --git a/mock_metrics.h b/mock_metrics.h
index 35087d7..4b4f48b 100644
--- a/mock_metrics.h
+++ b/mock_metrics.h
@@ -49,9 +49,10 @@
   MOCK_METHOD1(NotifyWifiTxBitrate, void(int bitrate));
   MOCK_METHOD2(NotifyUserInitiatedConnectionResult,
                void(const std::string &name, int result));
-  MOCK_METHOD1(NotifyFallbackDNSTestResult, void(int result));
   MOCK_METHOD2(NotifyNetworkProblemDetected,
                void(Technology::Identifier technology_id, int reason));
+  MOCK_METHOD2(NotifyFallbackDNSTestResult,
+               void(Technology::Identifier technology_id, int result));
 
  private:
   DISALLOW_COPY_AND_ASSIGN(MockMetrics);