Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(500)

Side by Side Diff: chrome/browser/policy/device_policy_cache.cc

Issue 7105018: UMA metrics for cloud policies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments, rebased Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/device_policy_cache.h" 5 #include "chrome/browser/policy/device_policy_cache.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram.h"
10 #include "base/task.h" 11 #include "base/task.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "chrome/browser/chromeos/cros_settings_names.h" 13 #include "chrome/browser/chromeos/cros_settings_names.h"
13 #include "chrome/browser/chromeos/login/ownership_service.h" 14 #include "chrome/browser/chromeos/login/ownership_service.h"
14 #include "chrome/browser/chromeos/user_cros_settings_provider.h" 15 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
15 #include "chrome/browser/policy/configuration_policy_pref_store.h" 16 #include "chrome/browser/policy/configuration_policy_pref_store.h"
16 #include "chrome/browser/policy/device_policy_identity_strategy.h" 17 #include "chrome/browser/policy/device_policy_identity_strategy.h"
17 #include "chrome/browser/policy/enterprise_install_attributes.h" 18 #include "chrome/browser/policy/enterprise_install_attributes.h"
19 #include "chrome/browser/policy/enterprise_metrics.h"
18 #include "chrome/browser/policy/policy_map.h" 20 #include "chrome/browser/policy/policy_map.h"
19 #include "chrome/browser/policy/proto/device_management_backend.pb.h" 21 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
20 #include "chrome/browser/policy/proto/device_management_constants.h" 22 #include "chrome/browser/policy/proto/device_management_constants.h"
21 #include "chrome/browser/policy/proto/device_management_local.pb.h" 23 #include "chrome/browser/policy/proto/device_management_local.pb.h"
22 #include "content/browser/browser_thread.h" 24 #include "content/browser/browser_thread.h"
23 #include "policy/configuration_policy_type.h" 25 #include "policy/configuration_policy_type.h"
24 26
25 namespace { 27 namespace {
26 28
27 // Stores policy, updates the owner key if required and reports the status 29 // Stores policy, updates the owner key if required and reports the status
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 signed_settings_helper_(signed_settings_helper), 129 signed_settings_helper_(signed_settings_helper),
128 starting_up_(true), 130 starting_up_(true),
129 ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)) { 131 ALLOW_THIS_IN_INITIALIZER_LIST(callback_factory_(this)) {
130 } 132 }
131 133
132 DevicePolicyCache::~DevicePolicyCache() { 134 DevicePolicyCache::~DevicePolicyCache() {
133 signed_settings_helper_->CancelCallback(this); 135 signed_settings_helper_->CancelCallback(this);
134 } 136 }
135 137
136 void DevicePolicyCache::Load() { 138 void DevicePolicyCache::Load() {
139 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadRequested,
140 kMetricPolicySize);
137 signed_settings_helper_->StartRetrievePolicyOp(this); 141 signed_settings_helper_->StartRetrievePolicyOp(this);
138 } 142 }
139 143
140 void DevicePolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) { 144 void DevicePolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) {
141 DCHECK(!starting_up_); 145 DCHECK(!starting_up_);
142 146
143 // Make sure we have an enterprise device. 147 // Make sure we have an enterprise device.
144 std::string registration_user(install_attributes_->GetRegistrationUser()); 148 std::string registration_user(install_attributes_->GetRegistrationUser());
145 if (registration_user.empty()) { 149 if (registration_user.empty()) {
146 LOG(WARNING) << "Refusing to accept policy on non-enterprise device."; 150 LOG(WARNING) << "Refusing to accept policy on non-enterprise device.";
151 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy,
152 kMetricPolicyFetchNonEnterpriseDevice,
153 kMetricPolicySize);
147 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 154 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
148 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 155 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
149 return; 156 return;
150 } 157 }
151 158
152 // Check the user this policy is for against the device-locked name. 159 // Check the user this policy is for against the device-locked name.
153 em::PolicyData policy_data; 160 em::PolicyData policy_data;
154 if (!policy_data.ParseFromString(policy.policy_data())) { 161 if (!policy_data.ParseFromString(policy.policy_data())) {
155 LOG(WARNING) << "Invalid policy protobuf"; 162 LOG(WARNING) << "Invalid policy protobuf";
163 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchInvalidPolicy,
164 kMetricPolicySize);
156 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 165 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
157 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 166 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
158 return; 167 return;
159 } 168 }
160 169
161 if (registration_user != policy_data.username()) { 170 if (registration_user != policy_data.username()) {
162 LOG(WARNING) << "Refusing policy blob for " << policy_data.username() 171 LOG(WARNING) << "Refusing policy blob for " << policy_data.username()
163 << " which doesn't match " << registration_user; 172 << " which doesn't match " << registration_user;
173 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchUserMismatch,
174 kMetricPolicySize);
164 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 175 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
165 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 176 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
166 return; 177 return;
167 } 178 }
168 179
169 set_last_policy_refresh_time(base::Time::NowFromSystemTime()); 180 set_last_policy_refresh_time(base::Time::NowFromSystemTime());
170 181
171 // Start a store operation. 182 // Start a store operation.
183 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyStoreRequested,
184 kMetricPolicySize);
172 new StorePolicyOperation(signed_settings_helper_, 185 new StorePolicyOperation(signed_settings_helper_,
173 policy, 186 policy,
174 callback_factory_.NewCallback( 187 callback_factory_.NewCallback(
175 &DevicePolicyCache::PolicyStoreOpCompleted)); 188 &DevicePolicyCache::PolicyStoreOpCompleted));
176 } 189 }
177 190
178 void DevicePolicyCache::SetUnmanaged() { 191 void DevicePolicyCache::SetUnmanaged() {
179 LOG(WARNING) << "Tried to set DevicePolicyCache to 'unmanaged'!"; 192 LOG(WARNING) << "Tried to set DevicePolicyCache to 'unmanaged'!";
180 // This is not supported for DevicePolicyCache. 193 // This is not supported for DevicePolicyCache.
181 } 194 }
(...skipping 11 matching lines...) Expand all
193 if (code == chromeos::SignedSettings::NOT_FOUND || 206 if (code == chromeos::SignedSettings::NOT_FOUND ||
194 code == chromeos::SignedSettings::KEY_UNAVAILABLE || 207 code == chromeos::SignedSettings::KEY_UNAVAILABLE ||
195 !policy.has_policy_data()) { 208 !policy.has_policy_data()) {
196 InformNotifier(CloudPolicySubsystem::UNENROLLED, 209 InformNotifier(CloudPolicySubsystem::UNENROLLED,
197 CloudPolicySubsystem::NO_DETAILS); 210 CloudPolicySubsystem::NO_DETAILS);
198 return; 211 return;
199 } 212 }
200 em::PolicyData policy_data; 213 em::PolicyData policy_data;
201 if (!policy_data.ParseFromString(policy.policy_data())) { 214 if (!policy_data.ParseFromString(policy.policy_data())) {
202 LOG(WARNING) << "Failed to parse PolicyData protobuf."; 215 LOG(WARNING) << "Failed to parse PolicyData protobuf.";
216 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadFailed,
217 kMetricPolicySize);
203 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 218 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
204 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 219 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
205 return; 220 return;
206 } 221 }
207 if (!policy_data.has_request_token() || 222 if (!policy_data.has_request_token() ||
208 policy_data.request_token().empty()) { 223 policy_data.request_token().empty()) {
209 SetUnmanagedInternal(base::Time::NowFromSystemTime()); 224 SetUnmanagedInternal(base::Time::NowFromSystemTime());
210 InformNotifier(CloudPolicySubsystem::UNMANAGED, 225 InformNotifier(CloudPolicySubsystem::UNMANAGED,
211 CloudPolicySubsystem::NO_DETAILS); 226 CloudPolicySubsystem::NO_DETAILS);
212 // TODO(jkummerow): Reminder: When we want to feed device-wide settings 227 // TODO(jkummerow): Reminder: When we want to feed device-wide settings
213 // made by a local owner into this cache, we need to call 228 // made by a local owner into this cache, we need to call
214 // SetPolicyInternal() here. 229 // SetPolicyInternal() here.
215 return; 230 return;
216 } 231 }
217 if (!policy_data.has_username() || !policy_data.has_device_id()) { 232 if (!policy_data.has_username() || !policy_data.has_device_id()) {
233 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadFailed,
234 kMetricPolicySize);
218 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 235 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
219 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 236 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
220 return; 237 return;
221 } 238 }
222 identity_strategy_->SetDeviceManagementCredentials( 239 identity_strategy_->SetDeviceManagementCredentials(
223 policy_data.username(), 240 policy_data.username(),
224 policy_data.device_id(), 241 policy_data.device_id(),
225 policy_data.request_token()); 242 policy_data.request_token());
226 SetPolicyInternal(policy, NULL, false); 243 SetPolicyInternal(policy, NULL, false);
227 } else { // In other words, starting_up_ == false. 244 } else { // In other words, starting_up_ == false.
228 if (code != chromeos::SignedSettings::SUCCESS) { 245 if (code != chromeos::SignedSettings::SUCCESS) {
229 if (code == chromeos::SignedSettings::BAD_SIGNATURE) { 246 if (code == chromeos::SignedSettings::BAD_SIGNATURE) {
247 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchBadSignature,
248 kMetricPolicySize);
230 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 249 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
231 CloudPolicySubsystem::SIGNATURE_MISMATCH); 250 CloudPolicySubsystem::SIGNATURE_MISMATCH);
232 } else { 251 } else {
252 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOtherFailed,
253 kMetricPolicySize);
233 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 254 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
234 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 255 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
235 } 256 }
236 return; 257 return;
237 } 258 }
238 SetPolicyInternal(policy, NULL, false); 259 bool ok = SetPolicyInternal(policy, NULL, false);
260 if (ok) {
261 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOK,
262 kMetricPolicySize);
263 }
239 } 264 }
240 } 265 }
241 266
242 bool DevicePolicyCache::DecodePolicyData(const em::PolicyData& policy_data, 267 bool DevicePolicyCache::DecodePolicyData(const em::PolicyData& policy_data,
243 PolicyMap* mandatory, 268 PolicyMap* mandatory,
244 PolicyMap* recommended) { 269 PolicyMap* recommended) {
245 em::ChromeDeviceSettingsProto policy; 270 em::ChromeDeviceSettingsProto policy;
246 if (!policy.ParseFromString(policy_data.policy_value())) { 271 if (!policy.ParseFromString(policy_data.policy_value())) {
247 LOG(WARNING) << "Failed to parse ChromeDeviceSettingsProto."; 272 LOG(WARNING) << "Failed to parse ChromeDeviceSettingsProto.";
248 return false; 273 return false;
249 } 274 }
250 DecodeDevicePolicy(policy, mandatory, recommended); 275 DecodeDevicePolicy(policy, mandatory, recommended);
251 return true; 276 return true;
252 } 277 }
253 278
254 void DevicePolicyCache::PolicyStoreOpCompleted( 279 void DevicePolicyCache::PolicyStoreOpCompleted(
255 chromeos::SignedSettings::ReturnCode code) { 280 chromeos::SignedSettings::ReturnCode code) {
256 DCHECK(CalledOnValidThread()); 281 DCHECK(CalledOnValidThread());
257 if (code != chromeos::SignedSettings::SUCCESS) { 282 if (code != chromeos::SignedSettings::SUCCESS) {
283 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyStoreFailed,
284 kMetricPolicySize);
258 if (code == chromeos::SignedSettings::BAD_SIGNATURE) { 285 if (code == chromeos::SignedSettings::BAD_SIGNATURE) {
286 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchBadSignature,
287 kMetricPolicySize);
259 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 288 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
260 CloudPolicySubsystem::SIGNATURE_MISMATCH); 289 CloudPolicySubsystem::SIGNATURE_MISMATCH);
261 } else { 290 } else {
291 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOtherFailed,
292 kMetricPolicySize);
262 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 293 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
263 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 294 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
264 } 295 }
265 return; 296 return;
266 } 297 }
267 signed_settings_helper_->StartRetrievePolicyOp(this); 298 signed_settings_helper_->StartRetrievePolicyOp(this);
268 } 299 }
269 300
270 // static 301 // static
271 void DevicePolicyCache::DecodeDevicePolicy( 302 void DevicePolicyCache::DecodeDevicePolicy(
(...skipping 26 matching lines...) Expand all
298 Value::CreateStringValue(container.proxy_pac_url())); 329 Value::CreateStringValue(container.proxy_pac_url()));
299 } 330 }
300 if (container.has_proxy_bypass_list()) { 331 if (container.has_proxy_bypass_list()) {
301 recommended->Set(kPolicyProxyBypassList, 332 recommended->Set(kPolicyProxyBypassList,
302 Value::CreateStringValue(container.proxy_bypass_list())); 333 Value::CreateStringValue(container.proxy_bypass_list()));
303 } 334 }
304 } 335 }
305 } 336 }
306 337
307 } // namespace policy 338 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698