[Metrics] Update MetricsLog to query MetricsServiceClient for several //chrome dependencies.

Along the way, clean up the MetricsLogManager API to use a scoped_ptr to
express ownership semantics.

BUG=374233, 374737
TEST=compiles, unit_tests
R=asvitkine@chromium.org, thestig@chromium.org
TBR=thestig@chromium.org

Review URL: https://codereview.chromium.org/294063002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272173 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/metrics/metrics_service.cc b/chrome/browser/metrics/metrics_service.cc
index 568cb32..55b9f07 100644
--- a/chrome/browser/metrics/metrics_service.cc
+++ b/chrome/browser/metrics/metrics_service.cc
@@ -197,6 +197,7 @@
 #include "chrome/common/pref_names.h"
 #include "chrome/common/render_messages.h"
 #include "chrome/common/variations/variations_util.h"
+#include "components/metrics/metrics_log_base.h"
 #include "components/metrics/metrics_log_manager.h"
 #include "components/metrics/metrics_pref_names.h"
 #include "components/metrics/metrics_reporting_scheduler.h"
@@ -816,8 +817,7 @@
   PrefService* pref = g_browser_process->local_state();
   DCHECK(pref);
 
-  pref->SetString(prefs::kStabilityStatsVersion,
-                  MetricsLog::GetVersionString());
+  pref->SetString(prefs::kStabilityStatsVersion, client_->GetVersionString());
   pref->SetInt64(prefs::kStabilityStatsBuildTime, MetricsLog::GetBuildTime());
 
   session_id_ = pref->GetInteger(prefs::kMetricsSessionID);
@@ -971,9 +971,7 @@
   // Upon the first callback, create the initial log so that we can immediately
   // save the profiler data.
   if (!initial_metrics_log_.get()) {
-    initial_metrics_log_.reset(
-        new MetricsLog(state_manager_->client_id(), session_id_,
-                       MetricsLog::ONGOING_LOG));
+    initial_metrics_log_ = CreateLog(MetricsLog::ONGOING_LOG);
     NotifyOnDidCreateMetricsLog();
   }
 
@@ -1057,8 +1055,7 @@
   DCHECK(!log_manager_.current_log());
 
   log_manager_.BeginLoggingWithLog(
-      new MetricsLog(state_manager_->client_id(), session_id_,
-                     MetricsLog::ONGOING_LOG));
+      CreateLog(MetricsLog::ONGOING_LOG).PassAs<metrics::MetricsLogBase>());
   NotifyOnDidCreateMetricsLog();
   if (state_ == INITIALIZED) {
     // We only need to schedule that run once.
@@ -1357,8 +1354,7 @@
   DCHECK_NE(0, pref->GetInteger(prefs::kStabilityCrashCount));
 
   scoped_ptr<MetricsLog> initial_stability_log(
-      new MetricsLog(state_manager_->client_id(), session_id_,
-                     MetricsLog::INITIAL_STABILITY_LOG));
+      CreateLog(MetricsLog::INITIAL_STABILITY_LOG));
 
   // Do not call NotifyOnDidCreateMetricsLog here because the stability
   // log describes stats from the _previous_ session.
@@ -1369,7 +1365,8 @@
   log_manager_.LoadPersistedUnsentLogs();
 
   log_manager_.PauseCurrentLog();
-  log_manager_.BeginLoggingWithLog(initial_stability_log.release());
+  log_manager_.BeginLoggingWithLog(
+      initial_stability_log.PassAs<metrics::MetricsLogBase>());
 
   // Note: Some stability providers may record stability stats via histograms,
   //       so this call has to be after BeginLoggingWithLog().
@@ -1408,7 +1405,8 @@
   // Histograms only get written to the current log, so make the new log current
   // before writing them.
   log_manager_.PauseCurrentLog();
-  log_manager_.BeginLoggingWithLog(initial_metrics_log_.release());
+  log_manager_.BeginLoggingWithLog(
+      initial_metrics_log_.PassAs<metrics::MetricsLogBase>());
 
   // Note: Some stability providers may record stability stats via histograms,
   //       so this call has to be after BeginLoggingWithLog().
@@ -1687,6 +1685,11 @@
   }
 }
 
+scoped_ptr<MetricsLog> MetricsService::CreateLog(MetricsLog::LogType log_type) {
+  return make_scoped_ptr(new MetricsLog(
+      state_manager_->client_id(), session_id_, log_type, client_));
+}
+
 void MetricsService::LogCleanShutdown() {
   // Redundant hack to write pref ASAP.
   MarkAppCleanShutdownAndCommit();