锁定桌面同源导航不可用响应

桌面同源页面导航主窗口缺失转为稳定 host_error

桌面同源页面导航失败转为稳定不可用响应

桌面同源导航单测覆盖不可用响应 code 和 message

桌面壳配置检查反查同源导航不可用边界
This commit is contained in:
2026-06-20 12:53:34 +08:00
parent 9b73edfbf9
commit d13dc3e3f5
2 changed files with 19 additions and 2 deletions
@@ -1889,10 +1889,13 @@ for (const snippet of [
'"external url unavailable"',
'external_url_unavailable_response_is_stable',
'open_desktop_host_bridge_native_page',
'native_page_unavailable_response',
'desktop_native_page_url_from_request',
'normalize_native_page_url',
'window.navigate(url)',
'desktop_native_page_request_accepts_only_same_origin_h5_routes',
'"native page unavailable"',
'native_page_unavailable_response_is_stable',
'reload_desktop_host_bridge_webview',
'window.reload()',
]) {
@@ -68,12 +68,16 @@ pub(crate) fn open_desktop_host_bridge_native_page(
match app.get_webview_window("main") {
Some(window) => match window.navigate(url) {
Ok(()) => ok(request.id.clone(), json!(true)),
Err(error) => failed(request.id.clone(), "host_error", error.to_string()),
Err(_) => native_page_unavailable_response(request),
},
None => failed(request.id.clone(), "host_error", "main window not found"),
None => native_page_unavailable_response(request),
}
}
fn native_page_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse {
failed(request.id.clone(), "host_error", "native page unavailable")
}
#[cfg(test)]
mod tests {
use super::*;
@@ -164,6 +168,16 @@ mod tests {
);
}
}
#[test]
fn native_page_unavailable_response_is_stable() {
let response = native_page_unavailable_response(&request("navigation.openNativePage"));
assert!(!response.ok);
let error = response.error.expect("native page error");
assert_eq!(error.code, "host_error");
assert_eq!(error.message, "native page unavailable");
}
}
pub(crate) fn reload_desktop_host_bridge_webview(