Title: [239840] trunk
Revision
239840
Author
[email protected]
Date
2019-01-10 12:48:49 -0800 (Thu, 10 Jan 2019)

Log Message

Define page media state flags for display capture.
https://bugs.webkit.org/show_bug.cgi?id=193230
<rdar://problem/47095142>

Reviewed by Youenn Fablet.

Source/WebCore:

Test: fast/mediastream/get-display-media-muted.html

* Modules/mediastream/MediaStreamTrack.cpp:
(WebCore::MediaStreamTrack::mediaState const):
* page/MediaProducer.h:
* platform/mediastream/RealtimeIncomingVideoSource.cpp:
(WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
* platform/mediastream/RealtimeMediaSource.h:
* platform/mediastream/mac/AVVideoCaptureSource.h:
* platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
* platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
* platform/mock/MockRealtimeAudioSource.h:
* platform/mock/MockRealtimeVideoSource.h:
* testing/Internals.cpp:
(WebCore::Internals::pageMediaState):

Source/WebKit:

* UIProcess/API/C/WKPage.cpp:
(WKPageGetMediaState):
* UIProcess/API/C/WKPagePrivate.h:
* WebProcess/cocoa/UserMediaCaptureManager.cpp:
(WebKit::UserMediaCaptureManager::Source::Source):
(WebKit::UserMediaCaptureManager::createCaptureSource):

LayoutTests:

* fast/mediastream/get-display-media-muted-expected.txt: Added.
* fast/mediastream/get-display-media-muted.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (239839 => 239840)


--- trunk/LayoutTests/ChangeLog	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/LayoutTests/ChangeLog	2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,14 @@
+2019-01-10  Eric Carlson  <[email protected]>
+
+        Define page media state flags for display capture.
+        https://bugs.webkit.org/show_bug.cgi?id=193230
+        <rdar://problem/47095142>
+
+        Reviewed by Youenn Fablet.
+
+        * fast/mediastream/get-display-media-muted-expected.txt: Added.
+        * fast/mediastream/get-display-media-muted.html: Added.
+
 2019-01-10  Commit Queue  <[email protected]>
 
         Unreviewed, rolling out r239825.

Added: trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt (0 => 239840)


--- trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-muted-expected.txt	2019-01-10 20:48:49 UTC (rev 239840)
@@ -0,0 +1,3 @@
+
+PASS Mute video track during screen capture 
+

Added: trunk/LayoutTests/fast/mediastream/get-display-media-muted.html (0 => 239840)


--- trunk/LayoutTests/fast/mediastream/get-display-media-muted.html	                        (rev 0)
+++ trunk/LayoutTests/fast/mediastream/get-display-media-muted.html	2019-01-10 20:48:49 UTC (rev 239840)
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>Mute screen capture, make sure page state updates correctly.</title>
+    <script src=""
+    <script src=""
+    <script>
+
+    if (window.testRunner)
+        testRunner.setUserMediaPermission(true);
+
+    async function waitForPageStateChange(numberOfTries, originalState)
+    {
+        return new Promise(async (resolve) => {
+            while (numberOfTries) {
+                if (internals.pageMediaState() != originalState) {
+                    resolve(true);
+                    return;
+                }
+                
+                await new Promise(resolve => { setTimeout(resolve, 10) });
+                --numberOfTries;
+            }
+
+            resolve(false);
+        });
+    }
+
+    promise_test(async (test) => {
+        await new Promise(async (resolve, reject) => {
+            let stream = await navigator.mediaDevices.getDisplayMedia({ video: true });
+            let pageMediaState = internals.pageMediaState();
+
+            assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
+            assert_false(pageMediaState.includes('HasMutedVideoCaptureDevice'), 'page state does not include HasMutedVideoCaptureDevice');
+            assert_false(pageMediaState.includes('HasMutedAudioCaptureDevice'), 'page state does not include HasMutedAudioCaptureDevice');
+
+            let track = stream.getVideoTracks()[0];
+            track._onunmute_ = () => { assert_unreached("Got 'unmute' event unexpectedly!") };
+
+            track._onmute_ = async (evt) => {
+
+                if (!await waitForPageStateChange(10, pageMediaState))
+                    assert_unreached(`Page state did not change from ${pageMediaState}`);
+
+                track._onunmute_ = async (evt) => {
+                    if (!await waitForPageStateChange(10, pageMediaState))
+                        assert_unreached(`Page state did not change from ${pageMediaState}`);
+
+                    pageMediaState = internals.pageMediaState();
+                    assert_false(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state does not include HasMutedDisplayCaptureDevice');
+                    assert_true(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state includes HasActiveDisplayCaptureDevice');
+                    resolve()
+                }
+
+                pageMediaState = internals.pageMediaState();
+                assert_true(pageMediaState.includes('HasMutedDisplayCaptureDevice'), 'page state includes HasMutedDisplayCaptureDevice');
+                assert_false(pageMediaState.includes('HasActiveDisplayCaptureDevice'), 'page state does not include HasActiveDisplayCaptureDevice');
+                internals.setMediaStreamTrackMuted(track, false)
+            }
+
+            pageMediaState = internals.pageMediaState();
+            internals.setMediaStreamTrackMuted(track, true);
+
+            setTimeout(() => reject("Muted state did not change in .5 second"), 500);
+        });
+    }, "Mute video track during screen capture");
+
+    </script>
+</head>
+<body>
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (239839 => 239840)


--- trunk/Source/WebCore/ChangeLog	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/ChangeLog	2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,27 @@
+2019-01-10  Eric Carlson  <[email protected]>
+
+        Define page media state flags for display capture.
+        https://bugs.webkit.org/show_bug.cgi?id=193230
+        <rdar://problem/47095142>
+
+        Reviewed by Youenn Fablet.
+
+        Test: fast/mediastream/get-display-media-muted.html
+
+        * Modules/mediastream/MediaStreamTrack.cpp:
+        (WebCore::MediaStreamTrack::mediaState const):
+        * page/MediaProducer.h:
+        * platform/mediastream/RealtimeIncomingVideoSource.cpp:
+        (WebCore::RealtimeIncomingVideoSource::RealtimeIncomingVideoSource):
+        * platform/mediastream/RealtimeMediaSource.h:
+        * platform/mediastream/mac/AVVideoCaptureSource.h:
+        * platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h:
+        * platform/mediastream/mac/WindowDisplayCaptureSourceMac.h:
+        * platform/mock/MockRealtimeAudioSource.h:
+        * platform/mock/MockRealtimeVideoSource.h:
+        * testing/Internals.cpp:
+        (WebCore::Internals::pageMediaState):
+
 2019-01-10  Justin Fan  <[email protected]>
 
         [WebGPU] Add BindGroupBinding, BindGroupDescriptor, and BufferBinding dictionaries from API

Modified: trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp (239839 => 239840)


--- trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/Modules/mediastream/MediaStreamTrack.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -386,12 +386,14 @@
         if (m_private->isProducingData())
             return HasActiveAudioCaptureDevice;
     } else {
+        auto deviceType = source().deviceType();
+        ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window);
         if (source().interrupted() && !pageCaptureMuted)
-            return HasInterruptedVideoCaptureDevice;
+            return deviceType == CaptureDevice::DeviceType::Camera ? HasInterruptedVideoCaptureDevice : HasInterruptedDisplayCaptureDevice;
         if (muted())
-            return HasMutedVideoCaptureDevice;
+            return deviceType == CaptureDevice::DeviceType::Camera ? HasMutedVideoCaptureDevice : HasMutedDisplayCaptureDevice;
         if (m_private->isProducingData())
-            return HasActiveVideoCaptureDevice;
+            return deviceType == CaptureDevice::DeviceType::Camera ? HasActiveVideoCaptureDevice : HasActiveDisplayCaptureDevice;
     }
 
     return IsNotPlaying;

Modified: trunk/Source/WebCore/page/MediaProducer.h (239839 => 239840)


--- trunk/Source/WebCore/page/MediaProducer.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/page/MediaProducer.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -49,10 +49,14 @@
         HasInterruptedAudioCaptureDevice = 1 << 15,
         HasInterruptedVideoCaptureDevice = 1 << 16,
         HasUserInteractedWithMediaElement = 1 << 17,
+        HasActiveDisplayCaptureDevice = 1 << 18,
+        HasMutedDisplayCaptureDevice = 1 << 19,
+        HasInterruptedDisplayCaptureDevice = 1 << 20,
 
         AudioCaptureMask = HasActiveAudioCaptureDevice | HasMutedAudioCaptureDevice | HasInterruptedAudioCaptureDevice,
         VideoCaptureMask = HasActiveVideoCaptureDevice | HasMutedVideoCaptureDevice | HasInterruptedVideoCaptureDevice,
-        MediaCaptureMask = AudioCaptureMask | VideoCaptureMask,
+        DisplayCaptureMask = HasActiveDisplayCaptureDevice | HasMutedDisplayCaptureDevice | HasInterruptedDisplayCaptureDevice,
+        MediaCaptureMask = AudioCaptureMask | VideoCaptureMask | DisplayCaptureMask,
     };
     typedef unsigned MediaStateFlags;
 

Modified: trunk/Source/WebCore/platform/mediastream/CaptureDevice.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/CaptureDevice.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/CaptureDevice.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -31,7 +31,7 @@
 
 class CaptureDevice {
 public:
-    enum class DeviceType { Unknown, Microphone, Camera, Screen, Application, Window, Browser };
+    enum class DeviceType { Unknown, Microphone, Camera, Screen, Window };
 
     CaptureDevice(const String& persistentId, DeviceType type, const String& label, const String& groupId = emptyString())
         : m_persistentId(persistentId)
@@ -121,9 +121,7 @@
         WebCore::CaptureDevice::DeviceType::Microphone,
         WebCore::CaptureDevice::DeviceType::Camera,
         WebCore::CaptureDevice::DeviceType::Screen,
-        WebCore::CaptureDevice::DeviceType::Application,
-        WebCore::CaptureDevice::DeviceType::Window,
-        WebCore::CaptureDevice::DeviceType::Browser
+        WebCore::CaptureDevice::DeviceType::Window
     >;
 };
 

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeIncomingVideoSource.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -38,7 +38,7 @@
 namespace WebCore {
 
 RealtimeIncomingVideoSource::RealtimeIncomingVideoSource(rtc::scoped_refptr<webrtc::VideoTrackInterface>&& videoTrack, String&& videoTrackId)
-    : RealtimeMediaSource(RealtimeMediaSource::Type::Video, "remote video"_s, WTFMove(videoTrackId))
+    : RealtimeMediaSource(Type::Video, "remote video"_s, WTFMove(videoTrackId))
     , m_videoTrack(WTFMove(videoTrack))
 {
     notifyMutedChange(!m_videoTrack);

Modified: trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/RealtimeMediaSource.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -161,6 +161,7 @@
     virtual bool isIsolated() const { return false; }
 
     virtual bool isCaptureSource() const { return false; }
+    virtual CaptureDevice::DeviceType deviceType() const { return CaptureDevice::DeviceType::Unknown; }
 
     virtual void monitorOrientation(OrientationNotifier&) { }
 

Modified: trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/AVVideoCaptureSource.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -86,6 +86,7 @@
     void beginConfiguration() final;
     void commitConfiguration() final;
     bool isCaptureSource() const final { return true; }
+    CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Camera; }
     bool interrupted() const final;
 
     void setSizeAndFrameRateWithPreset(IntSize, double, RefPtr<VideoPreset>) final;

Modified: trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/DisplayCaptureManagerCocoa.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -103,10 +103,6 @@
         return windowCaptureDeviceWithPersistentID(id);
         break;
 
-    case CaptureDevice::DeviceType::Application:
-    case CaptureDevice::DeviceType::Browser:
-        break;
-
     case CaptureDevice::DeviceType::Camera:
     case CaptureDevice::DeviceType::Microphone:
     case CaptureDevice::DeviceType::Unknown:

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeMediaSourceCenterMac.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -81,8 +81,6 @@
 #if PLATFORM(MAC)
             return WindowDisplayCaptureSourceMac::create(String { device.persistentId() }, constraints);
 #endif
-        case CaptureDevice::DeviceType::Application:
-        case CaptureDevice::DeviceType::Browser:
         case CaptureDevice::DeviceType::Microphone:
         case CaptureDevice::DeviceType::Camera:
         case CaptureDevice::DeviceType::Unknown:

Modified: trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/ScreenDisplayCaptureSourceMac.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -62,6 +62,7 @@
     void startProducingData() final;
     void stopProducingData() final;
     void commitConfiguration() final;
+    CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Screen; }
 
     bool createDisplayStream();
     void startDisplayStream();

Modified: trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mediastream/mac/WindowDisplayCaptureSourceMac.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -51,6 +51,7 @@
 
     DisplayCaptureSourceCocoa::DisplayFrameType generateFrame() final;
     RealtimeMediaSourceSettings::DisplaySurfaceType surfaceType() const final { return RealtimeMediaSourceSettings::DisplaySurfaceType::Window; }
+    CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Window; }
 
     RetainPtr<CGImageRef> windowImage();
 

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeAudioSource.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -64,6 +64,7 @@
     void tick();
 
     bool isCaptureSource() const final { return true; }
+    CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Microphone; }
 
     void delaySamples(Seconds) final;
 

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp (239839 => 239840)


--- trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeMediaSourceCenter.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -116,8 +116,6 @@
         case CaptureDevice::DeviceType::Window:
             return MockRealtimeVideoSource::create(String { device.persistentId() }, String { device.label() }, String { }, constraints);
             break;
-        case CaptureDevice::DeviceType::Application:
-        case CaptureDevice::DeviceType::Browser:
         case CaptureDevice::DeviceType::Microphone:
         case CaptureDevice::DeviceType::Camera:
         case CaptureDevice::DeviceType::Unknown:

Modified: trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h (239839 => 239840)


--- trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -68,6 +68,7 @@
     void startProducingData() final;
     void stopProducingData() final;
     bool isCaptureSource() const final { return true; }
+    CaptureDevice::DeviceType deviceType() const final { return CaptureDevice::DeviceType::Camera; }
     bool supportsSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final;
     void setSizeAndFrameRate(Optional<int> width, Optional<int> height, Optional<double>) final;
     void setSizeAndFrameRateWithPreset(IntSize, double, RefPtr<VideoPreset>) final;

Modified: trunk/Source/WebCore/testing/Internals.cpp (239839 => 239840)


--- trunk/Source/WebCore/testing/Internals.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebCore/testing/Internals.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -4025,6 +4025,10 @@
         string.append("HasMutedVideoCaptureDevice,");
     if (state & MediaProducer::HasUserInteractedWithMediaElement)
         string.append("HasUserInteractedWithMediaElement,");
+    if (state & MediaProducer::HasActiveDisplayCaptureDevice)
+        string.append("HasActiveDisplayCaptureDevice,");
+    if (state & MediaProducer::HasMutedDisplayCaptureDevice)
+        string.append("HasMutedDisplayCaptureDevice,");
 
     if (string.isEmpty())
         string.append("IsNotPlaying");

Modified: trunk/Source/WebKit/ChangeLog (239839 => 239840)


--- trunk/Source/WebKit/ChangeLog	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/ChangeLog	2019-01-10 20:48:49 UTC (rev 239840)
@@ -1,3 +1,18 @@
+2019-01-10  Eric Carlson  <[email protected]>
+
+        Define page media state flags for display capture.
+        https://bugs.webkit.org/show_bug.cgi?id=193230
+        <rdar://problem/47095142>
+
+        Reviewed by Youenn Fablet.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageGetMediaState):
+        * UIProcess/API/C/WKPagePrivate.h:
+        * WebProcess/cocoa/UserMediaCaptureManager.cpp:
+        (WebKit::UserMediaCaptureManager::Source::Source):
+        (WebKit::UserMediaCaptureManager::createCaptureSource):
+
 2019-01-10  Alex Christensen  <[email protected]>
 
         REGRESSION(r239815) http/tests/workers/service/serviceworker-private-browsing.https.html test times out

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp (239839 => 239840)


--- trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -2653,6 +2653,10 @@
         state |= kWKMediaHasMutedAudioCaptureDevice;
     if (coreState & WebCore::MediaProducer::HasMutedVideoCaptureDevice)
         state |= kWKMediaHasMutedVideoCaptureDevice;
+    if (coreState & WebCore::MediaProducer::HasActiveDisplayCaptureDevice)
+        state |= kWKMediaHasActiveDisplayCaptureDevice;
+    if (coreState & WebCore::MediaProducer::HasMutedDisplayCaptureDevice)
+        state |= kWKMediaHasMutedDisplayCaptureDevice;
 
     return state;
 }

Modified: trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h (239839 => 239840)


--- trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/API/C/WKPagePrivate.h	2019-01-10 20:48:49 UTC (rev 239840)
@@ -148,6 +148,8 @@
     kWKMediaHasActiveVideoCaptureDevice = 1 << 3,
     kWKMediaHasMutedAudioCaptureDevice = 1 << 4,
     kWKMediaHasMutedVideoCaptureDevice = 1 << 5,
+    kWKMediaHasActiveDisplayCaptureDevice = 1 << 6,
+    kWKMediaHasMutedDisplayCaptureDevice = 1 << 7,
 };
 typedef uint32_t WKMediaState;
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp (239839 => 239840)


--- trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UserMediaCaptureManagerProxy.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -149,8 +149,6 @@
         break;
     case WebCore::CaptureDevice::DeviceType::Screen:
     case WebCore::CaptureDevice::DeviceType::Window:
-    case WebCore::CaptureDevice::DeviceType::Application:
-    case WebCore::CaptureDevice::DeviceType::Browser:
         sourceOrError = RealtimeMediaSourceCenter::singleton().displayCaptureFactory().createDisplayCaptureSource(device, &constraints);
         break;
     case WebCore::CaptureDevice::DeviceType::Unknown:

Modified: trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp (239839 => 239840)


--- trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2019-01-10 20:22:32 UTC (rev 239839)
+++ trunk/Source/WebKit/WebProcess/cocoa/UserMediaCaptureManager.cpp	2019-01-10 20:48:49 UTC (rev 239840)
@@ -56,11 +56,13 @@
 
 class UserMediaCaptureManager::Source : public RealtimeMediaSource {
 public:
-    Source(String&& sourceID, Type type, String&& name, String&& hashSalt, uint64_t id, UserMediaCaptureManager& manager)
+    Source(String&& sourceID, Type type, CaptureDevice::DeviceType deviceType, String&& name, String&& hashSalt, uint64_t id, UserMediaCaptureManager& manager)
         : RealtimeMediaSource(type, WTFMove(name), WTFMove(sourceID), WTFMove(hashSalt))
         , m_id(id)
         , m_manager(manager)
+        , m_deviceType(deviceType)
     {
+        ASSERT(deviceType == CaptureDevice::DeviceType::Camera || deviceType == CaptureDevice::DeviceType::Screen || deviceType == CaptureDevice::DeviceType::Window);
         if (type == Type::Audio)
             m_ringBuffer = std::make_unique<CARingBuffer>(makeUniqueRef<SharedRingBufferStorage>(nullptr));
     }
@@ -178,6 +180,7 @@
     void startProducingData() final { m_manager.startProducingData(m_id); }
     void stopProducingData() final { m_manager.stopProducingData(m_id); }
     bool isCaptureSource() const final { return true; }
+    CaptureDevice::DeviceType deviceType() const final { return m_deviceType; }
 
     // RealtimeMediaSource
     void beginConfiguration() final { }
@@ -197,6 +200,7 @@
     std::unique_ptr<CARingBuffer> m_ringBuffer;
 
     std::unique_ptr<ImageTransferSessionVT> m_imageTransferSession;
+    CaptureDevice::DeviceType m_deviceType { CaptureDevice::DeviceType::Unknown };
 
     struct ApplyConstraintsCallback {
         SuccessHandler successHandler;
@@ -251,7 +255,7 @@
         return WTFMove(errorMessage);
 
     auto type = device.type() == CaptureDevice::DeviceType::Microphone ? WebCore::RealtimeMediaSource::Type::Audio : WebCore::RealtimeMediaSource::Type::Video;
-    auto source = adoptRef(*new Source(String::number(id), type, String { settings.label() }, WTFMove(hashSalt), id, *this));
+    auto source = adoptRef(*new Source(String::number(id), type, device.type(), String { settings.label() }, WTFMove(hashSalt), id, *this));
     source->setSettings(WTFMove(settings));
     m_sources.set(id, source.copyRef());
     return WebCore::CaptureSourceOrError(WTFMove(source));
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to