Diff
Modified: trunk/LayoutTests/ChangeLog (258201 => 258202)
--- trunk/LayoutTests/ChangeLog 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/ChangeLog 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,3 +1,20 @@
+2020-03-10 youenn fablet <[email protected]>
+
+ [iOS] Make sure a MediStreamTrack clone does not interrupt the being cloned track
+ https://bugs.webkit.org/show_bug.cgi?id=208634
+
+ Reviewed by Eric Carlson.
+
+ * fast/mediastream/MediaStream-clone.html:
+ * fast/mediastream/MediaStreamTrack-clone.html:
+ * fast/mediastream/mediastreamtrack-video-clone.html:
+ * platform/ios/TestExpectations:
+ * platform/ios/mediastream/getUserMedia-single-capture.html:
+ muting is now longer synchronous in WebProcess since it relies on GPUProcess factory to mute the remote track.
+ Update the test to account for this.
+ Also, make sure to use a different device, so that we do not use a track cloning under the hood.
+ * webrtc/multi-video.html:
+
2020-03-09 Zalan Bujtas <[email protected]>
[LayoutTests] Do not expose didAddHorizontal/VerticalScrollbar and willRemoveHorizontal/VerticalScrollbar
Modified: trunk/LayoutTests/fast/mediastream/MediaStream-clone.html (258201 => 258202)
--- trunk/LayoutTests/fast/mediastream/MediaStream-clone.html 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/fast/mediastream/MediaStream-clone.html 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,4 +1,3 @@
-<!-- webkit-test-runner [ enableCaptureAudioInGPUProcess=true enableCaptureVideoInGPUProcess=false ] -->
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
Modified: trunk/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html (258201 => 258202)
--- trunk/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/fast/mediastream/MediaStreamTrack-clone.html 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,4 +1,3 @@
-<!-- webkit-test-runner [ enableCaptureAudioInGPUProcess=true enableCaptureVideoInGPUProcess=false ] -->
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
Modified: trunk/LayoutTests/fast/mediastream/mediastreamtrack-video-clone.html (258201 => 258202)
--- trunk/LayoutTests/fast/mediastream/mediastreamtrack-video-clone.html 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/fast/mediastream/mediastreamtrack-video-clone.html 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,4 +1,3 @@
-<!-- webkit-test-runner [ enableCaptureAudioInGPUProcess=true enableCaptureVideoInGPUProcess=false ] -->
<!DOCTYPE html>
<html>
<head>
Modified: trunk/LayoutTests/platform/ios/TestExpectations (258201 => 258202)
--- trunk/LayoutTests/platform/ios/TestExpectations 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/platform/ios/TestExpectations 2020-03-10 13:02:52 UTC (rev 258202)
@@ -103,10 +103,13 @@
gamepad
mhtml
-# Some media stream tests crash because of OS issues, so skip all but one while we investigate.
+# Some media stream tests crash because of OS issues, so skip all but a few while we investigate.
fast/mediastream [ Skip ]
fast/mediastream/getUserMedia-default.html [ Pass ]
fast/mediastream/captureInGPUProcess.html [ Pass ]
+fast/mediastream/MediaStreamTrack-clone.html [ Pass ]
+fast/mediastream/MediaStream-clone.html [ Pass ]
+fast/mediastream/mediastreamtrack-video-clone.html [ Pass ]
# ENABLE(MEDIA_CAPTURE) is not enabled
fast/forms/file/file-input-capture.html
Modified: trunk/LayoutTests/platform/ios/mediastream/getUserMedia-single-capture.html (258201 => 258202)
--- trunk/LayoutTests/platform/ios/mediastream/getUserMedia-single-capture.html 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/platform/ios/mediastream/getUserMedia-single-capture.html 2020-03-10 13:02:52 UTC (rev 258202)
@@ -8,6 +8,15 @@
</head>
<body>
<script>
+
+async function waitForTrackMuted(track)
+{
+ if (track.muted)
+ return;
+
+ return new Promise(resolve => track._onmute_ = resolve);
+}
+
promise_test((test) => {
if (window.testRunner)
testRunner.setUserMediaPermission(true);
@@ -15,7 +24,7 @@
var firstStream;
var audioTrack;
var videoTrack;
- return navigator.mediaDevices.getUserMedia({ audio: true, video: true }).then((stream) => {
+ return navigator.mediaDevices.getUserMedia({ audio: true, video: { facingMode: { exact: ['user'] } } }).then((stream) => {
firstStream = stream;
audioTrack = firstStream.getAudioTracks()[0];
videoTrack = firstStream.getVideoTracks()[0];
@@ -24,12 +33,16 @@
assert_false(videoTrack.muted, "video track is active");
return navigator.mediaDevices.getUserMedia({ audio: true});
- }).then((stream) => {
+ }).then(async (stream) => {
+ await waitForTrackMuted(audioTrack);
+
assert_true(audioTrack.muted, "audio track is muted");
assert_false(videoTrack.muted, "video track is active");
- return navigator.mediaDevices.getUserMedia({ video: true});
- }).then((stream) => {
+ return navigator.mediaDevices.getUserMedia({ video: { facingMode: { exact: ["environment"] } } });
+ }).then(async (stream) => {
+ await waitForTrackMuted(videoTrack);
+
assert_true(audioTrack.muted, "audio track is muted");
assert_true(videoTrack.muted, "video track is muted");
});
Modified: trunk/LayoutTests/webrtc/multi-video.html (258201 => 258202)
--- trunk/LayoutTests/webrtc/multi-video.html 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/LayoutTests/webrtc/multi-video.html 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,4 +1,3 @@
-<!-- webkit-test-runner [ enableCaptureAudioInGPUProcess=true enableCaptureVideoInGPUProcess=false ] -->
<!doctype html>
<html>
<head>
Modified: trunk/Source/WebCore/ChangeLog (258201 => 258202)
--- trunk/Source/WebCore/ChangeLog 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/Source/WebCore/ChangeLog 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,5 +1,17 @@
2020-03-10 youenn fablet <[email protected]>
+ [iOS] Make sure a MediStreamTrack clone does not interrupt the being cloned track
+ https://bugs.webkit.org/show_bug.cgi?id=208634
+
+ Reviewed by Eric Carlson.
+
+ Covered by reenabled tests.
+
+ * platform/mediastream/RealtimeMediaSourceFactory.h:
+ (WebCore::SingleSourceFactory::activeSource): .
+
+2020-03-10 youenn fablet <[email protected]>
+
Remove sync IPC when creating a remote capture source
https://bugs.webkit.org/show_bug.cgi?id=208816
Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h (258201 => 258202)
--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSourceFactory.h 2020-03-10 13:02:52 UTC (rev 258202)
@@ -38,11 +38,13 @@
struct CaptureSourceOrError;
struct MediaConstraints;
-class SingleSourceFactory {
+class WEBCORE_EXPORT SingleSourceFactory {
public:
- WEBCORE_EXPORT void setActiveSource(RealtimeMediaSource&);
- WEBCORE_EXPORT void unsetActiveSource(RealtimeMediaSource&);
+ virtual ~SingleSourceFactory() = default;
+ virtual void setActiveSource(RealtimeMediaSource&);
+ void unsetActiveSource(RealtimeMediaSource&);
+
protected:
RealtimeMediaSource* activeSource() { return m_activeSource; }
Modified: trunk/Source/WebKit/ChangeLog (258201 => 258202)
--- trunk/Source/WebKit/ChangeLog 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/Source/WebKit/ChangeLog 2020-03-10 13:02:52 UTC (rev 258202)
@@ -1,5 +1,17 @@
2020-03-10 youenn fablet <[email protected]>
+ [iOS] Make sure a MediStreamTrack clone does not interrupt the being cloned track
+ https://bugs.webkit.org/show_bug.cgi?id=208634
+
+ Reviewed by Eric Carlson.
+
+ * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+ (WebKit::UserMediaCaptureManager::VideoFactory::setActiveSource):
+ Do nothing since GPUProcess will handle the muting itself if it creates multiple sources.
+ * WebProcess/cocoa/UserMediaCaptureManager.h:
+
+2020-03-10 youenn fablet <[email protected]>
+
Remove sync IPC when creating a remote capture source
https://bugs.webkit.org/show_bug.cgi?id=208816
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (258201 => 258202)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp 2020-03-10 13:02:52 UTC (rev 258202)
@@ -534,6 +534,12 @@
source->setInterrupted(interrupted, pageMuted);
}
}
+
+void UserMediaCaptureManager::VideoFactory::setActiveSource(RealtimeMediaSource&)
+{
+ // Muting is done by GPUProcess factory. We do not want to handle it here in case of track cloning.
+}
+
#endif
}
Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h (258201 => 258202)
--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2020-03-10 12:53:39 UTC (rev 258201)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.h 2020-03-10 13:02:52 UTC (rev 258202)
@@ -83,6 +83,7 @@
WebCore::CaptureSourceOrError createVideoCaptureSource(const WebCore::CaptureDevice&, String&& hashSalt, const WebCore::MediaConstraints*) final;
WebCore::CaptureDeviceManager& videoCaptureDeviceManager() final { return m_manager.m_noOpCaptureDeviceManager; }
#if PLATFORM(IOS_FAMILY)
+ void setActiveSource(WebCore::RealtimeMediaSource&) final;
void setVideoCapturePageState(bool interrupted, bool pageMuted) final;
#endif