Add an uploader to metrics_daemon

Metrics_daemon will now upload the metrics to Chrome's backend when Chrome is
not available.
This uses //components/metrics from chrome to use its protobuf definition and
the metrics common code.

This functionality is not yet enabled. It will be once the end-to-end test is
enabled.

BUG=chromium:358283, chromium:364579
TEST=FEATURES=test emerge-amd64-generic metrics

CQ-DEPEND=CL:205790
CQ-DEPEND=CL:206055

Change-Id: I87aaf7a2ac041581fa3ffd4ec61f73e933c00a52
Reviewed-on: https://chromium-review.googlesource.com/205810
Reviewed-by: Bertrand Simonnet <bsimonnet@chromium.org>
Tested-by: Bertrand Simonnet <bsimonnet@chromium.org>
Reviewed-by: Luigi Semenzato <semenzato@chromium.org>
Commit-Queue: Bertrand Simonnet <bsimonnet@chromium.org>
diff --git a/metrics/metrics_daemon.cc b/metrics/metrics_daemon.cc
index e8f0c6c..b9212fb 100644
--- a/metrics/metrics_daemon.cc
+++ b/metrics/metrics_daemon.cc
@@ -14,7 +14,6 @@
 #include <string.h>
 #include <time.h>
 
-#include <base/at_exit.h>
 #include <base/file_util.h>
 #include <base/files/file_path.h>
 #include <base/hash.h>
@@ -26,6 +25,7 @@
 #include <base/sys_info.h>
 #include <chromeos/dbus/service_constants.h>
 #include <dbus/dbus-glib-lowlevel.h>
+#include "uploader/upload_service.h"
 
 using base::FilePath;
 using base::StringPrintf;
@@ -163,8 +163,6 @@
 }
 
 void MetricsDaemon::Run(bool run_as_daemon) {
-  base::AtExitManager at_exit_manager;
-
   if (run_as_daemon && daemon(0, 0) != 0)
     return;
 
@@ -188,6 +186,10 @@
   Loop();
 }
 
+void MetricsDaemon::RunUploaderTest() {
+  upload_service_->UploadEvent();
+}
+
 uint32 MetricsDaemon::GetOsVersionHash() {
   static uint32 cached_version_hash = 0;
   static bool version_hash_is_cached = false;
@@ -205,7 +207,9 @@
   return cached_version_hash;
 }
 
-void MetricsDaemon::Init(bool testing, MetricsLibraryInterface* metrics_lib,
+void MetricsDaemon::Init(bool testing,
+                         bool uploader_active,
+                         MetricsLibraryInterface* metrics_lib,
                          const string& diskstats_path,
                          const string& vmstats_path,
                          const string& scaling_max_freq_path,
@@ -305,6 +309,11 @@
 
   update_stats_timeout_id_ =
       g_timeout_add(kUpdateStatsIntervalMs, &HandleUpdateStatsTimeout, this);
+
+  if (uploader_active) {
+    upload_service_.reset(new UploadService());
+    upload_service_->Init();
+  }
 }
 
 void MetricsDaemon::Loop() {