allow media stream

This commit is contained in:
Lucas Nogueira 2026-02-01 16:33:48 -03:00
parent a2a7c6fbeb
commit 2b5f237319
No known key found for this signature in database
GPG Key ID: 7C32FCA95C8C95D7
2 changed files with 56 additions and 1 deletions

View File

@ -512,6 +512,50 @@ wrap_keyboard_handler! {
}
}
wrap_permission_handler! {
struct BrowserPermissionHandler {}
impl PermissionHandler {
fn on_request_media_access_permission(
&self,
_browser: Option<&mut Browser>,
_frame: Option<&mut Frame>,
_requesting_origin: Option<&CefString>,
requested_permissions: u32,
callback: Option<&mut MediaAccessCallback>,
) -> ::std::os::raw::c_int {
let Some(callback) = callback else {
return 0;
};
// Allow microphone and camera when requested
let allowed = requested_permissions & (sys::cef_media_access_permission_types_t::CEF_MEDIA_PERMISSION_DEVICE_AUDIO_CAPTURE as u32 | sys::cef_media_access_permission_types_t::CEF_MEDIA_PERMISSION_DEVICE_VIDEO_CAPTURE as u32);
if allowed != 0 {
callback.cont(requested_permissions);
return 1;
}
0
}
fn on_show_permission_prompt(
&self,
_browser: Option<&mut Browser>,
_prompt_id: u64,
_requesting_origin: Option<&CefString>,
requested_permissions: u32,
callback: Option<&mut PermissionPromptCallback>,
) -> ::std::os::raw::c_int {
let Some(callback) = callback else {
return 0;
};
// Allow permission prompt (e.g. microphone/camera)
callback.cont(PermissionRequestResult::from(
cef::sys::cef_permission_request_result_t::CEF_PERMISSION_RESULT_ACCEPT,
));
1
}
}
}
wrap_download_handler! {
struct BrowserDownloadHandler {
download_handler: Arc<tauri_runtime::webview::DownloadHandler>,
@ -769,6 +813,10 @@ wrap_client! {
fn keyboard_handler(&self) -> Option<KeyboardHandler> {
Some(BrowserKeyboardHandler::new(self.devtools_enabled))
}
fn permission_handler(&self) -> Option<PermissionHandler> {
Some(BrowserPermissionHandler::new())
}
}
}

View File

@ -1927,7 +1927,7 @@ impl<T: UserEvent> CefRuntime<T> {
next_window_event_id: Default::default(),
};
let command_line_args: Vec<(String, Option<String>)> = runtime_args
let mut command_line_args: Vec<(String, Option<String>)> = runtime_args
.platform_specific_attributes
.into_iter()
.filter_map(|arg| match arg {
@ -1935,6 +1935,13 @@ impl<T: UserEvent> CefRuntime<T> {
})
.flatten()
.collect();
// Enable media stream so that getUserMedia (mic/camera) can trigger permission requests
if !command_line_args
.iter()
.any(|(k, _)| k == "enable-media-stream")
{
command_line_args.push(("enable-media-stream".to_string(), None));
}
let mut app = cef_impl::TauriApp::new(
cef_context.clone(),