diff --git a/.changes/fix-csp-linux.md b/.changes/fix-csp-linux.md new file mode 100644 index 000000000..cdc655495 --- /dev/null +++ b/.changes/fix-csp-linux.md @@ -0,0 +1,5 @@ +--- +"tauri": patch +--- + +Fix CSP usage on Linux when changing it via the `on_web_resource_request` handler. diff --git a/core/tauri/src/manager.rs b/core/tauri/src/manager.rs index 21af5358f..172dcc50c 100644 --- a/core/tauri/src/manager.rs +++ b/core/tauri/src/manager.rs @@ -126,13 +126,7 @@ fn set_csp( default_src.push(format_real_schema(schema)); } - #[allow(clippy::let_and_return)] - let csp = Csp::DirectiveMap(csp).to_string(); - #[cfg(target_os = "linux")] - { - *asset = set_html_csp(asset, &csp); - } - csp + Csp::DirectiveMap(csp).to_string() } #[cfg(target_os = "linux")] @@ -826,13 +820,16 @@ impl WindowManager { // if it's an HTML file, we need to set the CSP meta tag on Linux #[cfg(target_os = "linux")] - if let (Some(original_csp), Some(response_csp)) = ( - asset.csp_header, - response.headers().get("Content-Security_Policy"), - ) { + if let Some(response_csp) = response.headers().get("Content-Security-Policy") { let response_csp = String::from_utf8_lossy(response_csp.as_bytes()); - if response_csp != original_csp { - let body = set_html_csp(&String::from_utf8_lossy(response.body()), &response_csp); + let body = set_html_csp(&String::from_utf8_lossy(response.body()), &response_csp); + *response.body_mut() = body.as_bytes().to_vec(); + } + } else { + #[cfg(target_os = "linux")] + { + if let Some(csp) = &asset.csp_header { + let body = set_html_csp(&String::from_utf8_lossy(response.body()), csp); *response.body_mut() = body.as_bytes().to_vec(); } }