Fix a couple of bugs in remote browser debugging implementation (#40225)

Follow-up to #39248 

- Correctly forward ports over SSH, including the port from the debug
scenario's `url`
- Give the companion time to start up, instead of bailing if the first
connection attempt fails

Release Notes:

- Fixed not being able to launch a browser debugging session in an SSH
project.
This commit is contained in:
Cole Miller
2025-10-14 23:05:19 -04:00
committed by GitHub
parent 01f9b1e9b4
commit 45af5e4239
4 changed files with 108 additions and 75 deletions
+12 -18
View File
@@ -836,16 +836,14 @@ impl RemoteClient {
connection.build_command(program, args, env, working_dir, port_forward)
}
pub fn build_forward_port_command(
pub fn build_forward_ports_command(
&self,
local_port: u16,
host: String,
remote_port: u16,
forwards: Vec<(u16, String, u16)>,
) -> Result<CommandTemplate> {
let Some(connection) = self.remote_connection() else {
return Err(anyhow!("no ssh connection"));
};
connection.build_forward_port_command(local_port, host, remote_port)
connection.build_forward_ports_command(forwards)
}
pub fn upload_directory(
@@ -1116,11 +1114,9 @@ pub(crate) trait RemoteConnection: Send + Sync {
working_dir: Option<String>,
port_forward: Option<(u16, String, u16)>,
) -> Result<CommandTemplate>;
fn build_forward_port_command(
fn build_forward_ports_command(
&self,
local_port: u16,
remote: String,
remote_port: u16,
forwards: Vec<(u16, String, u16)>,
) -> Result<CommandTemplate>;
fn connection_options(&self) -> RemoteConnectionOptions;
fn path_style(&self) -> PathStyle;
@@ -1551,19 +1547,17 @@ mod fake {
})
}
fn build_forward_port_command(
fn build_forward_ports_command(
&self,
local_port: u16,
host: String,
remote_port: u16,
forwards: Vec<(u16, String, u16)>,
) -> anyhow::Result<CommandTemplate> {
Ok(CommandTemplate {
program: "ssh".into(),
args: vec![
"-N".into(),
"-L".into(),
format!("{local_port}:{host}:{remote_port}"),
],
args: std::iter::once("-N".to_owned())
.chain(forwards.into_iter().map(|(local_port, host, remote_port)| {
format!("{local_port}:{host}:{remote_port}")
}))
.collect(),
env: Default::default(),
})
}
+10 -9
View File
@@ -146,19 +146,20 @@ impl RemoteConnection for SshRemoteConnection {
)
}
fn build_forward_port_command(
fn build_forward_ports_command(
&self,
local_port: u16,
host: String,
remote_port: u16,
forwards: Vec<(u16, String, u16)>,
) -> Result<CommandTemplate> {
let Self { socket, .. } = self;
let mut args = socket.ssh_args();
args.push("-N".into());
for (local_port, host, remote_port) in forwards {
args.push("-L".into());
args.push(format!("{local_port}:{host}:{remote_port}"));
}
Ok(CommandTemplate {
program: "ssh".into(),
args: vec![
"-N".into(),
"-L".into(),
format!("{local_port}:{host}:{remote_port}"),
],
args,
env: Default::default(),
})
}
+2 -4
View File
@@ -485,11 +485,9 @@ impl RemoteConnection for WslRemoteConnection {
})
}
fn build_forward_port_command(
fn build_forward_ports_command(
&self,
_: u16,
_: String,
_: u16,
_: Vec<(u16, String, u16)>,
) -> anyhow::Result<CommandTemplate> {
Err(anyhow!("WSL shares a network interface with the host"))
}