metrics: fix memory leaks in unittest.

This fixes the memory leaks exposed in unittest.

BUG=chromium:408309
TEST=USE="clang asan" FEATURES="test" emerge-amd64-generic metrics
   passes.

Change-Id: I6f612499d7e67fa9171b95de4dbfac4e7f6698a0
Reviewed-on: https://chromium-review.googlesource.com/215887
Reviewed-by: Yunlian Jiang <yunlian@chromium.org>
Tested-by: Yunlian Jiang <yunlian@chromium.org>
Commit-Queue: Yunlian Jiang <yunlian@chromium.org>
diff --git a/metrics/uploader/system_profile_setter.h b/metrics/uploader/system_profile_setter.h
index 1e2baab..c535664 100644
--- a/metrics/uploader/system_profile_setter.h
+++ b/metrics/uploader/system_profile_setter.h
@@ -13,6 +13,7 @@
 // information to simplify testing.
 class SystemProfileSetter {
  public:
+  virtual ~SystemProfileSetter() {}
   // Populates the protobuf with system informations.
   virtual void Populate(metrics::ChromeUserMetricsExtension* profile_proto) = 0;
 };
diff --git a/metrics/uploader/upload_service.cc b/metrics/uploader/upload_service.cc
index 62f5d92..8b8e351 100644
--- a/metrics/uploader/upload_service.cc
+++ b/metrics/uploader/upload_service.cc
@@ -53,7 +53,7 @@
   CHECK(!staged_log_) << "the staged log should be discarded before starting "
                          "a new metrics log";
   MetricsLog* log = new MetricsLog();
-  log->PopulateSystemProfile(system_profile_setter_);
+  log->PopulateSystemProfile(system_profile_setter_.get());
   current_log_.reset(log);
 }
 
diff --git a/metrics/uploader/upload_service.h b/metrics/uploader/upload_service.h
index 80b1bf3..d677424 100644
--- a/metrics/uploader/upload_service.h
+++ b/metrics/uploader/upload_service.h
@@ -12,6 +12,7 @@
 #include "base/metrics/histogram_snapshot_manager.h"
 #include "uploader/metrics_log.h"
 #include "uploader/sender.h"
+#include "uploader/system_profile_cache.h"
 
 namespace metrics {
 class ChromeUserMetricsExtension;
@@ -126,7 +127,7 @@
   // Returns the current log. If there is no current log, creates it first.
   MetricsLog* GetOrCreateCurrentLog();
 
-  SystemProfileSetter* system_profile_setter_;
+  scoped_ptr<SystemProfileSetter> system_profile_setter_;
   base::HistogramSnapshotManager histogram_snapshot_manager_;
   scoped_ptr<Sender> sender_;
   int failed_upload_count_;
diff --git a/metrics/uploader/upload_service_test.cc b/metrics/uploader/upload_service_test.cc
index 7a82624..5076e61 100644
--- a/metrics/uploader/upload_service_test.cc
+++ b/metrics/uploader/upload_service_test.cc
@@ -25,7 +25,7 @@
       : upload_service_(), exit_manager_(new base::AtExitManager()) {
     sender_ = new SenderMock;
     upload_service_.sender_.reset(sender_);
-    upload_service_.system_profile_setter_ = new MockSystemProfileSetter();
+    upload_service_.system_profile_setter_.reset(new MockSystemProfileSetter());
     upload_service_.Init();
   }
 
@@ -46,7 +46,7 @@
   }
 
   base::ScopedTempDir dir_;
-  SenderMock *sender_;
+  SenderMock* sender_;
   SystemProfileCache cache_;
   UploadService upload_service_;
 
@@ -191,8 +191,12 @@
   base::SysInfo::SetChromeOSVersionInfoForTest(content, base::Time());
   scoped_ptr<metrics::MetricSample> histogram =
       metrics::MetricSample::SparseHistogramSample("myhistogram", 1);
+  SystemProfileCache* local_cache_ = new SystemProfileCache;
+  local_cache_->is_testing_ = true;
+  local_cache_->session_id_.reset(new chromeos_metrics::PersistentInteger(
+        dir_.path().Append("session_id").value()));
 
-  upload_service_.system_profile_setter_ = &cache_;
+  upload_service_.system_profile_setter_.reset(local_cache_);
   // Reset to create the new log with the profile setter.
   upload_service_.Reset();
   upload_service_.AddSample(*histogram.get());