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 d6a122ebdc46446f0052c446e594139068da9668..9dc47941853832eed7ab81e1a0ef3dc039dda302 100644 |
--- a/chrome/browser/media/media_stream_devices_controller.cc |
+++ b/chrome/browser/media/media_stream_devices_controller.cc |
@@ -17,6 +17,7 @@ |
#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_uma_util.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/common/chrome_switches.h" |
@@ -48,14 +49,6 @@ using content::BrowserThread; |
namespace { |
-enum DevicePermissionActions { |
- kAllowHttps = 0, |
- kAllowHttp, |
- kDeny, |
- kCancel, |
- kPermissionActionsMax // Must always be last! |
-}; |
- |
// Returns true if the given ContentSettingsType is being requested in |
// |request|. |
bool ContentTypeIsRequested(ContentSettingsType type, |
@@ -72,6 +65,23 @@ bool ContentTypeIsRequested(ContentSettingsType type, |
return false; |
} |
+using PermissionActionCallback = |
+ base::Callback<void(ContentSettingsType, const GURL&)>; |
+ |
+// Calls |action_function| for each permission requested by |request|. |
+void RecordPermissionAction(const content::MediaStreamRequest& request, |
+ PermissionActionCallback callback) { |
+ if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
+ request)) { |
+ callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
+ request.security_origin); |
+ } |
+ if (ContentTypeIsRequested(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, request)) { |
+ callback.Run(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, |
+ request.security_origin); |
+ } |
+} |
+ |
// This helper class helps to measure the number of media stream requests that |
// occur. It ensures that only one request will be recorded per navigation, per |
// frame. TODO(raymes): Remove this when https://crbug.com/526324 is fixed. |
@@ -186,6 +196,8 @@ MediaStreamDevicesController::MediaStreamDevicesController( |
MediaStreamDevicesController::~MediaStreamDevicesController() { |
if (!callback_.is_null()) { |
+ RecordPermissionAction( |
+ request_, base::Bind(PermissionUmaUtil::PermissionIgnored)); |
callback_.Run(content::MediaStreamDevices(), |
content::MEDIA_DEVICE_FAILED_DUE_TO_SHUTDOWN, |
scoped_ptr<content::MediaStreamUI>()); |
@@ -224,8 +236,8 @@ const std::string& MediaStreamDevicesController::GetSecurityOriginSpec() const { |
void MediaStreamDevicesController::ForcePermissionDeniedTemporarily() { |
base::AutoReset<bool> persist_permissions( |
&persist_permission_changes_, false); |
- UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", |
- kDeny, kPermissionActionsMax); |
+ // TODO(tsergeant): Determine whether it is appropriate to record permission |
+ // action metrics here, as this is a different sort of user action. |
RunCallback(CONTENT_SETTING_BLOCK, |
CONTENT_SETTING_BLOCK, |
content::MEDIA_DEVICE_PERMISSION_DENIED); |
@@ -266,14 +278,8 @@ GURL MediaStreamDevicesController::GetRequestingHostname() const { |
} |
void MediaStreamDevicesController::PermissionGranted() { |
- GURL origin(GetSecurityOriginSpec()); |
- if (content::IsOriginSecure(origin)) { |
- UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", |
- kAllowHttps, kPermissionActionsMax); |
- } else { |
- UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", |
- kAllowHttp, kPermissionActionsMax); |
- } |
+ RecordPermissionAction( |
+ request_, base::Bind(PermissionUmaUtil::PermissionGranted)); |
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, |
old_audio_setting_, CONTENT_SETTING_ALLOW), |
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
@@ -282,8 +288,8 @@ void MediaStreamDevicesController::PermissionGranted() { |
} |
void MediaStreamDevicesController::PermissionDenied() { |
- UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", |
- kDeny, kPermissionActionsMax); |
+ RecordPermissionAction( |
+ request_, base::Bind(PermissionUmaUtil::PermissionDenied)); |
RunCallback(GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, |
old_audio_setting_, CONTENT_SETTING_BLOCK), |
GetNewSetting(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, |
@@ -292,8 +298,8 @@ void MediaStreamDevicesController::PermissionDenied() { |
} |
void MediaStreamDevicesController::Cancelled() { |
- UMA_HISTOGRAM_ENUMERATION("Media.DevicePermissionActions", |
- kCancel, kPermissionActionsMax); |
+ RecordPermissionAction( |
+ request_, base::Bind(PermissionUmaUtil::PermissionDismissed)); |
RunCallback(old_audio_setting_, old_video_setting_, |
content::MEDIA_DEVICE_PERMISSION_DISMISSED); |
} |