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.gyp b/metrics/metrics.gyp
index 3df31ff..044ff66 100644
--- a/metrics/metrics.gyp
+++ b/metrics/metrics.gyp
@@ -12,6 +12,7 @@
         'gthread-2.0',
         'libchrome-<(libbase_ver)',
         'libchromeos-<(libbase_ver)',
+        'libcurl',
       ]
     },
     'cflags_cc': [
@@ -24,6 +25,8 @@
       'type': 'static_library',
       'dependencies': [
         '../metrics/libmetrics-<(libbase_ver).gyp:libmetrics-<(libbase_ver)',
+        'libupload_service',
+        'metrics_proto',
       ],
       'link_settings': {
         'libraries': [
@@ -35,7 +38,8 @@
         'persistent_integer.cc',
         'metrics_daemon.cc',
         'metrics_daemon_main.cc',
-      ]
+      ],
+      'include_dirs': ['.'],
     },
     {
       'target_name': 'metrics_client',
@@ -47,6 +51,67 @@
         'metrics_client.cc',
       ]
     },
+    {
+      'target_name': 'libupload_service',
+      'type': 'static_library',
+      'dependencies': [
+        'metrics_proto'
+      ],
+      'link_settings': {
+        'libraries': [
+          '-lgflags',
+          '-lvboot_host',
+        ],
+      },
+      'variables': {
+        'exported_deps': [
+          'protobuf-lite',
+        ],
+        'deps': [
+          '<@(exported_deps)',
+        ],
+      },
+      'all_dependent_settings': {
+        'variables': {
+          'deps+': [
+            '<@(exported_deps)',
+          ],
+        },
+      },
+      'sources': [
+        'uploader/upload_service.cc',
+        'uploader/metrics_log.cc',
+        'uploader/system_profile_cache.cc',
+        'uploader/curl_sender.cc',
+        'components/metrics/chromeos/metric_sample.cc',
+        'components/metrics/chromeos/serialization_utils.cc',
+        'components/metrics/metrics_log_base.cc',
+        'components/metrics/metrics_log_manager.cc',
+        'components/metrics/metrics_hashes.cc',
+      ],
+      'include_dirs': ['.']
+    },
+    {
+      'target_name': 'metrics_proto',
+      'type': 'static_library',
+      'variables': {
+        'proto_in_dir': 'components/metrics/proto/',
+        'proto_out_dir': 'include/components/metrics/proto',
+      },
+      'sources': [
+        '<(proto_in_dir)/chrome_user_metrics_extension.proto',
+        '<(proto_in_dir)/histogram_event.proto',
+        '<(proto_in_dir)/omnibox_event.proto',
+        '<(proto_in_dir)/perf_data.proto',
+        '<(proto_in_dir)/profiler_event.proto',
+        '<(proto_in_dir)/sampled_profile.proto',
+        '<(proto_in_dir)/system_profile.proto',
+        '<(proto_in_dir)/user_action_event.proto',
+      ],
+      'includes': [
+        '../../platform2/common-mk/protoc.gypi'
+      ],
+    },
   ],
   'conditions': [
     ['USE_passive_metrics == 1', {
@@ -94,6 +159,22 @@
             'timer_test.cc',
           ]
         },
+        {
+          'target_name': 'upload_service_test',
+          'type': 'executable',
+          'sources': [
+            'persistent_integer.cc',
+            'uploader/mock/sender_mock.cc',
+            'uploader/upload_service_test.cc',
+          ],
+          'dependencies': [
+            'libupload_service',
+          ],
+          'includes':[
+            '../../platform2/common-mk/common_test.gypi',
+          ],
+          'include_dirs': ['.']
+        },
       ],
     }],
     ['USE_passive_metrics == 1 and USE_test == 1', {
@@ -107,9 +188,10 @@
           'includes': ['../../platform2/common-mk/common_test.gypi'],
           'sources': [
             'metrics_daemon_test.cc',
-          ]
+          ],
+          'include_dirs': ['.'],
         },
       ],
     }],
-  ],
+  ]
 }