Title: [239038] trunk/Source
Revision
239038
Author
[email protected]
Date
2018-12-10 11:53:43 -0800 (Mon, 10 Dec 2018)

Log Message

Make mock capture happen in the process used for real capture
https://bugs.webkit.org/show_bug.cgi?id=192544

Reviewed by Eric Carlson.

Source/WebCore:

MockRealtimeMediaSourceCenter previously was setting its factories whenever mock capture is on.
Add booleans to choose which source (audio, video, display) will actually be toggled on.

Covered by existing tests.

* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
* platform/mock/MockRealtimeMediaSourceCenter.h:
(WebCore::MockRealtimeMediaSourceCenter::setMockAudioCaptureEnabled):
(WebCore::MockRealtimeMediaSourceCenter::setMockVideoCaptureEnabled):
(WebCore::MockRealtimeMediaSourceCenter::setMockDisplayCaptureEnabled):

Source/WebKit:

Make mock capture happen in the right process by only overriding
factories by mock factories for source types that UserMediaCaptureManager will not override.
That way, UserMediaCaptureManager will be used to go to UIProcess, where mock will be used as if it was the real capture.

* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::initialize):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (239037 => 239038)


--- trunk/Source/WebCore/ChangeLog	2018-12-10 19:45:45 UTC (rev 239037)
+++ trunk/Source/WebCore/ChangeLog	2018-12-10 19:53:43 UTC (rev 239038)
@@ -1,3 +1,22 @@
+2018-12-10  Youenn Fablet  <[email protected]>
+
+        Make mock capture happen in the process used for real capture
+        https://bugs.webkit.org/show_bug.cgi?id=192544
+
+        Reviewed by Eric Carlson.
+
+        MockRealtimeMediaSourceCenter previously was setting its factories whenever mock capture is on.
+        Add booleans to choose which source (audio, video, display) will actually be toggled on.
+
+        Covered by existing tests.
+
+        * platform/mock/MockRealtimeMediaSourceCenter.cpp:
+        (WebCore::MockRealtimeMediaSourceCenter::setMockRealtimeMediaSourceCenterEnabled):
+        * platform/mock/MockRealtimeMediaSourceCenter.h:
+        (WebCore::MockRealtimeMediaSourceCenter::setMockAudioCaptureEnabled):
+        (WebCore::MockRealtimeMediaSourceCenter::setMockVideoCaptureEnabled):
+        (WebCore::MockRealtimeMediaSourceCenter::setMockDisplayCaptureEnabled):
+
 2018-12-10  Dean Jackson  <[email protected]>
 
         Use text/_javascript_ as recommended by the HTML specification

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (239037 => 239038)


--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2018-12-10 19:45:45 UTC (rev 239037)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2018-12-10 19:53:43 UTC (rev 239038)
@@ -193,15 +193,21 @@
     MockRealtimeMediaSourceCenter& mock = singleton();
 
     if (active) {
-        center.setAudioFactory(mock.audioFactory());
-        center.setVideoFactory(mock.videoFactory());
-        center.setDisplayCaptureFactory(mock.displayCaptureFactory());
+        if (mock.m_isMockAudioCaptureEnabled)
+            center.setAudioFactory(mock.audioFactory());
+        if (mock.m_isMockVideoCaptureEnabled)
+            center.setVideoFactory(mock.videoFactory());
+        if (mock.m_isMockDisplayCaptureEnabled)
+            center.setDisplayCaptureFactory(mock.displayCaptureFactory());
         return;
     }
 
-    center.unsetAudioFactory(mock.audioFactory());
-    center.unsetVideoFactory(mock.videoFactory());
-    center.unsetDisplayCaptureFactory(mock.displayCaptureFactory());
+    if (mock.m_isMockAudioCaptureEnabled)
+        center.unsetAudioFactory(mock.audioFactory());
+    if (mock.m_isMockVideoCaptureEnabled)
+        center.unsetVideoFactory(mock.videoFactory());
+    if (mock.m_isMockDisplayCaptureEnabled)
+        center.unsetDisplayCaptureFactory(mock.displayCaptureFactory());
 }
 
 static void createCaptureDevice(const MockMediaDevice& device)

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h (239037 => 239038)


--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h	2018-12-10 19:45:45 UTC (rev 239037)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.h	2018-12-10 19:53:43 UTC (rev 239038)
@@ -38,7 +38,7 @@
 
 class MockRealtimeMediaSourceCenter {
 public:
-    static MockRealtimeMediaSourceCenter& singleton();
+    WEBCORE_EXPORT static MockRealtimeMediaSourceCenter& singleton();
 
     WEBCORE_EXPORT static void setMockRealtimeMediaSourceCenterEnabled(bool);
 
@@ -47,6 +47,10 @@
     WEBCORE_EXPORT static void removeDevice(const String& persistentId);
     WEBCORE_EXPORT static void resetDevices();
 
+    void setMockAudioCaptureEnabled(bool isEnabled) { m_isMockAudioCaptureEnabled = isEnabled; }
+    void setMockVideoCaptureEnabled(bool isEnabled) { m_isMockVideoCaptureEnabled = isEnabled; }
+    void setMockDisplayCaptureEnabled(bool isEnabled) { m_isMockDisplayCaptureEnabled = isEnabled; }
+
     static Vector<CaptureDevice>& audioDevices();
     static Vector<CaptureDevice>& videoDevices();
     static Vector<CaptureDevice>& displayDevices();
@@ -85,6 +89,10 @@
     MockAudioCaptureDeviceManager m_audioCaptureDeviceManager;
     MockVideoCaptureDeviceManager m_videoCaptureDeviceManager;
     MockDisplayCaptureDeviceManager m_displayCaptureDeviceManager;
+
+    bool m_isMockAudioCaptureEnabled { true };
+    bool m_isMockVideoCaptureEnabled { true };
+    bool m_isMockDisplayCaptureEnabled { true };
 };
 
 }

Modified: trunk/Source/WebKit/ChangeLog (239037 => 239038)


--- trunk/Source/WebKit/ChangeLog	2018-12-10 19:45:45 UTC (rev 239037)
+++ trunk/Source/WebKit/ChangeLog	2018-12-10 19:53:43 UTC (rev 239038)
@@ -1,3 +1,17 @@
+2018-12-10  Youenn Fablet  <[email protected]>
+
+        Make mock capture happen in the process used for real capture
+        https://bugs.webkit.org/show_bug.cgi?id=192544
+
+        Reviewed by Eric Carlson.
+
+        Make mock capture happen in the right process by only overriding
+        factories by mock factories for source types that UserMediaCaptureManager will not override.
+        That way, UserMediaCaptureManager will be used to go to UIProcess, where mock will be used as if it was the real capture.
+
+        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::initialize):
+
 2018-12-10  Alexey Proskuryakov  <[email protected]>
 
         Move ENABLE_SEC_ITEM_SHIM out of WebKit's config.h

Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (239037 => 239038)


--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2018-12-10 19:45:45 UTC (rev 239037)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2018-12-10 19:53:43 UTC (rev 239038)
@@ -37,6 +37,7 @@
 #include <WebCore/CaptureDevice.h>
 #include <WebCore/ImageTransferSessionVT.h>
 #include <WebCore/MediaConstraints.h>
+#include <WebCore/MockRealtimeMediaSourceCenter.h>
 #include <WebCore/RealtimeMediaSourceCenter.h>
 #include <WebCore/RemoteVideoSample.h>
 #include <WebCore/WebAudioBufferList.h>
@@ -218,6 +219,10 @@
 
 void UserMediaCaptureManager::initialize(const WebProcessCreationParameters& parameters)
 {
+    MockRealtimeMediaSourceCenter::singleton().setMockAudioCaptureEnabled(!parameters.shouldCaptureAudioInUIProcess);
+    MockRealtimeMediaSourceCenter::singleton().setMockVideoCaptureEnabled(!parameters.shouldCaptureVideoInUIProcess);
+    MockRealtimeMediaSourceCenter::singleton().setMockDisplayCaptureEnabled(!parameters.shouldCaptureDisplayInUIProcess);
+
     if (parameters.shouldCaptureAudioInUIProcess)
         RealtimeMediaSourceCenter::setAudioFactory(*this);
     if (parameters.shouldCaptureVideoInUIProcess)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to