| 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?
|
|
|