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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..fb0e870e65b25cc86dde5e674bc63813df1d8721 |
--- /dev/null |
+++ b/extensions/shell/browser/media_capture_util.cc |
@@ -0,0 +1,58 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "extensions/shell/browser/media_capture_util.h" |
+ |
+#include "base/callback.h" |
+#include "base/logging.h" |
+#include "content/public/browser/media_capture_devices.h" |
+ |
+using content::MediaCaptureDevices; |
+using content::MediaStreamDevices; |
+using content::MediaStreamUI; |
+ |
+namespace extensions { |
+namespace media_capture_util { |
+ |
+// See also Chrome's MediaCaptureDevicesDispatcher. |
James Cook
2014/08/20 18:17:16
I looked at refactoring MediaCaptureDevicesDispatc
|
+void GrantMediaStreamRequestWithFirstDevice( |
+ content::WebContents* web_contents, |
+ const content::MediaStreamRequest& request, |
+ const content::MediaResponseCallback& callback) { |
+ // 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; |
+ |
+ if (request.audio_type == content::MEDIA_DEVICE_AUDIO_CAPTURE) { |
+ // Use first available audio capture device. |
+ const MediaStreamDevices& audio_devices = |
+ MediaCaptureDevices::GetInstance()->GetAudioCaptureDevices(); |
+ if (!audio_devices.empty()) |
+ devices.push_back(audio_devices[0]); |
+ } |
+ |
+ if (request.video_type == content::MEDIA_DEVICE_VIDEO_CAPTURE) { |
+ // Use first available video capture device. |
+ const MediaStreamDevices& video_devices = |
+ MediaCaptureDevices::GetInstance()->GetVideoCaptureDevices(); |
+ if (!video_devices.empty()) |
+ devices.push_back(video_devices[0]); |
+ } |
+ |
+ // Don't show UI. |
+ scoped_ptr<MediaStreamUI> ui; |
+ callback.Run(devices, |
+ devices.empty() ? content::MEDIA_DEVICE_INVALID_STATE |
+ : content::MEDIA_DEVICE_OK, |
+ ui.Pass()); |
+} |
+ |
+} // namespace media_capture_util |
+} // namespace extensions |