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#ifndef CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_ACCESSOR_H_
6#define CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_ACCESSOR_H_
7
8#include <stdint.h>
9#include <string>
10
11#include "base/gtest_prod_util.h"
12#include "base/macros.h"
13#include "chrome/browser/metrics/metrics_reporting_state.h"
14#include "chrome/browser/metrics/metrics_service_accessor.h"
15
16class ChromeExtensionDownloaderFactory;
17class PrefService;
18class Profile;
19
20namespace {
21class CrashesDOMHandler;
22class FlashDOMHandler;
23}
24
25namespace component_updater {
26class ComponentUpdateService;
27void RegisterSwReporterComponent(ComponentUpdateService* cus,
28                                 PrefService* prefs);
29}
30
31namespace extensions {
32class MetricsPrivateGetIsCrashReportingEnabledFunction;
33}
34
35namespace prerender {
36bool IsOmniboxEnabled(Profile* profile);
37}
38
39namespace system_logs {
40class ChromeInternalLogSource;
41}
42
43namespace options {
44class BrowserOptionsHandler;
45}
46
47// This class limits and documents access to metrics service helper methods.
48// Since these methods are private, each user has to be explicitly declared
49// as a 'friend' below.
50class ChromeMetricsServiceAccessor : public MetricsServiceAccessor {
51 private:
52  friend void component_updater::RegisterSwReporterComponent(
53      component_updater::ComponentUpdateService* cus,
54      PrefService* prefs);
55  friend bool prerender::IsOmniboxEnabled(Profile* profile);
56  friend class ChromeExtensionDownloaderFactory;
57  friend class ChromeRenderMessageFilter;
58  friend class ::CrashesDOMHandler;
59  friend class DataReductionProxyChromeSettings;
60  friend class extensions::MetricsPrivateGetIsCrashReportingEnabledFunction;
61  friend class ::FlashDOMHandler;
62  friend class system_logs::ChromeInternalLogSource;
63  friend class UmaSessionStats;
64  friend class options::BrowserOptionsHandler;
65  friend void InitiateMetricsReportingChange(
66      bool, const OnMetricsReportingCallbackType&);
67
68  FRIEND_TEST_ALL_PREFIXES(ChromeMetricsServiceAccessorTest,
69                           MetricsReportingEnabled);
70  FRIEND_TEST_ALL_PREFIXES(ChromeMetricsServiceAccessorTest,
71                           CrashReportingEnabled);
72
73  // Returns true if prefs::kMetricsReportingEnabled is set.
74  // TODO(asvitkine): Consolidate the method in MetricsStateManager.
75  // TODO(asvitkine): This function does not report the correct value on
76  // Android and ChromeOS, see http://crbug.com/362192.
77  static bool IsMetricsReportingEnabled();
78
79  // Returns true if crash reporting is enabled.  This is set at the platform
80  // level for Android and ChromeOS, and otherwise is the same as
81  // IsMetricsReportingEnabled for desktop Chrome.
82  static bool IsCrashReportingEnabled();
83
84  // Registers a field trial name and group to be used to annotate a UMA report
85  // with a particular Chrome configuration state. A UMA report will be
86  // annotated with this trial group if and only if all events in the report
87  // were created after the trial is registered. Only one group name may be
88  // registered at a time for a given trial name. Only the last group name that
89  // is registered for a given trial name will be recorded. The values passed
90  // in must not correspond to any real field trial in the code.
91  static bool RegisterSyntheticFieldTrial(const std::string& trial_name,
92                                          const std::string& group_name);
93
94  // Same as RegisterSyntheticFieldTrial above, but takes a hash for the trial
95  // name, rather than computing it from the string.
96  static bool RegisterSyntheticFieldTrialWithNameHash(
97      uint32_t trial_name_hash,
98      const std::string& group_name);
99
100  DISALLOW_IMPLICIT_CONSTRUCTORS(ChromeMetricsServiceAccessor);
101};
102
103#endif  // CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_ACCESSOR_H_
104