Title: [258202] trunk
Revision
258202
Author
[email protected]
Date
2020-03-10 06:02:52 -0700 (Tue, 10 Mar 2020)

Log Message

[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.

Source/WebCore:

Covered by reenabled tests.

* platform/mediastream/RealtimeMediaSourceFactory.h:
(WebCore::SingleSourceFactory::activeSource): .

Source/WebKit:

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

LayoutTests:

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

Modified Paths

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

Reply via email to