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

Side by Side Diff: chrome/browser/permissions/permission_uma_util.cc

Issue 2250993002: Add prior dismissal and ignore count metrics for all permission actions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@kendra-permission-action-reporting
Patch Set: Comments Created 4 years, 4 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/permissions/permission_uma_util.h" 5 #include "chrome/browser/permissions/permission_uma_util.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h"
10 #include "base/metrics/histogram_macros.h" 11 #include "base/metrics/histogram_macros.h"
11 #include "base/strings/stringprintf.h" 12 #include "base/strings/stringprintf.h"
12 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
13 #include "chrome/browser/permissions/permission_decision_auto_blocker.h" 14 #include "chrome/browser/permissions/permission_decision_auto_blocker.h"
14 #include "chrome/browser/permissions/permission_manager.h" 15 #include "chrome/browser/permissions/permission_manager.h"
15 #include "chrome/browser/permissions/permission_request.h" 16 #include "chrome/browser/permissions/permission_request.h"
16 #include "chrome/browser/permissions/permission_util.h" 17 #include "chrome/browser/permissions/permission_util.h"
17 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
18 #include "chrome/browser/safe_browsing/safe_browsing_service.h" 19 #include "chrome/browser/safe_browsing/safe_browsing_service.h"
19 #include "chrome/browser/safe_browsing/ui_manager.h" 20 #include "chrome/browser/safe_browsing/ui_manager.h"
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 const char PermissionUmaUtil::kPermissionsPromptDeniedNoGesture[] = 219 const char PermissionUmaUtil::kPermissionsPromptDeniedNoGesture[] =
219 "Permissions.Prompt.Denied.NoGesture"; 220 "Permissions.Prompt.Denied.NoGesture";
220 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] = 221 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
221 "Permissions.Prompt.RequestsPerPrompt"; 222 "Permissions.Prompt.RequestsPerPrompt";
222 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] = 223 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] =
223 "Permissions.Prompt.MergedBubbleTypes"; 224 "Permissions.Prompt.MergedBubbleTypes";
224 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] = 225 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] =
225 "Permissions.Prompt.MergedBubbleAccepted"; 226 "Permissions.Prompt.MergedBubbleAccepted";
226 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] = 227 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] =
227 "Permissions.Prompt.MergedBubbleDenied"; 228 "Permissions.Prompt.MergedBubbleDenied";
229 const char
230 PermissionUmaUtil::kPermissionsPromptAcceptedPriorDismissCountPrefix[] =
231 "Permissions.Prompt.Accepted.PriorDismissCount.";
232 const char
233 PermissionUmaUtil::kPermissionsPromptAcceptedPriorIgnoreCountPrefix[] =
234 "Permissions.Prompt.Accepted.PriorIgnoreCount.";
235 const char
236 PermissionUmaUtil::kPermissionsPromptDeniedPriorDismissCountPrefix[] =
237 "Permissions.Prompt.Denied.PriorDismissCount.";
238 const char
239 PermissionUmaUtil::kPermissionsPromptDeniedPriorIgnoreCountPrefix[] =
240 "Permissions.Prompt.Denied.PriorIgnoreCount.";
241 const char
242 PermissionUmaUtil::kPermissionsPromptDismissedPriorDismissCountPrefix[] =
243 "Permissions.Prompt.Dismissed.PriorDismissCount.";
244 const char
245 PermissionUmaUtil::kPermissionsPromptDismissedPriorIgnoreCountPrefix[] =
246 "Permissions.Prompt.Dismissed.PriorIgnoreCount.";
247 const char
248 PermissionUmaUtil::kPermissionsPromptIgnoredPriorDismissCountPrefix[] =
249 "Permissions.Prompt.Ignored.PriorDismissCount.";
250 const char
251 PermissionUmaUtil::kPermissionsPromptIgnoredPriorIgnoreCountPrefix[] =
252 "Permissions.Prompt.Ignored.PriorIgnoreCount.";
228 253
229 // Make sure you update histograms.xml permission histogram_suffix if you 254 // Make sure you update histograms.xml permission histogram_suffix if you
230 // add new permission 255 // add new permission
231 void PermissionUmaUtil::PermissionRequested(PermissionType permission, 256 void PermissionUmaUtil::PermissionRequested(PermissionType permission,
232 const GURL& requesting_origin, 257 const GURL& requesting_origin,
233 const GURL& embedding_origin, 258 const GURL& embedding_origin,
234 Profile* profile) { 259 Profile* profile) {
235 RecordPermissionRequest(permission, requesting_origin, embedding_origin, 260 RecordPermissionRequest(permission, requesting_origin, embedding_origin,
236 profile); 261 profile);
237 } 262 }
238 263
239 void PermissionUmaUtil::PermissionGranted( 264 void PermissionUmaUtil::PermissionGranted(
240 PermissionType permission, 265 PermissionType permission,
241 PermissionRequestGestureType gesture_type, 266 PermissionRequestGestureType gesture_type,
242 const GURL& requesting_origin, 267 const GURL& requesting_origin,
243 Profile* profile) { 268 Profile* profile) {
244 RecordPermissionAction(permission, GRANTED, PermissionSourceUI::PROMPT, 269 RecordPermissionAction(permission, GRANTED, PermissionSourceUI::PROMPT,
245 gesture_type, requesting_origin, profile); 270 gesture_type, requesting_origin, profile);
271 RecordPermissionPromptPriorCount(
272 permission, kPermissionsPromptAcceptedPriorDismissCountPrefix,
273 PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin,
274 permission, profile));
275 RecordPermissionPromptPriorCount(
276 permission, kPermissionsPromptAcceptedPriorIgnoreCountPrefix,
277 PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin,
278 permission, profile));
246 } 279 }
247 280
248 void PermissionUmaUtil::PermissionDenied( 281 void PermissionUmaUtil::PermissionDenied(
249 PermissionType permission, 282 PermissionType permission,
250 PermissionRequestGestureType gesture_type, 283 PermissionRequestGestureType gesture_type,
251 const GURL& requesting_origin, 284 const GURL& requesting_origin,
252 Profile* profile) { 285 Profile* profile) {
253 RecordPermissionAction(permission, DENIED, PermissionSourceUI::PROMPT, 286 RecordPermissionAction(permission, DENIED, PermissionSourceUI::PROMPT,
254 gesture_type, requesting_origin, profile); 287 gesture_type, requesting_origin, profile);
288 RecordPermissionPromptPriorCount(
289 permission, kPermissionsPromptDeniedPriorDismissCountPrefix,
290 PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin,
291 permission, profile));
292 RecordPermissionPromptPriorCount(
293 permission, kPermissionsPromptDeniedPriorIgnoreCountPrefix,
294 PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin,
295 permission, profile));
255 } 296 }
256 297
257 void PermissionUmaUtil::PermissionDismissed( 298 void PermissionUmaUtil::PermissionDismissed(
258 PermissionType permission, 299 PermissionType permission,
259 PermissionRequestGestureType gesture_type, 300 PermissionRequestGestureType gesture_type,
260 const GURL& requesting_origin, 301 const GURL& requesting_origin,
261 Profile* profile) { 302 Profile* profile) {
262 RecordPermissionAction(permission, DISMISSED, PermissionSourceUI::PROMPT, 303 RecordPermissionAction(permission, DISMISSED, PermissionSourceUI::PROMPT,
263 gesture_type, requesting_origin, profile); 304 gesture_type, requesting_origin, profile);
305 RecordPermissionPromptPriorCount(
306 permission, kPermissionsPromptDismissedPriorDismissCountPrefix,
307 PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin,
308 permission, profile));
309 RecordPermissionPromptPriorCount(
310 permission, kPermissionsPromptDismissedPriorIgnoreCountPrefix,
311 PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin,
312 permission, profile));
264 } 313 }
265 314
266 void PermissionUmaUtil::PermissionIgnored( 315 void PermissionUmaUtil::PermissionIgnored(
267 PermissionType permission, 316 PermissionType permission,
268 PermissionRequestGestureType gesture_type, 317 PermissionRequestGestureType gesture_type,
269 const GURL& requesting_origin, 318 const GURL& requesting_origin,
270 Profile* profile) { 319 Profile* profile) {
271 RecordPermissionAction(permission, IGNORED, PermissionSourceUI::PROMPT, 320 RecordPermissionAction(permission, IGNORED, PermissionSourceUI::PROMPT,
272 gesture_type, requesting_origin, profile); 321 gesture_type, requesting_origin, profile);
322 RecordPermissionPromptPriorCount(
323 permission, kPermissionsPromptIgnoredPriorDismissCountPrefix,
324 PermissionDecisionAutoBlocker::GetDismissCount(requesting_origin,
325 permission, profile));
326 RecordPermissionPromptPriorCount(
327 permission, kPermissionsPromptIgnoredPriorIgnoreCountPrefix,
328 PermissionDecisionAutoBlocker::GetIgnoreCount(requesting_origin,
329 permission, profile));
273 } 330 }
274 331
275 void PermissionUmaUtil::PermissionRevoked(PermissionType permission, 332 void PermissionUmaUtil::PermissionRevoked(PermissionType permission,
276 PermissionSourceUI source_ui, 333 PermissionSourceUI source_ui,
277 const GURL& revoked_origin, 334 const GURL& revoked_origin,
278 Profile* profile) { 335 Profile* profile) {
279 // TODO(tsergeant): Expand metrics definitions for revocation to include all 336 // TODO(tsergeant): Expand metrics definitions for revocation to include all
280 // permissions. 337 // permissions.
281 if (permission == PermissionType::NOTIFICATIONS || 338 if (permission == PermissionType::NOTIFICATIONS ||
282 permission == PermissionType::GEOLOCATION || 339 permission == PermissionType::GEOLOCATION ||
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 DCHECK(!requests.empty()); 425 DCHECK(!requests.empty());
369 DCHECK(requests.size() == 1); 426 DCHECK(requests.size() == 1);
370 427
371 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied, 428 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
372 requests[0]->GetPermissionRequestType()); 429 requests[0]->GetPermissionRequestType());
373 PERMISSION_BUBBLE_GESTURE_TYPE_UMA( 430 PERMISSION_BUBBLE_GESTURE_TYPE_UMA(
374 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture, 431 kPermissionsPromptDeniedGesture, kPermissionsPromptDeniedNoGesture,
375 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType()); 432 requests[0]->GetGestureType(), requests[0]->GetPermissionRequestType());
376 } 433 }
377 434
378 void PermissionUmaUtil::PermissionPromptDismissed( 435 void PermissionUmaUtil::RecordPermissionPromptPriorCount(
379 content::PermissionType permission, 436 content::PermissionType permission,
437 const std::string& prefix,
380 int count) { 438 int count) {
381 switch (permission) { 439 // The user is not prompted for these permissions, thus there is no prompt
382 case PermissionType::GEOLOCATION: 440 // event to record a prior count for.
383 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.Geolocation", 441 DCHECK_NE(PermissionType::MIDI, permission);
384 count); 442 DCHECK_NE(PermissionType::BACKGROUND_SYNC, permission);
385 break; 443 DCHECK_NE(PermissionType::NUM, permission);
386 case PermissionType::NOTIFICATIONS:
387 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.Notifications",
388 count);
389 break;
390 case PermissionType::MIDI_SYSEX:
391 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.MidiSysEx",
392 count);
393 break;
394 case PermissionType::PUSH_MESSAGING:
395 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.PushMessaging",
396 count);
397 break;
398 case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
399 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.ProtectedMedia",
400 count);
401 break;
402 case PermissionType::DURABLE_STORAGE:
403 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.DurableStorage",
404 count);
405 break;
406 case PermissionType::AUDIO_CAPTURE:
407 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.AudioCapture",
408 count);
409 break;
410 case PermissionType::VIDEO_CAPTURE:
411 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.DismissCount.VideoCapture",
412 count);
413 break;
414 // The user is not prompted for these permissions, thus there is no dismiss
415 // recorded for them.
416 case PermissionType::MIDI:
417 case PermissionType::BACKGROUND_SYNC:
418 case PermissionType::NUM:
419 NOTREACHED() << "PERMISSION "
420 << PermissionUtil::GetPermissionString(permission)
421 << " not accounted for";
422 }
423 }
424 444
425 void PermissionUmaUtil::PermissionPromptIgnored( 445 // Expand UMA_HISTOGRAM_COUNTS_100 so that we can use a dynamically suffixed
426 content::PermissionType permission, 446 // histogram name.
427 int count) { 447 base::Histogram::FactoryGet(
428 switch (permission) { 448 prefix + PermissionUtil::GetPermissionString(permission), 1, 100, 50,
429 case PermissionType::GEOLOCATION: 449 base::HistogramBase::kUmaTargetedHistogramFlag)
430 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.Geolocation", 450 ->Add(count);
431 count);
432 break;
433 case PermissionType::NOTIFICATIONS:
434 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.Notifications",
435 count);
436 break;
437 case PermissionType::MIDI_SYSEX:
438 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.MidiSysEx",
439 count);
440 break;
441 case PermissionType::PUSH_MESSAGING:
442 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.PushMessaging",
443 count);
444 break;
445 case PermissionType::PROTECTED_MEDIA_IDENTIFIER:
446 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.ProtectedMedia",
447 count);
448 break;
449 case PermissionType::DURABLE_STORAGE:
450 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.DurableStorage",
451 count);
452 break;
453 case PermissionType::AUDIO_CAPTURE:
454 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.AudioCapture",
455 count);
456 break;
457 case PermissionType::VIDEO_CAPTURE:
458 UMA_HISTOGRAM_COUNTS_100("Permissions.Prompt.IgnoreCount.VideoCapture",
459 count);
460 break;
461 // The user is not prompted for these permissions, thus there is no
462 // ignore recorded for them.
463 case PermissionType::MIDI:
464 case PermissionType::BACKGROUND_SYNC:
465 case PermissionType::NUM:
466 NOTREACHED() << "PERMISSION "
467 << PermissionUtil::GetPermissionString(permission)
468 << " not accounted for";
469 }
470 } 451 }
471 452
472 void PermissionUmaUtil::PermissionPromptAcceptedWithPersistenceToggle( 453 void PermissionUmaUtil::PermissionPromptAcceptedWithPersistenceToggle(
473 content::PermissionType permission, 454 content::PermissionType permission,
474 bool toggle_enabled) { 455 bool toggle_enabled) {
475 switch (permission) { 456 switch (permission) {
476 case PermissionType::GEOLOCATION: 457 case PermissionType::GEOLOCATION:
477 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Accepted.Persisted.Geolocation", 458 UMA_HISTOGRAM_BOOLEAN("Permissions.Prompt.Accepted.Persisted.Geolocation",
478 toggle_enabled); 459 toggle_enabled);
479 break; 460 break;
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 if (!deprecated_metric.empty() && rappor_service) { 676 if (!deprecated_metric.empty() && rappor_service) {
696 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric, 677 rappor::SampleDomainAndRegistryFromGURL(rappor_service, deprecated_metric,
697 requesting_origin); 678 requesting_origin);
698 679
699 std::string rappor_metric = deprecated_metric + "2"; 680 std::string rappor_metric = deprecated_metric + "2";
700 rappor_service->RecordSample( 681 rappor_service->RecordSample(
701 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE, 682 rappor_metric, rappor::LOW_FREQUENCY_ETLD_PLUS_ONE_RAPPOR_TYPE,
702 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin)); 683 rappor::GetDomainAndRegistrySampleFromGURL(requesting_origin));
703 } 684 }
704 } 685 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698