@@ -482,7 +482,43 @@ impl SeleniumManager for ChromeManager {
482
482
}
483
483
484
484
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) )
486
522
}
487
523
488
524
fn get_driver_url ( & mut self ) -> Result < String , Box < dyn Error > > {
@@ -563,6 +599,7 @@ impl SeleniumManager for ChromeManager {
563
599
564
600
if !self . is_browser_version_unstable ( )
565
601
&& !self . is_browser_version_stable ( )
602
+ && !self . is_browser_version_empty ( )
566
603
&& major_browser_version_int < MIN_CHROME_VERSION_CFT
567
604
{
568
605
return Err ( format_three_args (
@@ -590,15 +627,18 @@ impl SeleniumManager for ChromeManager {
590
627
}
591
628
_ => {
592
629
// 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 ( ) {
594
631
browser_version = self . request_latest_browser_version_from_cft ( ) ?;
595
632
} else {
596
633
browser_version = self . request_fixed_browser_version_from_cft ( ) ?;
597
634
}
598
635
self . set_browser_version ( browser_version. clone ( ) ) ;
599
636
600
637
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
+ {
602
642
metadata. browsers . push ( create_browser_metadata (
603
643
browser_name,
604
644
& major_browser_version,
@@ -626,7 +666,7 @@ impl SeleniumManager for ChromeManager {
626
666
let browser_url = if let Some ( url) = self . browser_url . clone ( ) {
627
667
url
628
668
} else {
629
- if self . is_browser_version_stable ( ) {
669
+ if self . is_browser_version_stable ( ) || self . is_browser_version_empty ( ) {
630
670
self . request_latest_browser_version_from_cft ( ) ?;
631
671
} else {
632
672
self . request_fixed_browser_version_from_cft ( ) ?;
0 commit comments