Files
Genarrative/apps/desktop-shell/src-tauri/src/host_bridge/runtime.rs
T
kdletters 33e56fb56f 收紧桌面壳网络事件声明
桌面壳移除未由 Rust 真实驱动的 network.statusChanged 能力

桌面网络状态保留 Rust 主站可达性主动查询

门禁禁止桌面网络事件回退到 WebView online 状态

文档和项目记忆同步桌面网络能力边界
2026-06-20 17:49:30 +08:00

118 lines
3.8 KiB
Rust

use crate::host_bridge::capabilities::capabilities;
use crate::host_bridge::protocol::{
ok, HostBridgeRequest, HostBridgeResponse, HostBridgeRuntime, HOST_BRIDGE_VERSION,
};
use crate::shell::webview::desktop_platform;
use serde_json::json;
pub(crate) fn desktop_runtime() -> HostBridgeRuntime {
HostBridgeRuntime {
shell: "tauri_desktop",
platform: desktop_platform(),
host_version: env!("CARGO_PKG_VERSION"),
bridge_version: HOST_BRIDGE_VERSION,
capabilities: capabilities(),
}
}
pub(crate) fn desktop_host_bridge_runtime_response(
request: &HostBridgeRequest,
) -> HostBridgeResponse {
ok(request.id.clone(), json!(desktop_runtime()))
}
#[cfg(test)]
mod tests {
use super::*;
use serde_json::{json, to_value};
#[test]
fn runtime_response_reports_tauri_shell() {
let result = to_value(desktop_runtime()).expect("runtime result");
assert_eq!(result["shell"], "tauri_desktop");
assert_eq!(result["bridgeVersion"], HOST_BRIDGE_VERSION);
assert_eq!(result["capabilities"], json!(capabilities()));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("appearance.getColorScheme")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("host.events")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("app.lifecycle")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("network.status")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("share.open")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("share.setTarget")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("navigation.openNativePage")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("app.reloadWebView")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("app.setTitle")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("app.setBadgeCount")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("clipboard.readText")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.exportText")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.importText")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.importDocument")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.exportImage")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.importImage")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.importAudio")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.exportAudio")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("file.imageDropped")));
assert!(result["capabilities"]
.as_array()
.unwrap()
.contains(&json!("notification.showLocal")));
}
}