chrome_metrics_service_client.h revision f8ee788a64d60abd8f2d742a5fdedde054ecd910
15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Copyright 2014 The Chromium Authors. All rights reserved. 25d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// Use of this source code is governed by a BSD-style license that can be 35d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// found in the LICENSE file. 45d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 55d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#ifndef CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 65d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#define CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 75d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 85d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include <string> 95d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 105d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "base/basictypes.h" 115d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "base/callback.h" 125d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "base/memory/scoped_ptr.h" 135d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "base/memory/weak_ptr.h" 145d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "base/threading/thread_checker.h" 155d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "chrome/browser/metrics/network_stats_uploader.h" 165d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "chrome/browser/metrics/tracking_synchronizer_observer.h" 175d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "components/metrics/metrics_service_client.h" 185d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "content/public/browser/notification_observer.h" 195d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "content/public/browser/notification_registrar.h" 205d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 215d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass ChromeOSMetricsProvider; 225d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass GoogleUpdateMetricsProviderWin; 235d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass MetricsService; 245d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass PluginMetricsProvider; 255d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass PrefRegistrySimple; 265d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass ProfilerMetricsProvider; 275d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 285d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesnamespace base { 295d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass FilePath; 305d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} 315d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 325d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesnamespace metrics { 335d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass MetricsStateManager; 345d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} 355d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 365d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// ChromeMetricsServiceClient provides an implementation of MetricsServiceClient 375d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// that depends on chrome/. 385d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass ChromeMetricsServiceClient 395d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines : public metrics::MetricsServiceClient, 405d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines public chrome_browser_metrics::TrackingSynchronizerObserver, 415d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines public content::NotificationObserver { 425d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines public: 435d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines virtual ~ChromeMetricsServiceClient(); 445d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines // Factory function. 465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines static scoped_ptr<ChromeMetricsServiceClient> Create( 475d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines metrics::MetricsStateManager* state_manager, 485d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines PrefService* local_state); 495d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 50 // Registers local state prefs used by this class. 51 static void RegisterPrefs(PrefRegistrySimple* registry); 52 53 // metrics::MetricsServiceClient: 54 virtual void SetClientID(const std::string& client_id) OVERRIDE; 55 virtual bool IsOffTheRecordSessionActive() OVERRIDE; 56 virtual std::string GetApplicationLocale() OVERRIDE; 57 virtual bool GetBrand(std::string* brand_code) OVERRIDE; 58 virtual metrics::SystemProfileProto::Channel GetChannel() OVERRIDE; 59 virtual std::string GetVersionString() OVERRIDE; 60 virtual int64 GetInstallDate() OVERRIDE; 61 virtual void OnLogUploadComplete() OVERRIDE; 62 virtual void StartGatheringMetrics( 63 const base::Closure& done_callback) OVERRIDE; 64 virtual void CollectFinalMetrics(const base::Closure& done_callback) 65 OVERRIDE; 66 virtual scoped_ptr<metrics::MetricsLogUploader> CreateUploader( 67 const std::string& server_url, 68 const std::string& mime_type, 69 const base::Callback<void(int)>& on_upload_complete) OVERRIDE; 70 71 MetricsService* metrics_service() { return metrics_service_.get(); } 72 73 void LogPluginLoadingError(const base::FilePath& plugin_path); 74 75 private: 76 explicit ChromeMetricsServiceClient( 77 metrics::MetricsStateManager* state_manager); 78 79 // Completes the two-phase initialization of ChromeMetricsServiceClient. 80 void Initialize(); 81 82 // Callback that continues the init task by loading plugin information. 83 void OnInitTaskGotHardwareClass(); 84 85 // Called after the Plugin init task has been completed that continues the 86 // init task by launching a task to gather Google Update statistics. 87 void OnInitTaskGotPluginInfo(); 88 89 // Called after GoogleUpdate init task has been completed that continues the 90 // init task by loading profiler data. 91 void OnInitTaskGotGoogleUpdateData(); 92 93 // TrackingSynchronizerObserver: 94 virtual void ReceivedProfilerData( 95 const tracked_objects::ProcessDataSnapshot& process_data, 96 int process_type) OVERRIDE; 97 virtual void FinishedReceivingProfilerData() OVERRIDE; 98 99 // Callbacks for various stages of final log info collection. Do not call 100 // these directly. 101 void OnMemoryDetailCollectionDone(); 102 void OnHistogramSynchronizationDone(); 103 104 // Records metrics about the switches present on the command line. 105 void RecordCommandLineMetrics(); 106 107 // Registers |this| as an observer for notifications which indicate that a 108 // user is performing work. This is useful to allow some features to sleep, 109 // until the machine becomes active, such as precluding UMA uploads unless 110 // there was recent activity. 111 void RegisterForNotifications(); 112 113 // content::NotificationObserver: 114 virtual void Observe(int type, 115 const content::NotificationSource& source, 116 const content::NotificationDetails& details) OVERRIDE; 117 118#if defined(OS_WIN) 119 // Counts (and removes) the browser crash dump attempt signals left behind by 120 // any previous browser processes which generated a crash dump. 121 void CountBrowserCrashDumpAttempts(); 122#endif // OS_WIN 123 124 base::ThreadChecker thread_checker_; 125 126 // Weak pointer to the MetricsStateManager. 127 metrics::MetricsStateManager* metrics_state_manager_; 128 129 // The MetricsService that |this| is a client of. 130 scoped_ptr<MetricsService> metrics_service_; 131 132 content::NotificationRegistrar registrar_; 133 134 // On ChromeOS, holds a weak pointer to the ChromeOSMetricsProvider instance 135 // that has been registered with MetricsService. On other platforms, is NULL. 136 ChromeOSMetricsProvider* chromeos_metrics_provider_; 137 138 NetworkStatsUploader network_stats_uploader_; 139 140 // Saved callback received from CollectFinalMetrics(). 141 base::Closure collect_final_metrics_done_callback_; 142 143 // Indicates that collect final metrics step is running. 144 bool waiting_for_collect_final_metrics_step_; 145 146 // Number of async histogram fetch requests in progress. 147 int num_async_histogram_fetches_in_progress_; 148 149 // The ProfilerMetricsProvider instance that was registered with 150 // MetricsService. Has the same lifetime as |metrics_service_|. 151 ProfilerMetricsProvider* profiler_metrics_provider_; 152 153#if defined(ENABLE_PLUGINS) 154 // The PluginMetricsProvider instance that was registered with 155 // MetricsService. Has the same lifetime as |metrics_service_|. 156 PluginMetricsProvider* plugin_metrics_provider_; 157#endif 158 159#if defined(OS_WIN) 160 // The GoogleUpdateMetricsProviderWin instance that was registered with 161 // MetricsService. Has the same lifetime as |metrics_service_|. 162 GoogleUpdateMetricsProviderWin* google_update_metrics_provider_; 163#endif 164 165 // Callback that is called when initial metrics gathering is complete. 166 base::Closure finished_gathering_initial_metrics_callback_; 167 168 base::WeakPtrFactory<ChromeMetricsServiceClient> weak_ptr_factory_; 169 170 DISALLOW_COPY_AND_ASSIGN(ChromeMetricsServiceClient); 171}; 172 173#endif // CHROME_BROWSER_METRICS_CHROME_METRICS_SERVICE_CLIENT_H_ 174