summaryrefslogtreecommitdiff
path: root/chromium/components/metrics/metrics_state_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/metrics/metrics_state_manager.cc')
-rw-r--r--chromium/components/metrics/metrics_state_manager.cc17
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;
}