| Index: chrome/browser/content_settings/permission_context_uma_util.cc
|
| diff --git a/chrome/browser/content_settings/permission_context_uma_util.cc b/chrome/browser/content_settings/permission_context_uma_util.cc
|
| index 3b62a904693dfbfe6209ad321861f3d7aab73202..dd4c827669b642856dd3e9831ce70ec935b9651b 100644
|
| --- a/chrome/browser/content_settings/permission_context_uma_util.cc
|
| +++ b/chrome/browser/content_settings/permission_context_uma_util.cc
|
| @@ -2,29 +2,26 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/metrics/histogram.h"
|
| +#include "base/metrics/histogram_macros.h"
|
| +#include "base/strings/stringprintf.h"
|
| +#include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/content_settings/permission_context_uma_util.h"
|
| +#include "components/rappor/rappor_utils.h"
|
| #include "content/public/browser/permission_type.h"
|
| #include "url/gurl.h"
|
|
|
| // UMA keys need to be statically initialized so plain function would not
|
| // work. Use a Macro instead.
|
| -#define PERMISSION_ACTION_UMA(secure_origin, \
|
| - permission, permission_secure, permission_insecure, action) \
|
| - UMA_HISTOGRAM_ENUMERATION( \
|
| - permission, \
|
| - action, \
|
| - PERMISSION_ACTION_NUM); \
|
| - if (secure_origin) { \
|
| - UMA_HISTOGRAM_ENUMERATION(permission_secure, \
|
| - action, \
|
| - PERMISSION_ACTION_NUM); \
|
| - } else { \
|
| - UMA_HISTOGRAM_ENUMERATION(permission_insecure, \
|
| - action, \
|
| - PERMISSION_ACTION_NUM); \
|
| - }
|
| -
|
| +#define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
|
| + permission_insecure, action) \
|
| + UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
|
| + if (secure_origin) { \
|
| + UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
|
| + PERMISSION_ACTION_NUM); \
|
| + } else { \
|
| + UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
|
| + PERMISSION_ACTION_NUM); \
|
| + }
|
|
|
| namespace {
|
|
|
| @@ -41,10 +38,50 @@ enum PermissionAction {
|
| PERMISSION_ACTION_NUM,
|
| };
|
|
|
| -void RecordPermissionAction(
|
| - ContentSettingsType permission,
|
| - PermissionAction action,
|
| - bool secure_origin) {
|
| +const std::string GetRapporMetric(ContentSettingsType permission,
|
| + PermissionAction action) {
|
| + std::string action_str;
|
| + switch (action) {
|
| + case GRANTED:
|
| + action_str = "Granted";
|
| + break;
|
| + case DENIED:
|
| + action_str = "Denied";
|
| + break;
|
| + case DISMISSED:
|
| + action_str = "Dismissed";
|
| + break;
|
| + case IGNORED:
|
| + action_str = "Ignored";
|
| + break;
|
| + case PERMISSION_ACTION_NUM:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + std::string permission_str;
|
| + switch (permission) {
|
| + case CONTENT_SETTINGS_TYPE_GEOLOCATION:
|
| + permission_str = "Geolocation";
|
| + break;
|
| + case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
|
| + permission_str = "Notifications";
|
| + break;
|
| + default:
|
| + permission_str = "";
|
| + break;
|
| + }
|
| +
|
| + if (permission_str.empty())
|
| + return "";
|
| + return base::StringPrintf("ContentSettings.PermissionActions_%s.%s.Url",
|
| + permission_str.c_str(), action_str.c_str());
|
| +}
|
| +
|
| +void RecordPermissionAction(ContentSettingsType permission,
|
| + PermissionAction action,
|
| + const GURL& requesting_origin) {
|
| + bool secure_origin = requesting_origin.SchemeIsSecure();
|
| +
|
| switch (permission) {
|
| case CONTENT_SETTINGS_TYPE_GEOLOCATION:
|
| PERMISSION_ACTION_UMA(
|
| @@ -91,17 +128,32 @@ void RecordPermissionAction(
|
| default:
|
| NOTREACHED() << "PERMISSION " << permission << " not accounted for";
|
| }
|
| +
|
| + const std::string& rappor_metric = GetRapporMetric(permission, action);
|
| + if (!rappor_metric.empty())
|
| + rappor::SampleDomainAndRegistryFromGURL(
|
| + g_browser_process->rappor_service(), rappor_metric,
|
| + requesting_origin);
|
| }
|
|
|
| -void RecordPermissionRequest(
|
| - ContentSettingsType permission, bool secure_origin) {
|
| +void RecordPermissionRequest(ContentSettingsType permission,
|
| + const GURL& requesting_origin) {
|
| + bool secure_origin = requesting_origin.SchemeIsSecure();
|
| content::PermissionType type;
|
| switch (permission) {
|
| case CONTENT_SETTINGS_TYPE_GEOLOCATION:
|
| type = content::PermissionType::GEOLOCATION;
|
| + rappor::SampleDomainAndRegistryFromGURL(
|
| + g_browser_process->rappor_service(),
|
| + "ContentSettings.PermissionRequested.Geolocation.Url",
|
| + requesting_origin);
|
| break;
|
| case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
|
| type = content::PermissionType::NOTIFICATIONS;
|
| + rappor::SampleDomainAndRegistryFromGURL(
|
| + g_browser_process->rappor_service(),
|
| + "ContentSettings.PermissionRequested.Notifications.Url",
|
| + requesting_origin);
|
| break;
|
| case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
|
| type = content::PermissionType::MIDI_SYSEX;
|
| @@ -141,29 +193,25 @@ void RecordPermissionRequest(
|
| // add new permission
|
| void PermissionContextUmaUtil::PermissionRequested(
|
| ContentSettingsType permission, const GURL& requesting_origin) {
|
| - RecordPermissionRequest(permission, requesting_origin.SchemeIsSecure());
|
| + RecordPermissionRequest(permission, requesting_origin);
|
| }
|
|
|
| void PermissionContextUmaUtil::PermissionGranted(
|
| ContentSettingsType permission, const GURL& requesting_origin) {
|
| - RecordPermissionAction(permission, GRANTED,
|
| - requesting_origin.SchemeIsSecure());
|
| + RecordPermissionAction(permission, GRANTED, requesting_origin);
|
| }
|
|
|
| void PermissionContextUmaUtil::PermissionDenied(
|
| ContentSettingsType permission, const GURL& requesting_origin) {
|
| - RecordPermissionAction(permission, DENIED,
|
| - requesting_origin.SchemeIsSecure());
|
| + RecordPermissionAction(permission, DENIED, requesting_origin);
|
| }
|
|
|
| void PermissionContextUmaUtil::PermissionDismissed(
|
| ContentSettingsType permission, const GURL& requesting_origin) {
|
| - RecordPermissionAction(permission, DISMISSED,
|
| - requesting_origin.SchemeIsSecure());
|
| + RecordPermissionAction(permission, DISMISSED, requesting_origin);
|
| }
|
|
|
| void PermissionContextUmaUtil::PermissionIgnored(
|
| ContentSettingsType permission, const GURL& requesting_origin) {
|
| - RecordPermissionAction(permission, IGNORED,
|
| - requesting_origin.SchemeIsSecure());
|
| + RecordPermissionAction(permission, IGNORED, requesting_origin);
|
| }
|
|
|