Diff
Modified: trunk/LayoutTests/ChangeLog (286490 => 286491)
--- trunk/LayoutTests/ChangeLog 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/LayoutTests/ChangeLog 2021-12-03 16:35:55 UTC (rev 286491)
@@ -1,3 +1,13 @@
+2021-12-03 Eric Carlson <[email protected]>
+
+ DisplayCaptureSource doesn't initialize base class correctly
+ https://bugs.webkit.org/show_bug.cgi?id=233722
+
+ Reviewed by Youenn Fablet.
+
+ * fast/mediastream/get-display-media-settings-expected.txt: Added.
+ * fast/mediastream/get-display-media-settings.html: Added.
+
2021-12-03 Sergio Villar Senin <[email protected]>
[css-flexbox] WPT import. December 2021 edition
Added: trunk/LayoutTests/fast/mediastream/get-display-media-settings-expected.txt (0 => 286491)
--- trunk/LayoutTests/fast/mediastream/get-display-media-settings-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-settings-expected.txt 2021-12-03 16:35:55 UTC (rev 286491)
@@ -0,0 +1,3 @@
+
+PASS check settings
+
Added: trunk/LayoutTests/fast/mediastream/get-display-media-settings.html (0 => 286491)
--- trunk/LayoutTests/fast/mediastream/get-display-media-settings.html (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-settings.html 2021-12-03 16:35:55 UTC (rev 286491)
@@ -0,0 +1,26 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8">
+ <title>video track created with getDisplayMedia should return correct settings</title>
+ <script src=""
+ <script src=""
+ <script src=""
+ </head>
+ <body>
+
+ <script>
+ promise_test(async () => {
+ stream = await callGetDisplayMedia({ video: true });
+ const settings = stream.getVideoTracks()[0].getSettings();
+
+ assert_equals(settings.height, 1080);
+ assert_equals(settings.width, 1920);
+ assert_equals(settings.frameRate, 30);
+ assert_true(typeof settings.deviceId === 'string', true);
+
+ }, "check settings");
+
+ </script>
+ </body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (286490 => 286491)
--- trunk/Source/WebCore/ChangeLog 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/ChangeLog 2021-12-03 16:35:55 UTC (rev 286491)
@@ -1,3 +1,34 @@
+2021-12-03 Eric Carlson <[email protected]>
+
+ DisplayCaptureSource doesn't initialize base class correctly
+ https://bugs.webkit.org/show_bug.cgi?id=233722
+
+ Reviewed by Youenn Fablet.
+
+ Test: fast/mediastream/get-display-media-settings.html
+
+ * platform/mediastream/RealtimeMediaSourceCenter.cpp:
+ (WebCore::RealtimeMediaSourceCenter::createMediaStream): Pass hashSalt through.
+ (WebCore::RealtimeMediaSourceCenter::getDisplayMediaDevices): Ditto.
+ (WebCore::RealtimeMediaSourceCenter::validateRequestConstraintsAfterEnumeration): Ditto.
+ * platform/mediastream/RealtimeMediaSourceCenter.h:
+
+ * platform/mediastream/RealtimeMediaSourceFactory.h:
+ * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp:
+ (WebCore::DisplayCaptureSourceCocoa::create): Ditto.
+ (WebCore::DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa): Ditto.
+ * platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h:
+
+ * platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h:
+ * platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp:
+ (WebCore::GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource): Ditto.
+ * platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp:
+ * platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp:
+ * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+ * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+ * platform/mock/MockRealtimeVideoSource.cpp:
+ (WebCore::MockRealtimeVideoSource::settings):
+
2021-12-03 Alan Bujtas <[email protected]>
[LFC][IFC] Move the (bidi)display boxes horizontally by the inline box margin, border and padding start as needed
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -1103,9 +1103,7 @@
const String& RealtimeMediaSource::hashedId() const
{
#ifndef NDEBUG
- auto deviceType = this->deviceType();
- if (deviceType != CaptureDevice::DeviceType::Screen && deviceType != CaptureDevice::DeviceType::Window)
- ASSERT(!m_hashedID.isEmpty());
+ ASSERT(!m_hashedID.isEmpty());
#endif
return m_hashedID;
}
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -91,7 +91,7 @@
if (videoDevice.type() == CaptureDevice::DeviceType::Camera)
source = videoCaptureFactory().createVideoCaptureSource(WTFMove(videoDevice), WTFMove(hashSalt), &request.videoConstraints);
else
- source = displayCaptureFactory().createDisplayCaptureSource(WTFMove(videoDevice), &request.videoConstraints);
+ source = displayCaptureFactory().createDisplayCaptureSource(WTFMove(videoDevice), WTFMove(hashSalt), &request.videoConstraints);
if (!source) {
completionHandler(makeUnexpected(makeString("Failed to create MediaStream video source: ", source.errorMessage)));
@@ -194,7 +194,7 @@
});
}
-void RealtimeMediaSourceCenter::getDisplayMediaDevices(const MediaStreamRequest& request, Vector<DeviceInfo>& diaplayDeviceInfo, String& firstInvalidConstraint)
+void RealtimeMediaSourceCenter::getDisplayMediaDevices(const MediaStreamRequest& request, String&& hashSalt, Vector<DeviceInfo>& displayDeviceInfo, String& firstInvalidConstraint)
{
if (!request.videoConstraints.isValid)
return;
@@ -204,9 +204,9 @@
if (!device.enabled())
return;
- auto sourceOrError = displayCaptureFactory().createDisplayCaptureSource(device, { });
+ auto sourceOrError = displayCaptureFactory().createDisplayCaptureSource(device, String { hashSalt }, &request.videoConstraints);
if (sourceOrError && sourceOrError.captureSource->supportsConstraints(request.videoConstraints, invalidConstraint))
- diaplayDeviceInfo.append({sourceOrError.captureSource->fitnessScore(), device});
+ displayDeviceInfo.append({ sourceOrError.captureSource->fitnessScore(), device });
if (!invalidConstraint.isEmpty() && firstInvalidConstraint.isEmpty())
firstInvalidConstraint = invalidConstraint;
@@ -283,7 +283,7 @@
String firstInvalidConstraint;
if (request.type == MediaStreamRequest::Type::DisplayMedia)
- getDisplayMediaDevices(request, videoDeviceInfo, firstInvalidConstraint);
+ getDisplayMediaDevices(request, String { deviceIdentifierHashSalt }, videoDeviceInfo, firstInvalidConstraint);
else
getUserMediaDevices(request, String { deviceIdentifierHashSalt }, audioDeviceInfo, videoDeviceInfo, firstInvalidConstraint);
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceCenter.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -123,7 +123,7 @@
CaptureDevice device;
};
- void getDisplayMediaDevices(const MediaStreamRequest&, Vector<DeviceInfo>&, String&);
+ void getDisplayMediaDevices(const MediaStreamRequest&, String&&, Vector<DeviceInfo>&, String&);
void getUserMediaDevices(const MediaStreamRequest&, String&&, Vector<DeviceInfo>& audioDevices, Vector<DeviceInfo>& videoDevices, String&);
void validateRequestConstraintsAfterEnumeration(ValidConstraintsHandler&&, InvalidConstraintsHandler&&, const MediaStreamRequest&, String&&);
void enumerateDevices(bool shouldEnumerateCamera, bool shouldEnumerateDisplay, bool shouldEnumerateMicrophone, bool shouldEnumerateSpeakers, CompletionHandler<void()>&&);
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -94,7 +94,7 @@
{
public:
virtual ~DisplayCaptureFactory() = default;
- virtual CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*) = 0;
+ virtual CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, String&&, const MediaConstraints*) = 0;
virtual CaptureDeviceManager& displayCaptureDeviceManager() = 0;
protected:
Modified: trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -33,16 +33,12 @@
#include "ImageTransferSessionVT.h"
#include "Logging.h"
#include "MediaSampleAVFObjC.h"
-#include "PixelBufferConformerCV.h"
#include "RealtimeMediaSource.h"
#include "RealtimeMediaSourceCenter.h"
#include "RealtimeMediaSourceSettings.h"
#include "RealtimeVideoUtilities.h"
-#include "RemoteVideoSample.h"
#include "Timer.h"
-#include <CoreMedia/CMSync.h>
#include <IOSurface/IOSurfaceRef.h>
-#include <mach/mach_time.h>
#include <pal/avfoundation/MediaTimeAVFoundation.h>
#include <pal/cf/CoreMediaSoftLink.h>
#include <pal/spi/cf/CoreAudioSPI.h>
@@ -58,14 +54,14 @@
namespace WebCore {
-CaptureSourceOrError DisplayCaptureSourceCocoa::create(const CaptureDevice& device, const MediaConstraints* constraints)
+CaptureSourceOrError DisplayCaptureSourceCocoa::create(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints)
{
switch (device.type()) {
case CaptureDevice::DeviceType::Screen:
#if PLATFORM(IOS)
- return create(ReplayKitCaptureSource::create(device.persistentId()), device, constraints);
+ return create(ReplayKitCaptureSource::create(device.persistentId()), device, WTFMove(hashSalt), constraints);
#else
- return create(CGDisplayStreamScreenCaptureSource::create(device.persistentId()), device, constraints);
+ return create(CGDisplayStreamScreenCaptureSource::create(device.persistentId()), device, WTFMove(hashSalt), constraints);
#endif
case CaptureDevice::DeviceType::Window:
case CaptureDevice::DeviceType::Microphone:
@@ -79,12 +75,12 @@
return { };
}
-CaptureSourceOrError DisplayCaptureSourceCocoa::create(Expected<UniqueRef<Capturer>, String>&& capturer, const CaptureDevice& device, const MediaConstraints* constraints)
+CaptureSourceOrError DisplayCaptureSourceCocoa::create(Expected<UniqueRef<Capturer>, String>&& capturer, const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints)
{
if (!capturer.has_value())
return CaptureSourceOrError { WTFMove(capturer.error()) };
- auto source = adoptRef(*new DisplayCaptureSourceCocoa(WTFMove(capturer.value()), String { device.label() }));
+ auto source = adoptRef(*new DisplayCaptureSourceCocoa(WTFMove(capturer.value()), String { device.label() }, String { device.persistentId() }, WTFMove(hashSalt)));
if (constraints) {
auto result = source->applyConstraints(*constraints);
if (result)
@@ -94,8 +90,8 @@
return CaptureSourceOrError(WTFMove(source));
}
-DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa(UniqueRef<Capturer>&& capturer, String&& name)
- : RealtimeMediaSource(Type::Video, WTFMove(name))
+DisplayCaptureSourceCocoa::DisplayCaptureSourceCocoa(UniqueRef<Capturer>&& capturer, String&& name, String&& deviceID, String&& hashSalt)
+ : RealtimeMediaSource(Type::Video, WTFMove(name), WTFMove(deviceID), WTFMove(hashSalt))
, m_capturer(WTFMove(capturer))
, m_timer(RunLoop::current(), this, &DisplayCaptureSourceCocoa::emitFrame)
, m_capturerIsRunningObserver([weakThis = WeakPtr { *this }] (bool isRunning) { if (weakThis) weakThis->notifyMutedChange(!isRunning); })
@@ -131,6 +127,7 @@
auto size = this->size();
settings.setWidth(size.width());
settings.setHeight(size.height());
+ settings.setDeviceId(hashedId());
settings.setDisplaySurface(m_capturer->surfaceType());
settings.setLogicalSurface(false);
@@ -139,6 +136,7 @@
supportedConstraints.setSupportsFrameRate(true);
supportedConstraints.setSupportsWidth(true);
supportedConstraints.setSupportsHeight(true);
+ supportedConstraints.setSupportsDeviceId(true);
supportedConstraints.setSupportsDisplaySurface(true);
supportedConstraints.setSupportsLogicalSurface(true);
Modified: trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/cocoa/DisplayCaptureSourceCocoa.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -87,16 +87,17 @@
const void* m_logIdentifier;
};
- static CaptureSourceOrError create(const CaptureDevice&, const MediaConstraints*);
- static CaptureSourceOrError create(Expected<UniqueRef<Capturer>, String>&&, const CaptureDevice&, const MediaConstraints*);
+ static CaptureSourceOrError create(const CaptureDevice&, String&&, const MediaConstraints*);
+ static CaptureSourceOrError create(Expected<UniqueRef<Capturer>, String>&&, const CaptureDevice&, String&&, const MediaConstraints*);
Seconds elapsedTime();
void updateFrameSize();
private:
- DisplayCaptureSourceCocoa(UniqueRef<Capturer>&&, String&& name);
+ DisplayCaptureSourceCocoa(UniqueRef<Capturer>&&, String&& name, String&& deviceID, String&& hashSalt);
virtual ~DisplayCaptureSourceCocoa();
+ // RealtimeMediaSource
void startProducingData() final;
void stopProducingData() final;
void settingsDidChange(OptionSet<RealtimeMediaSourceSettings::Flag>) final;
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerCaptureDeviceManager.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -72,7 +72,7 @@
static GStreamerDisplayCaptureDeviceManager& singleton();
const Vector<CaptureDevice>& captureDevices() final { return m_devices; };
void computeCaptureDevices(CompletionHandler<void()>&&) final;
- CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, const MediaConstraints*);
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice&, String&&, const MediaConstraints*);
enum PipeWireOutputType {
Monitor = 1 << 0,
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerDisplayCaptureDeviceManager.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -59,12 +59,12 @@
callback();
}
-CaptureSourceOrError GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints)
+CaptureSourceOrError GStreamerDisplayCaptureDeviceManager::createDisplayCaptureSource(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints)
{
const auto it = m_sessions.find(device.persistentId());
if (it != m_sessions.end()) {
return GStreamerVideoCaptureSource::createPipewireSource(device.persistentId().isolatedCopy(),
- it->value->fd, { }, constraints, device.type());
+ it->value->fd, WTFMove(hashSalt), constraints, device.type());
}
GUniqueOutPtr<GError> error;
@@ -156,7 +156,7 @@
auto session = makeUnique<GStreamerDisplayCaptureDeviceManager::Session>(fd, WTFMove(sessionPath));
m_sessions.add(device.persistentId(), WTFMove(session));
- return GStreamerVideoCaptureSource::createPipewireSource(device.persistentId().isolatedCopy(), fd, { }, constraints, device.type());
+ return GStreamerVideoCaptureSource::createPipewireSource(device.persistentId().isolatedCopy(), fd, WTFMove(hashSalt), constraints, device.type());
}
void GStreamerDisplayCaptureDeviceManager::stopSource(const String& persistentID)
Modified: trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoCaptureSource.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -71,10 +71,10 @@
class GStreamerDisplayCaptureSourceFactory final : public DisplayCaptureFactory {
public:
- CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints) final
{
auto& manager = GStreamerDisplayCaptureDeviceManager::singleton();
- return manager.createDisplayCaptureSource(device, constraints);
+ return manager.createDisplayCaptureSource(device, WTFMove(hashSalt), constraints);
}
private:
CaptureDeviceManager& displayCaptureDeviceManager() final { return GStreamerDisplayCaptureDeviceManager::singleton(); }
Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -57,9 +57,9 @@
class DisplayCaptureSourceFactoryMac final : public DisplayCaptureFactory {
public:
- CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints) final
{
- return DisplayCaptureSourceCocoa::create(device, constraints);
+ return DisplayCaptureSourceCocoa::create(device, WTFMove(hashSalt), constraints);
}
private:
CaptureDeviceManager& displayCaptureDeviceManager() { return DisplayCaptureManagerCocoa::singleton(); }
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -177,7 +177,7 @@
class MockRealtimeDisplaySourceFactory : public DisplayCaptureFactory {
public:
- CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints) final
+ CaptureSourceOrError createDisplayCaptureSource(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints) final
{
if (!MockRealtimeMediaSourceCenter::captureDeviceWithPersistentID(device.type(), device.persistentId()))
return { "Unable to find mock display device with given persistentID"_s };
@@ -186,11 +186,11 @@
case CaptureDevice::DeviceType::Screen:
case CaptureDevice::DeviceType::Window:
#if PLATFORM(MAC)
- return DisplayCaptureSourceCocoa::create(UniqueRef<DisplayCaptureSourceCocoa::Capturer>(makeUniqueRef<MockDisplayCapturer>(device)), device, constraints);
+ return DisplayCaptureSourceCocoa::create(UniqueRef<DisplayCaptureSourceCocoa::Capturer>(makeUniqueRef<MockDisplayCapturer>(device)), device, WTFMove(hashSalt), constraints);
#elif USE(GSTREAMER)
return MockDisplayCaptureSourceGStreamer::create(device, constraints);
#else
- return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, String { }, constraints);
+ return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, WTFMove(hashSalt), constraints);
#endif
break;
case CaptureDevice::DeviceType::Microphone:
Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (286490 => 286491)
--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -176,6 +176,7 @@
settings.setDisplaySurface(mockScreen() ? RealtimeMediaSourceSettings::DisplaySurfaceType::Monitor : RealtimeMediaSourceSettings::DisplaySurfaceType::Window);
settings.setLogicalSurface(false);
}
+ settings.setDeviceId(hashedId());
settings.setFrameRate(frameRate());
auto size = this->size();
if (mockCamera()) {
@@ -192,10 +193,10 @@
supportedConstraints.setSupportsWidth(true);
supportedConstraints.setSupportsHeight(true);
supportedConstraints.setSupportsAspectRatio(true);
- if (mockCamera()) {
- supportedConstraints.setSupportsDeviceId(true);
+ supportedConstraints.setSupportsDeviceId(true);
+ if (mockCamera())
supportedConstraints.setSupportsFacingMode(true);
- } else {
+ else {
supportedConstraints.setSupportsDisplaySurface(true);
supportedConstraints.setSupportsLogicalSurface(true);
}
Modified: trunk/Source/WebKit/ChangeLog (286490 => 286491)
--- trunk/Source/WebKit/ChangeLog 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/ChangeLog 2021-12-03 16:35:55 UTC (rev 286491)
@@ -1,3 +1,28 @@
+2021-12-03 Eric Carlson <[email protected]>
+
+ DisplayCaptureSource doesn't initialize base class correctly
+ https://bugs.webkit.org/show_bug.cgi?id=233722
+
+ Reviewed by Youenn Fablet.
+
+ * UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp:
+ (WebKit::UserMediaCaptureManagerProxy::createMediaSourceForCaptureDeviceWithConstraints):
+ Pass the hash salt to the factory.
+
+ * WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp:
+ (WebKit::RemoteRealtimeDisplaySource::create): Remove 'name' parameter because
+ CaptureDevice already has the name.
+ (WebKit::RemoteRealtimeDisplaySource::RemoteRealtimeDisplaySource): Pass name to
+ base class from device.label().
+ (WebKit::RemoteRealtimeDisplaySource::createRemoteMediaSource): Don't call setName
+ with settings, it was already set in the constructor.
+ * WebProcess/cocoa/RemoteRealtimeDisplaySource.h:
+
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::DisplayFactory::createDisplayCaptureSource): Pass
+ hash salt to RemoteRealtimeDisplaySource::create.
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
2021-12-03 Myles C. Maxfield <[email protected]>
Rename DerivedSources/WebKit2 to DerivedSources/WebKit
Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (286490 => 286491)
--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -292,7 +292,7 @@
break;
case WebCore::CaptureDevice::DeviceType::Screen:
case WebCore::CaptureDevice::DeviceType::Window:
- sourceOrError = RealtimeMediaSourceCenter::singleton().displayCaptureFactory().createDisplayCaptureSource(device, constraints);
+ sourceOrError = RealtimeMediaSourceCenter::singleton().displayCaptureFactory().createDisplayCaptureSource(device, WTFMove(hashSalt), constraints);
break;
case WebCore::CaptureDevice::DeviceType::Speaker:
case WebCore::CaptureDevice::DeviceType::Unknown:
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp (286490 => 286491)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -38,9 +38,9 @@
namespace WebKit {
using namespace WebCore;
-Ref<RealtimeMediaSource> RemoteRealtimeDisplaySource::create(const CaptureDevice& device, const MediaConstraints* constraints, String&& name, String&& hashSalt, UserMediaCaptureManager& manager, bool shouldCaptureInGPUProcess)
+Ref<RealtimeMediaSource> RemoteRealtimeDisplaySource::create(const CaptureDevice& device, const MediaConstraints* constraints, String&& hashSalt, UserMediaCaptureManager& manager, bool shouldCaptureInGPUProcess)
{
- auto source = adoptRef(*new RemoteRealtimeDisplaySource(RealtimeMediaSourceIdentifier::generate(), device, constraints, WTFMove(name), WTFMove(hashSalt), manager, shouldCaptureInGPUProcess));
+ auto source = adoptRef(*new RemoteRealtimeDisplaySource(RealtimeMediaSourceIdentifier::generate(), device, constraints, WTFMove(hashSalt), manager, shouldCaptureInGPUProcess));
manager.addSource(source.copyRef());
manager.remoteCaptureSampleManager().addSource(source.copyRef());
source->createRemoteMediaSource();
@@ -47,8 +47,8 @@
return source;
}
-RemoteRealtimeDisplaySource::RemoteRealtimeDisplaySource(RealtimeMediaSourceIdentifier identifier, const CaptureDevice& device, const MediaConstraints* constraints, String&& name, String&& hashSalt, UserMediaCaptureManager& manager, bool shouldCaptureInGPUProcess)
- : RealtimeMediaSource(RealtimeMediaSource::Type::Video, WTFMove(name), String { device.persistentId() }, WTFMove(hashSalt))
+RemoteRealtimeDisplaySource::RemoteRealtimeDisplaySource(RealtimeMediaSourceIdentifier identifier, const CaptureDevice& device, const MediaConstraints* constraints, String&& hashSalt, UserMediaCaptureManager& manager, bool shouldCaptureInGPUProcess)
+ : RealtimeMediaSource(RealtimeMediaSource::Type::Video, String { device.label() }, String { device.persistentId() }, WTFMove(hashSalt))
, m_proxy(identifier, device, shouldCaptureInGPUProcess, constraints)
, m_manager(manager)
{
@@ -65,7 +65,6 @@
setSettings(WTFMove(settings));
setCapabilities(WTFMove(capabilities));
- setName(String { m_settings.label().string() });
m_proxy.setAsReady();
if (m_proxy.shouldCaptureInGPUProcess())
Modified: trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h (286490 => 286491)
--- trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/WebProcess/cocoa/RemoteRealtimeDisplaySource.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -47,7 +47,7 @@
#endif
{
public:
- static Ref<WebCore::RealtimeMediaSource> create(const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& name, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
+ static Ref<WebCore::RealtimeMediaSource> create(const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
~RemoteRealtimeDisplaySource();
WebCore::RealtimeMediaSourceIdentifier identifier() const { return m_proxy.identifier(); }
@@ -65,7 +65,7 @@
void sourceMutedChanged(bool value) { notifyMutedChange(value); }
private:
- RemoteRealtimeDisplaySource(WebCore::RealtimeMediaSourceIdentifier, const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& name, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
+ RemoteRealtimeDisplaySource(WebCore::RealtimeMediaSourceIdentifier, const WebCore::CaptureDevice&, const WebCore::MediaConstraints*, String&& hashSalt, UserMediaCaptureManager&, bool shouldCaptureInGPUProcess);
// RealtimeMediaSource
void startProducingData() final { m_proxy.startProducingData(); }
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (286490 => 286491)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2021-12-03 16:35:55 UTC (rev 286491)
@@ -240,9 +240,9 @@
return CaptureSourceOrError(RealtimeVideoSource::create(RemoteRealtimeVideoSource::create(device, constraints, { }, WTFMove(hashSalt), m_manager, m_shouldCaptureInGPUProcess)));
}
-CaptureSourceOrError UserMediaCaptureManager::DisplayFactory::createDisplayCaptureSource(const CaptureDevice& device, const MediaConstraints* constraints)
+CaptureSourceOrError UserMediaCaptureManager::DisplayFactory::createDisplayCaptureSource(const CaptureDevice& device, String&& hashSalt, const MediaConstraints* constraints)
{
- return CaptureSourceOrError(RemoteRealtimeDisplaySource::create(device, constraints, { }, { }, m_manager, false));
+ return CaptureSourceOrError(RemoteRealtimeDisplaySource::create(device, constraints, WTFMove(hashSalt), m_manager, false));
}
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h (286490 => 286491)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2021-12-03 15:30:33 UTC (rev 286490)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2021-12-03 16:35:55 UTC (rev 286491)
@@ -99,7 +99,7 @@
explicit DisplayFactory(UserMediaCaptureManager& manager) : m_manager(manager) { }
private:
- WebCore::CaptureSourceOrError createDisplayCaptureSource(const WebCore::CaptureDevice&, const WebCore::MediaConstraints*) final;
+ WebCore::CaptureSourceOrError createDisplayCaptureSource(const WebCore::CaptureDevice&, String&&, const WebCore::MediaConstraints*) final;
WebCore::CaptureDeviceManager& displayCaptureDeviceManager() final { return m_manager.m_noOpCaptureDeviceManager; }
UserMediaCaptureManager& m_manager;