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;