Diff
Modified: trunk/Source/WebCore/ChangeLog (215567 => 215568)
--- trunk/Source/WebCore/ChangeLog 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/ChangeLog 2017-04-20 19:22:23 UTC (rev 215568)
@@ -1,3 +1,27 @@
+2017-04-20 Jer Noble <[email protected]>
+
+ [MediaCapture] gUM() with CoreAudio fails if capturing audio in the UIProcess.
+ https://bugs.webkit.org/show_bug.cgi?id=171021
+
+ Reviewed by Eric Carlson.
+
+ Refactor the creation of RealtimeMediaSources to take a persistent device ID rather
+ than a CaptureDevice directly. This allows WebKit2 to iterate devices in the UIProcess
+ rather than the WebProcess.
+
+ * platform/mediastream/RealtimeMediaSource.h:
+ * platform/mediastream/mac/AVAudioCaptureSource.mm:
+ * platform/mediastream/mac/AVVideoCaptureSource.mm:
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ (WebCore::CoreAudioCaptureSource::create):
+ (WebCore::CoreAudioCaptureSource::CoreAudioCaptureSource):
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
+ (WebCore::RealtimeMediaSourceCenterMac::createMediaStream):
+ (WebCore::RealtimeMediaSourceCenterMac::bestSourcesForTypeAndConstraints):
+ * platform/mock/MockRealtimeAudioSource.cpp:
+ * platform/mock/MockRealtimeVideoSource.cpp:
+
2017-04-20 Tim Horton <[email protected]>
Make it possible to request the non-expanded scrollbar width from ScrollbarTheme
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2017-04-20 19:22:23 UTC (rev 215568)
@@ -37,6 +37,7 @@
#if ENABLE(MEDIA_STREAM)
#include "AudioSourceProvider.h"
+#include "CaptureDevice.h"
#include "Image.h"
#include "MediaConstraints.h"
#include "MediaSample.h"
@@ -54,7 +55,6 @@
namespace WebCore {
class AudioStreamDescription;
-class CaptureDevice;
class FloatRect;
class GraphicsContext;
class MediaStreamPrivate;
@@ -86,7 +86,7 @@
class CaptureFactory {
public:
virtual ~CaptureFactory() = default;
- virtual RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice&, const MediaConstraints*, String&) = 0;
+ virtual RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& audioDeviceID, CaptureDevice::DeviceType, const MediaConstraints*, String&) = 0;
protected:
CaptureFactory() = default;
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVAudioCaptureSource.mm 2017-04-20 19:22:23 UTC (rev 215568)
@@ -79,9 +79,9 @@
class AVAudioCaptureSourceFactory : public RealtimeMediaSource::CaptureFactory {
public:
- RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& captureDevice, const MediaConstraints* constraints, String& invalidConstraint) final {
- AVCaptureDeviceTypedef *device = [getAVCaptureDeviceClass() deviceWithUniqueID:captureDevice.persistentId()];
- ASSERT(!device || (device && captureDevice.type() == CaptureDevice::DeviceType::Audio));
+ RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String& invalidConstraint) final {
+ AVCaptureDeviceTypedef *device = [getAVCaptureDeviceClass() deviceWithUniqueID:deviceID];
+ ASSERT_UNUSED(type, !device || (device && type == CaptureDevice::DeviceType::Audio));
return device ? AVAudioCaptureSource::create(device, emptyString(), constraints, invalidConstraint) : nullptr;
}
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.mm 2017-04-20 19:22:23 UTC (rev 215568)
@@ -111,9 +111,9 @@
class AVVideoCaptureSourceFactory : public RealtimeMediaSource::CaptureFactory {
public:
- RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& captureDevice, const MediaConstraints* constraints, String& invalidConstraint) final {
- AVCaptureDeviceTypedef *device = [getAVCaptureDeviceClass() deviceWithUniqueID:captureDevice.persistentId()];
- ASSERT(!device || (captureDevice.type() == CaptureDevice::DeviceType::Video));
+ RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String& invalidConstraint) final {
+ AVCaptureDeviceTypedef *device = [getAVCaptureDeviceClass() deviceWithUniqueID:deviceID];
+ ASSERT_UNUSED(type, !device || (type == CaptureDevice::DeviceType::Video));
return device ? AVVideoCaptureSource::create(device, emptyString(), constraints, invalidConstraint) : nullptr;
}
};
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -46,8 +46,8 @@
class CoreAudioCaptureSourceFactory : public RealtimeMediaSource::CaptureFactory {
public:
- RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& captureDevice, const MediaConstraints* constraints, String& invalidConstraint) final {
- return CoreAudioCaptureSource::create(captureDevice, constraints, invalidConstraint);
+ RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String& invalidConstraint) final {
+ return CoreAudioCaptureSource::create(deviceID, type, constraints, invalidConstraint);
}
};
@@ -54,9 +54,18 @@
const UInt32 outputBus = 0;
const UInt32 inputBus = 1;
-RefPtr<CoreAudioCaptureSource> CoreAudioCaptureSource::create(const CaptureDevice& deviceInfo, const MediaConstraints* constraints, String& invalidConstraint)
+RefPtr<CoreAudioCaptureSource> CoreAudioCaptureSource::create(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String& invalidConstraint)
{
- auto source = adoptRef(new CoreAudioCaptureSource(deviceInfo));
+ if (type != CaptureDevice::DeviceType::Audio)
+ return nullptr;
+
+#if PLATFORM(MAC)
+ auto device = CoreAudioCaptureDeviceManager::singleton().deviceWithUID(deviceID, RealtimeMediaSource::Type::Audio);
+ if (!device)
+ return nullptr;
+#endif
+
+ auto source = adoptRef(new CoreAudioCaptureSource(deviceID));
if (constraints) {
auto result = source->applyConstraints(*constraints);
if (result) {
@@ -76,13 +85,13 @@
}
-CoreAudioCaptureSource::CoreAudioCaptureSource(const CaptureDevice& deviceInfo)
- : RealtimeMediaSource(emptyString(), RealtimeMediaSource::Type::Audio, deviceInfo.label())
+CoreAudioCaptureSource::CoreAudioCaptureSource(const String& deviceID)
+ : RealtimeMediaSource(emptyString(), RealtimeMediaSource::Type::Audio, emptyString())
, m_captureDeviceID(0)
{
#if PLATFORM(MAC)
for (auto& platformDevice : CoreAudioCaptureDeviceManager::singleton().coreAudioCaptureDevices()) {
- if (platformDevice->persistentId() == deviceInfo.persistentId()) {
+ if (platformDevice->persistentId() == deviceID) {
m_captureDeviceID = platformDevice->deviceID();
break;
}
@@ -90,7 +99,7 @@
ASSERT(m_captureDeviceID);
#endif
- setPersistentID(deviceInfo.persistentId());
+ setPersistentID(deviceID);
m_muted = true;
m_currentSettings.setVolume(1.0);
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2017-04-20 19:22:23 UTC (rev 215568)
@@ -53,7 +53,7 @@
class CoreAudioCaptureSource : public RealtimeMediaSource {
public:
- static RefPtr<CoreAudioCaptureSource> create(const CaptureDevice&, const MediaConstraints*, String&);
+ static RefPtr<CoreAudioCaptureSource> create(const String& deviceID, CaptureDevice::DeviceType, const MediaConstraints*, String&);
WEBCORE_EXPORT static CaptureFactory& factory();
@@ -68,7 +68,7 @@
CMClockRef timebaseClock();
private:
- CoreAudioCaptureSource(const CaptureDevice&);
+ CoreAudioCaptureSource(const String& deviceID);
virtual ~CoreAudioCaptureSource();
void startProducingData() final;
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (215567 => 215568)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -135,27 +135,21 @@
Vector<Ref<RealtimeMediaSource>> videoSources;
String invalidConstraint;
- if (!audioDeviceID.isEmpty()) {
- auto audioDevice = m_audioCaptureDeviceManager->deviceWithUID(audioDeviceID, RealtimeMediaSource::Type::Audio);
- if (audioDevice && m_audioFactory) {
- if (auto audioSource = m_audioFactory->createMediaSourceForCaptureDeviceWithConstraints(audioDevice.value(), audioConstraints, invalidConstraint))
- audioSources.append(audioSource.releaseNonNull());
+ if (!audioDeviceID.isEmpty() && m_audioFactory) {
+ if (auto audioSource = m_audioFactory->createMediaSourceForCaptureDeviceWithConstraints(audioDeviceID, CaptureDevice::DeviceType::Audio, audioConstraints, invalidConstraint))
+ audioSources.append(audioSource.releaseNonNull());
#if !LOG_DISABLED
- if (!invalidConstraint.isEmpty())
- LOG(Media, "RealtimeMediaSourceCenterMac::createMediaStream(%p), audio constraints failed to apply: %s", this, invalidConstraint.utf8().data());
+ if (!invalidConstraint.isEmpty())
+ LOG(Media, "RealtimeMediaSourceCenterMac::createMediaStream(%p), audio constraints failed to apply: %s", this, invalidConstraint.utf8().data());
#endif
- }
}
- if (!videoDeviceID.isEmpty()) {
- auto videoDevice = m_videoCaptureDeviceManager->deviceWithUID(videoDeviceID, RealtimeMediaSource::Type::Video);
- if (videoDevice && m_videoFactory) {
- if (auto videoSource = m_videoFactory->createMediaSourceForCaptureDeviceWithConstraints(videoDevice.value(), videoConstraints, invalidConstraint))
- videoSources.append(videoSource.releaseNonNull());
+ if (!videoDeviceID.isEmpty() && m_videoFactory) {
+ if (auto videoSource = m_videoFactory->createMediaSourceForCaptureDeviceWithConstraints(videoDeviceID, CaptureDevice::DeviceType::Video, videoConstraints, invalidConstraint))
+ videoSources.append(videoSource.releaseNonNull());
#if !LOG_DISABLED
if (!invalidConstraint.isEmpty())
LOG(Media, "RealtimeMediaSourceCenterMac::createMediaStream(%p), video constraints failed to apply: %s", this, invalidConstraint.utf8().data());
#endif
- }
}
if (videoSources.isEmpty() && audioSources.isEmpty())
@@ -197,7 +191,7 @@
if (!factory)
continue;
- if (auto captureSource = factory->createMediaSourceForCaptureDeviceWithConstraints(captureDevice, &constraints, invalidConstraint))
+ if (auto captureSource = factory->createMediaSourceForCaptureDeviceWithConstraints(captureDevice.persistentId(), deviceType, &constraints, invalidConstraint))
bestSources.append(captureSource.leakRef());
}
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp (215567 => 215568)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -43,9 +43,15 @@
class MockRealtimeAudioSourceFactory : public RealtimeMediaSource::CaptureFactory {
public:
- RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& captureDevice, const MediaConstraints* constraints, String&) final {
- if (captureDevice.type() == CaptureDevice::DeviceType::Audio)
- return MockRealtimeAudioSource::create(captureDevice.label(), constraints);
+ RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String&) final {
+ if (type != CaptureDevice::DeviceType::Audio)
+ return nullptr;
+
+ for (auto& device : MockRealtimeMediaSource::audioDevices()) {
+ if (device.persistentId() == deviceID)
+ return MockRealtimeAudioSource::create(device.label(), constraints);
+ }
+
return nullptr;
}
};
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (215567 => 215568)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -50,9 +50,15 @@
class MockRealtimeVideoSourceFactory : public RealtimeMediaSource::CaptureFactory {
public:
- RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& captureDevice, const MediaConstraints* constraints, String&) final {
- if (captureDevice.type() == CaptureDevice::DeviceType::Video)
- return MockRealtimeVideoSource::create(captureDevice.label(), constraints);
+ RefPtr<RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String&) final {
+ if (type != CaptureDevice::DeviceType::Video)
+ return nullptr;
+
+ for (auto& device : MockRealtimeMediaSource::videoDevices()) {
+ if (device.persistentId() == deviceID)
+ return MockRealtimeVideoSource::create(device.label(), constraints);
+ }
+
return nullptr;
}
};
Modified: trunk/Source/WebKit2/ChangeLog (215567 => 215568)
--- trunk/Source/WebKit2/ChangeLog 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/ChangeLog 2017-04-20 19:22:23 UTC (rev 215568)
@@ -1,3 +1,21 @@
+2017-04-20 Jer Noble <[email protected]>
+
+ [MediaCapture] gUM() with CoreAudio fails if capturing audio in the UIProcess.
+ https://bugs.webkit.org/show_bug.cgi?id=171021
+
+ Reviewed by Eric Carlson.
+
+ Pass a deviceID rather than a CaptureDevice across the process boundary.
+
+ * Shared/WebCoreArgumentCoders.h:
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.h:
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in:
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::createMediaSourceForCaptureDeviceWithConstraints):
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
2017-04-20 Alex Christensen <[email protected]>
Fix assertions in webProcessProxyFromConnection
Modified: trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h (215567 => 215568)
--- trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.h 2017-04-20 19:22:23 UTC (rev 215568)
@@ -26,6 +26,7 @@
#pragma once
#include "ArgumentCoders.h"
+#include <WebCore/CaptureDevice.h>
#include <WebCore/ColorSpace.h>
#include <WebCore/DiagnosticLoggingClient.h>
#include <WebCore/FrameLoaderTypes.h>
@@ -700,4 +701,15 @@
};
#endif
+#if ENABLE(MEDIA_STREAM)
+template<> struct EnumTraits<WebCore::CaptureDevice::DeviceType> {
+ using values = EnumValues<
+ WebCore::CaptureDevice::DeviceType,
+ WebCore::CaptureDevice::DeviceType::Unknown,
+ WebCore::CaptureDevice::DeviceType::Audio,
+ WebCore::CaptureDevice::DeviceType::Video
+ >;
+};
+#endif
+
} // namespace WTF
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (215567 => 215568)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -125,10 +125,10 @@
m_process.removeMessageReceiver(Messages::UserMediaCaptureManagerProxy::messageReceiverName());
}
-void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const CaptureDevice& device, const MediaConstraintsData& constraintsData, bool& succeeded, String& invalidConstraints)
+void UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::CaptureDevice::DeviceType type, const MediaConstraintsData& constraintsData, bool& succeeded, String& invalidConstraints)
{
auto constraints = MediaConstraintsImpl::create(constraintsData);
- auto source = RealtimeMediaSourceCenter::singleton().audioFactory()->createMediaSourceForCaptureDeviceWithConstraints(device, constraints.ptr(), invalidConstraints);
+ auto source = RealtimeMediaSourceCenter::singleton().audioFactory()->createMediaSourceForCaptureDeviceWithConstraints(deviceID, type, constraints.ptr(), invalidConstraints);
succeeded = !!source;
if (source)
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h (215567 => 215568)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.h 2017-04-20 19:22:23 UTC (rev 215568)
@@ -49,7 +49,7 @@
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;
- void createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const WebCore::CaptureDevice&, const WebCore::MediaConstraintsData&, bool& succeeded, String& invalidConstraints);
+ void createMediaSourceForCaptureDeviceWithConstraints(uint64_t id, const String& deviceID, WebCore::CaptureDevice::DeviceType, const WebCore::MediaConstraintsData&, bool& succeeded, String& invalidConstraints);
void startProducingData(uint64_t);
void stopProducingData(uint64_t);
void capabilities(uint64_t, WebCore::RealtimeMediaSourceCapabilities&);
Modified: trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in (215567 => 215568)
--- trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/UIProcess/Cocoa/UserMediaCaptureManagerProxy.messages.in 2017-04-20 19:22:23 UTC (rev 215568)
@@ -22,7 +22,7 @@
# THE POSSIBILITY OF SUCH DAMAGE.
messages -> UserMediaCaptureManagerProxy {
- CreateMediaSourceForCaptureDeviceWithConstraints(uint64_t id, WebCore::CaptureDevice device, struct WebCore::MediaConstraintsData constraints) -> (bool success, String invalidConstraints)
+ CreateMediaSourceForCaptureDeviceWithConstraints(uint64_t id, String deviceID, WebCore::CaptureDevice::DeviceType type, struct WebCore::MediaConstraintsData constraints) -> (bool success, String invalidConstraints)
StartProducingData(uint64_t id)
StopProducingData(uint64_t id)
Capabilities(uint64_t id) -> (WebCore::RealtimeMediaSourceCapabilities capabilities)
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp (215567 => 215568)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.cpp 2017-04-20 19:22:23 UTC (rev 215568)
@@ -164,7 +164,7 @@
RealtimeMediaSourceCenter::singleton().setAudioFactory(*this);
}
-RefPtr<RealtimeMediaSource> UserMediaCaptureManager::createMediaSourceForCaptureDeviceWithConstraints(const CaptureDevice& device, const MediaConstraints* constraints, String& invalidConstraints)
+RefPtr<RealtimeMediaSource> UserMediaCaptureManager::createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, CaptureDevice::DeviceType type, const MediaConstraints* constraints, String& invalidConstraints)
{
if (!constraints)
return nullptr;
@@ -176,9 +176,22 @@
constraintsData.isValid = constraints->isValid();
bool succeeded;
- m_process.sendSync(Messages::UserMediaCaptureManagerProxy::CreateMediaSourceForCaptureDeviceWithConstraints(id, device, constraintsData), Messages::UserMediaCaptureManagerProxy::CreateMediaSourceForCaptureDeviceWithConstraints::Reply(succeeded, invalidConstraints), 0);
+ m_process.sendSync(Messages::UserMediaCaptureManagerProxy::CreateMediaSourceForCaptureDeviceWithConstraints(id, deviceID, type, constraintsData), Messages::UserMediaCaptureManagerProxy::CreateMediaSourceForCaptureDeviceWithConstraints::Reply(succeeded, invalidConstraints), 0);
- auto source = adoptRef(new Source(String::number(id), RealtimeMediaSource::Type::Audio, device.label(), id, *this));
+ RealtimeMediaSource::Type sourceType;
+ switch (type) {
+ case WebCore::CaptureDevice::DeviceType::Audio:
+ sourceType = WebCore::RealtimeMediaSource::Type::Audio;
+ break;
+ case WebCore::CaptureDevice::DeviceType::Video:
+ sourceType = WebCore::RealtimeMediaSource::Type::Video;
+ break;
+ case WebCore::CaptureDevice::DeviceType::Unknown:
+ default:
+ sourceType = WebCore::RealtimeMediaSource::Type::None;
+ break;
+ }
+ auto source = adoptRef(new Source(String::number(id), sourceType, emptyString(), id, *this));
m_sources.set(id, source);
return source;
}
Modified: trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h (215567 => 215568)
--- trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-04-20 19:13:24 UTC (rev 215567)
+++ trunk/Source/WebKit2/WebProcess/cocoa/UserMediaCaptureManager.h 2017-04-20 19:22:23 UTC (rev 215568)
@@ -54,7 +54,7 @@
void initialize(const WebProcessCreationParameters&) final;
// WebCore::RealtimeMediaSource::Factory:
- RefPtr<WebCore::RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&) final;
+ RefPtr<WebCore::RealtimeMediaSource> createMediaSourceForCaptureDeviceWithConstraints(const String& deviceID, WebCore::CaptureDevice::DeviceType, const WebCore::MediaConstraints*, String&) final;
// IPC::MessageReceiver
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;