Skip to content

Commit c0317a5

Browse files
authored
[rust] Save discovered browser version (network request) in local metadata (#12443)
1 parent 2516656 commit c0317a5

File tree

2 files changed

+50
-6
lines changed

2 files changed

+50
-6
lines changed

rust/src/chrome.rs

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,43 @@ impl SeleniumManager for ChromeManager {
482482
}
483483

484484
fn request_browser_version(&mut self) -> Result<Option<String>, Box<dyn Error>> {
485-
Ok(Some(self.request_latest_browser_version_from_cft()?))
485+
let browser_name = self.browser_name;
486+
let browser_version;
487+
let major_browser_version = self.get_major_browser_version();
488+
let mut metadata = get_metadata(self.get_logger());
489+
490+
// First, browser version is checked in the local metadata
491+
match get_browser_version_from_metadata(
492+
&metadata.browsers,
493+
browser_name,
494+
&major_browser_version,
495+
) {
496+
Some(version) => {
497+
self.get_logger().trace(format!(
498+
"Browser with valid TTL. Getting {} version from metadata",
499+
browser_name
500+
));
501+
browser_version = version;
502+
self.set_browser_version(browser_version.clone());
503+
}
504+
_ => {
505+
// If not in metadata, discover version using Chrome for Testing (CfT) endpoints
506+
browser_version = self.request_latest_browser_version_from_cft()?;
507+
508+
let browser_ttl = self.get_browser_ttl();
509+
if browser_ttl > 0 {
510+
metadata.browsers.push(create_browser_metadata(
511+
browser_name,
512+
&major_browser_version,
513+
&browser_version,
514+
browser_ttl,
515+
));
516+
write_metadata(&metadata, self.get_logger());
517+
}
518+
}
519+
}
520+
521+
Ok(Some(browser_version))
486522
}
487523

488524
fn get_driver_url(&mut self) -> Result<String, Box<dyn Error>> {
@@ -563,6 +599,7 @@ impl SeleniumManager for ChromeManager {
563599

564600
if !self.is_browser_version_unstable()
565601
&& !self.is_browser_version_stable()
602+
&& !self.is_browser_version_empty()
566603
&& major_browser_version_int < MIN_CHROME_VERSION_CFT
567604
{
568605
return Err(format_three_args(
@@ -590,15 +627,18 @@ impl SeleniumManager for ChromeManager {
590627
}
591628
_ => {
592629
// If not in metadata, discover version using Chrome for Testing (CfT) endpoints
593-
if self.is_browser_version_stable() {
630+
if self.is_browser_version_stable() || self.is_browser_version_empty() {
594631
browser_version = self.request_latest_browser_version_from_cft()?;
595632
} else {
596633
browser_version = self.request_fixed_browser_version_from_cft()?;
597634
}
598635
self.set_browser_version(browser_version.clone());
599636

600637
let browser_ttl = self.get_browser_ttl();
601-
if browser_ttl > 0 && !self.is_browser_version_stable() {
638+
if browser_ttl > 0
639+
&& !self.is_browser_version_empty()
640+
&& !self.is_browser_version_stable()
641+
{
602642
metadata.browsers.push(create_browser_metadata(
603643
browser_name,
604644
&major_browser_version,
@@ -626,7 +666,7 @@ impl SeleniumManager for ChromeManager {
626666
let browser_url = if let Some(url) = self.browser_url.clone() {
627667
url
628668
} else {
629-
if self.is_browser_version_stable() {
669+
if self.is_browser_version_stable() || self.is_browser_version_empty() {
630670
self.request_latest_browser_version_from_cft()?;
631671
} else {
632672
self.request_fixed_browser_version_from_cft()?;

rust/src/lib.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ pub trait SeleniumManager {
283283
self.get_browser_name(),
284284
major_online_browser_version,
285285
));
286+
self.set_browser_version(version);
286287
}
287288
}
288289
} else if !major_browser_version.is_empty()
@@ -433,9 +434,12 @@ pub trait SeleniumManager {
433434
|| browser_version.eq_ignore_ascii_case(CANARY)
434435
}
435436

437+
fn is_browser_version_empty(&self) -> bool {
438+
self.get_browser_version().is_empty()
439+
}
440+
436441
fn is_browser_version_stable(&self) -> bool {
437-
let browser_version = self.get_browser_version();
438-
browser_version.is_empty() || browser_version.eq_ignore_ascii_case(STABLE)
442+
self.get_browser_version().eq_ignore_ascii_case(STABLE)
439443
}
440444

441445
fn resolve_driver(&mut self) -> Result<PathBuf, Box<dyn Error>> {

0 commit comments

Comments
 (0)