| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/metrics/metrics_service_accessor.h" |
| |
| #include "base/base_switches.h" |
| #include "base/command_line.h" |
| #include "components/metrics/metrics_pref_names.h" |
| #include "components/metrics/metrics_service.h" |
| #include "components/prefs/pref_service.h" |
| #include "components/variations/hashing.h" |
| |
| namespace metrics { |
| namespace { |
| |
| bool g_force_official_enabled_test = false; |
| |
| bool IsMetricsReportingEnabledForOfficialBuild(PrefService* pref_service) { |
| // In official builds, disable metrics when reporting field trials are |
| // forced; otherwise, use the value of the user's preference to determine |
| // whether to enable metrics reporting. |
| return !base::CommandLine::ForCurrentProcess()->HasSwitch( |
| switches::kForceFieldTrials) && |
| pref_service->GetBoolean(prefs::kMetricsReportingEnabled); |
| } |
| |
| } // namespace |
| |
| // static |
| bool MetricsServiceAccessor::IsMetricsReportingEnabled( |
| PrefService* pref_service) { |
| #if defined(GOOGLE_CHROME_BUILD) |
| return IsMetricsReportingEnabledForOfficialBuild(pref_service); |
| #else |
| // In non-official builds, disable metrics reporting completely. |
| return g_force_official_enabled_test |
| ? IsMetricsReportingEnabledForOfficialBuild(pref_service) |
| : false; |
| #endif // defined(GOOGLE_CHROME_BUILD) |
| } |
| |
| // static |
| bool MetricsServiceAccessor::RegisterSyntheticFieldTrial( |
| MetricsService* metrics_service, |
| base::StringPiece trial_name, |
| base::StringPiece group_name) { |
| return RegisterSyntheticFieldTrialWithNameAndGroupHash( |
| metrics_service, variations::HashName(trial_name), |
| variations::HashName(group_name)); |
| } |
| |
| // static |
| bool MetricsServiceAccessor::RegisterSyntheticMultiGroupFieldTrial( |
| MetricsService* metrics_service, |
| base::StringPiece trial_name, |
| const std::vector<uint32_t>& group_name_hashes) { |
| if (!metrics_service) |
| return false; |
| |
| metrics_service->synthetic_trial_registry() |
| ->RegisterSyntheticMultiGroupFieldTrial(variations::HashName(trial_name), |
| group_name_hashes); |
| return true; |
| } |
| |
| // static |
| bool MetricsServiceAccessor::RegisterSyntheticFieldTrialWithNameHash( |
| MetricsService* metrics_service, |
| uint32_t trial_name_hash, |
| base::StringPiece group_name) { |
| return RegisterSyntheticFieldTrialWithNameAndGroupHash( |
| metrics_service, trial_name_hash, variations::HashName(group_name)); |
| } |
| |
| // static |
| bool MetricsServiceAccessor::RegisterSyntheticFieldTrialWithNameAndGroupHash( |
| MetricsService* metrics_service, |
| uint32_t trial_name_hash, |
| uint32_t group_name_hash) { |
| if (!metrics_service) |
| return false; |
| |
| variations::SyntheticTrialGroup trial_group(trial_name_hash, group_name_hash); |
| metrics_service->synthetic_trial_registry()->RegisterSyntheticFieldTrial( |
| trial_group); |
| return true; |
| } |
| |
| // static |
| void MetricsServiceAccessor::SetForceIsMetricsReportingEnabledPrefLookup( |
| bool value) { |
| g_force_official_enabled_test = value; |
| } |
| |
| } // namespace metrics |