Skip to content

Commit 1d7d3aa

Browse files
committed
[rust] Refactor logic to discover driver version and download browser if necessary
1 parent 0276c44 commit 1d7d3aa

File tree

8 files changed

+134
-28
lines changed

8 files changed

+134
-28
lines changed

rust/src/chrome.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ pub struct ChromeManager {
5555
pub config: ManagerConfig,
5656
pub http_client: Client,
5757
pub log: Logger,
58+
pub download_browser: bool,
5859
pub driver_url: Option<String>,
5960
pub browser_url: Option<String>,
6061
}
@@ -72,6 +73,7 @@ impl ChromeManager {
7273
http_client: create_http_client(default_timeout, default_proxy)?,
7374
config,
7475
log: Logger::new(),
76+
download_browser: false,
7577
driver_url: None,
7678
browser_url: None,
7779
}))
@@ -556,6 +558,14 @@ impl SeleniumManager for ChromeManager {
556558
) -> Result<Option<&str>, Error> {
557559
Ok(None)
558560
}
561+
562+
fn is_download_browser(&self) -> bool {
563+
self.download_browser
564+
}
565+
566+
fn set_download_browser(&mut self, download_browser: bool) {
567+
self.download_browser = download_browser;
568+
}
559569
}
560570

561571
#[derive(Serialize, Deserialize)]

rust/src/edge.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ pub struct EdgeManager {
6161
pub config: ManagerConfig,
6262
pub http_client: Client,
6363
pub log: Logger,
64+
pub download_browser: bool,
6465
pub browser_url: Option<String>,
6566
}
6667

@@ -81,6 +82,7 @@ impl EdgeManager {
8182
http_client: create_http_client(default_timeout, default_proxy)?,
8283
config,
8384
log: Logger::new(),
85+
download_browser: false,
8486
browser_url: None,
8587
}))
8688
}
@@ -519,6 +521,14 @@ impl SeleniumManager for EdgeManager {
519521
};
520522
Ok(Some(browser_label))
521523
}
524+
525+
fn is_download_browser(&self) -> bool {
526+
self.download_browser
527+
}
528+
529+
fn set_download_browser(&mut self, download_browser: bool) {
530+
self.download_browser = download_browser;
531+
}
522532
}
523533

524534
#[derive(Serialize, Deserialize, Debug)]

rust/src/firefox.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ pub struct FirefoxManager {
7373
pub config: ManagerConfig,
7474
pub http_client: Client,
7575
pub log: Logger,
76+
pub download_browser: bool,
7677
}
7778

7879
impl FirefoxManager {
@@ -88,6 +89,7 @@ impl FirefoxManager {
8889
http_client: create_http_client(default_timeout, default_proxy)?,
8990
config,
9091
log: Logger::new(),
92+
download_browser: false,
9193
}))
9294
}
9395

@@ -592,6 +594,14 @@ impl SeleniumManager for FirefoxManager {
592594
};
593595
Ok(Some(browser_label))
594596
}
597+
598+
fn is_download_browser(&self) -> bool {
599+
self.download_browser
600+
}
601+
602+
fn set_download_browser(&mut self, download_browser: bool) {
603+
self.download_browser = download_browser;
604+
}
595605
}
596606

597607
#[derive(Serialize, Deserialize, Debug)]

rust/src/grid.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ pub struct GridManager {
4545
pub config: ManagerConfig,
4646
pub http_client: Client,
4747
pub log: Logger,
48+
pub download_browser: bool,
4849
pub driver_url: Option<String>,
4950
}
5051

@@ -62,6 +63,7 @@ impl GridManager {
6263
http_client: create_http_client(default_timeout, default_proxy)?,
6364
config,
6465
log: Logger::new(),
66+
download_browser: false,
6567
driver_url: None,
6668
}))
6769
}
@@ -261,4 +263,12 @@ impl SeleniumManager for GridManager {
261263
) -> Result<Option<&str>, Error> {
262264
self.unavailable_download()
263265
}
266+
267+
fn is_download_browser(&self) -> bool {
268+
self.download_browser
269+
}
270+
271+
fn set_download_browser(&mut self, download_browser: bool) {
272+
self.download_browser = download_browser;
273+
}
264274
}

rust/src/iexplorer.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ pub struct IExplorerManager {
5151
pub config: ManagerConfig,
5252
pub http_client: Client,
5353
pub log: Logger,
54+
pub download_browser: bool,
5455
pub driver_url: Option<String>,
5556
}
5657

@@ -68,6 +69,7 @@ impl IExplorerManager {
6869
http_client: create_http_client(default_timeout, default_proxy)?,
6970
config,
7071
log: Logger::new(),
72+
download_browser: false,
7173
driver_url: None,
7274
}))
7375
}
@@ -267,4 +269,12 @@ impl SeleniumManager for IExplorerManager {
267269
) -> Result<Option<&str>, Error> {
268270
self.unavailable_download()
269271
}
272+
273+
fn is_download_browser(&self) -> bool {
274+
self.download_browser
275+
}
276+
277+
fn set_download_browser(&mut self, download_browser: bool) {
278+
self.download_browser = download_browser;
279+
}
270280
}

rust/src/lib.rs

Lines changed: 64 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,10 @@ pub trait SeleniumManager {
170170
fn get_browser_label_for_download(&self, _browser_version: &str)
171171
-> Result<Option<&str>, Error>;
172172

173+
fn is_download_browser(&self) -> bool;
174+
175+
fn set_download_browser(&mut self, download_browser: bool);
176+
173177
// ----------------------------------------------------------
174178
// Shared functions
175179
// ----------------------------------------------------------
@@ -422,15 +426,9 @@ pub trait SeleniumManager {
422426
browser_version
423427
}
424428

425-
fn discover_driver_version_and_download_browser_if_necessary(
426-
&mut self,
427-
) -> Result<String, Error> {
428-
let original_browser_version = self.get_config().browser_version.clone();
429-
let mut download_browser = self.is_force_browser_download();
430-
let major_browser_version = self.get_major_browser_version();
431-
432-
// First, we try to discover the browser version
433-
if !download_browser {
429+
fn discover_local_browser(&mut self) -> Result<(), Error> {
430+
if !self.is_force_browser_download() {
431+
let major_browser_version = self.get_major_browser_version();
434432
match self.discover_browser_version()? {
435433
Some(discovered_version) => {
436434
if !self.is_safari() {
@@ -465,7 +463,7 @@ pub trait SeleniumManager {
465463
self.get_browser_name(),
466464
discovered_major_browser_version,
467465
));
468-
download_browser = true;
466+
self.set_download_browser(true);
469467
}
470468
} else {
471469
self.set_browser_version(discovered_version);
@@ -480,7 +478,7 @@ pub trait SeleniumManager {
480478
discovered_major_browser_version,
481479
major_browser_version,
482480
));
483-
download_browser = true;
481+
self.set_download_browser(true);
484482
} else {
485483
self.set_browser_version(discovered_version);
486484
}
@@ -500,12 +498,19 @@ pub trait SeleniumManager {
500498
self.get_browser_name(),
501499
self.get_browser_version_label()
502500
));
503-
download_browser = true;
501+
self.set_download_browser(true);
504502
}
505503
}
506504
}
507505

508-
if download_browser
506+
Ok(())
507+
}
508+
509+
fn download_browser_if_necessary(
510+
&mut self,
511+
original_browser_version: String,
512+
) -> Result<(), Error> {
513+
if self.is_download_browser()
509514
&& !self.is_avoid_browser_download()
510515
&& !self.is_iexplorer()
511516
&& !self.is_grid()
@@ -528,8 +533,11 @@ pub trait SeleniumManager {
528533
)));
529534
}
530535
}
536+
Ok(())
537+
}
531538

532-
// Second, we request the driver version using online endpoints
539+
fn discover_driver_version(&mut self) -> Result<String, Error> {
540+
// We request the driver version using online endpoints
533541
let driver_version = self.request_driver_version()?;
534542
if driver_version.is_empty() {
535543
Err(anyhow!(format!(
@@ -722,6 +730,7 @@ pub trait SeleniumManager {
722730
fn setup(&mut self) -> Result<PathBuf, Error> {
723731
let mut driver_in_path = None;
724732
let mut driver_in_path_version = None;
733+
let original_browser_version = self.get_config().browser_version.clone();
725734

726735
// Try to find driver in PATH
727736
if !self.is_safari() && !self.is_grid() {
@@ -741,24 +750,33 @@ pub trait SeleniumManager {
741750
}
742751
}
743752

744-
// Discover browser version (or download it, if not available and possible).
745-
// With the found browser version, discover the proper driver version using online endpoints
753+
// Discover browser version (or the need to download it, if not available and possible)
754+
match self.discover_local_browser() {
755+
Ok(_) => {}
756+
Err(err) => {
757+
self.check_error_with_driver_in_path(&driver_in_path, &driver_in_path_version, err)?
758+
}
759+
}
760+
761+
// Download browser if necessary
762+
match self.download_browser_if_necessary(original_browser_version) {
763+
Ok(_) => {}
764+
Err(err) => {
765+
self.check_error_with_driver_in_path(&driver_in_path, &driver_in_path_version, err)?
766+
}
767+
}
768+
769+
// With the discovered browser version, discover the proper driver version using online endpoints
746770
if self.get_driver_version().is_empty() {
747-
match self.discover_driver_version_and_download_browser_if_necessary() {
771+
match self.discover_driver_version() {
748772
Ok(driver_version) => {
749773
self.set_driver_version(driver_version);
750774
}
751-
Err(err) => {
752-
if driver_in_path_version.is_some() && driver_in_path.is_some() {
753-
self.get_logger().warn(format!(
754-
"Exception managing {}: {}",
755-
self.get_browser_name(),
756-
err
757-
));
758-
} else {
759-
return Err(err);
760-
}
761-
}
775+
Err(err) => self.check_error_with_driver_in_path(
776+
&driver_in_path,
777+
&driver_in_path_version,
778+
err,
779+
)?,
762780
}
763781
}
764782

@@ -807,6 +825,24 @@ pub trait SeleniumManager {
807825
Ok(driver_path)
808826
}
809827

828+
fn check_error_with_driver_in_path(
829+
&mut self,
830+
driver_in_path: &Option<String>,
831+
driver_in_path_version: &Option<String>,
832+
err: Error,
833+
) -> Result<(), Error> {
834+
if driver_in_path_version.is_some() && driver_in_path.is_some() {
835+
self.get_logger().warn(format!(
836+
"Exception managing {}: {}",
837+
self.get_browser_name(),
838+
err
839+
));
840+
Ok(())
841+
} else {
842+
Err(err)
843+
}
844+
}
845+
810846
fn is_driver(&self, entry: &DirEntry) -> bool {
811847
let is_file = entry.path().is_file();
812848

rust/src/safari.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ pub struct SafariManager {
3737
pub config: ManagerConfig,
3838
pub http_client: Client,
3939
pub log: Logger,
40+
pub download_browser: bool,
4041
}
4142

4243
impl SafariManager {
@@ -52,6 +53,7 @@ impl SafariManager {
5253
http_client: create_http_client(default_timeout, default_proxy)?,
5354
config,
5455
log: Logger::new(),
56+
download_browser: false,
5557
}))
5658
}
5759
}
@@ -160,4 +162,12 @@ impl SeleniumManager for SafariManager {
160162
) -> Result<Option<&str>, Error> {
161163
self.unavailable_download()
162164
}
165+
166+
fn is_download_browser(&self) -> bool {
167+
self.download_browser
168+
}
169+
170+
fn set_download_browser(&mut self, download_browser: bool) {
171+
self.download_browser = download_browser;
172+
}
163173
}

rust/src/safaritp.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ pub struct SafariTPManager {
4343
pub config: ManagerConfig,
4444
pub http_client: Client,
4545
pub log: Logger,
46+
pub download_browser: bool,
4647
}
4748

4849
impl SafariTPManager {
@@ -58,6 +59,7 @@ impl SafariTPManager {
5859
http_client: create_http_client(default_timeout, default_proxy)?,
5960
config,
6061
log: Logger::new(),
62+
download_browser: false,
6163
}))
6264
}
6365
}
@@ -168,4 +170,12 @@ impl SeleniumManager for SafariTPManager {
168170
) -> Result<Option<&str>, Error> {
169171
self.unavailable_download()
170172
}
173+
174+
fn is_download_browser(&self) -> bool {
175+
self.download_browser
176+
}
177+
178+
fn set_download_browser(&mut self, download_browser: bool) {
179+
self.download_browser = download_browser;
180+
}
171181
}

0 commit comments

Comments
 (0)