Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[MediaStream] enumerateDevices should not expose devices that can not…
… be used

https://bugs.webkit.org/show_bug.cgi?id=258993
rdar://110210394

Reviewed by Youenn Fablet.

Only include capabilities for InputDevices.

* Source/WebCore/platform/mediastream/CaptureDevice.h:
(WebCore::CaptureDevice::isInputDevice):

* Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::getCapabilities):

* Source/WebKit/UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::platformGetMediaStreamDevices):

* Source/WebKit/WebProcess/glib/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::getMediaStreamDevices):

Canonical link: https://commits.webkit.org/265947@main
  • Loading branch information
eric-carlson committed Jul 11, 2023
1 parent 1ba6a9f commit 33ede2d
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 12 deletions.
5 changes: 5 additions & 0 deletions Source/WebCore/platform/mediastream/CaptureDevice.h
Expand Up @@ -79,6 +79,11 @@ class CaptureDevice {
bool isEphemeral() const { return m_isEphemeral; }
void setIsEphemeral(bool isEphemeral) { m_isEphemeral = isEphemeral; }

bool isInputDevice() const
{
return m_type == DeviceType::Microphone || m_type == DeviceType::Camera;
}

explicit operator bool() const { return m_type != DeviceType::Unknown; }

CaptureDevice isolatedCopy() &&;
Expand Down
Expand Up @@ -148,7 +148,7 @@ std::optional<RealtimeMediaSourceCapabilities> RealtimeMediaSourceCenter::getCap
return std::nullopt;
return source.source()->capabilities();
}
if (device.type() == CaptureDevice::DeviceType::Microphone || device.type() == CaptureDevice::DeviceType::Speaker) {
if (device.type() == CaptureDevice::DeviceType::Microphone) {
auto source = audioCaptureFactory().createAudioCaptureSource({ device }, { "fake"_s, "fake"_s }, nullptr, { });
if (!source)
return std::nullopt;
Expand Down
Expand Up @@ -819,12 +819,14 @@ void UserMediaPermissionRequestManagerProxy::platformGetMediaStreamDevices(bool
for (auto& device : devices) {
RealtimeMediaSourceCapabilities deviceCapabilities;

auto capabilities = RealtimeMediaSourceCenter::singleton().getCapabilities(device);
if (!capabilities)
continue;
if (device.isInputDevice()) {
auto capabilities = RealtimeMediaSourceCenter::singleton().getCapabilities(device);
if (!capabilities)
continue;

if (revealIdsAndLabels)
deviceCapabilities = WTFMove(*capabilities);
if (revealIdsAndLabels)
deviceCapabilities = WTFMove(*capabilities);
}

devicesWithCapabilities.uncheckedAppend({ WTFMove(device), WTFMove(deviceCapabilities) });
}
Expand Down
14 changes: 8 additions & 6 deletions Source/WebKit/WebProcess/glib/UserMediaCaptureManager.cpp
Expand Up @@ -73,12 +73,14 @@ void UserMediaCaptureManager::getMediaStreamDevices(bool revealIdsAndLabels, Get
for (auto& device : devices) {
RealtimeMediaSourceCapabilities deviceCapabilities;

auto capabilities = RealtimeMediaSourceCenter::singleton().getCapabilities(device);
if (!capabilities)
continue;

if (revealIdsAndLabels)
deviceCapabilities = *capabilities;
if (device.isInputDevice()) {
auto capabilities = RealtimeMediaSourceCenter::singleton().getCapabilities(device);
if (!capabilities)
continue;

if (revealIdsAndLabels)
deviceCapabilities = *capabilities;
}

devicesWithCapabilities.uncheckedAppend({ WTFMove(device), WTFMove(deviceCapabilities) });
}
Expand Down

0 comments on commit 33ede2d

Please sign in to comment.