WebKit Bugzilla
Attachment 356925 Details for
Bug 192542
: Move capture manager from RealtimeMediaSourceCenter to capture factory
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192542-20181209102901.patch (text/plain), 39.24 KB, created by
youenn fablet
on 2018-12-09 10:29:02 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
youenn fablet
Created:
2018-12-09 10:29:02 PST
Size:
39.24 KB
patch
obsolete
>Subversion Revision: 239012 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ff73f217f12562e8b3fb963d392b3c040696a135..08892adc53b2b86383bc13a4bcfac91a4b145cb0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,62 @@ >+2018-12-09 Youenn Fablet <youenn@apple.com> >+ >+ Move capture manager from RealtimeMediaSourceCenter to capture factory >+ https://bugs.webkit.org/show_bug.cgi?id=192542 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ We should be able to run mock captures in wither UIProcess or WebProcess. >+ Curretnly, 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. >+ >+ No visible chnage 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: >+ * testing/MockLibWebRTCPeerConnection.cpp: >+ (WebCore::useMockRTCPeerConnectionFactory): >+ (WebCore::MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory): >+ * testing/MockLibWebRTCPeerConnection.h: >+ (WebCore::MockLibWebRTCPeerConnectionFactory::create): >+ > 2018-12-08 Frederic Wang <fwang@igalia.com> > > Allow control over child order when adding nodes to the scrolling tree >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 99bcac5f95836d78a6b631aa8d0e5e784b958a0f..54990ce023cb1f703ff35583798e87e3627ca5c5 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,18 @@ >+2018-12-09 Youenn Fablet <youenn@apple.com> >+ >+ Move capture manager from RealtimeMediaSourceCenter to capture factory >+ https://bugs.webkit.org/show_bug.cgi?id=192542 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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. >+ >+ * WebProcess/cocoa/UserMediaCaptureManager.cpp: >+ (WebKit::UserMediaCaptureManager::~UserMediaCaptureManager): >+ * WebProcess/cocoa/UserMediaCaptureManager.h: >+ > 2018-12-08 Frederic Wang <fwang@igalia.com> > > Allow control over child order when adding nodes to the scrolling tree >diff --git a/Source/WebCore/platform/mediastream/CaptureDeviceManager.h b/Source/WebCore/platform/mediastream/CaptureDeviceManager.h >index 5732de03deeb4fc0985a1b1a74bcbb1460fec5bd..e91b47ced6d60787418e451075c2bd4957ac55db 100644 >--- a/Source/WebCore/platform/mediastream/CaptureDeviceManager.h >+++ b/Source/WebCore/platform/mediastream/CaptureDeviceManager.h >@@ -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; } >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >index 0bfe85d2240eee2d3e5d3732f085530a612623dc..d67e127744bf5cb34c52d95a0e6de90e54fb271c 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp >@@ -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 @@ void RealtimeMediaSourceCenter::createMediaStream(NewMediaStreamHandler&& comple > 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 @@ String RealtimeMediaSourceCenter::hashStringWithSalt(const String& id, const Str > 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 @@ void RealtimeMediaSourceCenter::getDisplayMediaDevices(const MediaStreamRequest& > return; > > String invalidConstraint; >- for (auto& device : displayCaptureDeviceManager().captureDevices()) { >+ for (auto& device : displayCaptureFactory().displayCaptureDeviceManager().captureDevices()) { > if (!device.enabled()) > return; > >@@ -235,7 +191,7 @@ void RealtimeMediaSourceCenter::getUserMediaDevices(const MediaStreamRequest& re > { > 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 @@ void RealtimeMediaSourceCenter::getUserMediaDevices(const MediaStreamRequest& re > } > > if (request.videoConstraints.isValid) { >- for (auto& device : videoCaptureDeviceManager().captureDevices()) { >+ for (auto& device : videoFactory().videoCaptureDeviceManager().captureDevices()) { > if (!device.enabled()) > continue; > >@@ -314,16 +270,16 @@ std::optional<CaptureDevice> RealtimeMediaSourceCenter::captureDeviceWithPersist > { > 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::setAudioFactory(AudioCaptureFactory& factory) > 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::setVideoFactory(VideoCaptureFactory& factory) > 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::setDisplayCaptureFactory(DisplayCaptureFactory& > void RealtimeMediaSourceCenter::unsetDisplayCaptureFactory(DisplayCaptureFactory& oldOverride) > { > ASSERT_UNUSED(oldOverride, displayCaptureFactoryOverride == &oldOverride); >- displayCaptureFactoryOverride = nullptr; >+ if (&oldOverride == displayCaptureFactoryOverride) >+ displayCaptureFactoryOverride = nullptr; > } > > DisplayCaptureFactory& RealtimeMediaSourceCenter::displayCaptureFactory() >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >index 93481249849fb98bc93bc085d78fcf84a707d5b1..bb0def2e5ef34a5de25dd24e86b30d3d8c0d33dd 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h >@@ -55,10 +55,10 @@ struct MediaConstraints; > > 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 @@ public: > 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 @@ public: > 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 @@ public: > protected: > RealtimeMediaSourceCenter(); > >- static RealtimeMediaSourceCenter& platformCenter(); > RealtimeMediaSourceSupportedConstraints m_supportedConstraints; > > WEBCORE_EXPORT virtual AudioCaptureFactory& audioFactoryPrivate() = 0; >diff --git a/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h b/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h >index 972faae1e7f3fae87c85355d3be807caf6c8df28..4897c64e9372c2a6bc81938554c982561e20f78c 100644 >--- a/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h >+++ b/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h >@@ -32,6 +32,7 @@ > namespace WebCore { > > class CaptureDevice; >+class CaptureDeviceManager; > class RealtimeMediaSource; > > struct CaptureSourceOrError; >@@ -55,6 +56,7 @@ class AudioCaptureFactory > public: > virtual ~AudioCaptureFactory() = default; > virtual CaptureSourceOrError createAudioCaptureSource(const CaptureDevice&, String&&, const MediaConstraints*) = 0; >+ virtual CaptureDeviceManager& audioCaptureDeviceManager() = 0; > > protected: > AudioCaptureFactory() = default; >@@ -68,6 +70,7 @@ class VideoCaptureFactory > 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 @@ class DisplayCaptureFactory { > public: > virtual ~DisplayCaptureFactory() = default; > virtual CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0; >+ virtual CaptureDeviceManager& displayCaptureDeviceManager() = 0; > virtual void setDisplayCapturePageState(bool , bool) { } > > protected: >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >index 2b754d7c4d6983cb58544f563ac8a4482b1a80f3..96efb9a76d86b7f8e513be8b46ae4752f5505b82 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerAudioCaptureSource.cpp >@@ -57,6 +57,8 @@ public: > { > return GStreamerAudioCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints); > } >+private: >+ CaptureDeviceManager& audioCaptureDeviceManager() final { return GStreamerAudioCaptureDeviceManager::singleton(); } > }; > > static GStreamerAudioCaptureSourceFactory& libWebRTCAudioCaptureSourceFactory() >diff --git a/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp b/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >index 7a0d30d5e7d08792b3e8c92ebd44b588ecb71dff..02f2f5e150b06278bfe486929cb1ef80dc590402 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp >@@ -71,6 +71,8 @@ public: > { > return GStreamerVideoCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints); > } >+private: >+ CaptureDeviceManager& videoCaptureDeviceManager() final { return GStreamerVideoCaptureDeviceManager::singleton(); } > }; > > VideoCaptureFactory& libWebRTCVideoCaptureSourceFactory() >@@ -86,6 +88,8 @@ public: > // FIXME: Implement this. > return { }; > } >+private: >+ CaptureDeviceManager& displayCaptureDeviceManager() final { return GStreamerDisplayCaptureDeviceManager::singleton(); } > }; > > DisplayCaptureFactory& libWebRTCDisplayCaptureSourceFactory() >diff --git a/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp b/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp >index 6caec130c8145ea07e1063791d71860409558add..816ba114c972066a3589f1d696b9d8d114ac6f18 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp >+++ b/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.cpp >@@ -26,7 +26,6 @@ > > #include "GStreamerAudioCaptureSource.h" > #include "GStreamerCaptureDevice.h" >-#include "GStreamerCaptureDeviceManager.h" > #include "GStreamerVideoCaptureSource.h" > #include <wtf/MainThread.h> > >@@ -67,21 +66,6 @@ DisplayCaptureFactory& RealtimeMediaSourceCenterLibWebRTC::displayCaptureFactory > 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) >diff --git a/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h b/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h >index 10e4fb816f062189a8287d0cd7278b2525709ff6..c5cc6224ba9b02f10ff09bee5c193dbff6149070 100644 >--- a/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h >+++ b/Source/WebCore/platform/mediastream/gstreamer/RealtimeMediaSourceCenterLibWebRTC.h >@@ -46,12 +46,6 @@ private: > AudioCaptureFactory& audioFactoryPrivate() final; > VideoCaptureFactory& videoFactoryPrivate() final; > DisplayCaptureFactory& displayCaptureFactoryPrivate() final; >- >- CaptureDeviceManager& audioCaptureDeviceManager() final; >- CaptureDeviceManager& videoCaptureDeviceManager() final; >- CaptureDeviceManager& displayCaptureDeviceManager() final; >- >- AudioCaptureFactory* m_audioFactoryOverride { nullptr }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp b/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp >index 01b5ac95ea604e7ac6072f7947df3d6220e9316d..72be7307bab19c718ef41a1535c0d32dec728aa7 100644 >--- a/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp >+++ b/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.cpp >@@ -774,6 +774,15 @@ AudioCaptureFactory& CoreAudioCaptureSource::factory() > 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) >diff --git a/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h b/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h >index 9dfbfba240351996c0d25d0b197e5d0db19061fc..84a634fdbaee8ce19a74453df5beebf87450cb32 100644 >--- a/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h >+++ b/Source/WebCore/platform/mediastream/mac/CoreAudioCaptureSource.h >@@ -130,6 +130,8 @@ private: > { > return CoreAudioCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints); > } >+ >+ CaptureDeviceManager& audioCaptureDeviceManager() final; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp b/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp >index ca4b461b816797145805944bdc36633edd3f2c91..9d3cfc1ff6a4803b251d011a8cb1f7f3e53e40b0 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp >@@ -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,14 +53,16 @@ public: > return AVVideoCaptureSource::create(String { device.persistentId() }, WTFMove(hashSalt), constraints); > } > >-#if PLATFORM(IOS_FAMILY) > private: >+#if PLATFORM(IOS_FAMILY) > void setVideoCapturePageState(bool interrupted, bool pageMuted) > { > if (activeSource()) > activeSource()->setInterrupted(interrupted, pageMuted); > } > #endif >+ >+ CaptureDeviceManager& videoCaptureDeviceManager() { return AVCaptureDeviceManager::singleton(); } > }; > > class DisplayCaptureSourceFactoryMac final : public DisplayCaptureFactory { >@@ -93,6 +93,8 @@ public: > > return { }; > } >+private: >+ CaptureDeviceManager& displayCaptureDeviceManager() { return DisplayCaptureManagerCocoa::singleton(); } > }; > > RealtimeMediaSourceCenterMac& RealtimeMediaSourceCenterMac::singleton() >@@ -129,25 +131,6 @@ DisplayCaptureFactory& RealtimeMediaSourceCenterMac::displayCaptureFactoryPrivat > 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) >diff --git a/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h b/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h >index c26ec73a7c20ab17257d361ee04d4bf7572f4e13..eb070922d27eb3f9c47d0d717dc3268c90a78201 100644 >--- a/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h >+++ b/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.h >@@ -52,12 +52,6 @@ private: > AudioCaptureFactory& audioFactoryPrivate() final; > VideoCaptureFactory& videoFactoryPrivate() final; > DisplayCaptureFactory& displayCaptureFactoryPrivate() final; >- >- CaptureDeviceManager& audioCaptureDeviceManager() final; >- CaptureDeviceManager& videoCaptureDeviceManager() final; >- CaptureDeviceManager& displayCaptureDeviceManager() final; >- >- AudioCaptureFactory* m_audioFactoryOverride { nullptr }; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp b/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp >index cffb915af2b703af8da6aa1c6a7bb253c76c8d04..40a52bdfeb09fc2764f76e4d1714133f8d049af9 100644 >--- a/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp >+++ b/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp >@@ -94,14 +94,15 @@ public: > return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, WTFMove(hashSalt), constraints); > } > >-#if PLATFORM(IOS_FAMILY) > private: >+#if PLATFORM(IOS_FAMILY) > void setVideoCapturePageState(bool interrupted, bool pageMuted) > { > if (activeSource()) > activeSource()->setInterrupted(interrupted, pageMuted); > } > #endif >+ CaptureDeviceManager& videoCaptureDeviceManager() final { return MockRealtimeMediaSourceCenter::singleton().videoCaptureDeviceManager(); } > }; > > class MockRealtimeDisplaySourceFactory : public DisplayCaptureFactory { >@@ -126,6 +127,8 @@ public: > > return { }; > } >+private: >+ CaptureDeviceManager& displayCaptureDeviceManager() final { return MockRealtimeMediaSourceCenter::singleton().displayCaptureDeviceManager(); } > }; > > class MockRealtimeAudioSourceFactory : public AudioCaptureFactory { >@@ -137,6 +140,8 @@ public: > > 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 @@ MockRealtimeMediaSourceCenter& MockRealtimeMediaSourceCenter::singleton() > 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 @@ Vector<CaptureDevice>& MockRealtimeMediaSourceCenter::displayDevices() > 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(); >diff --git a/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h b/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h >index f4911408844124fd7e6c01fe774c2687a5212754..44f938b5220c3c9528e1d5c0a2557bf6b057fd14 100644 >--- a/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h >+++ b/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h >@@ -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,19 +54,17 @@ public: > 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& 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; } >+ AudioCaptureFactory& audioFactory(); >+ VideoCaptureFactory& videoFactory(); >+ DisplayCaptureFactory& displayCaptureFactory(); > > class MockAudioCaptureDeviceManager final : public CaptureDeviceManager { > private: >diff --git a/Source/WebCore/testing/Internals.cpp b/Source/WebCore/testing/Internals.cpp >index 77bfc9821a5dcf054408b28e710c1b3adf236492..12274a116d439ae02294b53c43bb1fad4b2747e7 100644 >--- a/Source/WebCore/testing/Internals.cpp >+++ b/Source/WebCore/testing/Internals.cpp >@@ -4533,27 +4533,6 @@ void Internals::videoSampleAvailable(MediaSample& sample) > 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 }); >diff --git a/Source/WebCore/testing/Internals.h b/Source/WebCore/testing/Internals.h >index 8ae3443bb10adbd51fa01ca5262320bc0e5c8f38..8647088ed85be5c94e130fc44aa89624762c5eef 100644 >--- a/Source/WebCore/testing/Internals.h >+++ b/Source/WebCore/testing/Internals.h >@@ -677,7 +677,6 @@ public: > > #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&); >diff --git a/Source/WebCore/testing/Internals.idl b/Source/WebCore/testing/Internals.idl >index 2719346114bd0cbb16e01452062f1fe4f62cf965..b76c2a9d7a95d33d0489070a3cd97fe5bc704dca 100644 >--- a/Source/WebCore/testing/Internals.idl >+++ b/Source/WebCore/testing/Internals.idl >@@ -664,7 +664,6 @@ enum CompositingPolicy { > [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); >diff --git a/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp b/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >index 1597eb71edd5f7c03be86b65b8d914cf02e62e9c..2192b93c279a0f328bd419e1a5c39566cc9f32d0 100644 >--- a/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >+++ b/Source/WebCore/testing/MockLibWebRTCPeerConnection.cpp >@@ -66,7 +66,7 @@ void useMockRTCPeerConnectionFactory(LibWebRTCProvider* provider, const String& > auto& factory = getRealPeerConnectionFactory(); > factory = provider->factory(); > } >- provider->setPeerConnectionFactory(MockLibWebRTCPeerConnectionFactory::create(String(testCase))); >+ provider->setPeerConnectionFactory(MockLibWebRTCPeerConnectionFactory::create(testCase)); > } > > MockLibWebRTCPeerConnection::~MockLibWebRTCPeerConnection() >@@ -167,8 +167,8 @@ private: > void SetLocalDescription(webrtc::SetSessionDescriptionObserver* observer, webrtc::SessionDescriptionInterface*) final { releaseInNetworkThread(*this, *observer); } > }; > >-MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory(String&& testCase) >- : m_testCase(WTFMove(testCase)) >+MockLibWebRTCPeerConnectionFactory::MockLibWebRTCPeerConnectionFactory(const String& testCase) >+ : m_testCase(testCase.isolatedCopy()) > { > } > >diff --git a/Source/WebCore/testing/MockLibWebRTCPeerConnection.h b/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >index 77a2170e317109eb05400445b49356015484c7ed..be3c63f0ff9f5b02b8cdeb0cb313b9e163842f5c 100644 >--- a/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >+++ b/Source/WebCore/testing/MockLibWebRTCPeerConnection.h >@@ -235,10 +235,10 @@ private: > > class MockLibWebRTCPeerConnectionFactory : public webrtc::PeerConnectionFactoryInterface { > public: >- static rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> create(String&& testCase) { return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionFactory>(WTFMove(testCase)); } >+ static rtc::scoped_refptr<webrtc::PeerConnectionFactoryInterface> create(const String& testCase) { return new rtc::RefCountedObject<MockLibWebRTCPeerConnectionFactory>(testCase); } > > protected: >- MockLibWebRTCPeerConnectionFactory(String&&); >+ explicit MockLibWebRTCPeerConnectionFactory(const String&); > > private: > rtc::scoped_refptr<webrtc::PeerConnectionInterface> CreatePeerConnection(const webrtc::PeerConnectionInterface::RTCConfiguration&, webrtc::PeerConnectionDependencies) final; >diff --git a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >index 9608e683f378b30c096d1fd2c3c09c6c275d61a1..8271fd07b672f8df54f8635e6b23786338dd8a14 100644 >--- a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >+++ b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp >@@ -207,6 +207,7 @@ UserMediaCaptureManager::~UserMediaCaptureManager() > { > RealtimeMediaSourceCenter::unsetAudioFactory(*this); > RealtimeMediaSourceCenter::unsetDisplayCaptureFactory(*this); >+ RealtimeMediaSourceCenter::unsetVideoFactory(*this); > m_process.removeMessageReceiver(Messages::UserMediaCaptureManager::messageReceiverName()); > } > >diff --git a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h >index 8eab0170d07e853ef96d26837619d89d1097abe7..ad1be7ccedd6ae4308fc4fef028c377b4a9e0bd0 100644 >--- a/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h >+++ b/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h >@@ -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 @@ private: > 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 @@ private: > friend class Source; > HashMap<uint64_t, RefPtr<Source>> m_sources; > WebProcess& m_process; >+ NoOpCaptureDeviceManager m_noOpCaptureDeviceManager; > }; > > } // namespace WebKit
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192542
:
356925
|
356941