• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_METRICS_SERVICES_MANAGER_H_
6 #define CHROME_BROWSER_METRICS_METRICS_SERVICES_MANAGER_H_
7 
8 #include "base/basictypes.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/threading/thread_checker.h"
11 
12 class ChromeMetricsServiceClient;
13 class PrefService;
14 
15 namespace base {
16 class FilePath;
17 }
18 
19 namespace metrics {
20 class MetricsService;
21 class MetricsStateManager;
22 }
23 
24 namespace rappor {
25 class RapporService;
26 }
27 
28 namespace chrome_variations {
29 class VariationsService;
30 }
31 
32 // MetricsServicesManager is a helper class that has ownership over the various
33 // metrics-related services in Chrome: MetricsService (via its client),
34 // RapporService and VariationsService.
35 class MetricsServicesManager {
36  public:
37   // Creates the MetricsServicesManager with the |local_state| prefs service.
38   explicit MetricsServicesManager(PrefService* local_state);
39   virtual ~MetricsServicesManager();
40 
41   // Returns the MetricsService, creating it if it hasn't been created yet (and
42   // additionally creating the ChromeMetricsServiceClient in that case).
43   metrics::MetricsService* GetMetricsService();
44 
45   // Returns the GetRapporService, creating it if it hasn't been created yet.
46   rappor::RapporService* GetRapporService();
47 
48   // Returns the VariationsService, creating it if it hasn't been created yet.
49   chrome_variations::VariationsService* GetVariationsService();
50 
51   // Should be called when a plugin loading error occurs.
52   void OnPluginLoadingError(const base::FilePath& plugin_path);
53 
54  private:
55   // Returns the ChromeMetricsServiceClient, creating it if it hasn't been
56   // created yet (and additionally creating the MetricsService in that case).
57   ChromeMetricsServiceClient* GetChromeMetricsServiceClient();
58 
59   metrics::MetricsStateManager* GetMetricsStateManager();
60 
61   // Returns true iff metrics reporting is enabled.
62   bool IsMetricsReportingEnabled() const;
63 
64   // Ensures that all functions are called from the same thread.
65   base::ThreadChecker thread_checker_;
66 
67   // Weak pointer to the local state prefs store.
68   PrefService* local_state_;
69 
70   // MetricsStateManager which is passed as a parameter to service constructors.
71   scoped_ptr<metrics::MetricsStateManager> metrics_state_manager_;
72 
73   // Chrome embedder implementation of the MetricsServiceClient. Owns the
74   // MetricsService.
75   scoped_ptr<ChromeMetricsServiceClient> metrics_service_client_;
76 
77   // The RapporService, for RAPPOR metric uploads.
78   scoped_ptr<rappor::RapporService> rappor_service_;
79 
80   // The VariationsService, for server-side experiments infrastructure.
81   scoped_ptr<chrome_variations::VariationsService> variations_service_;
82 
83   DISALLOW_COPY_AND_ASSIGN(MetricsServicesManager);
84 };
85 
86 #endif  // CHROME_BROWSER_METRICS_METRICS_SERVICES_MANAGER_H_
87