use std::path::PathBuf;
pub fn discover_browser() -> Option<PathBuf> {
if let Ok(p) = std::env::var("AFHTTP_TEST_BROWSER_BIN") {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
for candidate in [
"/usr/bin/chromium",
"/usr/bin/chromium-browser",
"/usr/bin/google-chrome",
"/usr/bin/google-chrome-stable",
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
] {
let p = PathBuf::from(candidate);
if p.exists() {
return Some(p);
}
}
None
}
#[macro_export]
macro_rules! skip_if_no_browser {
() => {
match $crate::support::env::discover_browser() {
Some(p) => p,
None => {
println!("(skipping: no browser binary; set AFHTTP_TEST_BROWSER_BIN)");
return;
}
}
};
}
pub fn discover_lightpanda() -> Option<PathBuf> {
if let Ok(p) = std::env::var("AFHTTP_TEST_LIGHTPANDA_BIN") {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
let standard = PathBuf::from("/usr/local/bin/lightpanda");
if standard.exists() {
return Some(standard);
}
None
}
pub fn discover_fingerprint_chromium() -> Option<PathBuf> {
if let Ok(p) = std::env::var("AFHTTP_TEST_FINGERPRINT_CHROMIUM_BIN") {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
let standard = PathBuf::from("/usr/local/bin/fingerprint-chromium");
if standard.exists() {
return Some(standard);
}
None
}
pub fn discover_brave() -> Option<PathBuf> {
if let Ok(p) = std::env::var("AFHTTP_TEST_BRAVE_BIN") {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
for candidate in ["/usr/bin/brave-browser", "/usr/bin/brave"] {
let path = PathBuf::from(candidate);
if path.exists() {
return Some(path);
}
}
None
}
pub fn discover_chrome() -> Option<PathBuf> {
if let Ok(p) = std::env::var("AFHTTP_TEST_CHROME_BIN") {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
for candidate in ["/usr/bin/google-chrome-stable", "/usr/bin/google-chrome"] {
let path = PathBuf::from(candidate);
if path.exists() {
return Some(path);
}
}
None
}
pub fn discover_foxbridge() -> Option<PathBuf> {
discover_simple_bin("AFHTTP_TEST_FOXBRIDGE_BIN", "foxbridge")
}
pub fn discover_camoufox() -> Option<PathBuf> {
discover_simple_bin("AFHTTP_TEST_CAMOUFOX_BIN", "camoufox")
}
pub fn discover_kasmvnc() -> Option<PathBuf> {
discover_simple_bin("AFHTTP_TEST_KASMVNC_BIN", "Xvnc")
}
fn discover_simple_bin(env_var: &str, default_name: &str) -> Option<PathBuf> {
if let Ok(p) = std::env::var(env_var) {
let path = PathBuf::from(p);
if path.exists() {
return Some(path);
}
}
for dir in ["/usr/local/bin", "/usr/bin"] {
let standard = PathBuf::from(dir).join(default_name);
if standard.exists() {
return Some(standard);
}
}
None
}