Diff
Modified: trunk/LayoutTests/ChangeLog (239839 => 239840)
--- trunk/LayoutTests/ChangeLog 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/LayoutTests/ChangeLog 2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,14 @@
+2019-01-10 Eric Carlson <[email protected]>
+
+ Define page media state flags for display capture.
+ https://bugs.webkit.org/show_bug.cgi?id=193230
+ <rdar://problem/47095142>
+
+ Reviewed by Youenn Fablet.
+
+ * fast/mediastream/get-display-media-muted-expected.txt: Added.
+ * fast/mediastream/get-display-media-muted.html: Added.
+
2019-01-10 Commit Queue <[email protected]>
Unreviewed, rolling out r239825.
Added: trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt (0 => 239840)
--- trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt 2019-01-10 20:48:49 UTC (rev 239840)
@@ -0,0 +1,3 @@
+
+PASS Mute video track during screen capture
+
Added: trunk/LayoutTests/fast/mediastream/get-display-media-muted.html (0 => 239840)
--- trunk/LayoutTests/fast/mediastream/get-display-media-muted.html (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-muted.html 2019-01-10 20:48:49 UTC (rev 239840)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Mute screen capture, make sure page state updates correctly.</title>
+ <script src=""
+ <script src=""
+ <script>
+
+ if (window.testRunner)
+ testRunner.setUserMediaPermission(true);
+
+ async function waitForPageStateChange(numberOfTries, originalState)
+ {
+ return new Promise(async (resolve) => {
+ while (numberOfTries) {
+ if (internals.pageMediaState() != originalState) {
+ resolve(true);
+ return;
+ }
+
+ await new Promise(resolve => { setTimeout(resolve, 10) });
+ --numberOfTries;
+ }
+
+ resolve(false);
+ });
+ }
+
+ promise_test(async (test) => {
+ await new Promise(async (resolve, reject) => {
+ let stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
+ let pageMediaState = internals.pageMediaState();
+
+ assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
+ assert_false(pageMediaState.includes('HasMutedVideoCaptureDevice'), 'page state does not include HasMutedVideoCaptureDevice');
+ assert_false(pageMediaState.includes('HasMutedAudioCaptureDevice'), 'page state does not include HasMutedAudioCaptureDevice');
+
+ let track = stream.getVideoTracks()[0];
+ track._onunmute_ = () => { assert_unreached("Got 'unmute' event unexpectedly!") };
+
+ track._onmute_ = async (evt) => {
+
+ if (!await waitForPageStateChange(10, pageMediaState))
+ assert_unreached(`Page state did not change from ${pageMediaState}`);
+
+ track._onunmute_ = async (evt) => {
+ if (!await waitForPageStateChange(10, pageMediaState))
+ assert_unreached(`Page state did not change from ${pageMediaState}`);
+
+ pageMediaState = internals.pageMediaState();
+ assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
+ assert_true(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state includes HasActiveDisplayCaptureDevice');
+ resolve()
+ }
+
+ pageMediaState = internals.pageMediaState();
+ assert_true(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state includes HasMutedDisplayCaptureDevice');
+ assert_false(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state does not include HasActiveDisplayCaptureDevice');
+ internals.setMediaStreamTrackMuted(track, false)
+ }
+
+ pageMediaState = internals.pageMediaState();
+ internals.setMediaStreamTrackMuted(track, true);
+
+ setTimeout(() => reject("Muted state did not change in .5 second"), 500);
+ });
+ }, "Mute video track during screen capture");
+
+ </script>
+</head>
+<body>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (239839 => 239840)
--- trunk/Source/WebCore/ChangeLog 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/ChangeLog 2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,27 @@
+2019-01-10 Eric Carlson <[email protected]>
+
+ Define page media state flags for display capture.
+ https://bugs.webkit.org/show_bug.cgi?id=193230
+ <rdar://problem/47095142>
+
+ Reviewed by Youenn Fablet.
+
+ Test: fast/mediastream/get-display-media-muted.html
+
+ * Modules/mediastream/MediaStreamTrack.cpp:
+ (WebCore::MediaStreamTrack::mediaState const):
+ * page/MediaProducer.h:
+ * platform/mediastream/RealtimeIncomingVideoSource.cpp:
+ (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
+ * platform/mediastream/RealtimeMediaSource.h:
+ * platform/mediastream/mac/AVVideoCaptureSource.h:
+ * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
+ * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
+ * platform/mock/MockRealtimeAudioSource.h:
+ * platform/mock/MockRealtimeVideoSource.h:
+ * testing/Internals.cpp:
+ (WebCore::Internals::pageMediaState):
+
2019-01-10 Justin Fan <[email protected]>
[WebGPU] Add BindGroupBinding, BindGroupDescriptor, and BufferBinding dictionaries from API
Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (239839 => 239840)
--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -386,12 +386,14 @@
if (m_private->isProducingData())
return HasActiveAudioCaptureDevice;
} else {
+ auto deviceType = source().deviceType();
+ ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window);
if (source().interrupted() && !pageCaptureMuted)
- return HasInterruptedVideoCaptureDevice;
+ return deviceType == CaptureDevice::DeviceType::Camera ? HasInterruptedVideoCaptureDevice : HasInterruptedDisplayCaptureDevice;
if (muted())
- return HasMutedVideoCaptureDevice;
+ return deviceType == CaptureDevice::DeviceType::Camera ? HasMutedVideoCaptureDevice : HasMutedDisplayCaptureDevice;
if (m_private->isProducingData())
- return HasActiveVideoCaptureDevice;
+ return deviceType == CaptureDevice::DeviceType::Camera ? HasActiveVideoCaptureDevice : HasActiveDisplayCaptureDevice;
}
return IsNotPlaying;
Modified: trunk/Source/WebCore/page/MediaProducer.h (239839 => 239840)
--- trunk/Source/WebCore/page/MediaProducer.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/page/MediaProducer.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -49,10 +49,14 @@
HasInterruptedAudioCaptureDevice = 1 << 15,
HasInterruptedVideoCaptureDevice = 1 << 16,
HasUserInteractedWithMediaElement = 1 << 17,
+ HasActiveDisplayCaptureDevice = 1 << 18,
+ HasMutedDisplayCaptureDevice = 1 << 19,
+ HasInterruptedDisplayCaptureDevice = 1 << 20,
AudioCaptureMask = HasActiveAudioCaptureDevice | HasMutedAudioCaptureDevice | HasInterruptedAudioCaptureDevice,
VideoCaptureMask = HasActiveVideoCaptureDevice | HasMutedVideoCaptureDevice | HasInterruptedVideoCaptureDevice,
- MediaCaptureMask = AudioCaptureMask | VideoCaptureMask,
+ DisplayCaptureMask = HasActiveDisplayCaptureDevice | HasMutedDisplayCaptureDevice | HasInterruptedDisplayCaptureDevice,
+ MediaCaptureMask = AudioCaptureMask | VideoCaptureMask | DisplayCaptureMask,
};
typedef unsigned MediaStateFlags;
Modified: trunk/Source/WebCore/platform/mediastream/CaptureDevice.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/CaptureDevice.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/CaptureDevice.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -31,7 +31,7 @@
class CaptureDevice {
public:
- enum class DeviceType { Unknown, Microphone, Camera, Screen, Application, Window, Browser };
+ enum class DeviceType { Unknown, Microphone, Camera, Screen, Window };
CaptureDevice(const String& persistentId, DeviceType type, const String& label, const String& groupId = emptyString())
: m_persistentId(persistentId)
@@ -121,9 +121,7 @@
WebCore::CaptureDevice::DeviceType::Microphone,
WebCore::CaptureDevice::DeviceType::Camera,
WebCore::CaptureDevice::DeviceType::Screen,
- WebCore::CaptureDevice::DeviceType::Application,
- WebCore::CaptureDevice::DeviceType::Window,
- WebCore::CaptureDevice::DeviceType::Browser
+ WebCore::CaptureDevice::DeviceType::Window
>;
};
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -38,7 +38,7 @@
namespace WebCore {
RealtimeIncomingVideoSource::RealtimeIncomingVideoSource(rtc::scoped_refptr<webrtc::VideoTrackInterface>&& videoTrack, String&& videoTrackId)
- : RealtimeMediaSource(RealtimeMediaSource::Type::Video, "remote video"_s, WTFMove(videoTrackId))
+ : RealtimeMediaSource(Type::Video, "remote video"_s, WTFMove(videoTrackId))
, m_videoTrack(WTFMove(videoTrack))
{
notifyMutedChange(!m_videoTrack);
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -161,6 +161,7 @@
virtual bool isIsolated() const { return false; }
virtual bool isCaptureSource() const { return false; }
+ virtual CaptureDevice::DeviceType deviceType() const { return CaptureDevice::DeviceType::Unknown; }
virtual void monitorOrientation(OrientationNotifier&) { }
Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -86,6 +86,7 @@
void beginConfiguration() final;
void commitConfiguration() final;
bool isCaptureSource() const final { return true; }
+ CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Camera; }
bool interrupted() const final;
void setSizeAndFrameRateWithPreset(IntSize, double, RefPtr<VideoPreset>) final;
Modified: trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -103,10 +103,6 @@
return windowCaptureDeviceWithPersistentID(id);
break;
- case CaptureDevice::DeviceType::Application:
- case CaptureDevice::DeviceType::Browser:
- break;
-
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Unknown:
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -81,8 +81,6 @@
#if PLATFORM(MAC)
return WindowDisplayCaptureSourceMac::create(String { device.persistentId() }, constraints);
#endif
- case CaptureDevice::DeviceType::Application:
- case CaptureDevice::DeviceType::Browser:
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Unknown:
Modified: trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -62,6 +62,7 @@
void startProducingData() final;
void stopProducingData() final;
void commitConfiguration() final;
+ CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Screen; }
bool createDisplayStream();
void startDisplayStream();
Modified: trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -51,6 +51,7 @@
DisplayCaptureSourceCocoa::DisplayFrameType generateFrame() final;
RealtimeMediaSourceSettings::DisplaySurfaceType surfaceType() const final { return RealtimeMediaSourceSettings::DisplaySurfaceType::Window; }
+ CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Window; }
RetainPtr<CGImageRef> windowImage();
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -64,6 +64,7 @@
void tick();
bool isCaptureSource() const final { return true; }
+ CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Microphone; }
void delaySamples(Seconds) final;
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (239839 => 239840)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -116,8 +116,6 @@
case CaptureDevice::DeviceType::Window:
return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, String { }, constraints);
break;
- case CaptureDevice::DeviceType::Application:
- case CaptureDevice::DeviceType::Browser:
case CaptureDevice::DeviceType::Microphone:
case CaptureDevice::DeviceType::Camera:
case CaptureDevice::DeviceType::Unknown:
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h (239839 => 239840)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -68,6 +68,7 @@
void startProducingData() final;
void stopProducingData() final;
bool isCaptureSource() const final { return true; }
+ CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Camera; }
bool supportsSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final;
void setSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final;
void setSizeAndFrameRateWithPreset(IntSize, double, RefPtr<VideoPreset>) final;
Modified: trunk/Source/WebCore/testing/Internals.cpp (239839 => 239840)
--- trunk/Source/WebCore/testing/Internals.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/testing/Internals.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -4025,6 +4025,10 @@
string.append("HasMutedVideoCaptureDevice,");
if (state & MediaProducer::HasUserInteractedWithMediaElement)
string.append("HasUserInteractedWithMediaElement,");
+ if (state & MediaProducer::HasActiveDisplayCaptureDevice)
+ string.append("HasActiveDisplayCaptureDevice,");
+ if (state & MediaProducer::HasMutedDisplayCaptureDevice)
+ string.append("HasMutedDisplayCaptureDevice,");
if (string.isEmpty())
string.append("IsNotPlaying");
Modified: trunk/Source/WebKit/ChangeLog (239839 => 239840)
--- trunk/Source/WebKit/ChangeLog 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/ChangeLog 2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,18 @@
+2019-01-10 Eric Carlson <[email protected]>
+
+ Define page media state flags for display capture.
+ https://bugs.webkit.org/show_bug.cgi?id=193230
+ <rdar://problem/47095142>
+
+ Reviewed by Youenn Fablet.
+
+ * UIProcess/API/C/WKPage.cpp:
+ (WKPageGetMediaState):
+ * UIProcess/API/C/WKPagePrivate.h:
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::Source::Source):
+ (WebKit::UserMediaCaptureManager::createCaptureSource):
+
2019-01-10 Alex Christensen <[email protected]>
REGRESSION(r239815) http/tests/workers/service/serviceworker-private-browsing.https.html test times out
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (239839 => 239840)
--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -2653,6 +2653,10 @@
state |= kWKMediaHasMutedAudioCaptureDevice;
if (coreState & WebCore::MediaProducer::HasMutedVideoCaptureDevice)
state |= kWKMediaHasMutedVideoCaptureDevice;
+ if (coreState & WebCore::MediaProducer::HasActiveDisplayCaptureDevice)
+ state |= kWKMediaHasActiveDisplayCaptureDevice;
+ if (coreState & WebCore::MediaProducer::HasMutedDisplayCaptureDevice)
+ state |= kWKMediaHasMutedDisplayCaptureDevice;
return state;
}
Modified: trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h (239839 => 239840)
--- trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h 2019-01-10 20:48:49 UTC (rev 239840)
@@ -148,6 +148,8 @@
kWKMediaHasActiveVideoCaptureDevice = 1 << 3,
kWKMediaHasMutedAudioCaptureDevice = 1 << 4,
kWKMediaHasMutedVideoCaptureDevice = 1 << 5,
+ kWKMediaHasActiveDisplayCaptureDevice = 1 << 6,
+ kWKMediaHasMutedDisplayCaptureDevice = 1 << 7,
};
typedef uint32_t WKMediaState;
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (239839 => 239840)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -149,8 +149,6 @@
break;
case WebCore::CaptureDevice::DeviceType::Screen:
case WebCore::CaptureDevice::DeviceType::Window:
- case WebCore::CaptureDevice::DeviceType::Application:
- case WebCore::CaptureDevice::DeviceType::Browser:
sourceOrError = RealtimeMediaSourceCenter::singleton().displayCaptureFactory().createDisplayCaptureSource(device, &constraints);
break;
case WebCore::CaptureDevice::DeviceType::Unknown:
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (239839 => 239840)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2019-01-10 20:48:49 UTC (rev 239840)
@@ -56,11 +56,13 @@
class UserMediaCaptureManager::Source : public RealtimeMediaSource {
public:
- Source(String&& sourceID, Type type, String&& name, String&& hashSalt, uint64_t id, UserMediaCaptureManager& manager)
+ Source(String&& sourceID, Type type, CaptureDevice::DeviceType deviceType, String&& name, String&& hashSalt, uint64_t id, UserMediaCaptureManager& manager)
: RealtimeMediaSource(type, WTFMove(name), WTFMove(sourceID), WTFMove(hashSalt))
, m_id(id)
, m_manager(manager)
+ , m_deviceType(deviceType)
{
+ ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window);
if (type == Type::Audio)
m_ringBuffer = std::make_unique<CARingBuffer>(makeUniqueRef<SharedRingBufferStorage>(nullptr));
}
@@ -178,6 +180,7 @@
void startProducingData() final { m_manager.startProducingData(m_id); }
void stopProducingData() final { m_manager.stopProducingData(m_id); }
bool isCaptureSource() const final { return true; }
+ CaptureDevice::DeviceType deviceType() const final { return m_deviceType; }
// RealtimeMediaSource
void beginConfiguration() final { }
@@ -197,6 +200,7 @@
std::unique_ptr<CARingBuffer> m_ringBuffer;
std::unique_ptr<ImageTransferSessionVT> m_imageTransferSession;
+ CaptureDevice::DeviceType m_deviceType { CaptureDevice::DeviceType::Unknown };
struct ApplyConstraintsCallback {
SuccessHandler successHandler;
@@ -251,7 +255,7 @@
return WTFMove(errorMessage);
auto type = device.type() == CaptureDevice::DeviceType::Microphone ? WebCore::RealtimeMediaSource::Type::Audio : WebCore::RealtimeMediaSource::Type::Video;
- auto source = adoptRef(*new Source(String::number(id), type, String { settings.label() }, WTFMove(hashSalt), id, *this));
+ auto source = adoptRef(*new Source(String::number(id), type, device.type(), String { settings.label() }, WTFMove(hashSalt), id, *this));
source->setSettings(WTFMove(settings));
m_sources.set(id, source.copyRef());
return WebCore::CaptureSourceOrError(WTFMove(source));