1// Copyright (c) 2012 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 COMPONENTS_POLICY_CORE_COMMON_POLICY_STATISTICS_COLLECTOR_H_ 6#define COMPONENTS_POLICY_CORE_COMMON_POLICY_STATISTICS_COLLECTOR_H_ 7 8#include "base/basictypes.h" 9#include "base/cancelable_callback.h" 10#include "base/memory/ref_counted.h" 11#include "base/time/time.h" 12#include "components/policy/core/common/policy_details.h" 13#include "components/policy/core/common/schema.h" 14#include "components/policy/policy_export.h" 15 16class PrefService; 17class PrefRegistrySimple; 18 19namespace base { 20class TaskRunner; 21} 22 23namespace policy { 24 25class PolicyService; 26 27// Manages regular updates of policy usage UMA histograms. 28class POLICY_EXPORT PolicyStatisticsCollector { 29 public: 30 // Policy usage statistics update rate, in milliseconds. 31 static const int kStatisticsUpdateRate; 32 33 // Neither |policy_service| nor |prefs| can be NULL and must stay valid 34 // throughout the lifetime of PolicyStatisticsCollector. 35 PolicyStatisticsCollector(const GetChromePolicyDetailsCallback& get_details, 36 const Schema& chrome_schema, 37 PolicyService* policy_service, 38 PrefService* prefs, 39 const scoped_refptr<base::TaskRunner>& task_runner); 40 virtual ~PolicyStatisticsCollector(); 41 42 // Completes initialization and starts periodical statistic updates. 43 void Initialize(); 44 45 static void RegisterPrefs(PrefRegistrySimple* registry); 46 47 protected: 48 // protected virtual for mocking. 49 virtual void RecordPolicyUse(int id); 50 51 private: 52 void CollectStatistics(); 53 void ScheduleUpdate(base::TimeDelta delay); 54 55 GetChromePolicyDetailsCallback get_details_; 56 Schema chrome_schema_; 57 PolicyService* policy_service_; 58 PrefService* prefs_; 59 60 base::CancelableClosure update_callback_; 61 62 const scoped_refptr<base::TaskRunner> task_runner_; 63 64 DISALLOW_COPY_AND_ASSIGN(PolicyStatisticsCollector); 65}; 66 67} // namespace policy 68 69#endif // COMPONENTS_POLICY_CORE_COMMON_POLICY_STATISTICS_COLLECTOR_H_ 70