Index: chrome/browser/media/media_capture_devices_dispatcher.cc |
diff --git a/chrome/browser/media/media_capture_devices_dispatcher.cc b/chrome/browser/media/media_capture_devices_dispatcher.cc |
index bbef40faa9c4d0fbdbf3de345435700f9fe306de..44edb6838468389f80213a13b2d40bdf8431f6b9 100644 |
--- a/chrome/browser/media/media_capture_devices_dispatcher.cc |
+++ b/chrome/browser/media/media_capture_devices_dispatcher.cc |
@@ -35,6 +35,10 @@ |
#include "grit/generated_resources.h" |
#include "ui/base/l10n/l10n_util.h" |
+#if defined(USE_CRAS) |
+#include "media/audio/cras/audio_manager_cras.h" |
+#endif |
+ |
using content::BrowserThread; |
using content::MediaStreamDevices; |
@@ -209,6 +213,18 @@ void MediaCaptureDevicesDispatcher::ProcessScreenCaptureAccessRequest( |
CommandLine::ForCurrentProcess()->HasSwitch( |
switches::kAllowHttpScreenCapture); |
+ bool screen_video_capture_requested = |
+ request.video_type == content::MEDIA_SCREEN_VIDEO_CAPTURE; |
+ |
+ bool system_audio_capture_requested = |
+ request.audio_type == content::MEDIA_SYSTEM_AUDIO_CAPTURE; |
+ |
+#if defined(USE_CRAS) |
+ bool system_audio_capture_supported = true; |
+#else |
+ bool system_audio_capture_supported = false; |
+#endif |
+ |
// Approve request only when the following conditions are met: |
// 1. Screen capturing is enabled via command line switch or white-listed for |
// the given origin. |
@@ -216,9 +232,8 @@ void MediaCaptureDevicesDispatcher::ProcessScreenCaptureAccessRequest( |
// 3. Video capture is requested for screen video. |
// 4. Audio capture is either not requested, or requested for system audio. |
if (screen_capture_enabled && origin_is_secure && |
- request.video_type == content::MEDIA_SCREEN_VIDEO_CAPTURE && |
- (request.audio_type == content::MEDIA_NO_SERVICE || |
- request.audio_type == content::MEDIA_SYSTEM_AUDIO_CAPTURE)) { |
+ screen_video_capture_requested && |
+ (!system_audio_capture_requested || system_audio_capture_supported)) { |
// For component extensions, bypass message box. |
bool user_approved = false; |
if (!component_extension) { |
@@ -240,9 +255,14 @@ void MediaCaptureDevicesDispatcher::ProcessScreenCaptureAccessRequest( |
if (user_approved || component_extension) { |
devices.push_back(content::MediaStreamDevice( |
content::MEDIA_SCREEN_VIDEO_CAPTURE, std::string(), "Screen")); |
- if (request.audio_type == content::MEDIA_SYSTEM_AUDIO_CAPTURE) { |
+ if (system_audio_capture_requested) { |
+#if defined(USE_CRAS) |
+ // Use the special loopback device ID for system audio capture. |
devices.push_back(content::MediaStreamDevice( |
- content::MEDIA_SYSTEM_AUDIO_CAPTURE, std::string(), std::string())); |
+ content::MEDIA_SYSTEM_AUDIO_CAPTURE, |
+ media::AudioManagerCras::kLoopbackDeviceId, |
+ std::string())); |
+#endif |
} |
} |
} |