mirror of
https://github.com/tauri-apps/tauri.git
synced 2026-02-06 13:57:16 +00:00
allow media stream
This commit is contained in:
parent
a2a7c6fbeb
commit
2b5f237319
@ -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())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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(),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user