fix(callback_host): close orphaned helper page before opening on same WS connection

Sends sgHideBrowerserClosePage (best-effort) before sgHideBrowerserOpenPage
on the same bootstrap WebSocket connection. This prevents duplicate helper
pages across process restarts. Also enables hidden domain mode so the helper
page is not visible to users.

🤖 Generated with [Qoder][https://qoder.com]
This commit is contained in:
木炎
2026-04-14 10:01:50 +08:00
parent 390a431a4b
commit 6aa0c110bd
2 changed files with 10 additions and 4 deletions

View File

@@ -357,11 +357,17 @@ fn bootstrap_helper_page(
))
.map_err(|err| PipeError::Protocol(format!("browser websocket register failed: {err}")))?;
let _ = recv_bootstrap_prelude(&mut websocket);
let open_action = if use_hidden_domain {
"sgHideBrowerserOpenPage"
// Close any orphaned helper page from a previous process run.
// Best-effort: if no page exists, the browser silently ignores this.
let (open_action, close_action) = if use_hidden_domain {
("sgHideBrowerserOpenPage", "sgHideBrowerserClosePage")
} else {
"sgBrowerserOpenPage"
("sgBrowerserOpenPage", "sgBrowserClosePage")
};
let close_payload = json!([request_url, close_action, helper_url]).to_string();
let _ = websocket.send(Message::Text(close_payload.into()));
let payload = json!([
request_url,
open_action,

View File

@@ -287,7 +287,7 @@ pub(crate) fn serve_client(
&bootstrap_url,
Duration::from_secs(15),
BROWSER_RESPONSE_TIMEOUT,
false, // use_hidden_domain: visible tab for now
true, // use_hidden_domain: hidden domain for invisible helper
) {
Ok(host) => {
*cached_host = Some(Arc::new(host));