| Index: chrome/browser/metrics/metrics_services_manager.cc
|
| diff --git a/chrome/browser/metrics/metrics_services_manager.cc b/chrome/browser/metrics/metrics_services_manager.cc
|
| index 8278913da7da438199e2c1b3f363649bc54148d3..effee1857671eca86035613975b4093fadf1e51f 100644
|
| --- a/chrome/browser/metrics/metrics_services_manager.cc
|
| +++ b/chrome/browser/metrics/metrics_services_manager.cc
|
| @@ -4,12 +4,17 @@
|
|
|
| #include "chrome/browser/metrics/metrics_services_manager.h"
|
|
|
| +#include <string>
|
| +
|
| #include "base/command_line.h"
|
| +#include "base/guid.h"
|
| +#include "base/logging.h"
|
| #include "base/prefs/pref_service.h"
|
| #include "chrome/browser/metrics/chrome_metrics_service_client.h"
|
| #include "chrome/browser/metrics/variations/variations_service.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| +#include "chrome/installer/util/google_update_settings.h"
|
| #include "components/metrics/metrics_service.h"
|
| #include "components/metrics/metrics_state_manager.h"
|
| #include "components/rappor/rappor_service.h"
|
| @@ -18,6 +23,47 @@
|
| #include "chrome/browser/chromeos/settings/cros_settings.h"
|
| #endif
|
|
|
| +namespace {
|
| +
|
| +// Returns the client info returned by
|
| +// GoogleUpdateSettings::LoadMetricsClientInfo. Also migrates old client id
|
| +// formats to the new one.
|
| +scoped_ptr<metrics::ClientInfo> LoadMetricsClientInfo() {
|
| + scoped_ptr<metrics::ClientInfo> client_info =
|
| + GoogleUpdateSettings::LoadMetricsClientInfo();
|
| +
|
| + // Prior to 2014-07, the client ID was stripped of its dashes before being
|
| + // saved. Migrate back to a proper GUID if this is the case. This migration
|
| + // code below can be removed in M41+.
|
| + const size_t kGUIDLengthWithoutDashes = 32U;
|
| + if (client_info &&
|
| + client_info->client_id.length() == kGUIDLengthWithoutDashes) {
|
| + DCHECK(client_info->client_id.find('-') == std::string::npos);
|
| +
|
| + std::string client_id_with_dashes;
|
| + client_id_with_dashes.reserve(kGUIDLengthWithoutDashes + 4U);
|
| + std::string::const_iterator client_id_it = client_info->client_id.begin();
|
| + for (size_t i = 0; i < kGUIDLengthWithoutDashes + 4U; ++i) {
|
| + if (i == 8U || i == 13U || i == 18U || i == 23U) {
|
| + client_id_with_dashes.push_back('-');
|
| + } else {
|
| + client_id_with_dashes.push_back(*client_id_it);
|
| + ++client_id_it;
|
| + }
|
| + }
|
| + DCHECK(client_id_it == client_info->client_id.end());
|
| + client_info->client_id.assign(client_id_with_dashes);
|
| + }
|
| +
|
| + // The GUID retrieved (and possibly fixed above) should be valid unless
|
| + // retrieval failed.
|
| + DCHECK(!client_info || base::IsValidGUID(client_info->client_id));
|
| +
|
| + return client_info.Pass();
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| MetricsServicesManager::MetricsServicesManager(PrefService* local_state)
|
| : local_state_(local_state) {
|
| DCHECK(local_state);
|
| @@ -70,7 +116,9 @@ metrics::MetricsStateManager* MetricsServicesManager::GetMetricsStateManager() {
|
| metrics_state_manager_ = metrics::MetricsStateManager::Create(
|
| local_state_,
|
| base::Bind(&MetricsServicesManager::IsMetricsReportingEnabled,
|
| - base::Unretained(this)));
|
| + base::Unretained(this)),
|
| + base::Bind(&GoogleUpdateSettings::StoreMetricsClientInfo),
|
| + base::Bind(&LoadMetricsClientInfo));
|
| }
|
| return metrics_state_manager_.get();
|
| }
|
|
|