@@ -26,6 +26,17 @@ def _undot_key(key, value):
26
26
value = ChromeOptions ._undot_key (rest , value )
27
27
return {key : value }
28
28
29
+ @staticmethod
30
+ def _merge_nested (a , b ):
31
+ """Merges b into a, overwriting duplicate leaf values using b."""
32
+ for key in b :
33
+ if key in a :
34
+ if isinstance (a [key ], dict ) and isinstance (b [key ], dict ):
35
+ ChromeOptions ._merge_nested (a [key ], b [key ])
36
+ continue
37
+ a [key ] = b [key ]
38
+ return a
39
+
29
40
def handle_prefs (self , user_data_dir ):
30
41
prefs = self .experimental_options .get ("prefs" )
31
42
if prefs :
@@ -34,11 +45,13 @@ def handle_prefs(self, user_data_dir):
34
45
os .makedirs (default_path , exist_ok = True )
35
46
undot_prefs = {}
36
47
for key , value in prefs .items ():
37
- undot_prefs .update (self ._undot_key (key , value ))
48
+ undot_prefs = self ._merge_nested (
49
+ undot_prefs , self ._undot_key (key , value )
50
+ )
38
51
prefs_file = os .path .join (default_path , "Preferences" )
39
52
if os .path .exists (prefs_file ):
40
53
with open (prefs_file , encoding = "latin1" , mode = "r" ) as f :
41
- undot_prefs . update (json .load (f ))
54
+ undot_prefs = self . _merge_nested (json .load (f ), undot_prefs )
42
55
with open (prefs_file , encoding = "latin1" , mode = "w" ) as f :
43
56
json .dump (undot_prefs , f )
44
57
# Remove experimental_options to avoid errors
0 commit comments