def test_api_collection_fingerprinting(): # This is a very crude test, there are other tests to # check fingeprinting instrumentation in more detail shortcut_input = ["collection_fingerprinting"] output = jsi.clean_js_instrumentation_settings(shortcut_input) assert "window.document" in output assert "window['AudioContext'].prototype" in output
def start_webdriver(with_extension=True, load_browser_params=True, browser_params_file=None): """Open a webdriver instance and a server for the test pages This is meant to be imported and run manually from a python or ipython shell. A webdriver instance is returned and both the webdriver and server will automatically clean up when the shell is exited. Parameters ---------- with_extension : boolean Set to True to also load OpenWPM extension instrumentation load_browser_params : boolean Set to True to load browser_params browser_params_file : string Specify the browser_params.json to load. If None, default params from openwpm/config.py::BrowserParams will be loaded. Returns ------- webdriver A selenium webdriver instance. """ firefox_binary_path = get_firefox_binary_path() fb = FirefoxBinary(firefox_path=firefox_binary_path) server, thread = start_server() def register_cleanup(driver): driver.get(BASE_TEST_URL) def cleanup_server(): print("Cleanup before shutdown...") server.shutdown() thread.join() print("...server shutdown") driver.quit() print("...webdriver closed") shutil.rmtree(driver.capabilities["moz:profile"], ignore_errors=True) print("...browser profile removed") atexit.register(cleanup_server) return driver browser_profile_path = Path(tempfile.mkdtemp(prefix="firefox_profile_")) fo = Options() fo.add_argument("-profile") fo.add_argument(str(browser_profile_path)) if with_extension: # TODO: Restore preference for log level in a way that works in Fx 57+ # fp.set_preference("*****@*****.**", "all") configure_firefox.optimize_prefs(fo) driver = webdriver.Firefox(firefox_binary=fb, options=fo) if load_browser_params is True: # There's probably more we could do here # to set more preferences and better emulate # what happens in TaskManager. But this lets # us pass some basic things. browser_params = BrowserParams() if browser_params_file is not None: with open(browser_params_file, "r") as f: browser_params.from_json(f.read()) js_request = browser_params.js_instrument_settings js_request_as_string = jsi.clean_js_instrumentation_settings( js_request) browser_params.js_instrument_settings = js_request_as_string with open(browser_profile_path / "browser_params.json", "w") as f: f.write(browser_params.to_json()) if with_extension: # add openwpm extension to profile xpi() ext_xpi = join(EXT_PATH, "dist", "openwpm-1.0.zip") driver.install_addon(ext_xpi, temporary=True) return register_cleanup(driver)
def test_complete_pass(): shortcut_input = [{"window": {"recursive": True}}] output = jsi.clean_js_instrumentation_settings(shortcut_input) assert settings_contain(output, "instrumentedName", "window") assert settings_contain(output, "recursive", True, True)
def test_complete_pass(): shortcut_input = [{"window": {"recursive": True}}] output = jsi.clean_js_instrumentation_settings(shortcut_input) assert '"recursive": true' in output assert '"instrumentedName": "window"' in output