15
15
// specific language governing permissions and limitations
16
16
// under the License.
17
17
18
+ use crate :: config:: ManagerConfig ;
18
19
use std:: collections:: HashMap ;
19
20
use std:: error:: Error ;
20
21
use std:: path:: PathBuf ;
21
22
23
+ use crate :: config:: ARCH :: ARM64 ;
24
+ use crate :: config:: OS :: { LINUX , MACOS , WINDOWS } ;
22
25
use crate :: downloads:: read_content_from_link;
23
- use crate :: files:: compose_driver_path_in_cache;
24
- use crate :: is_unstable;
25
- use crate :: manager:: ARCH :: ARM64 ;
26
- use crate :: manager:: OS :: { LINUX , MACOS , WINDOWS } ;
27
- use crate :: manager:: {
28
- detect_browser_version, format_one_arg, format_two_args, get_major_version, BrowserManager ,
29
- BrowserPath , BETA , DASH_DASH_VERSION , DEV , ENV_LOCALAPPDATA , ENV_PROGRAM_FILES ,
30
- ENV_PROGRAM_FILES_X86 , NIGHTLY , REG_QUERY , STABLE , WMIC_COMMAND ,
31
- } ;
26
+ use crate :: files:: { compose_driver_path_in_cache, BrowserPath } ;
32
27
use crate :: metadata:: {
33
28
create_driver_metadata, get_driver_version_from_metadata, get_metadata, write_metadata,
34
29
} ;
30
+ use crate :: {
31
+ SeleniumManager , BETA , DASH_DASH_VERSION , DEV , ENV_LOCALAPPDATA , ENV_PROGRAM_FILES ,
32
+ ENV_PROGRAM_FILES_X86 , NIGHTLY , REG_QUERY , STABLE , WMIC_COMMAND ,
33
+ } ;
35
34
36
35
const BROWSER_NAME : & str = "chrome" ;
37
36
const DRIVER_NAME : & str = "chromedriver" ;
@@ -41,18 +40,20 @@ const LATEST_RELEASE: &str = "LATEST_RELEASE";
41
40
pub struct ChromeManager {
42
41
pub browser_name : & ' static str ,
43
42
pub driver_name : & ' static str ,
43
+ pub config : ManagerConfig ,
44
44
}
45
45
46
46
impl ChromeManager {
47
47
pub fn new ( ) -> Box < Self > {
48
48
Box :: new ( ChromeManager {
49
49
browser_name : BROWSER_NAME ,
50
50
driver_name : DRIVER_NAME ,
51
+ config : ManagerConfig :: default ( ) ,
51
52
} )
52
53
}
53
54
}
54
55
55
- impl BrowserManager for ChromeManager {
56
+ impl SeleniumManager for ChromeManager {
56
57
fn get_browser_name ( & self ) -> & str {
57
58
self . browser_name
58
59
}
@@ -97,30 +98,31 @@ impl BrowserManager for ChromeManager {
97
98
] )
98
99
}
99
100
100
- fn get_browser_version ( & self , os : & str , browser_version : & str ) -> Option < String > {
101
- match self . get_browser_path ( os , browser_version ) {
101
+ fn discover_browser_version ( & self ) -> Option < String > {
102
+ match self . get_browser_path ( ) {
102
103
Some ( browser_path) => {
103
- let ( shell, flag, args) = if WINDOWS . is ( os) {
104
- let mut commands = vec ! [
105
- format_two_args( WMIC_COMMAND , ENV_PROGRAM_FILES , browser_path) ,
106
- format_two_args( WMIC_COMMAND , ENV_PROGRAM_FILES_X86 , browser_path) ,
107
- format_two_args( WMIC_COMMAND , ENV_LOCALAPPDATA , browser_path) ,
108
- ] ;
109
- if !is_unstable ( browser_version) {
110
- commands. push ( format_one_arg (
111
- REG_QUERY ,
112
- r#"HKCU\Software\Google\Chrome\BLBeacon"# ,
113
- ) ) ;
114
- }
115
- ( "cmd" , "/C" , commands)
116
- } else {
117
- (
118
- "sh" ,
119
- "-c" ,
120
- vec ! [ format_one_arg( DASH_DASH_VERSION , browser_path) ] ,
121
- )
122
- } ;
123
- detect_browser_version ( self . browser_name , shell, flag, args)
104
+ let ( shell, flag, args) =
105
+ if WINDOWS . is ( self . get_os ( ) ) {
106
+ let mut commands = vec ! [
107
+ self . format_two_args( WMIC_COMMAND , ENV_PROGRAM_FILES , browser_path) ,
108
+ self . format_two_args( WMIC_COMMAND , ENV_PROGRAM_FILES_X86 , browser_path) ,
109
+ self . format_two_args( WMIC_COMMAND , ENV_LOCALAPPDATA , browser_path) ,
110
+ ] ;
111
+ if !self . is_browser_version_unstable ( ) {
112
+ commands. push ( self . format_one_arg (
113
+ REG_QUERY ,
114
+ r#"HKCU\Software\Google\Chrome\BLBeacon"# ,
115
+ ) ) ;
116
+ }
117
+ ( "cmd" , "/C" , commands)
118
+ } else {
119
+ (
120
+ "sh" ,
121
+ "-c" ,
122
+ vec ! [ self . format_one_arg( DASH_DASH_VERSION , browser_path) ] ,
123
+ )
124
+ } ;
125
+ self . detect_browser_version ( shell, flag, args)
124
126
}
125
127
_ => None ,
126
128
}
@@ -130,11 +132,8 @@ impl BrowserManager for ChromeManager {
130
132
self . driver_name
131
133
}
132
134
133
- fn get_driver_version (
134
- & self ,
135
- browser_version : & str ,
136
- _os : & str ,
137
- ) -> Result < String , Box < dyn Error > > {
135
+ fn request_driver_version ( & self ) -> Result < String , Box < dyn Error > > {
136
+ let browser_version = self . get_browser_version ( ) ;
138
137
let mut metadata = get_metadata ( ) ;
139
138
140
139
match get_driver_version_from_metadata ( & metadata. drivers , self . driver_name , browser_version)
@@ -168,19 +167,18 @@ impl BrowserManager for ChromeManager {
168
167
}
169
168
}
170
169
171
- fn get_driver_url (
172
- & self ,
173
- driver_version : & str ,
174
- os : & str ,
175
- arch : & str ,
176
- ) -> Result < String , Box < dyn Error > > {
170
+ fn get_driver_url ( & self ) -> Result < String , Box < dyn Error > > {
171
+ let driver_version = self . get_driver_version ( ) ;
172
+ let os = self . get_os ( ) ;
173
+ let arch = self . get_arch ( ) ;
177
174
let driver_label = if WINDOWS . is ( os) {
178
175
"win32"
179
176
} else if MACOS . is ( os) {
180
177
if ARM64 . is ( arch) {
181
178
// As of chromedriver 106, the naming convention for macOS ARM64 releases changed. See:
182
179
// https://groups.google.com/g/chromedriver-users/c/JRuQzH3qr2c
183
- let major_driver_version = get_major_version ( driver_version) ?
180
+ let major_driver_version = self
181
+ . get_major_version ( driver_version) ?
184
182
. parse :: < i32 > ( )
185
183
. unwrap_or_default ( ) ;
186
184
if major_driver_version < 106 {
@@ -200,7 +198,10 @@ impl BrowserManager for ChromeManager {
200
198
) )
201
199
}
202
200
203
- fn get_driver_path_in_cache ( & self , driver_version : & str , os : & str , arch : & str ) -> PathBuf {
201
+ fn get_driver_path_in_cache ( & self ) -> PathBuf {
202
+ let driver_version = self . get_driver_version ( ) ;
203
+ let os = self . get_os ( ) ;
204
+ let arch = self . get_arch ( ) ;
204
205
let arch_folder = if WINDOWS . is ( os) {
205
206
"win32"
206
207
} else if MACOS . is ( os) {
@@ -214,4 +215,12 @@ impl BrowserManager for ChromeManager {
214
215
} ;
215
216
compose_driver_path_in_cache ( self . driver_name , os, arch_folder, driver_version)
216
217
}
218
+
219
+ fn get_config ( & self ) -> & ManagerConfig {
220
+ & self . config
221
+ }
222
+
223
+ fn set_config ( & mut self , config : ManagerConfig ) {
224
+ self . config = config;
225
+ }
217
226
}
0 commit comments