diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-02-23 14:43:14 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-04-15 18:11:44 +0200 |
commit | 027e7e574e7a4488d47cd4133e98d518210b1e56 (patch) | |
tree | c45f05457509b7d99c39a3889119c04c4aee39e3 /src/core/media_capture_devices_dispatcher.cpp | |
parent | 2dce0008ce53d27d281ad2dc00eb32d25ae5fc84 (diff) |
Adaptations for Chromium 88
Change-Id: Ie66e95dbb9fbcafe961bb98d5c277f8c32d66b96
Reviewed-by: Jüri Valdmann <juri.valdmann@qt.io>
Diffstat (limited to 'src/core/media_capture_devices_dispatcher.cpp')
-rw-r--r-- | src/core/media_capture_devices_dispatcher.cpp | 34 |
1 files changed, 30 insertions, 4 deletions
diff --git a/src/core/media_capture_devices_dispatcher.cpp b/src/core/media_capture_devices_dispatcher.cpp index cf31b9b59..3a1c20718 100644 --- a/src/core/media_capture_devices_dispatcher.cpp +++ b/src/core/media_capture_devices_dispatcher.cpp @@ -227,8 +227,13 @@ WebContentsAdapterClient::MediaRequestFlags mediaRequestFlagsForRequest(const co request.video_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE) return {WebContentsAdapterClient::MediaDesktopAudioCapture, WebContentsAdapterClient::MediaDesktopVideoCapture}; + if (request.audio_type == MediaStreamType::DISPLAY_AUDIO_CAPTURE && + request.video_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB) + return {WebContentsAdapterClient::MediaDesktopAudioCapture, WebContentsAdapterClient::MediaDesktopVideoCapture}; + if (request.video_type == MediaStreamType::GUM_DESKTOP_VIDEO_CAPTURE || - request.video_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE) + request.video_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE || + request.video_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB) return {WebContentsAdapterClient::MediaDesktopVideoCapture}; return {}; @@ -249,21 +254,41 @@ public: { if (m_started && m_delegate) m_delegate->removeDevices(m_devices); + m_onStop.Reset(); } private: - gfx::NativeViewId OnStarted(base::OnceClosure, SourceCallback) override + gfx::NativeViewId OnStarted(base::OnceClosure stop, SourceCallback source, + const std::string& label, + std::vector<content::DesktopMediaID> screen_capture_ids, + StateChangeCallback state_change) override { - DCHECK(!m_started); + if (m_started) { + // Ignore possibly-compromised renderers that might call + // MediaStreamDispatcherHost::OnStreamStarted() more than once. + // See: https://crbug.com/1155426 + return 0; + } m_started = true; + m_onStop = std::move(stop); if (m_delegate) m_delegate->addDevices(m_devices); return 0; } + void OnDeviceStopped(const std::string &label, const content::DesktopMediaID &media_id) override + { + NOTIMPLEMENTED(); + } + + void SetStopCallback(base::OnceClosure stop) override + { + m_onStop = std::move(stop); + } base::WeakPtr<WebContentsDelegateQt> m_delegate; const blink::MediaStreamDevices m_devices; bool m_started = false; + base::OnceClosure m_onStop; // currently unused DISALLOW_COPY_AND_ASSIGN(MediaStreamUIQt); }; @@ -441,7 +466,8 @@ void MediaCaptureDevicesDispatcher::processDesktopCaptureAccessRequest(content:: } // Audio is only supported for screen capture streams. - bool audioRequested = request.audio_type == MediaStreamType::GUM_DESKTOP_AUDIO_CAPTURE; + bool audioRequested = (request.audio_type == MediaStreamType::GUM_DESKTOP_AUDIO_CAPTURE || + request.audio_type == MediaStreamType::DISPLAY_AUDIO_CAPTURE); bool audioSupported = (mediaId.type == content::DesktopMediaID::TYPE_SCREEN && m_loopbackAudioSupported); bool captureAudio = (audioRequested && audioSupported); |