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

Unified Diff: chrome/browser/media/media_stream_devices_controller.cc

Issue 1401073002: Add Rappor reporting for grant/deny/cancel/ignore of Mediastream permissions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 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/media/media_stream_devices_controller.cc
diff --git a/chrome/browser/media/media_stream_devices_controller.cc b/chrome/browser/media/media_stream_devices_controller.cc
index 75f43559855385577e27480cd6cc39ace5f69425..81c2bfffe90448208a14ad1fa018354a5daafa0e 100644
--- a/chrome/browser/media/media_stream_devices_controller.cc
+++ b/chrome/browser/media/media_stream_devices_controller.cc
@@ -10,12 +10,14 @@
#include "base/prefs/scoped_user_pref_update.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/content_settings/tab_specific_content_settings.h"
#include "chrome/browser/media/media_capture_devices_dispatcher.h"
#include "chrome/browser/media/media_permission.h"
#include "chrome/browser/media/media_stream_capture_indicator.h"
#include "chrome/browser/media/media_stream_device_permissions.h"
+#include "chrome/browser/permissions/permission_context_uma_util.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/common/chrome_switches.h"
@@ -24,6 +26,8 @@
#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "components/content_settings/core/common/content_settings_pattern.h"
#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/rappor/rappor_service.h"
+#include "components/rappor/rappor_utils.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/common/media_stream_request.h"
@@ -69,6 +73,37 @@ bool ContentTypeIsRequested(ContentSettingsType type,
return false;
}
+void RecordPermissionActionImpl(const GURL& request_origin,
tsergeant 2015/10/12 04:06:44 It's possible for the request to be a from a chrom
kcarattini 2015/10/12 06:13:28 Good question. To be honest, I'd be interested in
+ PermissionAction action,
+ std::string permission_str) {
+ rappor::RapporService* rappor_service = g_browser_process->rappor_service();
+
+ scoped_ptr<rappor::Sample> sample =
+ rappor_service->CreateSample(rappor::SAFEBROWSING_RAPPOR_TYPE);
+ sample->SetStringField("Scheme", request_origin.scheme());
+ sample->SetStringField("Host", request_origin.host());
+ sample->SetStringField("Port", request_origin.port());
+ sample->SetStringField(
+ "Domain", rappor::GetDomainAndRegistrySampleFromGURL(request_origin));
+ sample->SetFlagsField("Actions", 1 << action,
+ PermissionAction::PERMISSION_ACTION_NUM);
+
+ rappor_service->RecordSampleObj(
+ "Permissions.Actions." + permission_str, sample.Pass());
+}
+
+// Record a Rappor sample for taking an |action| on a media |request|.
+void RecordPermissionAction(const content::MediaStreamRequest& request,
+ PermissionAction action) {
+ if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
+ request)) {
+ RecordPermissionActionImpl(request.security_origin, action, "Camera");
kcarattini 2015/10/12 06:13:28 I'm exporting a GetString method from permission_c
tsergeant 2015/10/13 03:31:23 Done.
+ }
+ if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, request)) {
+ RecordPermissionActionImpl(request.security_origin, action, "Mic");
+ }
+}
+
} // namespace
MediaStreamDevicesController::MediaStreamDevicesController(
@@ -124,6 +159,7 @@ MediaStreamDevicesController::MediaStreamDevicesController(
MediaStreamDevicesController::~MediaStreamDevicesController() {
if (!callback_.is_null()) {
+ RecordPermissionAction(request_, PermissionAction::IGNORED);
callback_.Run(content::MediaStreamDevices(),
content::MEDIA_DEVICE_FAILED_DUE_TO_SHUTDOWN,
scoped_ptr<content::MediaStreamUI>());
@@ -212,6 +248,7 @@ void MediaStreamDevicesController::PermissionGranted() {
UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
kAllowHttp, kPermissionActionsMax);
}
+ RecordPermissionAction(request_, PermissionAction::GRANTED);
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_ALLOW),
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
@@ -222,6 +259,7 @@ void MediaStreamDevicesController::PermissionGranted() {
void MediaStreamDevicesController::PermissionDenied() {
UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
kDeny, kPermissionActionsMax);
+ RecordPermissionAction(request_, PermissionAction::DENIED);
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
old_audio_setting_, CONTENT_SETTING_BLOCK),
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
@@ -232,6 +270,7 @@ void MediaStreamDevicesController::PermissionDenied() {
void MediaStreamDevicesController::Cancelled() {
UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions",
kCancel, kPermissionActionsMax);
+ RecordPermissionAction(request_, PermissionAction::DISMISSED);
RunCallback(old_audio_setting_, old_video_setting_,
content::MEDIA_DEVICE_PERMISSION_DISMISSED);
}
« no previous file with comments | « no previous file | chrome/browser/permissions/permission_context_uma_util.h » ('j') | tools/metrics/rappor/rappor.xml » ('J')

Powered by Google App Engine
This is Rietveld 408576698