@@ -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 ( ) ?;
0 commit comments