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

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: Fix win build, 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/cros_library.h" 13 #include "chrome/browser/chromeos/cros/cros_library.h"
13 #include "chrome/browser/chromeos/cros/update_library.h" 14 #include "chrome/browser/chromeos/cros/update_library.h"
14 #include "chrome/browser/chromeos/cros_settings_names.h" 15 #include "chrome/browser/chromeos/cros_settings_names.h"
15 #include "chrome/browser/chromeos/login/ownership_service.h" 16 #include "chrome/browser/chromeos/login/ownership_service.h"
16 #include "chrome/browser/chromeos/user_cros_settings_provider.h" 17 #include "chrome/browser/chromeos/user_cros_settings_provider.h"
17 #include "chrome/browser/policy/configuration_policy_pref_store.h" 18 #include "chrome/browser/policy/configuration_policy_pref_store.h"
18 #include "chrome/browser/policy/device_policy_identity_strategy.h" 19 #include "chrome/browser/policy/device_policy_identity_strategy.h"
19 #include "chrome/browser/policy/enterprise_install_attributes.h" 20 #include "chrome/browser/policy/enterprise_install_attributes.h"
21 #include "chrome/browser/policy/enterprise_metrics.h"
20 #include "chrome/browser/policy/policy_map.h" 22 #include "chrome/browser/policy/policy_map.h"
21 #include "chrome/browser/policy/proto/device_management_backend.pb.h" 23 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
22 #include "chrome/browser/policy/proto/device_management_constants.h" 24 #include "chrome/browser/policy/proto/device_management_constants.h"
23 #include "chrome/browser/policy/proto/device_management_local.pb.h" 25 #include "chrome/browser/policy/proto/device_management_local.pb.h"
24 #include "content/browser/browser_thread.h" 26 #include "content/browser/browser_thread.h"
25 #include "policy/configuration_policy_type.h" 27 #include "policy/configuration_policy_type.h"
26 28
27 namespace { 29 namespace {
28 30
29 // Stores policy, updates the owner key if required and reports the status 31 // Stores policy, updates the owner key if required and reports the status
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
139 signed_settings_helper_->StartRetrievePolicyOp(this); 141 signed_settings_helper_->StartRetrievePolicyOp(this);
140 } 142 }
141 143
142 void DevicePolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) { 144 void DevicePolicyCache::SetPolicy(const em::PolicyFetchResponse& policy) {
143 DCHECK(!starting_up_); 145 DCHECK(!starting_up_);
144 146
145 // Make sure we have an enterprise device. 147 // Make sure we have an enterprise device.
146 std::string registration_user(install_attributes_->GetRegistrationUser()); 148 std::string registration_user(install_attributes_->GetRegistrationUser());
147 if (registration_user.empty()) { 149 if (registration_user.empty()) {
148 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);
149 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 154 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
150 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 155 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
151 return; 156 return;
152 } 157 }
153 158
154 // 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.
155 em::PolicyData policy_data; 160 em::PolicyData policy_data;
156 if (!policy_data.ParseFromString(policy.policy_data())) { 161 if (!policy_data.ParseFromString(policy.policy_data())) {
157 LOG(WARNING) << "Invalid policy protobuf"; 162 LOG(WARNING) << "Invalid policy protobuf";
163 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchInvalidPolicy,
164 kMetricPolicySize);
158 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 165 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
159 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 166 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
160 return; 167 return;
161 } 168 }
162 169
163 if (registration_user != policy_data.username()) { 170 if (registration_user != policy_data.username()) {
164 LOG(WARNING) << "Refusing policy blob for " << policy_data.username() 171 LOG(WARNING) << "Refusing policy blob for " << policy_data.username()
165 << " which doesn't match " << registration_user; 172 << " which doesn't match " << registration_user;
173 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchUserMismatch,
174 kMetricPolicySize);
166 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 175 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
167 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 176 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
168 return; 177 return;
169 } 178 }
170 179
171 set_last_policy_refresh_time(base::Time::NowFromSystemTime()); 180 set_last_policy_refresh_time(base::Time::NowFromSystemTime());
172 181
173 // Start a store operation. 182 // Start a store operation.
174 new StorePolicyOperation(signed_settings_helper_, 183 new StorePolicyOperation(signed_settings_helper_,
175 policy, 184 policy,
(...skipping 19 matching lines...) Expand all
195 if (code == chromeos::SignedSettings::NOT_FOUND || 204 if (code == chromeos::SignedSettings::NOT_FOUND ||
196 code == chromeos::SignedSettings::KEY_UNAVAILABLE || 205 code == chromeos::SignedSettings::KEY_UNAVAILABLE ||
197 !policy.has_policy_data()) { 206 !policy.has_policy_data()) {
198 InformNotifier(CloudPolicySubsystem::UNENROLLED, 207 InformNotifier(CloudPolicySubsystem::UNENROLLED,
199 CloudPolicySubsystem::NO_DETAILS); 208 CloudPolicySubsystem::NO_DETAILS);
200 return; 209 return;
201 } 210 }
202 em::PolicyData policy_data; 211 em::PolicyData policy_data;
203 if (!policy_data.ParseFromString(policy.policy_data())) { 212 if (!policy_data.ParseFromString(policy.policy_data())) {
204 LOG(WARNING) << "Failed to parse PolicyData protobuf."; 213 LOG(WARNING) << "Failed to parse PolicyData protobuf.";
214 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadFailed,
215 kMetricPolicySize);
205 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 216 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
206 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 217 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
207 return; 218 return;
208 } 219 }
209 if (!policy_data.has_request_token() || 220 if (!policy_data.has_request_token() ||
210 policy_data.request_token().empty()) { 221 policy_data.request_token().empty()) {
211 SetUnmanagedInternal(base::Time::NowFromSystemTime()); 222 SetUnmanagedInternal(base::Time::NowFromSystemTime());
212 InformNotifier(CloudPolicySubsystem::UNMANAGED, 223 InformNotifier(CloudPolicySubsystem::UNMANAGED,
213 CloudPolicySubsystem::NO_DETAILS); 224 CloudPolicySubsystem::NO_DETAILS);
214 // TODO(jkummerow): Reminder: When we want to feed device-wide settings 225 // TODO(jkummerow): Reminder: When we want to feed device-wide settings
215 // made by a local owner into this cache, we need to call 226 // made by a local owner into this cache, we need to call
216 // SetPolicyInternal() here. 227 // SetPolicyInternal() here.
217 return; 228 return;
218 } 229 }
219 if (!policy_data.has_username() || !policy_data.has_device_id()) { 230 if (!policy_data.has_username() || !policy_data.has_device_id()) {
231 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadFailed,
232 kMetricPolicySize);
220 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 233 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
221 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 234 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
222 return; 235 return;
223 } 236 }
237 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyLoadSucceeded,
238 kMetricPolicySize);
224 identity_strategy_->SetDeviceManagementCredentials( 239 identity_strategy_->SetDeviceManagementCredentials(
225 policy_data.username(), 240 policy_data.username(),
226 policy_data.device_id(), 241 policy_data.device_id(),
227 policy_data.request_token()); 242 policy_data.request_token());
228 SetPolicyInternal(policy, NULL, false); 243 SetPolicyInternal(policy, NULL, false);
229 } else { // In other words, starting_up_ == false. 244 } else { // In other words, starting_up_ == false.
230 if (code != chromeos::SignedSettings::SUCCESS) { 245 if (code != chromeos::SignedSettings::SUCCESS) {
231 if (code == chromeos::SignedSettings::BAD_SIGNATURE) { 246 if (code == chromeos::SignedSettings::BAD_SIGNATURE) {
247 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchBadSignature,
248 kMetricPolicySize);
232 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 249 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
233 CloudPolicySubsystem::SIGNATURE_MISMATCH); 250 CloudPolicySubsystem::SIGNATURE_MISMATCH);
234 } else { 251 } else {
252 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOtherFailed,
253 kMetricPolicySize);
235 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 254 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
236 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 255 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
237 } 256 }
238 return; 257 return;
239 } 258 }
240 SetPolicyInternal(policy, NULL, false); 259 bool ok = SetPolicyInternal(policy, NULL, false);
260 if (ok) {
261 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOK,
262 kMetricPolicySize);
263 }
241 } 264 }
242 } 265 }
243 266
244 bool DevicePolicyCache::DecodePolicyData(const em::PolicyData& policy_data, 267 bool DevicePolicyCache::DecodePolicyData(const em::PolicyData& policy_data,
245 PolicyMap* mandatory, 268 PolicyMap* mandatory,
246 PolicyMap* recommended) { 269 PolicyMap* recommended) {
247 em::ChromeDeviceSettingsProto policy; 270 em::ChromeDeviceSettingsProto policy;
248 if (!policy.ParseFromString(policy_data.policy_value())) { 271 if (!policy.ParseFromString(policy_data.policy_value())) {
249 LOG(WARNING) << "Failed to parse ChromeDeviceSettingsProto."; 272 LOG(WARNING) << "Failed to parse ChromeDeviceSettingsProto.";
250 return false; 273 return false;
251 } 274 }
252 DecodeDevicePolicy(policy, mandatory, recommended); 275 DecodeDevicePolicy(policy, mandatory, recommended);
253 return true; 276 return true;
254 } 277 }
255 278
256 void DevicePolicyCache::PolicyStoreOpCompleted( 279 void DevicePolicyCache::PolicyStoreOpCompleted(
257 chromeos::SignedSettings::ReturnCode code) { 280 chromeos::SignedSettings::ReturnCode code) {
258 DCHECK(CalledOnValidThread()); 281 DCHECK(CalledOnValidThread());
259 if (code != chromeos::SignedSettings::SUCCESS) { 282 if (code != chromeos::SignedSettings::SUCCESS) {
283 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyStoreFailed,
284 kMetricPolicySize);
260 if (code == chromeos::SignedSettings::BAD_SIGNATURE) { 285 if (code == chromeos::SignedSettings::BAD_SIGNATURE) {
286 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchBadSignature,
287 kMetricPolicySize);
261 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 288 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
262 CloudPolicySubsystem::SIGNATURE_MISMATCH); 289 CloudPolicySubsystem::SIGNATURE_MISMATCH);
263 } else { 290 } else {
291 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyFetchOtherFailed,
292 kMetricPolicySize);
264 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR, 293 InformNotifier(CloudPolicySubsystem::LOCAL_ERROR,
265 CloudPolicySubsystem::POLICY_LOCAL_ERROR); 294 CloudPolicySubsystem::POLICY_LOCAL_ERROR);
266 } 295 }
267 return; 296 return;
268 } 297 }
298 UMA_HISTOGRAM_ENUMERATION(kMetricPolicy, kMetricPolicyStoreSucceeded,
299 kMetricPolicySize);
269 signed_settings_helper_->StartRetrievePolicyOp(this); 300 signed_settings_helper_->StartRetrievePolicyOp(this);
270 } 301 }
271 302
272 // static 303 // static
273 void DevicePolicyCache::DecodeDevicePolicy( 304 void DevicePolicyCache::DecodeDevicePolicy(
274 const em::ChromeDeviceSettingsProto& policy, 305 const em::ChromeDeviceSettingsProto& policy,
275 PolicyMap* mandatory, 306 PolicyMap* mandatory,
276 PolicyMap* recommended) { 307 PolicyMap* recommended) {
277 if (policy.has_device_policy_refresh_rate()) { 308 if (policy.has_device_policy_refresh_rate()) {
278 const em::DevicePolicyRefreshRateProto container = 309 const em::DevicePolicyRefreshRateProto container =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 std::string channel = policy.release_channel().release_channel(); 341 std::string channel = policy.release_channel().release_channel();
311 mandatory->Set( 342 mandatory->Set(
312 kPolicyChromeOsReleaseChannel, Value::CreateStringValue(channel)); 343 kPolicyChromeOsReleaseChannel, Value::CreateStringValue(channel));
313 // TODO: We should probably set the release track somewhere else, but this 344 // TODO: We should probably set the release track somewhere else, but this
314 // policy is a work-in-progress (http://crosbug.com/15382). 345 // policy is a work-in-progress (http://crosbug.com/15382).
315 chromeos::CrosLibrary::Get()->GetUpdateLibrary()->SetReleaseTrack(channel); 346 chromeos::CrosLibrary::Get()->GetUpdateLibrary()->SetReleaseTrack(channel);
316 } 347 }
317 } 348 }
318 349
319 } // namespace policy 350 } // namespace policy
OLDNEW
« no previous file with comments | « chrome/browser/policy/device_management_backend_impl.cc ('k') | chrome/browser/policy/device_token_fetcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698