diff --git a/fake_system_state.h b/fake_system_state.h
index 990e227..67ad3aa 100644
--- a/fake_system_state.h
+++ b/fake_system_state.h
@@ -190,7 +190,7 @@
     return &fake_hardware_;
   }
 
-  inline testing::NiceMock<MockMetrics>* mock_metrics_reporter() {
+  inline testing::NiceMock<MockMetricsReporter>* mock_metrics_reporter() {
     CHECK(metrics_reporter_ == &mock_metrics_reporter_);
     return &mock_metrics_reporter_;
   }
@@ -236,7 +236,7 @@
   FakeClock fake_clock_;
   testing::NiceMock<MockConnectionManager> mock_connection_manager_;
   FakeHardware fake_hardware_;
-  testing::NiceMock<MockMetrics> mock_metrics_reporter_;
+  testing::NiceMock<MockMetricsReporter> mock_metrics_reporter_;
   testing::NiceMock<MockPrefs> mock_prefs_;
   testing::NiceMock<MockPrefs> mock_powerwash_safe_prefs_;
   testing::NiceMock<MockPayloadState> mock_payload_state_;
diff --git a/metrics_reporter_android.cc b/metrics_reporter_android.cc
index ebfad0d..4a57918 100644
--- a/metrics_reporter_android.cc
+++ b/metrics_reporter_android.cc
@@ -36,13 +36,8 @@
     base::TimeDelta /* duration */,
     base::TimeDelta /* duration_uptime */,
     int64_t /* payload_size */,
-    int64_t /* payload_bytes_downloaded */,
-    int64_t /* payload_download_speed_bps */,
-    DownloadSource /* download_source */,
     metrics::AttemptResult /* attempt_result */,
-    ErrorCode error_code,
-    metrics::DownloadErrorCode /* payload_download_error_code */,
-    metrics::ConnectionType /* connection_type */) {
+    ErrorCode error_code) {
 // No need to log histogram under sideload mode.
 #ifndef _UE_SIDELOAD
   android::metricslogger::LogHistogram(metrics::kMetricsUpdateEngineErrorCode,
diff --git a/metrics_reporter_android.h b/metrics_reporter_android.h
index 9ee8bf5..b83e651 100644
--- a/metrics_reporter_android.h
+++ b/metrics_reporter_android.h
@@ -41,20 +41,21 @@
       metrics::CheckReaction reaction,
       metrics::DownloadErrorCode download_error_code) override {}
 
-  void ReportUpdateAttemptMetrics(
-      SystemState* system_state,
-      int attempt_number,
-      PayloadType payload_type,
-      base::TimeDelta duration,
-      base::TimeDelta duration_uptime,
-      int64_t payload_size,
+  void ReportUpdateAttemptMetrics(SystemState* system_state,
+                                  int attempt_number,
+                                  PayloadType payload_type,
+                                  base::TimeDelta duration,
+                                  base::TimeDelta duration_uptime,
+                                  int64_t payload_size,
+                                  metrics::AttemptResult attempt_result,
+                                  ErrorCode internal_error_code) override;
+
+  void ReportUpdateAttemptDownloadMetrics(
       int64_t payload_bytes_downloaded,
       int64_t payload_download_speed_bps,
       DownloadSource download_source,
-      metrics::AttemptResult attempt_result,
-      ErrorCode internal_error_code,
       metrics::DownloadErrorCode payload_download_error_code,
-      metrics::ConnectionType connection_type) override;
+      metrics::ConnectionType connection_type) override {}
 
   void ReportAbnormallyTerminatedUpdateAttemptMetrics() override {}
 
diff --git a/metrics_reporter_interface.h b/metrics_reporter_interface.h
index 0c8a025..bc9d387 100644
--- a/metrics_reporter_interface.h
+++ b/metrics_reporter_interface.h
@@ -86,12 +86,8 @@
   //  |kMetricAttemptDurationUptimeMinutes|
   //  |kMetricAttemptTimeSinceLastAttemptMinutes|
   //  |kMetricAttemptTimeSinceLastAttemptUptimeMinutes|
-  //  |kMetricAttemptPayloadBytesDownloadedMiB|
-  //  |kMetricAttemptPayloadDownloadSpeedKBps|
-  //  |kMetricAttemptDownloadSource|
   //  |kMetricAttemptResult|
   //  |kMetricAttemptInternalErrorCode|
-  //  |kMetricAttemptDownloadErrorCode|
   //
   // The |kMetricAttemptInternalErrorCode| metric will only be reported
   // if |internal_error_code| is not |kErrorSuccess|.
@@ -103,18 +99,27 @@
   // |kMetricAttemptTimeSinceLastAttemptUptimeMinutes| metrics are
   // automatically calculated and reported by maintaining persistent and
   // process-local state variables.
-  virtual void ReportUpdateAttemptMetrics(
-      SystemState* system_state,
-      int attempt_number,
-      PayloadType payload_type,
-      base::TimeDelta duration,
-      base::TimeDelta duration_uptime,
-      int64_t payload_size,
+  virtual void ReportUpdateAttemptMetrics(SystemState* system_state,
+                                          int attempt_number,
+                                          PayloadType payload_type,
+                                          base::TimeDelta duration,
+                                          base::TimeDelta duration_uptime,
+                                          int64_t payload_size,
+                                          metrics::AttemptResult attempt_result,
+                                          ErrorCode internal_error_code) = 0;
+
+  // Helper function to report download metrics after the completion of each
+  // update attempt. The following metrics are reported:
+  //
+  // |kMetricAttemptPayloadBytesDownloadedMiB|
+  // |kMetricAttemptPayloadDownloadSpeedKBps|
+  // |kMetricAttemptDownloadSource|
+  // |kMetricAttemptDownloadErrorCode|
+  // |kMetricAttemptConnectionType|
+  virtual void ReportUpdateAttemptDownloadMetrics(
       int64_t payload_bytes_downloaded,
       int64_t payload_download_speed_bps,
       DownloadSource download_source,
-      metrics::AttemptResult attempt_result,
-      ErrorCode internal_error_code,
       metrics::DownloadErrorCode payload_download_error_code,
       metrics::ConnectionType connection_type) = 0;
 
diff --git a/metrics_reporter_omaha.cc b/metrics_reporter_omaha.cc
index 3aaf1c6..5f24cbf 100644
--- a/metrics_reporter_omaha.cc
+++ b/metrics_reporter_omaha.cc
@@ -212,13 +212,8 @@
     base::TimeDelta duration,
     base::TimeDelta duration_uptime,
     int64_t payload_size,
-    int64_t payload_bytes_downloaded,
-    int64_t payload_download_speed_bps,
-    DownloadSource download_source,
     metrics::AttemptResult attempt_result,
-    ErrorCode internal_error_code,
-    metrics::DownloadErrorCode payload_download_error_code,
-    metrics::ConnectionType connection_type) {
+    ErrorCode internal_error_code) {
   string metric = metrics::kMetricAttemptNumber;
   LOG(INFO) << "Uploading " << attempt_number << " for metric " << metric;
   metrics_lib_->SendToUMA(metric,
@@ -259,30 +254,7 @@
                           1024,  // max: 1024 MiB = 1 GiB
                           50);   // num_buckets
 
-  metric = metrics::kMetricAttemptPayloadBytesDownloadedMiB;
-  int64_t payload_bytes_downloaded_mib =
-      payload_bytes_downloaded / kNumBytesInOneMiB;
-  LOG(INFO) << "Uploading " << payload_bytes_downloaded_mib << " for metric "
-            << metric;
-  metrics_lib_->SendToUMA(metric,
-                          payload_bytes_downloaded_mib,
-                          0,     // min: 0 MiB
-                          1024,  // max: 1024 MiB = 1 GiB
-                          50);   // num_buckets
 
-  metric = metrics::kMetricAttemptPayloadDownloadSpeedKBps;
-  int64_t payload_download_speed_kbps = payload_download_speed_bps / 1000;
-  LOG(INFO) << "Uploading " << payload_download_speed_kbps << " for metric "
-            << metric;
-  metrics_lib_->SendToUMA(metric,
-                          payload_download_speed_kbps,
-                          0,          // min: 0 kB/s
-                          10 * 1000,  // max: 10000 kB/s = 10 MB/s
-                          50);        // num_buckets
-
-  metric = metrics::kMetricAttemptDownloadSource;
-  LOG(INFO) << "Uploading " << download_source << " for metric " << metric;
-  metrics_lib_->SendEnumToUMA(metric, download_source, kNumDownloadSources);
 
   metric = metrics::kMetricAttemptResult;
   LOG(INFO) << "Uploading " << static_cast<int>(attempt_result)
@@ -301,14 +273,6 @@
                                 static_cast<int>(ErrorCode::kUmaReportedMax));
   }
 
-  if (payload_download_error_code != metrics::DownloadErrorCode::kUnset) {
-    metric = metrics::kMetricAttemptDownloadErrorCode;
-    LOG(INFO) << "Uploading " << static_cast<int>(payload_download_error_code)
-              << " for metric " << metric << " (sparse)";
-    metrics_lib_->SendSparseToUMA(
-        metric, static_cast<int>(payload_download_error_code));
-  }
-
   base::TimeDelta time_since_last;
   if (metrics_utils::WallclockDurationHelper(
           system_state,
@@ -337,6 +301,46 @@
                             30 * 24 * 60,  // max: 30 days
                             50);           // num_buckets
   }
+}
+
+void MetricsReporterOmaha::ReportUpdateAttemptDownloadMetrics(
+    int64_t payload_bytes_downloaded,
+    int64_t payload_download_speed_bps,
+    DownloadSource download_source,
+    metrics::DownloadErrorCode payload_download_error_code,
+    metrics::ConnectionType connection_type) {
+  string metric = metrics::kMetricAttemptPayloadBytesDownloadedMiB;
+  int64_t payload_bytes_downloaded_mib =
+      payload_bytes_downloaded / kNumBytesInOneMiB;
+  LOG(INFO) << "Uploading " << payload_bytes_downloaded_mib << " for metric "
+            << metric;
+  metrics_lib_->SendToUMA(metric,
+                          payload_bytes_downloaded_mib,
+                          0,     // min: 0 MiB
+                          1024,  // max: 1024 MiB = 1 GiB
+                          50);   // num_buckets
+
+  metric = metrics::kMetricAttemptPayloadDownloadSpeedKBps;
+  int64_t payload_download_speed_kbps = payload_download_speed_bps / 1000;
+  LOG(INFO) << "Uploading " << payload_download_speed_kbps << " for metric "
+            << metric;
+  metrics_lib_->SendToUMA(metric,
+                          payload_download_speed_kbps,
+                          0,          // min: 0 kB/s
+                          10 * 1000,  // max: 10000 kB/s = 10 MB/s
+                          50);        // num_buckets
+
+  metric = metrics::kMetricAttemptDownloadSource;
+  LOG(INFO) << "Uploading " << download_source << " for metric " << metric;
+  metrics_lib_->SendEnumToUMA(metric, download_source, kNumDownloadSources);
+
+  if (payload_download_error_code != metrics::DownloadErrorCode::kUnset) {
+    metric = metrics::kMetricAttemptDownloadErrorCode;
+    LOG(INFO) << "Uploading " << static_cast<int>(payload_download_error_code)
+              << " for metric " << metric << " (sparse)";
+    metrics_lib_->SendSparseToUMA(
+        metric, static_cast<int>(payload_download_error_code));
+  }
 
   metric = metrics::kMetricAttemptConnectionType;
   LOG(INFO) << "Uploading " << static_cast<int>(connection_type)
diff --git a/metrics_reporter_omaha.h b/metrics_reporter_omaha.h
index b209b13..c19fe86 100644
--- a/metrics_reporter_omaha.h
+++ b/metrics_reporter_omaha.h
@@ -105,18 +105,19 @@
       metrics::CheckReaction reaction,
       metrics::DownloadErrorCode download_error_code) override;
 
-  void ReportUpdateAttemptMetrics(
-      SystemState* system_state,
-      int attempt_number,
-      PayloadType payload_type,
-      base::TimeDelta duration,
-      base::TimeDelta duration_uptime,
-      int64_t payload_size,
+  void ReportUpdateAttemptMetrics(SystemState* system_state,
+                                  int attempt_number,
+                                  PayloadType payload_type,
+                                  base::TimeDelta duration,
+                                  base::TimeDelta duration_uptime,
+                                  int64_t payload_size,
+                                  metrics::AttemptResult attempt_result,
+                                  ErrorCode internal_error_code) override;
+
+  void ReportUpdateAttemptDownloadMetrics(
       int64_t payload_bytes_downloaded,
       int64_t payload_download_speed_bps,
       DownloadSource download_source,
-      metrics::AttemptResult attempt_result,
-      ErrorCode internal_error_code,
       metrics::DownloadErrorCode payload_download_error_code,
       metrics::ConnectionType connection_type) override;
 
diff --git a/metrics_reporter_omaha_unittest.cc b/metrics_reporter_omaha_unittest.cc
index 7a4102e..76e33c6 100644
--- a/metrics_reporter_omaha_unittest.cc
+++ b/metrics_reporter_omaha_unittest.cc
@@ -133,15 +133,10 @@
   TimeDelta duration_uptime = TimeDelta::FromMinutes(1000);
 
   int64_t payload_size = 100 * kNumBytesInOneMiB;
-  int64_t payload_bytes_downloaded = 200 * kNumBytesInOneMiB;
-  int64_t payload_download_speed_bps = 100 * 1000;
-  DownloadSource download_source = kDownloadSourceHttpServer;
+
   metrics::AttemptResult attempt_result =
       metrics::AttemptResult::kInternalError;
   ErrorCode internal_error_code = ErrorCode::kDownloadInvalidMetadataSignature;
-  metrics::DownloadErrorCode payload_download_error_code =
-      metrics::DownloadErrorCode::kDownloadError;
-  metrics::ConnectionType connection_type = metrics::ConnectionType::kCellular;
 
   EXPECT_CALL(*mock_metrics_lib_,
               SendToUMA(metrics::kMetricAttemptNumber, attempt_number, _, _, _))
@@ -166,23 +161,6 @@
                         _))
       .Times(2);
 
-  // Check the report of payload download metrics.
-  EXPECT_CALL(*mock_metrics_lib_,
-              SendToUMA(metrics::kMetricAttemptPayloadSizeMiB, 100, _, _, _))
-      .Times(2);
-  EXPECT_CALL(
-      *mock_metrics_lib_,
-      SendToUMA(metrics::kMetricAttemptPayloadBytesDownloadedMiB, 200, _, _, _))
-      .Times(2);
-  EXPECT_CALL(
-      *mock_metrics_lib_,
-      SendToUMA(metrics::kMetricAttemptPayloadDownloadSpeedKBps, 100, _, _, _))
-      .Times(2);
-  EXPECT_CALL(*mock_metrics_lib_,
-              SendEnumToUMA(metrics::kMetricAttemptDownloadSource,
-                            static_cast<int>(download_source),
-                            _))
-      .Times(2);
 
   // Check the report of attempt result.
   EXPECT_CALL(
@@ -196,8 +174,7 @@
                             _))
       .Times(2);
   EXPECT_CALL(*mock_metrics_lib_,
-              SendSparseToUMA(metrics::kMetricAttemptDownloadErrorCode,
-                              static_cast<int>(payload_download_error_code)))
+              SendToUMA(metrics::kMetricAttemptPayloadSizeMiB, 100, _, _, _))
       .Times(2);
 
   // Check the duration between two reports.
@@ -211,25 +188,14 @@
           metrics::kMetricAttemptTimeSinceLastAttemptUptimeMinutes, 1, _, _, _))
       .Times(1);
 
-  EXPECT_CALL(*mock_metrics_lib_,
-              SendEnumToUMA(metrics::kMetricAttemptConnectionType,
-                            static_cast<int>(connection_type),
-                            _))
-      .Times(2);
-
   reporter_.ReportUpdateAttemptMetrics(&fake_system_state,
                                        attempt_number,
                                        payload_type,
                                        duration,
                                        duration_uptime,
                                        payload_size,
-                                       payload_bytes_downloaded,
-                                       payload_download_speed_bps,
-                                       download_source,
                                        attempt_result,
-                                       internal_error_code,
-                                       payload_download_error_code,
-                                       connection_type);
+                                       internal_error_code);
 
   // Advance the clock by 1 minute and report the same metrics again.
   fake_clock.SetWallclockTime(base::Time::FromInternalValue(61000000));
@@ -240,13 +206,46 @@
                                        duration,
                                        duration_uptime,
                                        payload_size,
-                                       payload_bytes_downloaded,
-                                       payload_download_speed_bps,
-                                       download_source,
                                        attempt_result,
-                                       internal_error_code,
-                                       payload_download_error_code,
-                                       connection_type);
+                                       internal_error_code);
+}
+
+TEST_F(MetricsReporterOmahaTest, ReportUpdateAttemptDownloadMetrics) {
+  int64_t payload_bytes_downloaded = 200 * kNumBytesInOneMiB;
+  int64_t payload_download_speed_bps = 100 * 1000;
+  DownloadSource download_source = kDownloadSourceHttpServer;
+  metrics::DownloadErrorCode payload_download_error_code =
+      metrics::DownloadErrorCode::kDownloadError;
+  metrics::ConnectionType connection_type = metrics::ConnectionType::kCellular;
+
+  EXPECT_CALL(
+      *mock_metrics_lib_,
+      SendToUMA(metrics::kMetricAttemptPayloadBytesDownloadedMiB, 200, _, _, _))
+      .Times(1);
+  EXPECT_CALL(
+      *mock_metrics_lib_,
+      SendToUMA(metrics::kMetricAttemptPayloadDownloadSpeedKBps, 100, _, _, _))
+      .Times(1);
+  EXPECT_CALL(*mock_metrics_lib_,
+              SendEnumToUMA(metrics::kMetricAttemptDownloadSource,
+                            static_cast<int>(download_source),
+                            _))
+      .Times(1);
+  EXPECT_CALL(*mock_metrics_lib_,
+              SendSparseToUMA(metrics::kMetricAttemptDownloadErrorCode,
+                              static_cast<int>(payload_download_error_code)))
+      .Times(1);
+  EXPECT_CALL(*mock_metrics_lib_,
+              SendEnumToUMA(metrics::kMetricAttemptConnectionType,
+                            static_cast<int>(connection_type),
+                            _))
+      .Times(1);
+
+  reporter_.ReportUpdateAttemptDownloadMetrics(payload_bytes_downloaded,
+                                               payload_download_speed_bps,
+                                               download_source,
+                                               payload_download_error_code,
+                                               connection_type);
 }
 
 TEST_F(MetricsReporterOmahaTest, ReportSuccessfulUpdateMetrics) {
diff --git a/mock_metrics_reporter.h b/mock_metrics_reporter.h
index 60982a7..a0f164b 100644
--- a/mock_metrics_reporter.h
+++ b/mock_metrics_reporter.h
@@ -23,7 +23,7 @@
 
 namespace chromeos_update_engine {
 
-class MockMetrics : public MetricsReporterInterface {
+class MockMetricsReporter : public MetricsReporterInterface {
  public:
   MOCK_METHOD0(Initialize, void());
 
@@ -37,20 +37,22 @@
                     metrics::CheckReaction reaction,
                     metrics::DownloadErrorCode download_error_code));
 
-  void ReportUpdateAttemptMetrics(
-      SystemState* system_state,
-      int attempt_number,
-      PayloadType payload_type,
-      base::TimeDelta duration,
-      base::TimeDelta duration_uptime,
-      int64_t payload_size,
-      int64_t payload_bytes_downloaded,
-      int64_t payload_download_speed_bps,
-      DownloadSource download_source,
-      metrics::AttemptResult attempt_result,
-      ErrorCode internal_error_code,
-      metrics::DownloadErrorCode payload_download_error_code,
-      metrics::ConnectionType connection_type) override {}
+  MOCK_METHOD8(ReportUpdateAttemptMetrics,
+               void(SystemState* system_state,
+                    int attempt_number,
+                    PayloadType payload_type,
+                    base::TimeDelta duration,
+                    base::TimeDelta duration_uptime,
+                    int64_t payload_size,
+                    metrics::AttemptResult attempt_result,
+                    ErrorCode internal_error_code));
+
+  MOCK_METHOD5(ReportUpdateAttemptDownloadMetrics,
+               void(int64_t payload_bytes_downloaded,
+                    int64_t payload_download_speed_bps,
+                    DownloadSource download_source,
+                    metrics::DownloadErrorCode payload_download_error_code,
+                    metrics::ConnectionType connection_type));
 
   MOCK_METHOD0(ReportAbnormallyTerminatedUpdateAttemptMetrics, void());
 
diff --git a/payload_state.cc b/payload_state.cc
index 1f121b0..410a0bf 100644
--- a/payload_state.cc
+++ b/payload_state.cc
@@ -643,11 +643,13 @@
       duration,
       duration_uptime,
       payload_size,
+      attempt_result,
+      internal_error_code);
+
+  system_state_->metrics_reporter()->ReportUpdateAttemptDownloadMetrics(
       payload_bytes_downloaded,
       payload_download_speed_bps,
       download_source,
-      attempt_result,
-      internal_error_code,
       payload_download_error_code,
       attempt_connection_type_);
 }
diff --git a/payload_state_unittest.cc b/payload_state_unittest.cc
index b277d95..a69c5ac 100644
--- a/payload_state_unittest.cc
+++ b/payload_state_unittest.cc
@@ -1133,7 +1133,7 @@
 TEST(PayloadStateTest, RestartAfterCrash) {
   PayloadState payload_state;
   FakeSystemState fake_system_state;
-  testing::StrictMock<MockMetrics> mock_metrics_reporter;
+  testing::StrictMock<MockMetricsReporter> mock_metrics_reporter;
   fake_system_state.set_metrics_reporter(&mock_metrics_reporter);
   NiceMock<MockPrefs>* prefs = fake_system_state.mock_prefs();
 
diff --git a/update_attempter_android.cc b/update_attempter_android.cc
index 0a1c20f..f6b9702 100644
--- a/update_attempter_android.cc
+++ b/update_attempter_android.cc
@@ -433,27 +433,20 @@
 
   // TODO(xunchang): assign proper values to the metrics.
   PayloadType payload_type = kNumPayloadTypes;
-  DownloadSource download_source = kNumDownloadSources;
   metrics::AttemptResult attempt_result =
       metrics_utils::GetAttemptResult(error_code);
   TimeDelta duration;
   TimeDelta duration_uptime;
   // Report the android metrics when we terminate the update. Currently we are
   // reporting error_code only.
-  metrics_reporter_->ReportUpdateAttemptMetrics(
-      nullptr,  // system_state
-      0,        // attempt_number
-      payload_type,
-      duration,
-      duration_uptime,
-      0,  // payload_size
-      0,  // payload_bytes_downloaded
-      0,  // payload_download_speed_bps
-      download_source,
-      attempt_result,
-      error_code,
-      metrics::DownloadErrorCode::kUnset,
-      metrics::ConnectionType::kUnset);
+  metrics_reporter_->ReportUpdateAttemptMetrics(nullptr,  // system_state
+                                                0,        // attempt_number
+                                                payload_type,
+                                                duration,
+                                                duration_uptime,
+                                                0,  // payload_size
+                                                attempt_result,
+                                                error_code);
 }
 
 void UpdateAttempterAndroid::SetStatusAndNotify(UpdateStatus status) {
