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); |
} |