Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / metrics / metrics_services_manager.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_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_