diff -b -r -c geckodriver-0.24.0/src/marionette.rs geckodriver-0.24.0-horn/src/marionette.rs *** geckodriver-0.24.0/src/marionette.rs Mon Jan 28 23:26:07 2019 --- geckodriver-0.24.0-horn/src/marionette.rs Wed Mar 6 16:31:23 2019 *************** *** 54,59 **** --- 54,63 ---- use crate::capabilities::{FirefoxCapabilities, FirefoxOptions}; use crate::logging; use crate::prefs; + use regex::Regex; + use regex::NoExpand; + use std::fs; + use std::fs::File; #[derive(Debug, PartialEq, Deserialize)] pub struct MarionetteHandshake { *************** *** 171,176 **** --- 175,190 ---- runner.arg("-jsdebugger"); } if let Some(args) = options.args.as_ref() { + let mut found = false; + for i in 0..args.len() { + if found { + try!(self.update_port_in_profile(port, &args[i])); + break; + } + if args[i] == "-profile" { + found = true; + } + } runner.args(args); } *************** *** 185,190 **** --- 199,217 ---- Ok(()) } + fn update_port_in_profile(&mut self, port: u16, profile_dir: &String) -> WebDriverResult<()> + { + let mut filename: String = profile_dir.to_owned(); + filename.push_str("/prefs.js"); + let content = fs::read_to_string(&filename).expect("Unable to read prefs.js"); + let re = Regex::new(r#"marionette.port", [0-9]*"#).unwrap(); + let tmp = format!(r#"marionette.port", {}"#, port); + let result = re.replace(&content, NoExpand(&tmp)); + let mut file = File::create(&filename).expect("Unable to open prefs.js"); + file.write_all(result.as_bytes()).expect("Unable to write to prefs.js"); + Ok(()) + } + pub fn set_prefs( &self, port: u16,