Title: [222471] trunk
Revision
222471
Author
[email protected]
Date
2017-09-25 14:46:46 -0700 (Mon, 25 Sep 2017)

Log Message

MediaStreamTrack.getSettings should compute its deviceId/groupId like enumerateDevices
https://bugs.webkit.org/show_bug.cgi?id=177433

Patch by Youenn Fablet <[email protected]> on 2017-09-25
Reviewed by Jer Noble.

Source/WebCore:

Covered by improved test.

Hash the deviceId returned by getSettings as done by enumerateDevices/getUserMedia.
Do the same thing for groupId.
Make sure mock sources have their deviceId set consistently with mock devices.

* Modules/mediastream/MediaStreamTrack.cpp:
(WebCore::MediaStreamTrack::getSettings const):
* Modules/mediastream/MediaStreamTrack.h:
* Modules/mediastream/MediaStreamTrack.idl:
* platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
* platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
(WebCore::MockRealtimeAudioSource::create):
(WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac):
* platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
* platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
(WebCore::MockRealtimeVideoSource::create):
(WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
* platform/mock/MockRealtimeAudioSource.cpp:
(WebCore::MockRealtimeAudioSource::create):
(WebCore::MockRealtimeAudioSource::createMuted):
(WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
* platform/mock/MockRealtimeAudioSource.h:
* platform/mock/MockRealtimeVideoSource.cpp:
(WebCore::MockRealtimeVideoSource::create):
(WebCore::MockRealtimeVideoSource::createMuted):
(WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
* platform/mock/MockRealtimeVideoSource.h:

LayoutTests:

* fast/mediastream/get-user-media-device-id.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (222470 => 222471)


--- trunk/LayoutTests/ChangeLog	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/LayoutTests/ChangeLog	2017-09-25 21:46:46 UTC (rev 222471)
@@ -1,3 +1,12 @@
+2017-09-25  Youenn Fablet  <[email protected]>
+
+        MediaStreamTrack.getSettings should compute its deviceId/groupId like enumerateDevices
+        https://bugs.webkit.org/show_bug.cgi?id=177433
+
+        Reviewed by Jer Noble.
+
+        * fast/mediastream/get-user-media-device-id.html:
+
 2017-09-25  Michael Catanzaro  <[email protected]>
 
         Unreviewed GTK test gardening

Modified: trunk/LayoutTests/fast/mediastream/get-user-media-device-id.html (222470 => 222471)


--- trunk/LayoutTests/fast/mediastream/get-user-media-device-id.html	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/LayoutTests/fast/mediastream/get-user-media-device-id.html	2017-09-25 21:46:46 UTC (rev 222471)
@@ -28,10 +28,20 @@
             constraints[info.type] = { deviceId: { exact: info.id } };
         });
     
+        var audioTrack, videoTrack;
         return navigator.mediaDevices.getUserMedia(constraints)
             .then((stream) => {
                 assert_equals(stream.getAudioTracks().length, 1, "correct number of audio tracks");
                 assert_equals(stream.getVideoTracks().length, 1, "correct number of audio tracks");
+
+                videoTrack = stream.getVideoTracks()[0];
+                audioTrack = stream.getAudioTracks()[0];
+                return navigator.mediaDevices.enumerateDevices();
+            }).then(devices => {
+                var ids = devices.map(device => device.deviceId);
+                assert_true(ids.indexOf(videoTrack.getSettings().deviceId) !== -1 , "deviceId for video track should be respected");
+                assert_true(ids.indexOf(audioTrack.getSettings().deviceId) !== -1 , "deviceId for audio track should be respected");
+                assert_equals(audioTrack.getSettings().groupId, videoTrack.getSettings().groupId, "groupId should match");
             })
 
     }, "Pass device IDs as exact constraints");

Modified: trunk/Source/WebCore/ChangeLog (222470 => 222471)


--- trunk/Source/WebCore/ChangeLog	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/ChangeLog	2017-09-25 21:46:46 UTC (rev 222471)
@@ -1,3 +1,39 @@
+2017-09-25  Youenn Fablet  <[email protected]>
+
+        MediaStreamTrack.getSettings should compute its deviceId/groupId like enumerateDevices
+        https://bugs.webkit.org/show_bug.cgi?id=177433
+
+        Reviewed by Jer Noble.
+
+        Covered by improved test.
+
+        Hash the deviceId returned by getSettings as done by enumerateDevices/getUserMedia.
+        Do the same thing for groupId.
+        Make sure mock sources have their deviceId set consistently with mock devices.
+
+        * Modules/mediastream/MediaStreamTrack.cpp:
+        (WebCore::MediaStreamTrack::getSettings const):
+        * Modules/mediastream/MediaStreamTrack.h:
+        * Modules/mediastream/MediaStreamTrack.idl:
+        * platform/mediastream/mac/MockRealtimeAudioSourceMac.h:
+        * platform/mediastream/mac/MockRealtimeAudioSourceMac.mm:
+        (WebCore::MockRealtimeAudioSource::create):
+        (WebCore::MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac):
+        * platform/mediastream/mac/MockRealtimeVideoSourceMac.h:
+        * platform/mediastream/mac/MockRealtimeVideoSourceMac.mm:
+        (WebCore::MockRealtimeVideoSource::create):
+        (WebCore::MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac):
+        * platform/mock/MockRealtimeAudioSource.cpp:
+        (WebCore::MockRealtimeAudioSource::create):
+        (WebCore::MockRealtimeAudioSource::createMuted):
+        (WebCore::MockRealtimeAudioSource::MockRealtimeAudioSource):
+        * platform/mock/MockRealtimeAudioSource.h:
+        * platform/mock/MockRealtimeVideoSource.cpp:
+        (WebCore::MockRealtimeVideoSource::create):
+        (WebCore::MockRealtimeVideoSource::createMuted):
+        (WebCore::MockRealtimeVideoSource::MockRealtimeVideoSource):
+        * platform/mock/MockRealtimeVideoSource.h:
+
 2017-09-25  Chris Dumez  <[email protected]>
 
         Make StoredCredentials an enum class and rename its header

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (222470 => 222471)


--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2017-09-25 21:46:46 UTC (rev 222471)
@@ -40,6 +40,7 @@
 #include "NotImplemented.h"
 #include "OverconstrainedError.h"
 #include "Page.h"
+#include "RealtimeMediaSourceCenter.h"
 #include "ScriptExecutionContext.h"
 #include <wtf/NeverDestroyed.h>
 
@@ -143,7 +144,7 @@
     configureTrackRendering();
 }
 
-MediaStreamTrack::TrackSettings MediaStreamTrack::getSettings() const
+MediaStreamTrack::TrackSettings MediaStreamTrack::getSettings(Document& document) const
 {
     auto& settings = m_private->settings();
     TrackSettings result;
@@ -166,9 +167,9 @@
     if (settings.supportsEchoCancellation())
         result.echoCancellation = settings.echoCancellation();
     if (settings.supportsDeviceId())
-        result.deviceId = settings.deviceId();
+        result.deviceId = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(settings.deviceId(), document.deviceIDHashSalt());
     if (settings.supportsGroupId())
-        result.groupId = settings.groupId();
+        result.groupId = RealtimeMediaSourceCenter::singleton().hashStringWithSalt(settings.groupId(), document.deviceIDHashSalt());
     return result;
 }
 

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h (222470 => 222471)


--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.h	2017-09-25 21:46:46 UTC (rev 222471)
@@ -98,7 +98,7 @@
         String deviceId;
         String groupId;
     };
-    WEBCORE_EXPORT TrackSettings getSettings() const;
+    TrackSettings getSettings(Document&) const;
 
     struct TrackCapabilities {
         std::optional<LongRange> width;

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl (222470 => 222471)


--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.idl	2017-09-25 21:46:46 UTC (rev 222471)
@@ -48,7 +48,7 @@
 
     MediaTrackCapabilities getCapabilities();
     MediaTrackConstraints getConstraints();
-    MediaTrackSettings getSettings();
+    [CallWith=Document] MediaTrackSettings getSettings();
     Promise<void> applyConstraints(optional MediaTrackConstraints constraints);
 
     attribute EventHandler onoverconstrained;

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h (222470 => 222471)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.h	2017-09-25 21:46:46 UTC (rev 222471)
@@ -48,7 +48,7 @@
 class MockRealtimeAudioSourceMac final : public MockRealtimeAudioSource {
 private:
     friend class MockRealtimeAudioSource;
-    explicit MockRealtimeAudioSourceMac(const String&);
+    MockRealtimeAudioSourceMac(const String& deviceID, const String& name);
 
     bool applySampleRate(int) final;
     bool applySampleSize(int) final { return false; }

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm (222470 => 222471)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeAudioSourceMac.mm	2017-09-25 21:46:46 UTC (rev 222471)
@@ -84,9 +84,9 @@
     }
 }
 
-CaptureSourceOrError MockRealtimeAudioSource::create(const String& name, const MediaConstraints* constraints)
+CaptureSourceOrError MockRealtimeAudioSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
 {
-    auto source = adoptRef(*new MockRealtimeAudioSourceMac(name));
+    auto source = adoptRef(*new MockRealtimeAudioSourceMac(deviceID, name));
     // FIXME: We should report error messages
     if (constraints && source->applyConstraints(*constraints))
         return { };
@@ -94,8 +94,8 @@
     return CaptureSourceOrError(WTFMove(source));
 }
 
-MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac(const String& name)
-    : MockRealtimeAudioSource(name)
+MockRealtimeAudioSourceMac::MockRealtimeAudioSourceMac(const String& deviceID, const String& name)
+    : MockRealtimeAudioSource(deviceID, name)
 {
 }
 

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h (222470 => 222471)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.h	2017-09-25 21:46:46 UTC (rev 222471)
@@ -48,7 +48,7 @@
 
 private:
     friend class MockRealtimeVideoSource;
-    MockRealtimeVideoSourceMac(const String&);
+    MockRealtimeVideoSourceMac(const String& deviceID, const String& name);
 
     RetainPtr<CMSampleBufferRef> CMSampleBufferFromPixelBuffer(CVPixelBufferRef);
     RetainPtr<CVPixelBufferRef> pixelBufferFromCGImage(CGImageRef) const;

Modified: trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm (222470 => 222471)


--- trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mediastream/mac/MockRealtimeVideoSourceMac.mm	2017-09-25 21:46:46 UTC (rev 222471)
@@ -50,9 +50,9 @@
 
 static const int videoSampleRate = 90000;
 
-CaptureSourceOrError MockRealtimeVideoSource::create(const String& name, const MediaConstraints* constraints)
+CaptureSourceOrError MockRealtimeVideoSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
 {
-    auto source = adoptRef(*new MockRealtimeVideoSourceMac(name));
+    auto source = adoptRef(*new MockRealtimeVideoSourceMac(deviceID, name));
     // FIXME: We should report error messages
     if (constraints && source->applyConstraints(*constraints))
         return { };
@@ -60,8 +60,8 @@
     return CaptureSourceOrError(WTFMove(source));
 }
 
-MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac(const String& name)
-    : MockRealtimeVideoSource(name)
+MockRealtimeVideoSourceMac::MockRealtimeVideoSourceMac(const String& deviceID, const String& name)
+    : MockRealtimeVideoSource(deviceID, name)
 {
 }
 

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp (222470 => 222471)


--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.cpp	2017-09-25 21:46:46 UTC (rev 222471)
@@ -50,7 +50,7 @@
     CaptureSourceOrError createAudioCaptureSource(const String& deviceID, const MediaConstraints* constraints) final {
         for (auto& device : MockRealtimeMediaSource::audioDevices()) {
             if (device.persistentId() == deviceID)
-                return MockRealtimeAudioSource::create(device.label(), constraints);
+                return MockRealtimeAudioSource::create(deviceID, device.label(), constraints);
         }
         return { };
     }
@@ -57,9 +57,9 @@
 };
 
 #if !PLATFORM(MAC) && !PLATFORM(IOS)
-CaptureSourceOrError MockRealtimeAudioSource::create(const String& name, const MediaConstraints* constraints)
+CaptureSourceOrError MockRealtimeAudioSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
 {
-    auto source = adoptRef(*new MockRealtimeAudioSource(name));
+    auto source = adoptRef(*new MockRealtimeAudioSource(deviceID, name));
     if (constraints && source->applyConstraints(*constraints))
         return { };
 
@@ -69,7 +69,7 @@
 
 Ref<MockRealtimeAudioSource> MockRealtimeAudioSource::createMuted(const String& name)
 {
-    auto source = adoptRef(*new MockRealtimeAudioSource(name));
+    auto source = adoptRef(*new MockRealtimeAudioSource(String { }, name));
     source->notifyMutedChange(true);
     return source;
 }
@@ -85,8 +85,8 @@
     return mockAudioCaptureSourceFactory();
 }
 
-MockRealtimeAudioSource::MockRealtimeAudioSource(const String& name)
-    : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Type::Audio, name)
+MockRealtimeAudioSource::MockRealtimeAudioSource(const String& deviceID, const String& name)
+    : MockRealtimeMediaSource(deviceID, RealtimeMediaSource::Type::Audio, name)
     , m_timer(RunLoop::current(), this, &MockRealtimeAudioSource::tick)
 {
 }

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (222470 => 222471)


--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2017-09-25 21:46:46 UTC (rev 222471)
@@ -41,7 +41,7 @@
 class MockRealtimeAudioSource : public MockRealtimeMediaSource {
 public:
 
-    static CaptureSourceOrError create(const String&, const MediaConstraints*);
+    static CaptureSourceOrError create(const String& deviceID, const String& name, const MediaConstraints*);
     static Ref<MockRealtimeAudioSource> createMuted(const String& name);
 
     static AudioCaptureFactory& factory();
@@ -49,7 +49,7 @@
     virtual ~MockRealtimeAudioSource();
 
 protected:
-    MockRealtimeAudioSource(const String& name = ASCIILiteral("Mock audio device"));
+    MockRealtimeAudioSource(const String& deviceID, const String& name);
 
     void startProducingData() final;
     void stopProducingData() final;

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp (222470 => 222471)


--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp	2017-09-25 21:46:46 UTC (rev 222471)
@@ -57,7 +57,7 @@
     CaptureSourceOrError createVideoCaptureSource(const String& deviceID, const MediaConstraints* constraints) final {
         for (auto& device : MockRealtimeMediaSource::videoDevices()) {
             if (device.persistentId() == deviceID)
-                return MockRealtimeVideoSource::create(device.label(), constraints);
+                return MockRealtimeVideoSource::create(deviceID, device.label(), constraints);
         }
         return { };
     }
@@ -72,9 +72,9 @@
 };
 
 #if !PLATFORM(MAC) && !PLATFORM(IOS)
-CaptureSourceOrError MockRealtimeVideoSource::create(const String& name, const MediaConstraints* constraints)
+CaptureSourceOrError MockRealtimeVideoSource::create(const String& deviceID, const String& name, const MediaConstraints* constraints)
 {
-    auto source = adoptRef(*new MockRealtimeVideoSource(name));
+    auto source = adoptRef(*new MockRealtimeVideoSource(deviceID, name));
     if (constraints && source->applyConstraints(*constraints))
         return { };
 
@@ -84,7 +84,7 @@
 
 Ref<MockRealtimeVideoSource> MockRealtimeVideoSource::createMuted(const String& name)
 {
-    auto source = adoptRef(*new MockRealtimeVideoSource(name));
+    auto source = adoptRef(*new MockRealtimeVideoSource(String { }, name));
     source->notifyMutedChange(true);
     return source;
 }
@@ -100,8 +100,8 @@
     return mockVideoCaptureSourceFactory();
 }
 
-MockRealtimeVideoSource::MockRealtimeVideoSource(const String& name)
-    : MockRealtimeMediaSource(createCanonicalUUIDString(), RealtimeMediaSource::Type::Video, name)
+MockRealtimeVideoSource::MockRealtimeVideoSource(const String& deviceID, const String& name)
+    : MockRealtimeMediaSource(deviceID, RealtimeMediaSource::Type::Video, name)
     , m_timer(RunLoop::current(), this, &MockRealtimeVideoSource::generateFrame)
 {
     setFrameRate(!deviceIndex() ? 30 : 15);

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h (222470 => 222471)


--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2017-09-25 21:43:54 UTC (rev 222470)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2017-09-25 21:46:46 UTC (rev 222471)
@@ -46,7 +46,7 @@
 class MockRealtimeVideoSource : public MockRealtimeMediaSource {
 public:
 
-    static CaptureSourceOrError create(const String&, const MediaConstraints*);
+    static CaptureSourceOrError create(const String& deviceID, const String& name, const MediaConstraints*);
     static Ref<MockRealtimeVideoSource> createMuted(const String& name);
 
     static VideoCaptureFactory& factory();
@@ -54,7 +54,7 @@
     virtual ~MockRealtimeVideoSource();
 
 protected:
-    MockRealtimeVideoSource(const String&);
+    MockRealtimeVideoSource(const String& deviceID, const String& name);
     virtual void updateSampleBuffer() { }
 
     ImageBuffer* imageBuffer() const;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to