From d8e1c82541a94a2a32470e2b28d3df5129b59569 Mon Sep 17 00:00:00 2001 From: chouzz Date: Thu, 25 Dec 2025 12:55:47 +0800 Subject: [PATCH] refactor: rename project to browser_launcher and modularize launcher --- CHANGELOG.md | 2 +- Cargo.lock | 14 +- Cargo.toml | 16 +- README.md | 48 +++--- ...chrome_launcher.rs => browser_launcher.rs} | 71 +++++---- src/cli.rs | 137 ++++-------------- src/flags.rs | 4 +- src/lib.rs | 13 +- src/main.rs | 20 +-- tests/integration_tests.rs | 8 +- 10 files changed, 132 insertions(+), 201 deletions(-) rename src/{chrome_launcher.rs => browser_launcher.rs} (84%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2653c8c..1a205f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,7 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added -- Added chrome_launcher_cli command line tools. +- Added browser_launcher_cli command line tools. ## [v0.1.0] - 2025-12-25 diff --git a/Cargo.lock b/Cargo.lock index 9b8987c..78a713a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,13 +58,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" [[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "chrome_launcher" +name = "browser_launcher" version = "1.0.0" dependencies = [ "clap", @@ -73,6 +67,12 @@ dependencies = [ "tempfile", ] +[[package]] +name = "cfg-if" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" + [[package]] name = "clap" version = "4.5.20" diff --git a/Cargo.toml b/Cargo.toml index 4cace95..f043973 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,25 +1,25 @@ [package] -name = "chrome_launcher" +name = "browser_launcher" version = "1.0.0" edition = "2021" authors = ["chouzz"] -description = "A cross-platform Rust library for launching Chromium-based browsers with extensive configuration options" -keywords = ["chrome", "chromium", "browser", "launcher", "automation"] +description = "A cross-platform Rust library for launching browsers with extensive configuration options" +keywords = ["browser", "launcher", "automation", "chrome", "edge", "safari"] categories = ["api-bindings", "command-line-utilities"] readme = "README.md" license = "Apache-2.0" -repository = "https://github.com/chouzz/chrome_launcher" -homepage = "https://github.com/chouzz/chrome_launcher" -documentation = "https://docs.rs/chrome_launcher" +repository = "https://github.com/chouzz/browser_launcher" +homepage = "https://github.com/chouzz/browser_launcher" +documentation = "https://docs.rs/browser_launcher" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] -name = "chrome_launcher" +name = "browser_launcher" crate-type = ["lib"] [[bin]] -name = "chrome_launcher_cli" +name = "browser_launcher_cli" path = "src/main.rs" [dependencies] diff --git a/README.md b/README.md index c9eb2d1..ec55bed 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -# Chrome Launcher +# Browser Launcher -[![Crates.io](https://img.shields.io/crates/v/chrome_launcher.svg)](https://crates.io/crates/chrome_launcher) +[![Crates.io](https://img.shields.io/crates/v/browser_launcher.svg)](https://crates.io/crates/browser_launcher) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) -[![Build Status](https://img.shields.io/github/actions/workflow/status/chouzz/chrome_launcher/ci.yml)](https://github.com/chouzz/chrome_launcher/actions) +[![Build Status](https://img.shields.io/github/actions/workflow/status/chouzz/browser_launcher/ci.yml)](https://github.com/chouzz/browser_launcher/actions) -A powerful, cross-platform Rust library for launching Chromium-based browsers with extensive configuration options. Supports Chrome, Edge, Brave, Opera, Vivaldi, and other Chromium browsers on Windows, macOS, and Linux. +A powerful, cross-platform Rust library for launching browsers (Chrome, Edge, Safari, Firefox, etc.) with extensive configuration options. Supports multiple browsers on Windows, macOS, and Linux. ## Features - ๐Ÿš€ **Cross-platform support**: Windows, macOS, and Linux -- ๐ŸŒ **Multiple browsers**: Chrome, Chromium, Edge, Brave, Opera, Vivaldi +- ๐ŸŒ **Multiple browsers**: Chrome, Chromium, Edge, Brave, Opera, Vivaldi, etc. - โš™๏ธ **Comprehensive options**: Headless, security, networking, and more - ๐Ÿงช **Well-tested**: Unit tests and integration tests included - ๐Ÿ“ฆ **Easy to use**: Simple API with extensive CLI support @@ -23,13 +23,13 @@ Add this to your `Cargo.toml`: ```toml [dependencies] -chrome_launcher = "0.2.0" +browser_launcher = "0.2.0" ``` ### As a CLI Tool ```bash -cargo install chrome_launcher +cargo install browser_launcher ``` ## Quick Start @@ -37,7 +37,7 @@ cargo install chrome_launcher ### Library Usage ```rust -use chrome_launcher::{Launcher, Options, BrowserType}; +use browser_launcher::{Launcher, Options, BrowserType}; fn main() -> Result<(), Box> { let mut options = Options::default(); @@ -69,17 +69,17 @@ fn main() -> Result<(), Box> { Launch Chrome with default settings: ```bash -chrome_launcher_cli +browser_launcher_cli ``` Launch Edge in headless mode: ```bash -chrome_launcher_cli --browser edge --headless --starting-url "https://example.com" +browser_launcher_cli --browser edge --headless --starting-url "https://example.com" ``` Launch with custom window size and security disabled: ```bash -chrome_launcher_cli \ +browser_launcher_cli \ --browser chrome \ --window-size 1920x1080 \ --disable-web-security \ @@ -90,7 +90,7 @@ chrome_launcher_cli \ ### Browser Types -The library supports multiple Chromium-based browsers: +The library supports multiple browsers: - `BrowserType::Chrome` - Google Chrome - `BrowserType::ChromeCanary` - Google Chrome Canary @@ -106,7 +106,7 @@ The library supports multiple Chromium-based browsers: The `Options` struct provides extensive configuration: ```rust -use chrome_launcher::{Options, BrowserType}; +use browser_launcher::{Options, BrowserType}; let options = Options { // Browser selection @@ -115,7 +115,7 @@ let options = Options { // Basic settings starting_url: Some("https://example.com".to_string()), port: Some(9222), - user_data_dir: Some("/tmp/chrome-data".to_string()), + user_data_dir: Some("/tmp/browser-data".to_string()), // Launch modes headless: Some(true), @@ -138,7 +138,7 @@ let options = Options { user_agent: Some("Custom User Agent".to_string()), // Additional flags - chrome_flags: Some(vec!["--custom-flag".to_string()]), + browser_flags: Some(vec!["--custom-flag".to_string()]), additional_args: Some(vec!["--extra-arg=value".to_string()]), ..Default::default() @@ -150,7 +150,7 @@ let options = Options { The library automatically detects installed browsers: ```rust -use chrome_launcher::{BrowserFinder, BrowserType}; +use browser_launcher::{BrowserFinder, BrowserType}; let finder = BrowserFinder::default(); let browsers = finder.find_all(); @@ -200,21 +200,21 @@ The CLI tool supports all major browser launch options: - `--starting-url `: Set initial URL to load ### Additional Arguments -- `--chrome-flags `: Additional Chrome flags (comma-separated) +- `--browser-flags `: Additional browser flags (comma-separated) - `--additional-args `: Additional arguments (comma-separated) ## Examples ### Headless Screenshots ```rust -use chrome_launcher::{Launcher, Options, BrowserType}; +use browser_launcher::{Launcher, Options, BrowserType}; let options = Options { browser: Some(BrowserType::Chrome), headless: Some(true), window_size: Some((1920, 1080)), starting_url: Some("https://example.com".to_string()), - chrome_flags: Some(vec![ + browser_flags: Some(vec![ "--screenshot=output.png".to_string(), "--hide-scrollbars".to_string(), ]), @@ -227,7 +227,7 @@ launcher.launch()?; ### Web Scraping Setup ```rust -use chrome_launcher::{Launcher, Options, BrowserType}; +use browser_launcher::{Launcher, Options, BrowserType}; let options = Options { browser: Some(BrowserType::Chrome), @@ -245,7 +245,7 @@ launcher.launch()?; ### Development with Extensions Disabled ```bash -chrome_launcher_cli \ +browser_launcher_cli \ --browser chrome \ --disable-extensions \ --disable-plugins \ @@ -254,7 +254,7 @@ chrome_launcher_cli \ ### Testing with Security Disabled ```bash -chrome_launcher_cli \ +browser_launcher_cli \ --browser edge \ --disable-web-security \ --ignore-ssl-errors \ @@ -321,7 +321,7 @@ cargo build ### Running CLI ```bash -cargo run --bin chrome_launcher_cli -- --help +cargo run --bin browser_launcher_cli -- --help ``` ### Code Structure @@ -329,7 +329,7 @@ cargo run --bin chrome_launcher_cli -- --help ``` src/ โ”œโ”€โ”€ browser.rs # Browser detection and types -โ”œโ”€โ”€ chrome_launcher.rs # Main launcher implementation +โ”œโ”€โ”€ browser_launcher.rs # Main launcher implementation โ”œโ”€โ”€ cli.rs # CLI interface โ”œโ”€โ”€ flags.rs # Default Chrome flags โ”œโ”€โ”€ lib.rs # Library exports and tests diff --git a/src/chrome_launcher.rs b/src/browser_launcher.rs similarity index 84% rename from src/chrome_launcher.rs rename to src/browser_launcher.rs index dbb19e9..ce7fe04 100644 --- a/src/chrome_launcher.rs +++ b/src/browser_launcher.rs @@ -13,11 +13,11 @@ use std::process::Command; #[derive(Debug)] pub struct Options { pub starting_url: Option, - pub chrome_flags: Option>, + pub browser_flags: Option>, pub prefs: Option>, pub port: Option, pub handle_sigint: Option, - pub chrome_path: Option, + pub browser_path: Option, pub user_data_dir: Option, pub log_level: Option, pub ignore_default_flags: Option, @@ -43,17 +43,17 @@ pub struct Options { pub additional_args: Option>, } -pub struct LaunchedChrome { +pub struct LaunchedBrowser { pub pid: u32, pub port: u16, pub process: std::process::Child, } pub struct Launcher { - chrome_process: Option, + browser_process: Option, out_file: PathBuf, err_file: PathBuf, - chrome_path: Option, + browser_path: Option, env_vars: HashMap, port: u16, ignore_default_flags: bool, @@ -62,7 +62,7 @@ pub struct Launcher { #[allow(dead_code)] max_connection_retries: u32, user_data_dir: String, - chrome_flags: Vec, + browser_flags: Vec, starting_url: String, browser_type: BrowserType, headless: bool, @@ -91,20 +91,20 @@ impl Launcher { .as_ref() .map(PathBuf::from) .unwrap_or_else(env::temp_dir); - let out_file = user_data_dir.join("chrome-out.log"); - let err_file = user_data_dir.join("chrome-err.log"); + let out_file = user_data_dir.join("browser-out.log"); + let err_file = user_data_dir.join("browser-err.log"); Self { - chrome_process: None, + browser_process: None, out_file, err_file, - chrome_path: opts.chrome_path, + browser_path: opts.browser_path, env_vars: get_default(opts.env_vars, || env::vars().collect()), port: get_default(opts.port, || 0), ignore_default_flags: get_default(opts.ignore_default_flags, || false), connection_poll_interval: get_default(opts.connection_poll_interval, || 500), max_connection_retries: get_default(opts.max_connection_retries, || 50), user_data_dir: get_default(opts.user_data_dir, || user_data_dir.to_string_lossy().to_owned().to_string()), - chrome_flags: get_default(opts.chrome_flags, || [].to_vec()), + browser_flags: get_default(opts.browser_flags, || [].to_vec()), starting_url: get_default(opts.starting_url, || "about:blank".to_owned()), browser_type: get_default(opts.browser, || BrowserType::Chrome), headless: get_default(opts.headless, || false), @@ -126,13 +126,13 @@ impl Launcher { } } - pub fn launch(&mut self) -> Result { - let chrome_path = if let Some(ref path) = self.chrome_path { + pub fn launch(&mut self) -> Result { + let browser_path = if let Some(ref path) = self.browser_path { path.as_str() } else { - &self.get_chrome_path()? + &self.get_browser_path()? }; - let mut command = Command::new(chrome_path); + let mut command = Command::new(browser_path); command.args(self.get_flags()); command.stdout(File::create(&self.out_file).map_err(|e| e.to_string())?); @@ -141,16 +141,16 @@ impl Launcher { let child = command.spawn().map_err(|e| e.to_string())?; let pid = child.id(); - self.chrome_process = Some(child); + self.browser_process = Some(child); - let process = self.chrome_process.take().unwrap(); + let process = self.browser_process.take().unwrap(); let port = self.port; - Ok(LaunchedChrome { pid, port, process }) + Ok(LaunchedBrowser { pid, port, process }) } pub fn kill(&mut self) { - if let Some(ref mut process) = self.chrome_process { + if let Some(ref mut process) = self.browser_process { let _ = process.kill(); } self.cleanup(); @@ -199,7 +199,7 @@ impl Launcher { self.disable_images, &self.browser_type, self.window_size.as_ref(), - &self.chrome_flags, + &self.browser_flags, &self.additional_args, &self.user_data_dir, ) @@ -211,13 +211,13 @@ impl Launcher { } #[cfg(test)] - pub fn test_get_chrome_path(&self) -> Result { - self.get_chrome_path() + pub fn test_get_browser_path(&self) -> Result { + self.get_browser_path() } - fn get_chrome_path(&self) -> Result { + fn get_browser_path(&self) -> Result { // If a specific path is provided, use it - if let Some(ref path) = self.chrome_path { + if let Some(ref path) = self.browser_path { if Path::new(path).exists() { return Ok(path.clone()); } else { @@ -240,6 +240,24 @@ impl Launcher { } fn get_flags(&self) -> Vec { + let mut flags = match self.browser_type { + BrowserType::Chrome | BrowserType::ChromeCanary | BrowserType::Chromium | BrowserType::Edge | BrowserType::Brave | BrowserType::Opera | BrowserType::Vivaldi => { + self.get_chromium_flags() + } + BrowserType::Custom(_) => { + // Default to chromium flags for custom browsers if they are chromium-based + // In the future, we could detect or allow more specific custom flags + self.get_chromium_flags() + } + }; + + // Starting URL (must be last for most browsers) + flags.push(self.starting_url.clone()); + + flags + } + + fn get_chromium_flags(&self) -> Vec { let mut flags = if self.ignore_default_flags { vec![] } else { @@ -334,14 +352,11 @@ impl Launcher { } // Additional custom flags - flags.extend(self.chrome_flags.clone()); + flags.extend(self.browser_flags.clone()); // Additional args from options flags.extend(self.additional_args.clone()); - // Starting URL (must be last) - flags.push(self.starting_url.clone()); - flags } diff --git a/src/cli.rs b/src/cli.rs index beaeee3..d441d7c 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -1,96 +1,95 @@ -use crate::{Launcher, Options, BrowserType}; use clap::{Parser, ValueEnum}; #[derive(Parser, Debug)] #[command(version, about, long_about = None)] -struct Args { +pub struct Args { /// Sets the starting URL #[arg(long)] - starting_url: Option, + pub starting_url: Option, - /// Sets Chrome flags (comma-separated) + /// Sets browser flags (comma-separated) #[arg(long)] - chrome_flags: Option, + pub browser_flags: Option, - /// Sets the port for Chrome + /// Sets the port for remote debugging #[arg(long)] - port: Option, + pub port: Option, /// Browser type to launch #[arg(long, value_enum)] - browser: Option, + pub browser: Option, /// Run in headless mode #[arg(long)] - headless: bool, + pub headless: bool, /// Window size (format: WIDTHxHEIGHT) #[arg(long)] - window_size: Option, + pub window_size: Option, /// Run in incognito mode #[arg(long)] - incognito: bool, + pub incognito: bool, /// Disable GPU acceleration #[arg(long)] - disable_gpu: bool, + pub disable_gpu: bool, /// Disable sandbox (use with caution) #[arg(long)] - no_sandbox: bool, + pub no_sandbox: bool, /// Disable web security #[arg(long)] - disable_web_security: bool, + pub disable_web_security: bool, /// Allow running insecure content #[arg(long)] - allow_insecure_content: bool, + pub allow_insecure_content: bool, /// Ignore SSL/HTTPS errors #[arg(long)] - ignore_ssl_errors: bool, + pub ignore_ssl_errors: bool, /// Disable browser extensions #[arg(long)] - disable_extensions: bool, + pub disable_extensions: bool, /// Disable plugins #[arg(long)] - disable_plugins: bool, + pub disable_plugins: bool, /// Disable images #[arg(long)] - disable_images: bool, + pub disable_images: bool, /// Disable JavaScript #[arg(long)] - disable_javascript: bool, + pub disable_javascript: bool, /// Set custom user agent #[arg(long)] - user_agent: Option, + pub user_agent: Option, /// Set proxy server #[arg(long)] - proxy_server: Option, + pub proxy_server: Option, /// Set host resolver rules #[arg(long)] - host_resolver_rules: Option, + pub host_resolver_rules: Option, /// User data directory #[arg(long)] - user_data_dir: Option, + pub user_data_dir: Option, - /// Additional Chrome arguments (comma-separated) + /// Additional browser arguments (comma-separated) #[arg(long)] - additional_args: Option, + pub additional_args: Option, } #[derive(Clone, Debug, ValueEnum)] -enum BrowserTypeArg { +pub enum BrowserTypeArg { Chrome, Chromium, Edge, @@ -99,90 +98,6 @@ enum BrowserTypeArg { Vivaldi, } -fn main() { - // Parse command line arguments - let args = Args::parse(); - - // Initialize Options and populate from parsed arguments - let mut options = Options::default(); - - if let Some(url) = args.starting_url { - options.starting_url = Some(url); - } - - if let Some(flags) = args.chrome_flags { - options.chrome_flags = Some(flags.split(',').map(String::from).collect()); - } - - if let Some(port) = args.port { - options.port = Some(port); - } - - // Browser type - if let Some(browser) = args.browser { - options.browser = Some(match browser { - BrowserTypeArg::Chrome => BrowserType::Chrome, - BrowserTypeArg::Chromium => BrowserType::Chromium, - BrowserTypeArg::Edge => BrowserType::Edge, - BrowserTypeArg::Brave => BrowserType::Brave, - BrowserTypeArg::Opera => BrowserType::Opera, - BrowserTypeArg::Vivaldi => BrowserType::Vivaldi, - }); - } - - // Launch options - options.headless = Some(args.headless); - options.incognito = Some(args.incognito); - options.disable_gpu = Some(args.disable_gpu); - options.no_sandbox = Some(args.no_sandbox); - options.disable_web_security = Some(args.disable_web_security); - options.allow_running_insecure_content = Some(args.allow_insecure_content); - options.ignore_ssl_errors = Some(args.ignore_ssl_errors); - options.disable_extensions = Some(args.disable_extensions); - options.disable_plugins = Some(args.disable_plugins); - options.disable_images = Some(args.disable_images); - options.disable_javascript = Some(args.disable_javascript); - - // Window size parsing - if let Some(window_size) = args.window_size { - if let Some((width, height)) = parse_window_size(&window_size) { - options.window_size = Some((width, height)); - } else { - eprintln!("Invalid window size format. Expected WIDTHxHEIGHT (e.g., 1920x1080)"); - std::process::exit(1); - } - } - - // Additional options - options.user_agent = args.user_agent; - options.proxy_server = args.proxy_server; - options.host_resolver_rules = args.host_resolver_rules; - options.user_data_dir = args.user_data_dir; - - if let Some(additional_args) = args.additional_args { - options.additional_args = Some(additional_args.split(',').map(String::from).collect()); - } - - // Initialize the Launcher with the parsed options - let mut launcher = Launcher::new(options); - - match launcher.launch() { - Ok(mut launched_chrome) => { - println!("Launched browser with PID: {}", launched_chrome.pid); - let _ = launched_chrome - .process - .wait() - .map_err(|e: std::io::Error| e.to_string()) - .unwrap(); - println!("Browser process has exited."); - } - Err(e) => { - eprintln!("Error launching browser: {}", e); - std::process::exit(1); - } - } -} - pub fn parse_window_size(size: &str) -> Option<(u32, u32)> { let parts: Vec<&str> = size.split('x').collect(); if parts.len() == 2 { diff --git a/src/flags.rs b/src/flags.rs index b0a0ce9..c45b66c 100644 --- a/src/flags.rs +++ b/src/flags.rs @@ -1,8 +1,8 @@ -// Default Chrome flags +// Default Chromium-based browser flags pub const DEFAULT_FLAGS: &[&str] = &[ // Disable built-in Google Translate service "--disable-features=Translate", - // Disable all chrome extensions + // Disable all browser extensions "--disable-extensions", // Disable some extensions that aren't affected by --disable-extensions "--disable-component-extensions-with-background-pages", diff --git a/src/lib.rs b/src/lib.rs index 8e5f561..9ea6a1d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,10 +1,11 @@ pub mod browser; -pub mod chrome_launcher; +pub mod browser_launcher; +pub mod cli; pub mod flags; pub mod utils; pub use browser::{Browser, BrowserFinder, BrowserType}; -pub use chrome_launcher::{Launcher, Options}; +pub use browser_launcher::{Launcher, Options}; #[cfg(test)] mod tests { @@ -15,7 +16,7 @@ mod tests { fn test_options_default() { let options = Options::default(); assert!(options.starting_url.is_none()); - assert!(options.chrome_flags.is_none()); + assert!(options.browser_flags.is_none()); assert!(options.port.is_none()); assert!(options.browser.is_none()); // headless defaults to None in Options::default() @@ -130,7 +131,7 @@ mod tests { options.proxy_server = Some("http://proxy:8080".to_string()); options.host_resolver_rules = Some("MAP *.example.com 127.0.0.1".to_string()); options.window_size = Some((1024, 768)); - options.chrome_flags = Some(vec!["--custom-flag".to_string()]); + options.browser_flags = Some(vec!["--custom-flag".to_string()]); options.additional_args = Some(vec!["--extra-arg".to_string()]); options.user_data_dir = Some("/tmp/test-data".to_string()); options.port = Some(9999); @@ -152,7 +153,7 @@ mod tests { assert_eq!(config.0, "https://test.com"); // starting_url assert_eq!(config.1, 9999); // port assert_eq!(config.13, Some(&(1024, 768))); // window_size - assert_eq!(config.14, &vec!["--custom-flag".to_string()]); // chrome_flags + assert_eq!(config.14, &vec!["--custom-flag".to_string()]); // browser_flags assert_eq!(config.15, &vec!["--extra-arg".to_string()]); // additional_args assert_eq!(config.16, "/tmp/test-data"); // user_data_dir } @@ -194,4 +195,4 @@ mod tests { // Should not contain default flags like --disable-features=Translate assert!(!flags.contains(&"--disable-features=Translate".to_string())); } -} +} diff --git a/src/main.rs b/src/main.rs index 6d76846..d6d9afa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,4 +1,4 @@ -use chrome_launcher::{Launcher, Options, BrowserType}; +use browser_launcher::{Launcher, Options, BrowserType}; use clap::{Parser, ValueEnum}; #[derive(Parser, Debug)] @@ -8,11 +8,11 @@ struct Args { #[arg(long)] starting_url: Option, - /// Sets Chrome flags (comma-separated) + /// Sets browser flags (comma-separated) #[arg(long)] - chrome_flags: Option, + browser_flags: Option, - /// Sets the port for Chrome + /// Sets the port for remote debugging #[arg(long)] port: Option, @@ -84,7 +84,7 @@ struct Args { #[arg(long)] user_data_dir: Option, - /// Additional Chrome arguments (comma-separated) + /// Additional browser arguments (comma-separated) #[arg(long)] additional_args: Option, } @@ -110,8 +110,8 @@ fn main() { options.starting_url = Some(url); } - if let Some(flags) = args.chrome_flags { - options.chrome_flags = Some(flags.split(',').map(String::from).collect()); + if let Some(flags) = args.browser_flags { + options.browser_flags = Some(flags.split(',').map(String::from).collect()); } if let Some(port) = args.port { @@ -167,9 +167,9 @@ fn main() { let mut launcher = Launcher::new(options); match launcher.launch() { - Ok(mut launched_chrome) => { - println!("Launched browser with PID: {}", launched_chrome.pid); - let _ = launched_chrome + Ok(mut launched_browser) => { + println!("Launched browser with PID: {}", launched_browser.pid); + let _ = launched_browser .process .wait() .map_err(|e: std::io::Error| e.to_string()) diff --git a/tests/integration_tests.rs b/tests/integration_tests.rs index 1dbd516..2e10c77 100644 --- a/tests/integration_tests.rs +++ b/tests/integration_tests.rs @@ -1,4 +1,4 @@ -use chrome_launcher::{BrowserFinder, BrowserType, Launcher, Options}; +use browser_launcher::{BrowserFinder, BrowserType, Launcher, Options}; #[cfg(test)] mod integration_tests { @@ -96,7 +96,7 @@ mod integration_tests { options.user_agent = Some("TestAgent/1.0".to_string()); options.proxy_server = Some("http://proxy.test:8080".to_string()); options.window_size = Some((1280, 720)); - options.chrome_flags = Some(vec![ + options.browser_flags = Some(vec![ "--custom-flag1".to_string(), "--custom-flag2=value".to_string(), ]); @@ -109,9 +109,9 @@ mod integration_tests { } #[test] - fn test_launcher_get_chrome_path_with_custom_path() { + fn test_launcher_get_browser_path_with_custom_path() { let mut options = Options::default(); - options.chrome_path = Some("/usr/bin/google-chrome".to_string()); + options.browser_path = Some("/usr/bin/google-chrome".to_string()); let _launcher = Launcher::new(options); // Test passes if launcher can be created with custom path option