Home | History | Annotate | Download | only in metrics
      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_
    104