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