44import subprocess
55import tempfile
66from pathlib import Path
7+ from time import sleep
78from typing import Any , Dict , Optional , Tuple
89
910from easyprocess import EasyProcessError
1011from multiprocess import Queue
1112from pyvirtualdisplay import Display
1213from selenium import webdriver
14+ from selenium .webdriver .common .by import By
1315from selenium .webdriver .firefox .options import Options
1416from selenium .webdriver .firefox .service import Service
1517
@@ -98,25 +100,6 @@ def deploy_firefox(
98100 # because status_queue is read off no matter what.
99101 status_queue .put (("STATUS" , "Display" , (display_pid , display_port )))
100102
101- # Write config file
102- extension_config : Dict [str , Any ] = dict ()
103- extension_config .update (browser_params .to_dict ())
104- extension_config ["logger_address" ] = manager_params .logger_address
105- extension_config ["storage_controller_address" ] = (
106- manager_params .storage_controller_address
107- )
108- extension_config ["testing" ] = manager_params .testing
109- ext_config_file = browser_profile_path / "browser_params.json"
110- with open (ext_config_file , "w" ) as f :
111- json .dump (extension_config , f , cls = ConfigEncoder )
112- logger .debug (
113- "BROWSER %i: Saved extension config file to: %s"
114- % (browser_params .browser_id , ext_config_file )
115- )
116-
117- # TODO restore detailed logging
118- # fo.set_preference("[email protected] ", "all") 119-
120103 # Configure privacy settings
121104 configure_firefox .privacy (browser_params , fo )
122105
@@ -155,10 +138,11 @@ def deploy_firefox(
155138 # Install extension
156139 ext_loc = os .path .join (root_dir , "../../Extension/openwpm.xpi" )
157140 ext_loc = os .path .normpath (ext_loc )
158- driver .install_addon (ext_loc , temporary = True )
141+ driver .install_addon (ext_loc )
159142 logger .debug (
160143 "BROWSER %i: OpenWPM Firefox extension loaded" % browser_params .browser_id
161144 )
145+ apply_extension_configuration (driver , browser_params , manager_params )
162146
163147 # set window size
164148 driver .set_window_size (* DEFAULT_SCREEN_RES )
@@ -172,3 +156,37 @@ def deploy_firefox(
172156 status_queue .put (("STATUS" , "Browser Launched" , int (pid )))
173157
174158 return driver , browser_profile_path , display
159+
160+
161+ def apply_extension_configuration (
162+ driver : webdriver .Firefox ,
163+ browser_params : BrowserParamsInternal ,
164+ manager_params : ManagerParamsInternal ,
165+ ) -> None :
166+ # Write config file
167+ extension_config : Dict [str , Any ] = dict ()
168+ extension_config .update (browser_params .to_dict ())
169+ extension_config ["logger_address" ] = manager_params .logger_address
170+ extension_config ["storage_controller_address" ] = (
171+ manager_params .storage_controller_address
172+ )
173+ extension_config ["testing" ] = manager_params .testing
174+ config = json .dumps (extension_config , cls = ConfigEncoder )
175+ driver .get ("about:debugging#/runtime/this-firefox" )
176+ sleep (0.1 )
177+ extension_id = driver .find_element (
178+ By .XPATH , "//span[@title='OpenWPM']/../section/dl/div[2]/dd"
179+ ).text
180+ driver .get (f"moz-extension://{ extension_id } /settings/settings.html" )
181+ driver .execute_script (
182+ f"""
183+ browser.storage.local.set({{
184+ config: { config } ,
185+ initialized: true
186+ }});
187+ """
188+ )
189+ logger .debug ("BROWSER %i: Set extension configuration:" , browser_params .browser_id )
190+
191+ # TODO restore detailed logging
192+ # fo.set_preference("[email protected] ", "all")
0 commit comments