// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_METRICS_METRICS_SERVICES_MANAGER_H_ #define CHROME_BROWSER_METRICS_METRICS_SERVICES_MANAGER_H_ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "base/threading/thread_checker.h" class ChromeMetricsServiceClient; class PrefService; namespace base { class FilePath; } namespace metrics { class MetricsService; class MetricsStateManager; } namespace rappor { class RapporService; } namespace chrome_variations { class VariationsService; } // MetricsServicesManager is a helper class that has ownership over the various // metrics-related services in Chrome: MetricsService (via its client), // RapporService and VariationsService. class MetricsServicesManager { public: // Creates the MetricsServicesManager with the |local_state| prefs service. explicit MetricsServicesManager(PrefService* local_state); virtual ~MetricsServicesManager(); // Returns the MetricsService, creating it if it hasn't been created yet (and // additionally creating the ChromeMetricsServiceClient in that case). metrics::MetricsService* GetMetricsService(); // Returns the GetRapporService, creating it if it hasn't been created yet. rappor::RapporService* GetRapporService(); // Returns the VariationsService, creating it if it hasn't been created yet. chrome_variations::VariationsService* GetVariationsService(); // Should be called when a plugin loading error occurs. void OnPluginLoadingError(const base::FilePath& plugin_path); private: // Returns the ChromeMetricsServiceClient, creating it if it hasn't been // created yet (and additionally creating the MetricsService in that case). ChromeMetricsServiceClient* GetChromeMetricsServiceClient(); metrics::MetricsStateManager* GetMetricsStateManager(); // Returns true iff metrics reporting is enabled. bool IsMetricsReportingEnabled() const; // Ensures that all functions are called from the same thread. base::ThreadChecker thread_checker_; // Weak pointer to the local state prefs store. PrefService* local_state_; // MetricsStateManager which is passed as a parameter to service constructors. scoped_ptr metrics_state_manager_; // Chrome embedder implementation of the MetricsServiceClient. Owns the // MetricsService. scoped_ptr metrics_service_client_; // The RapporService, for RAPPOR metric uploads. scoped_ptr rappor_service_; // The VariationsService, for server-side experiments infrastructure. scoped_ptr variations_service_; DISALLOW_COPY_AND_ASSIGN(MetricsServicesManager); }; #endif // CHROME_BROWSER_METRICS_METRICS_SERVICES_MANAGER_H_