Title: [286491] trunk
Revision
286491
Author
[email protected]
Date
2021-12-03 08:35:55 -0800 (Fri, 03 Dec 2021)

Log Message

DisplayCaptureSource doesn't initialize base class correctly
https://bugs.webkit.org/show_bug.cgi?id=233722

Reviewed by Youenn Fablet.

Source/WebCore:

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):

Source/WebKit:

* 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:

LayoutTests:

* fast/mediastream/get-display-media-settings-expected.txt: Added.
* fast/mediastream/get-display-media-settings.html: Added.

Modified Paths

Added Paths

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

Reply via email to