Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / metrics / chrome_metrics_service_accessor.h
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
16 class ChromeExtensionDownloaderFactory;
17 class PrefService;
18 class Profile;
19
20 namespace {
21 class CrashesDOMHandler;
22 class FlashDOMHandler;
23 }
24
25 namespace component_updater {
26 class ComponentUpdateService;
27 void RegisterSwReporterComponent(ComponentUpdateService* cus,
28                                  PrefService* prefs);
29 }
30
31 namespace extensions {
32 class MetricsPrivateGetIsCrashReportingEnabledFunction;
33 }
34
35 namespace prerender {
36 bool IsOmniboxEnabled(Profile* profile);
37 }
38
39 namespace system_logs {
40 class ChromeInternalLogSource;
41 }
42
43 namespace options {
44 class 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.
50 class 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_