Commit e5ea1b74 authored by miguelg's avatar miguelg Committed by Commit bot

Add rappor metrics for infobar/bubble operations for Geolocation and Notifications

BUG=466091

Review URL: https://codereview.chromium.org/1019543002

Cr-Commit-Position: refs/heads/master@{#322493}
parent 4cb23dcc
...@@ -2,30 +2,27 @@ ...@@ -2,30 +2,27 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // 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 "chrome/browser/content_settings/permission_context_uma_util.h"
#include "components/rappor/rappor_utils.h"
#include "content/public/browser/permission_type.h" #include "content/public/browser/permission_type.h"
#include "url/gurl.h" #include "url/gurl.h"
// UMA keys need to be statically initialized so plain function would not // UMA keys need to be statically initialized so plain function would not
// work. Use a Macro instead. // work. Use a Macro instead.
#define PERMISSION_ACTION_UMA(secure_origin, \ #define PERMISSION_ACTION_UMA(secure_origin, permission, permission_secure, \
permission, permission_secure, permission_insecure, action) \ permission_insecure, action) \
UMA_HISTOGRAM_ENUMERATION( \ UMA_HISTOGRAM_ENUMERATION(permission, action, PERMISSION_ACTION_NUM); \
permission, \
action, \
PERMISSION_ACTION_NUM); \
if (secure_origin) { \ if (secure_origin) { \
UMA_HISTOGRAM_ENUMERATION(permission_secure, \ UMA_HISTOGRAM_ENUMERATION(permission_secure, action, \
action, \
PERMISSION_ACTION_NUM); \ PERMISSION_ACTION_NUM); \
} else { \ } else { \
UMA_HISTOGRAM_ENUMERATION(permission_insecure, \ UMA_HISTOGRAM_ENUMERATION(permission_insecure, action, \
action, \
PERMISSION_ACTION_NUM); \ PERMISSION_ACTION_NUM); \
} }
namespace { namespace {
// Enum for UMA purposes, make sure you update histograms.xml if you add new // Enum for UMA purposes, make sure you update histograms.xml if you add new
...@@ -41,10 +38,50 @@ enum PermissionAction { ...@@ -41,10 +38,50 @@ enum PermissionAction {
PERMISSION_ACTION_NUM, PERMISSION_ACTION_NUM,
}; };
void RecordPermissionAction( const std::string GetRapporMetric(ContentSettingsType permission,
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, PermissionAction action,
bool secure_origin) { const GURL& requesting_origin) {
bool secure_origin = requesting_origin.SchemeIsSecure();
switch (permission) { switch (permission) {
case CONTENT_SETTINGS_TYPE_GEOLOCATION: case CONTENT_SETTINGS_TYPE_GEOLOCATION:
PERMISSION_ACTION_UMA( PERMISSION_ACTION_UMA(
...@@ -91,17 +128,32 @@ void RecordPermissionAction( ...@@ -91,17 +128,32 @@ void RecordPermissionAction(
default: default:
NOTREACHED() << "PERMISSION " << permission << " not accounted for"; 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( void RecordPermissionRequest(ContentSettingsType permission,
ContentSettingsType permission, bool secure_origin) { const GURL& requesting_origin) {
bool secure_origin = requesting_origin.SchemeIsSecure();
content::PermissionType type; content::PermissionType type;
switch (permission) { switch (permission) {
case CONTENT_SETTINGS_TYPE_GEOLOCATION: case CONTENT_SETTINGS_TYPE_GEOLOCATION:
type = content::PermissionType::GEOLOCATION; type = content::PermissionType::GEOLOCATION;
rappor::SampleDomainAndRegistryFromGURL(
g_browser_process->rappor_service(),
"ContentSettings.PermissionRequested.Geolocation.Url",
requesting_origin);
break; break;
case CONTENT_SETTINGS_TYPE_NOTIFICATIONS: case CONTENT_SETTINGS_TYPE_NOTIFICATIONS:
type = content::PermissionType::NOTIFICATIONS; type = content::PermissionType::NOTIFICATIONS;
rappor::SampleDomainAndRegistryFromGURL(
g_browser_process->rappor_service(),
"ContentSettings.PermissionRequested.Notifications.Url",
requesting_origin);
break; break;
case CONTENT_SETTINGS_TYPE_MIDI_SYSEX: case CONTENT_SETTINGS_TYPE_MIDI_SYSEX:
type = content::PermissionType::MIDI_SYSEX; type = content::PermissionType::MIDI_SYSEX;
...@@ -141,29 +193,25 @@ void RecordPermissionRequest( ...@@ -141,29 +193,25 @@ void RecordPermissionRequest(
// add new permission // add new permission
void PermissionContextUmaUtil::PermissionRequested( void PermissionContextUmaUtil::PermissionRequested(
ContentSettingsType permission, const GURL& requesting_origin) { ContentSettingsType permission, const GURL& requesting_origin) {
RecordPermissionRequest(permission, requesting_origin.SchemeIsSecure()); RecordPermissionRequest(permission, requesting_origin);
} }
void PermissionContextUmaUtil::PermissionGranted( void PermissionContextUmaUtil::PermissionGranted(
ContentSettingsType permission, const GURL& requesting_origin) { ContentSettingsType permission, const GURL& requesting_origin) {
RecordPermissionAction(permission, GRANTED, RecordPermissionAction(permission, GRANTED, requesting_origin);
requesting_origin.SchemeIsSecure());
} }
void PermissionContextUmaUtil::PermissionDenied( void PermissionContextUmaUtil::PermissionDenied(
ContentSettingsType permission, const GURL& requesting_origin) { ContentSettingsType permission, const GURL& requesting_origin) {
RecordPermissionAction(permission, DENIED, RecordPermissionAction(permission, DENIED, requesting_origin);
requesting_origin.SchemeIsSecure());
} }
void PermissionContextUmaUtil::PermissionDismissed( void PermissionContextUmaUtil::PermissionDismissed(
ContentSettingsType permission, const GURL& requesting_origin) { ContentSettingsType permission, const GURL& requesting_origin) {
RecordPermissionAction(permission, DISMISSED, RecordPermissionAction(permission, DISMISSED, requesting_origin);
requesting_origin.SchemeIsSecure());
} }
void PermissionContextUmaUtil::PermissionIgnored( void PermissionContextUmaUtil::PermissionIgnored(
ContentSettingsType permission, const GURL& requesting_origin) { ContentSettingsType permission, const GURL& requesting_origin) {
RecordPermissionAction(permission, IGNORED, RecordPermissionAction(permission, IGNORED, requesting_origin);
requesting_origin.SchemeIsSecure());
} }
...@@ -117,6 +117,91 @@ components/rappor/rappor_service.cc. ...@@ -117,6 +117,91 @@ components/rappor/rappor_service.cc.
</summary> </summary>
</rappor-metric> </rappor-metric>
<rappor-metric name="ContentSettings.PermissionActions_Geolocation.Denied.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Geolocation permission prompt was Denied.
</summary>
</rappor-metric>
<rappor-metric
name="ContentSettings.PermissionActions_Geolocation.Dismissed.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Geolocation permission prompt was Dismissed.
</summary>
</rappor-metric>
<rappor-metric name="ContentSettings.PermissionActions_Geolocation.Granted.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Geolocation permission prompt was accepted.
</summary>
</rappor-metric>
<rappor-metric name="ContentSettings.PermissionActions_Geolocation.Ignored.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Geolocation permission prompt was Ignored.
</summary>
</rappor-metric>
<rappor-metric
name="ContentSettings.PermissionActions_Notifications.Denied.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Notification permission prompt was Denied.
</summary>
</rappor-metric>
<rappor-metric
name="ContentSettings.PermissionActions_Notifications.Dismissed.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Notification permission prompt was Dismissed.
</summary>
</rappor-metric>
<rappor-metric
name="ContentSettings.PermissionActions_Notifications.Granted.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Notification permission prompt was accepted.
</summary>
</rappor-metric>
<rappor-metric
name="ContentSettings.PermissionActions_Notifications.Ignored.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain for which a Notification permission prompt was Ignored.
</summary>
</rappor-metric>
<rappor-metric name="ContentSettings.PermissionRequested.Geolocation.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain that issues a Geolocation permission prompt.
</summary>
</rappor-metric>
<rappor-metric name="ContentSettings.PermissionRequested.Notifications.Url"
type="ETLD_PLUS_ONE">
<owner>miguelg@chromium.org</owner>
<summary>
The domain that issues a Notification permission prompt.
</summary>
</rappor-metric>
<rappor-metric name="Extensions.PossibleAdInjection2" type="ETLD_PLUS_ONE"> <rappor-metric name="Extensions.PossibleAdInjection2" type="ETLD_PLUS_ONE">
<owner>rdevlin.cronin@chromium.org</owner> <owner>rdevlin.cronin@chromium.org</owner>
<summary> <summary>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment