记录桌面壳下载阻断事件

桌面壳阻断 WebView 下载请求时记录宿主诊断日志

补充桌面 WebView 下载阻断 handler 单测

扩展桌面壳配置门禁防止下载阻断静默回退

修正桌面壳回放门禁的格式敏感匹配
This commit is contained in:
2026-06-20 22:38:45 +08:00
parent beb2575dd2
commit ac6de47aa5
4 changed files with 40 additions and 11 deletions
@@ -179,6 +179,19 @@ pub(crate) fn should_allow_desktop_webview_download(event: &DownloadEvent<'_>) -
}
}
fn log_desktop_webview_download_blocked(url: &Url) -> bool {
eprintln!("desktop host event blocked for webview.download: {url}");
false
}
pub(crate) fn handle_desktop_webview_download(event: &DownloadEvent<'_>) -> bool {
if let DownloadEvent::Requested { url, .. } = event {
log_desktop_webview_download_blocked(url);
}
should_allow_desktop_webview_download(event)
}
pub(crate) fn normalize_native_page_url(raw_url: &str) -> Option<Url> {
let url = raw_url.trim();
if url.is_empty() || url.chars().any(char::is_control) {
@@ -283,6 +296,19 @@ mod tests {
assert!(should_allow_desktop_webview_download(&finished));
}
#[test]
fn desktop_webview_download_handler_logs_blocked_requests() {
let mut destination = std::env::temp_dir().join("genarrative-webview-download.txt");
let url = Url::parse("https://app.genarrative.world/download.txt").expect("download url");
let requested = DownloadEvent::Requested {
url: url.clone(),
destination: &mut destination,
};
assert!(!log_desktop_webview_download_blocked(&url));
assert!(!handle_desktop_webview_download(&requested));
}
#[test]
fn native_page_url_normalization_allows_same_origin_routes() {
let route =
@@ -5,9 +5,9 @@ pub(crate) use crate::shell::lifecycle::{
should_replay_desktop_webview_state_on_page_load,
};
pub(crate) use crate::shell::navigation::{
desktop_external_navigation_url, normalize_external_url, normalize_native_page_url,
open_desktop_external_navigation, open_normalized_desktop_external_url,
register_desktop_navigation_events, should_allow_desktop_webview_download,
desktop_external_navigation_url, handle_desktop_webview_download, normalize_external_url,
normalize_native_page_url, open_desktop_external_navigation,
open_normalized_desktop_external_url, register_desktop_navigation_events,
should_allow_desktop_webview_navigation,
};
pub(crate) use crate::shell::network::resolve_desktop_network_status;