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

Unified Diff: extensions/shell/browser/media_capture_util.cc

Issue 514463002: app_shell: Allow getUserMedia to select a capture device by id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
« no previous file with comments | « extensions/shell/browser/media_capture_util.h ('k') | extensions/shell/browser/shell_app_window.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/shell/browser/media_capture_util.cc
diff --git a/extensions/shell/browser/media_capture_util.cc b/extensions/shell/browser/media_capture_util.cc
index bb000b8405b7207964408949bcec9f77105eb019..364e19df8a7c6ecc74dc971cfdb60fc61ceabe48 100644
--- a/extensions/shell/browser/media_capture_util.cc
+++ b/extensions/shell/browser/media_capture_util.cc
@@ -4,32 +4,43 @@
#include "extensions/shell/browser/media_capture_util.h"
+#include <string>
+
#include "base/callback.h"
#include "base/logging.h"
#include "content/public/browser/media_capture_devices.h"
#include "extensions/common/permissions/permissions_data.h"
using content::MediaCaptureDevices;
+using content::MediaStreamDevice;
using content::MediaStreamDevices;
using content::MediaStreamUI;
namespace extensions {
+
+const MediaStreamDevice* GetRequestedDeviceOrDefault(
+ const MediaStreamDevices& devices,
+ const std::string& requested_device_id) {
+ if (!requested_device_id.empty())
+ return devices.FindById(requested_device_id);
+
+ if (!devices.empty())
+ return &devices[0];
+
+ return NULL;
+}
+
namespace media_capture_util {
// See also Chrome's MediaCaptureDevicesDispatcher.
-void GrantMediaStreamRequestWithFirstDevice(
- content::WebContents* web_contents,
- const content::MediaStreamRequest& request,
- const content::MediaResponseCallback& callback,
- const Extension* extension) {
+void GrantMediaStreamRequest(content::WebContents* web_contents,
+ const content::MediaStreamRequest& request,
+ const content::MediaResponseCallback& callback,
+ const Extension* extension) {
// app_shell only supports audio and video capture, not tab or screen capture.
DCHECK(request.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE ||
request.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE);
- // app_shell does not support requesting a specific device ID.
- DCHECK(request.requested_audio_device_id.empty() &&
- request.requested_video_device_id.empty());
-
MediaStreamDevices devices;
const PermissionsData* permissions_data = extension->permissions_data();
@@ -39,11 +50,11 @@ void GrantMediaStreamRequestWithFirstDevice(
CHECK(permissions_data->HasAPIPermission(APIPermission::kAudioCapture))
<< "Audio capture request but no audioCapture permission in manifest.";
- // Use first available audio capture device.
- const MediaStreamDevices& audio_devices =
- MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices();
- if (!audio_devices.empty())
- devices.push_back(audio_devices[0]);
+ const MediaStreamDevice* device = GetRequestedDeviceOrDefault(
+ MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices(),
+ request.requested_audio_device_id);
+ if (device)
+ devices.push_back(*device);
}
if (request.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) {
@@ -51,11 +62,11 @@ void GrantMediaStreamRequestWithFirstDevice(
CHECK(permissions_data->HasAPIPermission(APIPermission::kVideoCapture))
<< "Video capture request but no videoCapture permission in manifest.";
- // Use first available video capture device.
- const MediaStreamDevices& video_devices =
- MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices();
- if (!video_devices.empty())
- devices.push_back(video_devices[0]);
+ const MediaStreamDevice* device = GetRequestedDeviceOrDefault(
+ MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices(),
+ request.requested_video_device_id);
+ if (device)
+ devices.push_back(*device);
}
// TODO(jamescook): Should we show a recording icon somewhere? If so, where?
« no previous file with comments | « extensions/shell/browser/media_capture_util.h ('k') | extensions/shell/browser/shell_app_window.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698