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

Unified Diff: chrome/browser/permissions/permission_uma_util.cc

Issue 2952003003: Log site engagement scores for permission actions (Closed)
Patch Set: Created 3 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/permissions/permission_uma_util.cc
diff --git a/chrome/browser/permissions/permission_uma_util.cc b/chrome/browser/permissions/permission_uma_util.cc
index 45305b15c1a75ddd61e955a735d4e95ff0861ab9..5744f47eb2561f57fccd405b8d406f298d51b372 100644
--- a/chrome/browser/permissions/permission_uma_util.cc
+++ b/chrome/browser/permissions/permission_uma_util.cc
@@ -11,6 +11,7 @@
#include "base/strings/stringprintf.h"
#include "base/time/time.h"
#include "chrome/browser/browser_process.h"
+#include "chrome/browser/engagement/site_engagement_service.h"
#include "chrome/browser/permissions/permission_decision_auto_blocker.h"
#include "chrome/browser/permissions/permission_request.h"
#include "chrome/browser/permissions/permission_util.h"
@@ -25,6 +26,7 @@
#include "components/rappor/public/rappor_utils.h"
#include "components/rappor/rappor_service_impl.h"
#include "content/public/browser/permission_type.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/common/origin_util.h"
#include "url/gurl.h"
@@ -62,6 +64,68 @@ namespace {
static bool gIsFakeOfficialBuildForTest = false;
+std::string GetPermissionRequestString(PermissionRequestType type) {
+ switch (type) {
+ case PermissionRequestType::MULTIPLE:
+ return "AudioAndVideoCapture";
+ case PermissionRequestType::QUOTA:
+ return "Quota";
+ case PermissionRequestType::DOWNLOAD:
+ return "MultipleDownload";
+ case PermissionRequestType::REGISTER_PROTOCOL_HANDLER:
+ return "RegisterProtocolHandler";
+ case PermissionRequestType::PERMISSION_GEOLOCATION:
+ return "Geolocation";
+ case PermissionRequestType::PERMISSION_MIDI_SYSEX:
+ return "MidiSysEx";
+ case PermissionRequestType::PERMISSION_NOTIFICATIONS:
+ return "Notifications";
+ case PermissionRequestType::PERMISSION_PROTECTED_MEDIA_IDENTIFIER:
+ return "ProtectedMediaIdentifier";
+ case PermissionRequestType::PERMISSION_PUSH_MESSAGING:
+ return "PushMessaging";
+ case PermissionRequestType::PERMISSION_FLASH:
+ return "Flash";
+ case PermissionRequestType::PERMISSION_MEDIASTREAM_MIC:
+ return "AudioCapture";
+ case PermissionRequestType::PERMISSION_MEDIASTREAM_CAMERA:
+ return "VideoCapture";
+ default:
+ NOTREACHED();
+ return "";
+ }
+}
+
+void RecordEngagementMetric(const std::vector<PermissionRequest*>& requests,
+ const content::WebContents* web_contents,
+ const std::string& action) {
+ PermissionRequestType type = requests[0]->GetPermissionRequestType();
+ if (requests.size() > 1)
+ type = PermissionRequestType::MULTIPLE;
+
+ // This is only hit if kUsePermissionManagerForMediaRequests is off, since it
+ // is now on by default we'll just silenty drop this.
+ if (type == PermissionRequestType::MEDIA_STREAM)
+ return;
+
+ DCHECK(action == "Accepted" || action == "Denied" || action == "Dismissed" ||
+ action == "Ignored");
raymes 2017/07/06 05:03:15 Are we interested in recording the total requests?
Timothy Loh 2017/07/19 06:03:43 I don't think we need to record the total requests
+ std::string name = "Permissions.Engagement." + action + '.' +
+ GetPermissionRequestString(type);
raymes 2017/07/06 05:03:15 Hmm, I think what we're really interested in is wh
Timothy Loh 2017/07/19 06:03:43 At least as far as we only group mic+camera right
raymes 2017/07/20 03:37:13 Ok - if you think so I'm ok. It just seemed simple
+
+ SiteEngagementService* site_engagement_service = SiteEngagementService::Get(
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()));
+ double engagement_score =
+ site_engagement_service->GetScore(requests[0]->GetOrigin());
+
+ // This is manually expanded from the UMA_HISTOGRAM_PERCENTAGE macro as the
+ // macro does not work with a dynamically calculated histogram name.
+
raymes 2017/07/06 05:03:15 nit: no newline needed
Timothy Loh 2017/07/19 06:03:43 Done.
+ base::LinearHistogram::FactoryGet(
+ name, 1, 101, 102, base::HistogramBase::kUmaTargetedHistogramFlag)
+ ->Add(engagement_score);
+}
+
const std::string GetRapporMetric(ContentSettingsType permission,
PermissionAction action) {
std::string action_str;
@@ -390,13 +454,29 @@ void PermissionUmaUtil::PermissionPromptShown(
}
void PermissionUmaUtil::PermissionPromptAccepted(
- const std::vector<PermissionRequest*>& requests) {
+ const std::vector<PermissionRequest*>& requests,
+ const content::WebContents* web_contents) {
RecordPromptDecided(requests, /*accepted=*/true);
+ RecordEngagementMetric(requests, web_contents, "Accepted");
}
void PermissionUmaUtil::PermissionPromptDenied(
- const std::vector<PermissionRequest*>& requests) {
+ const std::vector<PermissionRequest*>& requests,
+ const content::WebContents* web_contents) {
RecordPromptDecided(requests, /*accepted=*/false);
+ RecordEngagementMetric(requests, web_contents, "Denied");
+}
+
+void PermissionUmaUtil::PermissionPromptDismissed(
+ const std::vector<PermissionRequest*>& requests,
+ const content::WebContents* web_contents) {
+ RecordEngagementMetric(requests, web_contents, "Dismissed");
+}
+
+void PermissionUmaUtil::PermissionPromptIgnored(
+ const std::vector<PermissionRequest*>& requests,
+ const content::WebContents* web_contents) {
+ RecordEngagementMetric(requests, web_contents, "Ignored");
}
void PermissionUmaUtil::RecordPermissionPromptShown(

Powered by Google App Engine
This is Rietveld 408576698