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

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

Issue 2017873002: Add metrics for permission prompt acceptance / denial (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@2743
Patch Set: Created 4 years, 7 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/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
11 #include "chrome/browser/browser_process.h" 11 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/permissions/permission_manager.h" 12 #include "chrome/browser/permissions/permission_manager.h"
13 #include "chrome/browser/permissions/permission_util.h" 13 #include "chrome/browser/permissions/permission_util.h"
14 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h" 15 #include "chrome/browser/ui/website_settings/permission_bubble_request.h"
16 #include "components/rappor/rappor_service.h" 16 #include "components/rappor/rappor_service.h"
17 #include "components/rappor/rappor_utils.h" 17 #include "components/rappor/rappor_utils.h"
18 #include "content/public/browser/permission_type.h" 18 #include "content/public/browser/permission_type.h"
19 #include "content/public/common/origin_util.h" 19 #include "content/public/common/origin_util.h"
20 #include "url/gurl.h" 20 #include "url/gurl.h"
21 21
22 // UMA keys need to be statically initialized so plain function would not 22 // UMA keys need to be statically initialized so plain function would not
23 // work. Use a Macro instead. 23 // work. Use macros instead.
24 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \ 24 #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
25 permission_insecure, action) \ 25 permission_insecure, action) \
26 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \ 26 UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
27 if (secure_origin) { \ 27 if (secure_origin) { \
28 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \ 28 UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
29 PERMISSION_ACTION_NUM); \ 29 PERMISSION_ACTION_NUM); \
30 } else { \ 30 } else { \
31 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \ 31 UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
32 PERMISSION_ACTION_NUM); \ 32 PERMISSION_ACTION_NUM); \
33 } 33 }
34 34
35 #define PERMISSION_BUBBLE_TYPE_UMA(metric_name, permission_bubble_type) \
36 UMA_HISTOGRAM_ENUMERATION( \
37 metric_name, \
38 static_cast<base::HistogramBase::Sample>(permission_bubble_type), \
39 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::NUM))
40
35 using content::PermissionType; 41 using content::PermissionType;
36 42
37 namespace { 43 namespace {
38 44
39 const std::string GetRapporMetric(PermissionType permission, 45 const std::string GetRapporMetric(PermissionType permission,
40 PermissionAction action) { 46 PermissionAction action) {
41 std::string action_str; 47 std::string action_str;
42 switch (action) { 48 switch (action) {
43 case GRANTED: 49 case GRANTED:
44 action_str = "Granted"; 50 action_str = "Granted";
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 } else { 236 } else {
231 UMA_HISTOGRAM_ENUMERATION( 237 UMA_HISTOGRAM_ENUMERATION(
232 "Permissions.Requested.SameOrigin", 238 "Permissions.Requested.SameOrigin",
233 static_cast<base::HistogramBase::Sample>(permission), 239 static_cast<base::HistogramBase::Sample>(permission),
234 static_cast<base::HistogramBase::Sample>(PermissionType::NUM)); 240 static_cast<base::HistogramBase::Sample>(PermissionType::NUM));
235 } 241 }
236 } 242 }
237 243
238 } // anonymous namespace 244 } // anonymous namespace
239 245
246 const char PermissionUmaUtil::kPermissionsPromptShown[] =
247 "Permissions.Prompt.Shown";
248 const char PermissionUmaUtil::kPermissionsPromptAccepted[] =
249 "Permissions.Prompt.Accepted";
250 const char PermissionUmaUtil::kPermissionsPromptDenied[] =
251 "Permissions.Prompt.Denied";
252 const char PermissionUmaUtil::kPermissionsPromptRequestsPerPrompt[] =
253 "Permissions.Prompt.RequestsPerPrompt";
254 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleTypes[] =
255 "Permissions.Prompt.MergedBubbleTypes";
256 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleAccepted[] =
257 "Permissions.Prompt.MergedBubbleAccepted";
258 const char PermissionUmaUtil::kPermissionsPromptMergedBubbleDenied[] =
259 "Permissions.Prompt.MergedBubbleDenied";
260
240 // Make sure you update histograms.xml permission histogram_suffix if you 261 // Make sure you update histograms.xml permission histogram_suffix if you
241 // add new permission 262 // add new permission
242 void PermissionUmaUtil::PermissionRequested(PermissionType permission, 263 void PermissionUmaUtil::PermissionRequested(PermissionType permission,
243 const GURL& requesting_origin, 264 const GURL& requesting_origin,
244 const GURL& embedding_origin, 265 const GURL& embedding_origin,
245 Profile* profile) { 266 Profile* profile) {
246 RecordPermissionRequest(permission, requesting_origin, embedding_origin, 267 RecordPermissionRequest(permission, requesting_origin, embedding_origin,
247 profile); 268 profile);
248 } 269 }
249 270
(...skipping 25 matching lines...) Expand all
275 permission == PermissionType::GEOLOCATION || 296 permission == PermissionType::GEOLOCATION ||
276 permission == PermissionType::AUDIO_CAPTURE || 297 permission == PermissionType::AUDIO_CAPTURE ||
277 permission == PermissionType::VIDEO_CAPTURE) { 298 permission == PermissionType::VIDEO_CAPTURE) {
278 RecordPermissionAction(permission, REVOKED, revoked_origin); 299 RecordPermissionAction(permission, REVOKED, revoked_origin);
279 } 300 }
280 } 301 }
281 302
282 void PermissionUmaUtil::PermissionPromptShown( 303 void PermissionUmaUtil::PermissionPromptShown(
283 const std::vector<PermissionBubbleRequest*>& requests) { 304 const std::vector<PermissionBubbleRequest*>& requests) {
284 DCHECK(!requests.empty()); 305 DCHECK(!requests.empty());
306
285 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE; 307 PermissionBubbleType permission_prompt_type = PermissionBubbleType::MULTIPLE;
286 if (requests.size() == 1) 308 if (requests.size() == 1)
287 permission_prompt_type = requests[0]->GetPermissionBubbleType(); 309 permission_prompt_type = requests[0]->GetPermissionBubbleType();
288 UMA_HISTOGRAM_ENUMERATION( 310 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptShown, permission_prompt_type);
289 "Permissions.Prompt.Shown",
290 static_cast<base::HistogramBase::Sample>(permission_prompt_type),
291 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::NUM));
292 311
293 UMA_HISTOGRAM_ENUMERATION( 312 UMA_HISTOGRAM_ENUMERATION(
294 "Permissions.Prompt.RequestsPerPrompt", 313 kPermissionsPromptRequestsPerPrompt,
295 static_cast<base::HistogramBase::Sample>(requests.size()), 314 static_cast<base::HistogramBase::Sample>(requests.size()),
296 static_cast<base::HistogramBase::Sample>(10)); 315 static_cast<base::HistogramBase::Sample>(10));
297 316
298 if (requests.size() > 1) { 317 if (requests.size() > 1) {
299 for (const auto* request : requests) { 318 for (const auto* request : requests) {
300 UMA_HISTOGRAM_ENUMERATION( 319 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleTypes,
301 "Permissions.Prompt.MergedBubbleTypes", 320 request->GetPermissionBubbleType());
302 static_cast<base::HistogramBase::Sample>(
303 request->GetPermissionBubbleType()),
304 static_cast<base::HistogramBase::Sample>(PermissionBubbleType::NUM));
305 } 321 }
306 } 322 }
307 } 323 }
324
325 void PermissionUmaUtil::PermissionPromptAccepted(
326 const std::vector<PermissionBubbleRequest*>& requests,
327 const std::vector<bool>& accept_states) {
328 DCHECK(!requests.empty());
329 DCHECK(requests.size() == accept_states.size());
330
331 bool all_accepted = accept_states[0];
332 PermissionBubbleType permission_prompt_type =
333 requests[0]->GetPermissionBubbleType();
334 if (requests.size() > 1) {
335 permission_prompt_type = PermissionBubbleType::MULTIPLE;
336 for (size_t i = 0; i < requests.size(); ++i) {
337 const auto* request = requests[i];
338 if (accept_states[i]) {
339 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleAccepted,
340 request->GetPermissionBubbleType());
341 } else {
342 all_accepted = false;
343 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptMergedBubbleDenied,
344 request->GetPermissionBubbleType());
345 }
346 }
347 }
348
349 if (all_accepted) {
350 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptAccepted,
351 permission_prompt_type);
352 } else {
353 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
354 permission_prompt_type);
355 }
356 }
357
358 void PermissionUmaUtil::PermissionPromptDenied(
359 const std::vector<PermissionBubbleRequest*>& requests) {
360 DCHECK(!requests.empty());
361 DCHECK(requests.size() == 1);
362
363 PERMISSION_BUBBLE_TYPE_UMA(kPermissionsPromptDenied,
364 requests[0]->GetPermissionBubbleType());
365 }
OLDNEW
« no previous file with comments | « chrome/browser/permissions/permission_uma_util.h ('k') | chrome/browser/ui/website_settings/mock_permission_bubble_request.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698