From dda6ffff3470440d4f2e5fb54c9f38b3b5f1a569 Mon Sep 17 00:00:00 2001 From: Peng-Yu Chen Date: Thu, 15 Feb 2024 22:59:28 +0000 Subject: [PATCH 1/3] feat(browser): add support for the new headless mode in BrowserConfig --- src/browser.rs | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/browser.rs b/src/browser.rs index 17dac756..0bca77d6 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -559,11 +559,21 @@ async fn ws_url_from_output( } } +#[derive(Debug, Clone)] +enum HeadlessMode { + /// The "headful" mode. + False, + /// The old headless mode (default). + True, + /// The new headless mode. See also: https://developer.chrome.com/docs/chromium/new-headless + New, +} + #[derive(Debug, Clone)] pub struct BrowserConfig { /// Determines whether to run headless version of the browser. Defaults to /// true. - headless: bool, + headless: HeadlessMode, /// Determines whether to run the browser with a sandbox. sandbox: bool, /// Launch the browser with a specific window width and height. @@ -619,7 +629,7 @@ pub struct BrowserConfig { #[derive(Debug, Clone)] pub struct BrowserConfigBuilder { - headless: bool, + headless: HeadlessMode, sandbox: bool, window_size: Option<(u32, u32)>, port: u16, @@ -652,7 +662,7 @@ impl BrowserConfig { impl Default for BrowserConfigBuilder { fn default() -> Self { Self { - headless: true, + headless: HeadlessMode::True, sandbox: true, window_size: None, port: 0, @@ -686,7 +696,12 @@ impl BrowserConfigBuilder { } pub fn with_head(mut self) -> Self { - self.headless = false; + self.headless = HeadlessMode::False; + self + } + + pub fn new_headless_mode(mut self) -> Self { + self.headless = HeadlessMode::New; self } @@ -889,8 +904,10 @@ impl BrowserConfig { cmd.args(["--no-sandbox", "--disable-setuid-sandbox"]); } - if self.headless { - cmd.args(["--headless", "--hide-scrollbars", "--mute-audio"]); + match self.headless { + HeadlessMode::False => {} + HeadlessMode::True => cmd.args(["--headless", "--hide-scrollbars", "--mute-audio"]), + HeadlessMode::New => cmd.args(["--headless=new", "--hide-scrollbars", "--mute-audio"]), } if self.incognito { From a3e5aacde0cfb982f4ec8c7dd6cb577e99f88992 Mon Sep 17 00:00:00 2001 From: Peng-Yu Chen Date: Mon, 19 Feb 2024 23:27:31 +0000 Subject: [PATCH 2/3] miscellaneous enhancements following dda6ff --- src/browser.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/browser.rs b/src/browser.rs index 0bca77d6..d22b22c3 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -559,11 +559,12 @@ async fn ws_url_from_output( } } -#[derive(Debug, Clone)] +#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] enum HeadlessMode { /// The "headful" mode. False, - /// The old headless mode (default). + /// The old headless mode. + #[default] True, /// The new headless mode. See also: https://developer.chrome.com/docs/chromium/new-headless New, @@ -705,6 +706,11 @@ impl BrowserConfigBuilder { self } + pub fn headless_mode(mut self, HeadlessMode: mode) -> Self { + self.headless = mode; + self + } + pub fn incognito(mut self) -> Self { self.incognito = true; self From bda691a4a10b9b780863465e4604b0f53d7bdf28 Mon Sep 17 00:00:00 2001 From: Peng-Yu Chen Date: Tue, 20 Feb 2024 17:57:39 +0000 Subject: [PATCH 3/3] further fixes --- src/browser.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/browser.rs b/src/browser.rs index d22b22c3..903cc9ee 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -560,7 +560,7 @@ async fn ws_url_from_output( } #[derive(Debug, Clone, Copy, Default, PartialEq, Eq)] -enum HeadlessMode { +pub enum HeadlessMode { /// The "headful" mode. False, /// The old headless mode. @@ -706,7 +706,7 @@ impl BrowserConfigBuilder { self } - pub fn headless_mode(mut self, HeadlessMode: mode) -> Self { + pub fn headless_mode(mut self, mode: HeadlessMode) -> Self { self.headless = mode; self } @@ -911,9 +911,15 @@ impl BrowserConfig { } match self.headless { - HeadlessMode::False => {} - HeadlessMode::True => cmd.args(["--headless", "--hide-scrollbars", "--mute-audio"]), - HeadlessMode::New => cmd.args(["--headless=new", "--hide-scrollbars", "--mute-audio"]), + HeadlessMode::False => (), + HeadlessMode::True => { + cmd.args(["--headless", "--hide-scrollbars", "--mute-audio"]); + () + } + HeadlessMode::New => { + cmd.args(["--headless=new", "--hide-scrollbars", "--mute-audio"]); + () + } } if self.incognito {