diff options
Diffstat (limited to 'chromium/components/metrics/metrics_state_manager.cc')
-rw-r--r-- | chromium/components/metrics/metrics_state_manager.cc | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/chromium/components/metrics/metrics_state_manager.cc b/chromium/components/metrics/metrics_state_manager.cc index cf1b4a126ab..4cae20d3ae7 100644 --- a/chromium/components/metrics/metrics_state_manager.cc +++ b/chromium/components/metrics/metrics_state_manager.cc @@ -83,10 +83,15 @@ bool MetricsStateManager::IsMetricsReportingEnabled() { } void MetricsStateManager::ForceClientIdCreation() { - if (!client_id_.empty()) - return; + { + std::string client_id_from_prefs = + local_state_->GetString(prefs::kMetricsClientID); + // If client id in prefs matches the cached copy, return early. + if (!client_id_from_prefs.empty() && client_id_from_prefs == client_id_) + return; + client_id_.swap(client_id_from_prefs); + } - client_id_ = local_state_->GetString(prefs::kMetricsClientID); if (!client_id_.empty()) { // It is technically sufficient to only save a backup of the client id when // it is initially generated below, but since the backup was only introduced @@ -256,8 +261,10 @@ MetricsStateManager::LoadClientInfoAndMaybeMigrate() { } // The GUID retrieved (and possibly fixed above) should be valid unless - // retrieval failed. - DCHECK(!client_info || base::IsValidGUID(client_info->client_id)); + // retrieval failed. If not, return nullptr. This will result in a new GUID + // being generated by the calling function ForceClientIdCreation(). + if (client_info && !base::IsValidGUID(client_info->client_id)) + return nullptr; return client_info; } |