From 2c36754bf748647442c4f44068c267c2192b5d69 Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Fri, 17 Jul 2020 08:31:26 +0200 Subject: [PATCH] Configure devtools server via preferences --- Cargo.lock | 1 + components/config/opts.rs | 34 +++++++++++++++++++++++++--------- components/config/prefs.rs | 6 ++++++ components/devtools/Cargo.toml | 1 + components/servo/lib.rs | 12 +++++++++--- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b55ecc39d7..67733e2ad10 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1242,6 +1242,7 @@ dependencies = [ "msg", "serde", "serde_json", + "servo_config", "servo_rand", "servo_url", "time", diff --git a/components/config/opts.rs b/components/config/opts.rs index 47d92f986d5..c5ca6907bee 100644 --- a/components/config/opts.rs +++ b/components/config/opts.rs @@ -112,9 +112,12 @@ pub struct Opts { /// remote Firefox debugger connections. pub debugger_port: Option, - /// `None` to disable devtools or `Some` with a port number to start a server to listen to - /// remote Firefox devtools connections. - pub devtools_port: Option, + /// Port number to start a server to listen to remote Firefox devtools connections. + /// 0 for random port. + pub devtools_port: u16, + + /// Start the devtools server at startup + pub devtools_server_enabled: bool, /// `None` to disable WebDriver or `Some` with a port number to start a server to listen to /// remote WebDriver commands. @@ -482,7 +485,8 @@ pub fn default_opts() -> Opts { enable_canvas_antialiasing: true, trace_layout: false, debugger_port: None, - devtools_port: None, + devtools_port: 0, + devtools_server_enabled: false, webdriver_port: None, initial_window_size: Size2D::new(1024, 740), multiprocess: false, @@ -802,11 +806,22 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR }) }); - // Set default port 0 for a random port to be selected. - let devtools_port = opt_match.opt_default("devtools", "0").map(|port| { - port.parse() - .unwrap_or_else(|err| args_fail(&format!("Error parsing option: --devtools ({})", err))) - }); + let (devtools_enabled, devtools_port) = if opt_match.opt_present("devtools") { + let port = opt_match + .opt_str("devtools") + .map(|port| { + port.parse().unwrap_or_else(|err| { + args_fail(&format!("Error parsing option: --devtools ({})", err)) + }) + }) + .unwrap_or(pref!(devtools.server.port)); + (true, port as u16) + } else { + ( + pref!(devtools.server.enabled), + pref!(devtools.server.port) as u16, + ) + }; let webdriver_port = opt_match.opt_default("webdriver", "7000").map(|port| { port.parse().unwrap_or_else(|err| { @@ -874,6 +889,7 @@ pub fn from_cmdline_args(mut opts: Options, args: &[String]) -> ArgumentParsingR trace_layout: debug_options.trace_layout, debugger_port: debugger_port, devtools_port: devtools_port, + devtools_server_enabled: devtools_enabled, webdriver_port: webdriver_port, initial_window_size: initial_window_size, multiprocess: opt_match.opt_present("M"), diff --git a/components/config/prefs.rs b/components/config/prefs.rs index 5ac6b19d940..1ecc245ff9f 100644 --- a/components/config/prefs.rs +++ b/components/config/prefs.rs @@ -123,6 +123,12 @@ mod gen { }, }, }, + devtools: { + server: { + enabled: bool, + port: i64, + }, + }, dom: { webgpu: { enabled: bool, diff --git a/components/devtools/Cargo.toml b/components/devtools/Cargo.toml index 6a6532df54a..68da8489cb7 100644 --- a/components/devtools/Cargo.toml +++ b/components/devtools/Cargo.toml @@ -22,6 +22,7 @@ log = "0.4" msg = { path = "../msg" } serde = "1.0" serde_json = "1.0" +servo_config = { path = "../config" } servo_rand = { path = "../rand" } servo_url = { path = "../url" } time = "0.1" diff --git a/components/servo/lib.rs b/components/servo/lib.rs index aa71c8f3309..581619e431a 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -393,9 +393,15 @@ where let mem_profiler_chan = profile_mem::Profiler::create(opts.mem_profiler_period); let debugger_chan = opts.debugger_port.map(|port| debugger::start_server(port)); - let devtools_chan = opts - .devtools_port - .map(|port| devtools::start_server(port, embedder_proxy.clone())); + + let devtools_chan = if opts.devtools_server_enabled { + Some(devtools::start_server( + opts.devtools_port, + embedder_proxy.clone(), + )) + } else { + None + }; let coordinates = window.get_coordinates(); let device_pixel_ratio = coordinates.hidpi_factor.get();