Diff
Modified: trunk/Source/WebCore/ChangeLog (239023 => 239024)
--- trunk/Source/WebCore/ChangeLog 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/ChangeLog 2018-12-10 05:30:23 UTC (rev 239024)
@@ -1,3 +1,58 @@
+2018-12-09 Youenn Fablet <you...@apple.com>
+
+ Move capture manager from RealtimeMediaSourceCenter to capture factory
+ https://bugs.webkit.org/show_bug.cgi?id=192542
+
+ Reviewed by Eric Carlson.
+
+ We should be able to run mock captures in wither UIProcess or WebProcess.
+ Currently, mock capture is only done in WebProcess.
+ This patch is a first step towards that goal.
+
+ It also simplifies RealtimeMediaSourceCenter implementation by starting to remove virtual methods.
+ Further refactoring will remove the need to subclass RealtimeMediaSourceCenter.
+ Instead, remaining virtual methods will become non virtual and their
+ implementation will become port specific.
+
+ Removed a JS internal method that is not longer used to further simplify RealtimeMediaSourceCenter.
+
+ No visible change of behavior.
+ Covered by existing tests.
+
+ * platform/mediastream/CaptureDeviceManager.h:
+ * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+ (WebCore::RealtimeMediaSourceCenter::singleton):
+ (WebCore::RealtimeMediaSourceCenter::getMediaStreamDevices):
+ (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices):
+ (WebCore::RealtimeMediaSourceCenter::getUserMediaDevices):
+ (WebCore::RealtimeMediaSourceCenter::captureDeviceWithPersistentID):
+ (WebCore::RealtimeMediaSourceCenter::unsetAudioFactory):
+ (WebCore::RealtimeMediaSourceCenter::unsetVideoFactory):
+ (WebCore::RealtimeMediaSourceCenter::unsetDisplayCaptureFactory):
+ * platform/mediastream/RealtimeMediaSourceCenter.h:
+ * platform/mediastream/RealtimeMediaSourceFactory.h:
+ * platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp:
+ * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
+ * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp:
+ * platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h:
+ * platform/mediastream/mac/CoreAudioCaptureSource.cpp:
+ (WebCore::CoreAudioCaptureSourceFactory::audioCaptureDeviceManager):
+ * platform/mediastream/mac/CoreAudioCaptureSource.h:
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.h:
+ * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+ (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
+ (WebCore::MockRealtimeMediaSourceCenter::audioFactory):
+ (WebCore::MockRealtimeMediaSourceCenter::videoFactory):
+ (WebCore::MockRealtimeMediaSourceCenter::displayCaptureFactory):
+ * platform/mock/MockRealtimeMediaSourceCenter.h:
+ (WebCore::MockRealtimeMediaSourceCenter::audioCaptureDeviceManager):
+ (WebCore::MockRealtimeMediaSourceCenter::videoCaptureDeviceManager):
+ (WebCore::MockRealtimeMediaSourceCenter::displayCaptureDeviceManager):
+ * testing/Internals.cpp:
+ * testing/Internals.h:
+ * testing/Internals.idl:
+
2018-12-09 Commit Queue <commit-qu...@webkit.org>
Unreviewed, rolling out r239010.
Modified: trunk/Source/WebCore/platform/mediastream/CaptureDeviceManager.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/CaptureDeviceManager.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/CaptureDeviceManager.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -33,7 +33,7 @@
namespace WebCore {
-class CaptureDeviceManager : public CanMakeWeakPtr<CaptureDeviceManager> {
+class WEBCORE_EXPORT CaptureDeviceManager : public CanMakeWeakPtr<CaptureDeviceManager> {
public:
virtual const Vector<CaptureDevice>& captureDevices() = 0;
virtual std::optional<CaptureDevice> captureDeviceWithPersistentID(CaptureDevice::DeviceType, const String&) { return std::nullopt; }
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -35,11 +35,6 @@
#if ENABLE(MEDIA_STREAM)
-// FIXME: GTK to implement its own RealtimeMediaSourceCenter.
-#if PLATFORM(GTK)
-#include "MockRealtimeMediaSourceCenter.h"
-#endif
-
#include "CaptureDeviceManager.h"
#include "Logging.h"
#include "MediaStreamPrivate.h"
@@ -47,25 +42,12 @@
namespace WebCore {
-static RealtimeMediaSourceCenter*& mediaStreamCenterOverride()
-{
- static RealtimeMediaSourceCenter* override;
- return override;
-}
RealtimeMediaSourceCenter& RealtimeMediaSourceCenter::singleton()
{
- RealtimeMediaSourceCenter* override = mediaStreamCenterOverride();
- if (override)
- return *override;
return RealtimeMediaSourceCenter::platformCenter();
}
-void RealtimeMediaSourceCenter::setSharedStreamCenterOverride(RealtimeMediaSourceCenter* center)
-{
- mediaStreamCenterOverride() = center;
-}
-
RealtimeMediaSourceCenter::RealtimeMediaSourceCenter()
{
m_supportedConstraints.setSupportsWidth(true);
@@ -124,15 +106,15 @@
Vector<CaptureDevice> RealtimeMediaSourceCenter::getMediaStreamDevices()
{
Vector<CaptureDevice> result;
- for (auto& device : audioCaptureDeviceManager().captureDevices()) {
+ for (auto& device : audioFactory().audioCaptureDeviceManager().captureDevices()) {
if (device.enabled())
result.append(device);
}
- for (auto& device : videoCaptureDeviceManager().captureDevices()) {
+ for (auto& device : videoFactory().videoCaptureDeviceManager().captureDevices()) {
if (device.enabled())
result.append(device);
}
- for (auto& device : displayCaptureDeviceManager().captureDevices()) {
+ for (auto& device : displayCaptureFactory().displayCaptureDeviceManager().captureDevices()) {
if (device.enabled())
result.append(device);
}
@@ -172,32 +154,6 @@
return SHA1::hexDigest(digest).data();
}
-CaptureDevice RealtimeMediaSourceCenter::captureDeviceWithUniqueID(const String& uniqueID, const String& idHashSalt)
-{
- for (auto& device : getMediaStreamDevices()) {
- if (uniqueID == hashStringWithSalt(device.persistentId(), idHashSalt))
- return device;
- }
-
- return { };
-}
-
-ExceptionOr<void> RealtimeMediaSourceCenter::setDeviceEnabled(const String& id, bool enabled)
-{
- for (auto& captureDevice : getMediaStreamDevices()) {
- if (id == captureDevice.persistentId()) {
- if (enabled != captureDevice.enabled()) {
- captureDevice.setEnabled(enabled);
- captureDevicesChanged();
- }
-
- return { };
- }
- }
-
- return Exception { NotFoundError };
-}
-
void RealtimeMediaSourceCenter::setDevicesChangedObserver(std::function<void()>&& observer)
{
ASSERT(isMainThread());
@@ -218,7 +174,7 @@
return;
String invalidConstraint;
- for (auto& device : displayCaptureDeviceManager().captureDevices()) {
+ for (auto& device : displayCaptureFactory().displayCaptureDeviceManager().captureDevices()) {
if (!device.enabled())
return;
@@ -235,7 +191,7 @@
{
String invalidConstraint;
if (request.audioConstraints.isValid) {
- for (auto& device : audioCaptureDeviceManager().captureDevices()) {
+ for (auto& device : audioFactory().audioCaptureDeviceManager().captureDevices()) {
if (!device.enabled())
continue;
@@ -249,7 +205,7 @@
}
if (request.videoConstraints.isValid) {
- for (auto& device : videoCaptureDeviceManager().captureDevices()) {
+ for (auto& device : videoFactory().videoCaptureDeviceManager().captureDevices()) {
if (!device.enabled())
continue;
@@ -314,16 +270,16 @@
{
switch (type) {
case CaptureDevice::DeviceType::Camera:
- return videoCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
+ return videoFactory().videoCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
break;
case CaptureDevice::DeviceType::Microphone:
- return audioCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
+ return audioFactory().audioCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
break;
case CaptureDevice::DeviceType::Screen:
case CaptureDevice::DeviceType::Application:
case CaptureDevice::DeviceType::Window:
case CaptureDevice::DeviceType::Browser:
- return displayCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
+ return displayCaptureFactory().displayCaptureDeviceManager().captureDeviceWithPersistentID(type, id);
break;
case CaptureDevice::DeviceType::Unknown:
ASSERT_NOT_REACHED();
@@ -341,7 +297,8 @@
void RealtimeMediaSourceCenter::unsetAudioFactory(AudioCaptureFactory& oldOverride)
{
ASSERT_UNUSED(oldOverride, audioFactoryOverride == &oldOverride);
- audioFactoryOverride = nullptr;
+ if (&oldOverride == audioFactoryOverride)
+ audioFactoryOverride = nullptr;
}
AudioCaptureFactory& RealtimeMediaSourceCenter::audioFactory()
@@ -357,7 +314,8 @@
void RealtimeMediaSourceCenter::unsetVideoFactory(VideoCaptureFactory& oldOverride)
{
ASSERT_UNUSED(oldOverride, videoFactoryOverride == &oldOverride);
- videoFactoryOverride = nullptr;
+ if (&oldOverride == videoFactoryOverride)
+ videoFactoryOverride = nullptr;
}
VideoCaptureFactory& RealtimeMediaSourceCenter::videoFactory()
@@ -373,7 +331,8 @@
void RealtimeMediaSourceCenter::unsetDisplayCaptureFactory(DisplayCaptureFactory& oldOverride)
{
ASSERT_UNUSED(oldOverride, displayCaptureFactoryOverride == &oldOverride);
- displayCaptureFactoryOverride = nullptr;
+ if (&oldOverride == displayCaptureFactoryOverride)
+ displayCaptureFactoryOverride = nullptr;
}
DisplayCaptureFactory& RealtimeMediaSourceCenter::displayCaptureFactory()
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -55,10 +55,10 @@
class RealtimeMediaSourceCenter {
public:
+ static RealtimeMediaSourceCenter& platformCenter();
virtual ~RealtimeMediaSourceCenter();
WEBCORE_EXPORT static RealtimeMediaSourceCenter& singleton();
- static void setSharedStreamCenterOverride(RealtimeMediaSourceCenter*);
using ValidConstraintsHandler = WTF::Function<void(Vector<CaptureDevice>&& audioDeviceUIDs, Vector<CaptureDevice>&& videoDeviceUIDs, String&&)>;
using InvalidConstraintsHandler = WTF::Function<void(const String& invalidConstraint)>;
@@ -67,7 +67,7 @@
using NewMediaStreamHandler = WTF::Function<void(RefPtr<MediaStreamPrivate>&&)>;
virtual void createMediaStream(NewMediaStreamHandler&&, String&&, CaptureDevice&& audioDevice, CaptureDevice&& videoDevice, const MediaStreamRequest&);
- WEBCORE_EXPORT virtual Vector<CaptureDevice> getMediaStreamDevices();
+ WEBCORE_EXPORT Vector<CaptureDevice> getMediaStreamDevices();
WEBCORE_EXPORT std::optional<CaptureDevice> captureDeviceWithPersistentID(CaptureDevice::DeviceType, const String&);
const RealtimeMediaSourceSupportedConstraints& supportedConstraints() { return m_supportedConstraints; }
@@ -84,13 +84,7 @@
WEBCORE_EXPORT static void setDisplayCaptureFactory(DisplayCaptureFactory&);
WEBCORE_EXPORT static void unsetDisplayCaptureFactory(DisplayCaptureFactory&);
- virtual CaptureDeviceManager& audioCaptureDeviceManager() = 0;
- virtual CaptureDeviceManager& videoCaptureDeviceManager() = 0;
- virtual CaptureDeviceManager& displayCaptureDeviceManager() = 0;
-
WEBCORE_EXPORT String hashStringWithSalt(const String& id, const String& hashSalt);
- WEBCORE_EXPORT CaptureDevice captureDeviceWithUniqueID(const String& id, const String& hashSalt);
- WEBCORE_EXPORT ExceptionOr<void> setDeviceEnabled(const String&, bool);
WEBCORE_EXPORT void setDevicesChangedObserver(std::function<void()>&&);
@@ -101,7 +95,6 @@
protected:
RealtimeMediaSourceCenter();
- static RealtimeMediaSourceCenter& platformCenter();
RealtimeMediaSourceSupportedConstraints m_supportedConstraints;
WEBCORE_EXPORT virtual AudioCaptureFactory& audioFactoryPrivate() = 0;
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -32,6 +32,7 @@
namespace WebCore {
class CaptureDevice;
+class CaptureDeviceManager;
class RealtimeMediaSource;
struct CaptureSourceOrError;
@@ -55,6 +56,7 @@
public:
virtual ~AudioCaptureFactory() = default;
virtual CaptureSourceOrError createAudioCaptureSource(const CaptureDevice&, String&&, const MediaConstraints*) = 0;
+ virtual CaptureDeviceManager& audioCaptureDeviceManager() = 0;
protected:
AudioCaptureFactory() = default;
@@ -68,6 +70,7 @@
public:
virtual ~VideoCaptureFactory() = default;
virtual CaptureSourceOrError createVideoCaptureSource(const CaptureDevice&, String&&, const MediaConstraints*) = 0;
+ virtual CaptureDeviceManager& videoCaptureDeviceManager() = 0;
virtual void setVideoCapturePageState(bool, bool) { }
protected:
@@ -78,6 +81,7 @@
public:
virtual ~DisplayCaptureFactory() = default;
virtual CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
+ virtual CaptureDeviceManager& displayCaptureDeviceManager() = 0;
virtual void setDisplayCapturePageState(bool , bool) { }
protected:
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -57,6 +57,8 @@
{
return GStreamerAudioCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints);
}
+private:
+ CaptureDeviceManager& audioCaptureDeviceManager() final { return GStreamerAudioCaptureDeviceManager::singleton(); }
};
static GStreamerAudioCaptureSourceFactory& libWebRTCAudioCaptureSourceFactory()
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -71,6 +71,8 @@
{
return GStreamerVideoCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints);
}
+private:
+ CaptureDeviceManager& videoCaptureDeviceManager() final { return GStreamerVideoCaptureDeviceManager::singleton(); }
};
VideoCaptureFactory& libWebRTCVideoCaptureSourceFactory()
@@ -86,6 +88,8 @@
// FIXME: Implement this.
return { };
}
+private:
+ CaptureDeviceManager& displayCaptureDeviceManager() final { return GStreamerDisplayCaptureDeviceManager::singleton(); }
};
DisplayCaptureFactory& libWebRTCDisplayCaptureSourceFactory()
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -26,7 +26,6 @@
#include "GStreamerAudioCaptureSource.h"
#include "GStreamerCaptureDevice.h"
-#include "GStreamerCaptureDeviceManager.h"
#include "GStreamerVideoCaptureSource.h"
#include <wtf/MainThread.h>
@@ -67,21 +66,6 @@
return GStreamerVideoCaptureSource::displayFactory();
}
-CaptureDeviceManager& RealtimeMediaSourceCenterLibWebRTC::audioCaptureDeviceManager()
-{
- return GStreamerAudioCaptureDeviceManager::singleton();
-}
-
-CaptureDeviceManager& RealtimeMediaSourceCenterLibWebRTC::videoCaptureDeviceManager()
-{
- return GStreamerVideoCaptureDeviceManager::singleton();
-}
-
-CaptureDeviceManager& RealtimeMediaSourceCenterLibWebRTC::displayCaptureDeviceManager()
-{
- return GStreamerDisplayCaptureDeviceManager::singleton();
-}
-
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM) && USE(LIBWEBRTC)
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -46,12 +46,6 @@
AudioCaptureFactory& audioFactoryPrivate() final;
VideoCaptureFactory& videoFactoryPrivate() final;
DisplayCaptureFactory& displayCaptureFactoryPrivate() final;
-
- CaptureDeviceManager& audioCaptureDeviceManager() final;
- CaptureDeviceManager& videoCaptureDeviceManager() final;
- CaptureDeviceManager& displayCaptureDeviceManager() final;
-
- AudioCaptureFactory* m_audioFactoryOverride { nullptr };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -774,6 +774,15 @@
return CoreAudioCaptureSourceFactory::singleton();
}
+CaptureDeviceManager& CoreAudioCaptureSourceFactory::audioCaptureDeviceManager()
+{
+#if PLATFORM(MAC)
+ return CoreAudioCaptureDeviceManager::singleton();
+#else
+ return AVAudioSessionCaptureDeviceManager::singleton();
+#endif
+}
+
CoreAudioCaptureSource::CoreAudioCaptureSource(String&& deviceID, String&& label, String&& hashSalt, uint32_t persistentID)
: RealtimeMediaSource(RealtimeMediaSource::Type::Audio, WTFMove(label), WTFMove(deviceID), WTFMove(hashSalt))
, m_captureDeviceID(persistentID)
Modified: trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -130,6 +130,8 @@
{
return CoreAudioCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints);
}
+
+ CaptureDeviceManager& audioCaptureDeviceManager() final;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -33,10 +33,8 @@
#if ENABLE(MEDIA_STREAM)
#include "RealtimeMediaSourceCenterMac.h"
-#include "AVAudioSessionCaptureDeviceManager.h"
#include "AVCaptureDeviceManager.h"
#include "AVVideoCaptureSource.h"
-#include "CoreAudioCaptureDeviceManager.h"
#include "CoreAudioCaptureSource.h"
#include "DisplayCaptureManagerCocoa.h"
#include "Logging.h"
@@ -55,8 +53,8 @@
return AVVideoCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints);
}
+private:
#if PLATFORM(IOS_FAMILY)
-private:
void setVideoCapturePageState(bool interrupted, bool pageMuted)
{
if (activeSource())
@@ -63,6 +61,8 @@
activeSource()->setInterrupted(interrupted, pageMuted);
}
#endif
+
+ CaptureDeviceManager& videoCaptureDeviceManager() { return AVCaptureDeviceManager::singleton(); }
};
class DisplayCaptureSourceFactoryMac final : public DisplayCaptureFactory {
@@ -93,6 +93,8 @@
return { };
}
+private:
+ CaptureDeviceManager& displayCaptureDeviceManager() { return DisplayCaptureManagerCocoa::singleton(); }
};
RealtimeMediaSourceCenterMac& RealtimeMediaSourceCenterMac::singleton()
@@ -129,25 +131,6 @@
return factory.get();
}
-CaptureDeviceManager& RealtimeMediaSourceCenterMac::audioCaptureDeviceManager()
-{
-#if PLATFORM(MAC)
- return CoreAudioCaptureDeviceManager::singleton();
-#else
- return AVAudioSessionCaptureDeviceManager::singleton();
-#endif
-}
-
-CaptureDeviceManager& RealtimeMediaSourceCenterMac::videoCaptureDeviceManager()
-{
- return AVCaptureDeviceManager::singleton();
-}
-
-CaptureDeviceManager& RealtimeMediaSourceCenterMac::displayCaptureDeviceManager()
-{
- return DisplayCaptureManagerCocoa::singleton();
-}
-
} // namespace WebCore
#endif // ENABLE(MEDIA_STREAM)
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -52,12 +52,6 @@
AudioCaptureFactory& audioFactoryPrivate() final;
VideoCaptureFactory& videoFactoryPrivate() final;
DisplayCaptureFactory& displayCaptureFactoryPrivate() final;
-
- CaptureDeviceManager& audioCaptureDeviceManager() final;
- CaptureDeviceManager& videoCaptureDeviceManager() final;
- CaptureDeviceManager& displayCaptureDeviceManager() final;
-
- AudioCaptureFactory* m_audioFactoryOverride { nullptr };
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (239023 => 239024)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -94,8 +94,8 @@
return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, WTFMove(hashSalt), constraints);
}
+private:
#if PLATFORM(IOS_FAMILY)
-private:
void setVideoCapturePageState(bool interrupted, bool pageMuted)
{
if (activeSource())
@@ -102,6 +102,7 @@
activeSource()->setInterrupted(interrupted, pageMuted);
}
#endif
+ CaptureDeviceManager& videoCaptureDeviceManager() final { return MockRealtimeMediaSourceCenter::singleton().videoCaptureDeviceManager(); }
};
class MockRealtimeDisplaySourceFactory : public DisplayCaptureFactory {
@@ -126,6 +127,8 @@
return { };
}
+private:
+ CaptureDeviceManager& displayCaptureDeviceManager() final { return MockRealtimeMediaSourceCenter::singleton().displayCaptureDeviceManager(); }
};
class MockRealtimeAudioSourceFactory : public AudioCaptureFactory {
@@ -137,6 +140,8 @@
return MockRealtimeAudioSource::create(String { device.persistentId() }, String { device.label() }, WTFMove(hashSalt), constraints);
}
+private:
+ CaptureDeviceManager& audioCaptureDeviceManager() final { return MockRealtimeMediaSourceCenter::singleton().audioCaptureDeviceManager(); }
};
static Vector<MockMediaDevice>& devices()
@@ -179,10 +184,24 @@
void MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled(bool enabled)
{
static bool active = false;
- if (active != enabled) {
- active = enabled;
- RealtimeMediaSourceCenter::setSharedStreamCenterOverride(enabled ? &singleton() : nullptr);
+ if (active == enabled)
+ return;
+
+ active = enabled;
+
+ RealtimeMediaSourceCenter& center = RealtimeMediaSourceCenter::singleton();
+ MockRealtimeMediaSourceCenter& mock = singleton();
+
+ if (active) {
+ center.setAudioFactory(mock.audioFactory());
+ center.setVideoFactory(mock.videoFactory());
+ center.setDisplayCaptureFactory(mock.displayCaptureFactory());
+ return;
}
+
+ center.unsetAudioFactory(mock.audioFactory());
+ center.unsetVideoFactory(mock.videoFactory());
+ center.unsetDisplayCaptureFactory(mock.displayCaptureFactory());
}
static void createCaptureDevice(const MockMediaDevice& device)
@@ -310,19 +329,19 @@
return displayDevices;
}
-AudioCaptureFactory& MockRealtimeMediaSourceCenter::audioFactoryPrivate()
+AudioCaptureFactory& MockRealtimeMediaSourceCenter::audioFactory()
{
static NeverDestroyed<MockRealtimeAudioSourceFactory> factory;
return factory.get();
}
-VideoCaptureFactory& MockRealtimeMediaSourceCenter::videoFactoryPrivate()
+VideoCaptureFactory& MockRealtimeMediaSourceCenter::videoFactory()
{
static NeverDestroyed<MockRealtimeVideoSourceFactory> factory;
return factory.get();
}
-DisplayCaptureFactory& MockRealtimeMediaSourceCenter::displayCaptureFactoryPrivate()
+DisplayCaptureFactory& MockRealtimeMediaSourceCenter::displayCaptureFactory()
{
static NeverDestroyed<MockRealtimeDisplaySourceFactory> factory;
return factory.get();
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h (239023 => 239024)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -36,8 +36,10 @@
namespace WebCore {
-class MockRealtimeMediaSourceCenter final : public RealtimeMediaSourceCenter {
+class MockRealtimeMediaSourceCenter {
public:
+ static MockRealtimeMediaSourceCenter& singleton();
+
WEBCORE_EXPORT static void setMockRealtimeMediaSourceCenterEnabled(bool);
WEBCORE_EXPORT static void setDevices(Vector<MockMediaDevice>&&);
@@ -52,20 +54,18 @@
static std::optional<MockMediaDevice> mockDeviceWithPersistentID(const String&);
static std::optional<CaptureDevice> captureDeviceWithPersistentID(CaptureDevice::DeviceType, const String&);
+ CaptureDeviceManager& audioCaptureDeviceManager() { return m_audioCaptureDeviceManager; }
+ CaptureDeviceManager& videoCaptureDeviceManager() { return m_videoCaptureDeviceManager; }
+ CaptureDeviceManager& displayCaptureDeviceManager() { return m_displayCaptureDeviceManager; }
+
private:
MockRealtimeMediaSourceCenter() = default;
friend NeverDestroyed<MockRealtimeMediaSourceCenter>;
- static MockRealtimeMediaSourceCenter& singleton();
+ AudioCaptureFactory& audioFactory();
+ VideoCaptureFactory& videoFactory();
+ DisplayCaptureFactory& displayCaptureFactory();
- AudioCaptureFactory& audioFactoryPrivate() final;
- VideoCaptureFactory& videoFactoryPrivate() final;
- DisplayCaptureFactory& displayCaptureFactoryPrivate() final;
-
- CaptureDeviceManager& audioCaptureDeviceManager() final { return m_audioCaptureDeviceManager; }
- CaptureDeviceManager& videoCaptureDeviceManager() final { return m_videoCaptureDeviceManager; }
- CaptureDeviceManager& displayCaptureDeviceManager() final { return m_displayCaptureDeviceManager; }
-
class MockAudioCaptureDeviceManager final : public CaptureDeviceManager {
private:
const Vector<CaptureDevice>& captureDevices() final { return MockRealtimeMediaSourceCenter::audioDevices(); }
Modified: trunk/Source/WebCore/testing/Internals.cpp (239023 => 239024)
--- trunk/Source/WebCore/testing/Internals.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/testing/Internals.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -4533,27 +4533,6 @@
m_nextTrackFramePromise = std::nullopt;
}
-ExceptionOr<void> Internals::setMediaDeviceState(const String& id, const String& property, bool value)
-{
- auto* document = contextDocument();
- if (!document)
- return Exception { InvalidAccessError, "No context document"_s };
-
- if (!equalLettersIgnoringASCIICase(property, "enabled"))
- return Exception { InvalidAccessError, makeString("\"" + property, "\" is not a valid property for this method.") };
-
- auto salt = document->deviceIDHashSalt();
- CaptureDevice device = RealtimeMediaSourceCenter::singleton().captureDeviceWithUniqueID(id, salt);
- if (!device)
- return Exception { InvalidAccessError, makeString("device with ID \"" + id, "\" not found.") };
-
- auto result = RealtimeMediaSourceCenter::singleton().setDeviceEnabled(device.persistentId(), value);
- if (result.hasException())
- return result.releaseException();
-
- return { };
-}
-
void Internals::delayMediaStreamTrackSamples(MediaStreamTrack& track, float delay)
{
track.source().delaySamples(Seconds { delay });
Modified: trunk/Source/WebCore/testing/Internals.h (239023 => 239024)
--- trunk/Source/WebCore/testing/Internals.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/testing/Internals.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -677,7 +677,6 @@
#if ENABLE(MEDIA_STREAM)
void setCameraMediaStreamTrackOrientation(MediaStreamTrack&, int orientation);
- ExceptionOr<void> setMediaDeviceState(const String& id, const String& property, bool value);
unsigned long trackAudioSampleCount() const { return m_trackAudioSampleCount; }
unsigned long trackVideoSampleCount() const { return m_trackVideoSampleCount; }
void observeMediaStreamTrack(MediaStreamTrack&);
Modified: trunk/Source/WebCore/testing/Internals.idl (239023 => 239024)
--- trunk/Source/WebCore/testing/Internals.idl 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebCore/testing/Internals.idl 2018-12-10 05:30:23 UTC (rev 239024)
@@ -664,7 +664,6 @@
[Conditional=MEDIA_STREAM] Promise<ImageData> grabNextMediaStreamTrackFrame();
[Conditional=MEDIA_STREAM] readonly attribute unsigned long trackAudioSampleCount;
[Conditional=MEDIA_STREAM] readonly attribute unsigned long trackVideoSampleCount;
- [Conditional=MEDIA_STREAM, MayThrowException] void setMediaDeviceState(DOMString deviceID, DOMString property, boolean value);
[Conditional=MEDIA_STREAM] void delayMediaStreamTrackSamples(MediaStreamTrack track, float delay);
[Conditional=MEDIA_STREAM] void setMediaStreamTrackMuted(MediaStreamTrack track, boolean muted);
[Conditional=MEDIA_STREAM] void removeMediaStreamTrack(MediaStream stream, MediaStreamTrack track);
Modified: trunk/Source/WebKit/ChangeLog (239023 => 239024)
--- trunk/Source/WebKit/ChangeLog 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebKit/ChangeLog 2018-12-10 05:30:23 UTC (rev 239024)
@@ -1,3 +1,23 @@
+2018-12-09 Youenn Fablet <you...@apple.com>
+
+ Move capture manager from RealtimeMediaSourceCenter to capture factory
+ https://bugs.webkit.org/show_bug.cgi?id=192542
+
+ Reviewed by Eric Carlson.
+
+ Make sure to unregister for video capture as done for other capture types.
+ Implement manager which should be doing nothing as the manager is used for enumeration of devices
+ which should only happen in UIProcess.
+
+ Given that mock capture is interfering with UserMediaCaptureManager,
+ switching on/off mock capture will require creating a new process.
+ This shortcoming should be fixed once mock capture will be fully happening in
+ the same process as regular capture.
+
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager):
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
2018-12-09 Saam barati <sbar...@apple.com>
Enable HTTP and HTTPS proxies on iOS and make it a property of the NSURLSession
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (239023 => 239024)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2018-12-10 05:30:23 UTC (rev 239024)
@@ -207,6 +207,7 @@
{
RealtimeMediaSourceCenter::unsetAudioFactory(*this);
RealtimeMediaSourceCenter::unsetDisplayCaptureFactory(*this);
+ RealtimeMediaSourceCenter::unsetVideoFactory(*this);
m_process.removeMessageReceiver(Messages::UserMediaCaptureManager::messageReceiverName());
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h (239023 => 239024)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2018-12-10 01:56:16 UTC (rev 239023)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2018-12-10 05:30:23 UTC (rev 239024)
@@ -30,6 +30,7 @@
#include "MessageReceiver.h"
#include "SharedMemory.h"
#include "WebProcessSupplement.h"
+#include <WebCore/CaptureDeviceManager.h>
#include <WebCore/RealtimeMediaSource.h>
#include <WebCore/RealtimeMediaSourceFactory.h>
#include <wtf/HashMap.h>
@@ -61,6 +62,23 @@
WebCore::CaptureSourceOrError createDisplayCaptureSource(const WebCore::CaptureDevice& device, const WebCore::MediaConstraints* constraints) final { return createCaptureSource(device, { }, constraints); }
WebCore::CaptureSourceOrError createCaptureSource(const WebCore::CaptureDevice&, String&&, const WebCore::MediaConstraints*);
+ class NoOpCaptureDeviceManager : public WebCore::CaptureDeviceManager {
+ public:
+ NoOpCaptureDeviceManager() = default;
+
+ private:
+ const Vector<WebCore::CaptureDevice>& captureDevices() final
+ {
+ ASSERT_NOT_REACHED();
+ return m_emptyDevices;
+ }
+ Vector<WebCore::CaptureDevice> m_emptyDevices;
+ };
+
+ WebCore::CaptureDeviceManager& audioCaptureDeviceManager() final { return m_noOpCaptureDeviceManager; }
+ WebCore::CaptureDeviceManager& videoCaptureDeviceManager() final { return m_noOpCaptureDeviceManager; }
+ WebCore::CaptureDeviceManager& displayCaptureDeviceManager() final { return m_noOpCaptureDeviceManager; }
+
// IPC::MessageReceiver
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
@@ -86,6 +104,7 @@
friend class Source;
HashMap<uint64_t, RefPtr<Source>> m_sources;
WebProcess& m_process;
+ NoOpCaptureDeviceManager m_noOpCaptureDeviceManager;
};
} // namespace WebKit