1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/metrics/chrome_metrics_service_accessor.h"
6
7#include "base/prefs/pref_service.h"
8#include "chrome/browser/browser_process.h"
9#include "chrome/common/pref_names.h"
10#include "components/metrics/metrics_service.h"
11#include "components/variations/metrics_util.h"
12
13#if defined(OS_CHROMEOS)
14#include "chrome/browser/chromeos/settings/cros_settings.h"
15#endif
16
17// static
18bool ChromeMetricsServiceAccessor::IsMetricsReportingEnabled() {
19  bool result = false;
20  const PrefService* local_state = g_browser_process->local_state();
21  if (local_state) {
22    const PrefService::Preference* uma_pref =
23        local_state->FindPreference(prefs::kMetricsReportingEnabled);
24    if (uma_pref) {
25      bool success = uma_pref->GetValue()->GetAsBoolean(&result);
26      DCHECK(success);
27    }
28  }
29  return result;
30}
31
32bool ChromeMetricsServiceAccessor::IsCrashReportingEnabled() {
33#if defined(GOOGLE_CHROME_BUILD)
34#if defined(OS_CHROMEOS)
35  bool reporting_enabled = false;
36  chromeos::CrosSettings::Get()->GetBoolean(chromeos::kStatsReportingPref,
37                                            &reporting_enabled);
38  return reporting_enabled;
39#elif defined(OS_ANDROID)
40  // Android has its own settings for metrics / crash uploading.
41  const PrefService* prefs = g_browser_process->local_state();
42  return prefs->GetBoolean(prefs::kCrashReportingEnabled);
43#else
44  return ChromeMetricsServiceAccessor::IsMetricsReportingEnabled();
45#endif
46#else
47  return false;
48#endif
49}
50
51// static
52bool ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrial(
53    const std::string& trial_name,
54    const std::string& group_name) {
55  return RegisterSyntheticFieldTrialWithNameHash(metrics::HashName(trial_name),
56                                                 group_name);
57}
58
59// static
60bool ChromeMetricsServiceAccessor::RegisterSyntheticFieldTrialWithNameHash(
61    uint32_t trial_name_hash,
62    const std::string& group_name) {
63  return MetricsServiceAccessor::RegisterSyntheticFieldTrial(
64      g_browser_process->metrics_service(),
65      trial_name_hash,
66      metrics::HashName(group_name));
67}
68