diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 8a31f50afa7a6138be4fd25c284c0851730508ce..88a41068092c891ca94052442446f45534d9b25e 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc @@ -3617,31 +3617,10 @@ void MediaStreamManager::HandleAccessRequestResponse( } device.set_session_id(GetDeviceManager(device.type)->Open(device)); -#if defined(OHOS_WEBRTC) - if (device.type == MediaStreamType::DEVICE_VIDEO_CAPTURE) { - auto* web_contents = static_cast( - WebContentsImpl::FromRenderFrameHostID( - request->GetTargetProcessId(), request->GetTargetFrameId())); - if (web_contents) { - video_capture_manager()->BindSessionIdToNWebId( - device.session_id(), web_contents->GetNWebId()); - } - } -#endif // defined(OHOS_WEBRTC) - -#if defined(OHOS_EX_SCREEN_CAPTURE) - if (device.type == MediaStreamType::DISPLAY_VIDEO_CAPTURE || - device.type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB || - device.type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET) { - auto* web_contents = static_cast( - WebContentsImpl::FromRenderFrameHostID( - request->GetTargetProcessId(), request->GetTargetFrameId())); - if (web_contents) { - std::lock_guard lock(nweb_id_mutex_); - nweb_id_maps_[device.session_id().ToString()] = web_contents->GetNWebId(); - } - } -#endif // defined(OHOS_EX_SCREEN_CAPTURE) +#if BUILDFLAG(IS_OHOS) + PostVideoCaptureSessionBind(device.type, device.session_id(), + request->GetTargetProcessId(), request->GetTargetFrameId()); +#endif TranslateDeviceIdToSourceId(request, &device); SetRequestDevice( @@ -3682,6 +3661,44 @@ void MediaStreamManager::HandleAccessRequestResponse( } } +#if BUILDFLAG(IS_OHOS) +void MediaStreamManager::PostVideoCaptureSessionBind(blink::mojom::MediaStreamType stream_type, + media::VideoCaptureSessionId session_id, int process_id, int frame_id) { + if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { + GetUIThreadTaskRunner({})->PostTask( + FROM_HERE, + base::BindOnce(&MediaStreamManager::PostVideoCaptureSessionBind, + base::Unretained(this), stream_type, + session_id, process_id, frame_id)); + return; + } + +#if defined(OHOS_WEBRTC) + if (stream_type == MediaStreamType::DEVICE_VIDEO_CAPTURE) { + auto* web_contents = static_cast( + WebContentsImpl::FromRenderFrameHostID(process_id, frame_id)); + if (web_contents) { + video_capture_manager()->BindSessionIdToNWebId( + session_id, web_contents->GetNWebId()); + } + } +#endif // defined(OHOS_WEBRTC) + +#if defined(OHOS_EX_SCREEN_CAPTURE) + if (stream_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE || + stream_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_THIS_TAB || + stream_type == MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET) { + auto* web_contents = static_cast( + WebContentsImpl::FromRenderFrameHostID(process_id, frame_id)); + if (web_contents) { + std::lock_guard lock(nweb_id_mutex_); + nweb_id_maps_[session_id.ToString()] = web_contents->GetNWebId(); + } + } +#endif // defined(OHOS_EX_SCREEN_CAPTURE) +} +#endif + void MediaStreamManager::HandleChangeSourceRequestResponse( const std::string& label, DeviceRequest* request, diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h index 7e57ebd7c070171b7c8c9d131b7fe3e49513e821..16b2f02143f82427ae398c76cdc036465718bc52 100644 --- a/content/browser/renderer_host/media/media_stream_manager.h +++ b/content/browser/renderer_host/media/media_stream_manager.h @@ -775,6 +775,11 @@ class CONTENT_EXPORT MediaStreamManager const MediaDeviceEnumeration& enumeration, DeviceRequest* request); +#if BUILDFLAG(IS_OHOS) + void PostVideoCaptureSessionBind(blink::mojom::MediaStreamType stream_type, + media::VideoCaptureSessionId session_id, int process_id, int frame_id); +#endif + #if !BUILDFLAG(IS_ANDROID) // Defines a window of opportunity for the Web-application to decide // whether a display-surface which it's capturing should be focused.