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_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