OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/policy/policy_statistics_collector.h" | 5 #include "chrome/browser/policy/policy_statistics_collector.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" |
11 #include "base/location.h" | 12 #include "base/location.h" |
| 13 #include "base/logging.h" |
12 #include "base/metrics/sparse_histogram.h" | 14 #include "base/metrics/sparse_histogram.h" |
13 #include "base/prefs/pref_registry_simple.h" | 15 #include "base/prefs/pref_registry_simple.h" |
14 #include "base/prefs/pref_service.h" | 16 #include "base/prefs/pref_service.h" |
15 #include "base/task_runner.h" | 17 #include "base/task_runner.h" |
16 #include "chrome/browser/policy/policy_service.h" | 18 #include "chrome/browser/policy/policy_service.h" |
17 #include "components/policy/core/common/policy_pref_names.h" | 19 #include "components/policy/core/common/policy_pref_names.h" |
18 #include "policy/policy_constants.h" | |
19 | 20 |
20 namespace policy { | 21 namespace policy { |
21 | 22 |
22 const int PolicyStatisticsCollector::kStatisticsUpdateRate = | 23 const int PolicyStatisticsCollector::kStatisticsUpdateRate = |
23 24 * 60 * 60 * 1000; // 24 hours. | 24 24 * 60 * 60 * 1000; // 24 hours. |
24 | 25 |
25 PolicyStatisticsCollector::PolicyStatisticsCollector( | 26 PolicyStatisticsCollector::PolicyStatisticsCollector( |
| 27 const GetChromePolicyDetailsCallback& get_details, |
| 28 const Schema& chrome_schema, |
26 PolicyService* policy_service, | 29 PolicyService* policy_service, |
27 PrefService* prefs, | 30 PrefService* prefs, |
28 const scoped_refptr<base::TaskRunner>& task_runner) | 31 const scoped_refptr<base::TaskRunner>& task_runner) |
29 : policy_service_(policy_service), | 32 : get_details_(get_details), |
| 33 chrome_schema_(chrome_schema), |
| 34 policy_service_(policy_service), |
30 prefs_(prefs), | 35 prefs_(prefs), |
31 task_runner_(task_runner) { | 36 task_runner_(task_runner) { |
32 } | 37 } |
33 | 38 |
34 PolicyStatisticsCollector::~PolicyStatisticsCollector() { | 39 PolicyStatisticsCollector::~PolicyStatisticsCollector() { |
35 } | 40 } |
36 | 41 |
37 void PolicyStatisticsCollector::Initialize() { | 42 void PolicyStatisticsCollector::Initialize() { |
38 using base::Time; | 43 using base::Time; |
39 using base::TimeDelta; | 44 using base::TimeDelta; |
(...skipping 11 matching lines...) Expand all Loading... |
51 // static | 56 // static |
52 void PolicyStatisticsCollector::RegisterPrefs(PrefRegistrySimple* registry) { | 57 void PolicyStatisticsCollector::RegisterPrefs(PrefRegistrySimple* registry) { |
53 registry->RegisterInt64Pref(policy_prefs::kLastPolicyStatisticsUpdate, 0); | 58 registry->RegisterInt64Pref(policy_prefs::kLastPolicyStatisticsUpdate, 0); |
54 } | 59 } |
55 | 60 |
56 void PolicyStatisticsCollector::RecordPolicyUse(int id) { | 61 void PolicyStatisticsCollector::RecordPolicyUse(int id) { |
57 UMA_HISTOGRAM_SPARSE_SLOWLY("Enterprise.Policies", id); | 62 UMA_HISTOGRAM_SPARSE_SLOWLY("Enterprise.Policies", id); |
58 } | 63 } |
59 | 64 |
60 void PolicyStatisticsCollector::CollectStatistics() { | 65 void PolicyStatisticsCollector::CollectStatistics() { |
61 const policy::PolicyDefinitionList* policy_list = | |
62 policy::GetChromePolicyDefinitionList(); | |
63 const PolicyMap& policies = policy_service_->GetPolicies( | 66 const PolicyMap& policies = policy_service_->GetPolicies( |
64 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); | 67 PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); |
65 | 68 |
66 // Collect statistics. | 69 // Collect statistics. |
67 for (const policy::PolicyDefinitionList::Entry* policy = policy_list->begin; | 70 for (Schema::Iterator it(chrome_schema_.GetPropertiesIterator()); |
68 policy != policy_list->end; ++policy) { | 71 !it.IsAtEnd(); it.Advance()) { |
69 if (policies.Get(policy->name)) | 72 if (policies.Get(it.key())) { |
70 RecordPolicyUse(policy->id); | 73 const PolicyDetails* details = get_details_.Run(it.key()); |
| 74 if (details) |
| 75 RecordPolicyUse(details->id); |
| 76 else |
| 77 NOTREACHED(); |
| 78 } |
71 } | 79 } |
72 | 80 |
73 // Take care of next update. | 81 // Take care of next update. |
74 prefs_->SetInt64(policy_prefs::kLastPolicyStatisticsUpdate, | 82 prefs_->SetInt64(policy_prefs::kLastPolicyStatisticsUpdate, |
75 base::Time::Now().ToInternalValue()); | 83 base::Time::Now().ToInternalValue()); |
76 ScheduleUpdate(base::TimeDelta::FromMilliseconds(kStatisticsUpdateRate)); | 84 ScheduleUpdate(base::TimeDelta::FromMilliseconds(kStatisticsUpdateRate)); |
77 } | 85 } |
78 | 86 |
79 void PolicyStatisticsCollector::ScheduleUpdate(base::TimeDelta delay) { | 87 void PolicyStatisticsCollector::ScheduleUpdate(base::TimeDelta delay) { |
80 update_callback_.Reset(base::Bind( | 88 update_callback_.Reset(base::Bind( |
81 &PolicyStatisticsCollector::CollectStatistics, | 89 &PolicyStatisticsCollector::CollectStatistics, |
82 base::Unretained(this))); | 90 base::Unretained(this))); |
83 task_runner_->PostDelayedTask(FROM_HERE, update_callback_.callback(), delay); | 91 task_runner_->PostDelayedTask(FROM_HERE, update_callback_.callback(), delay); |
84 } | 92 } |
85 | 93 |
86 } // namespace policy | 94 } // namespace policy |
OLD | NEW |