diff --git a/src/browser/callback_host.rs b/src/browser/callback_host.rs index 318a396..481ee0c 100644 --- a/src/browser/callback_host.rs +++ b/src/browser/callback_host.rs @@ -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, diff --git a/src/service/server.rs b/src/service/server.rs index 2fddfb2..b5d455a 100644 --- a/src/service/server.rs +++ b/src/service/server.rs @@ -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));