收紧桌面壳事件注册失败处理

桌面壳新窗口策略增加可测试决策函数

桌面壳 WebView 事件注册失败改为启动阻断或日志记录

桌面壳配置门禁禁止事件注册静默吞错

宿主壳协议和共享决策记录补充事件注册失败规则
This commit is contained in:
2026-06-20 05:27:02 +08:00
parent 6c0d929e91
commit 73ea93ccc8
6 changed files with 122 additions and 14 deletions
@@ -97,10 +97,32 @@ pub(crate) fn should_replay_desktop_webview_state_on_page_load(event: PageLoadEv
event == PageLoadEvent::Finished
}
pub(crate) fn log_desktop_webview_state_replay_result(
label: &'static str,
result: tauri::Result<()>,
) -> bool {
match result {
Ok(()) => true,
Err(error) => {
eprintln!("desktop webview state replay failed for {label}: {error}");
false
}
}
}
pub(crate) fn replay_desktop_webview_state(window: &WebviewWindow) {
let _ = emit_current_desktop_lifecycle_event(window);
let _ = register_desktop_network_events(window);
let _ = register_desktop_navigation_events(window);
log_desktop_webview_state_replay_result(
"app.lifecycle",
emit_current_desktop_lifecycle_event(window),
);
log_desktop_webview_state_replay_result(
"network.statusChanged",
register_desktop_network_events(window),
);
log_desktop_webview_state_replay_result(
"navigation.canGoBack",
register_desktop_navigation_events(window),
);
}
#[cfg(test)]
@@ -117,6 +139,15 @@ mod tests {
));
}
#[test]
fn desktop_state_replay_result_reports_success_and_failure() {
assert!(log_desktop_webview_state_replay_result("network", Ok(())));
assert!(!log_desktop_webview_state_replay_result(
"navigation",
Err(tauri::Error::AssetNotFound("navigation".to_string()))
));
}
#[test]
fn desktop_lifecycle_payload_maps_hidden_and_minimized_to_background() {
assert_eq!(
@@ -1,12 +1,14 @@
pub(crate) use crate::shell::file_drop::register_desktop_file_drop_events;
pub(crate) use crate::shell::lifecycle::{
emit_current_desktop_lifecycle_event, register_desktop_lifecycle_events,
replay_desktop_webview_state, should_replay_desktop_webview_state_on_page_load,
emit_current_desktop_lifecycle_event, log_desktop_webview_state_replay_result,
register_desktop_lifecycle_events, replay_desktop_webview_state,
should_replay_desktop_webview_state_on_page_load,
};
pub(crate) use crate::shell::navigation::{
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, should_allow_desktop_webview_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,
should_allow_desktop_webview_navigation,
};
pub(crate) use crate::shell::network::{
register_desktop_network_events, resolve_desktop_network_status,