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