Title: [215568] trunk/Source
Revision
215568
Author
[email protected]
Date
2017-04-20 12:22:23 -0700 (Thu, 20 Apr 2017)

Log Message

[MediaCapture] gUM() with CoreAudio fails if capturing audio in the UIProcess.
https://bugs.webkit.org/show_bug.cgi?id=171021

Reviewed by Eric Carlson.

Source/WebCore:

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:

Source/WebKit2:

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:

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to