summaryrefslogtreecommitdiffstats
path: root/testing/condprofile/condprof/desktop.py
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/condprofile/condprof/desktop.py90
1 files changed, 90 insertions, 0 deletions
diff --git a/testing/condprofile/condprof/desktop.py b/testing/condprofile/condprof/desktop.py
new file mode 100644
index 0000000000..7f8fe4e309
--- /dev/null
+++ b/testing/condprofile/condprof/desktop.py
@@ -0,0 +1,90 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+import os
+import contextlib
+
+import attr
+from arsenic.services import Geckodriver, free_port, subprocess_based_service
+
+from condprof.util import (
+ BaseEnv,
+ latest_nightly,
+ logger,
+ get_version,
+ get_current_platform,
+ DEFAULT_PREFS,
+)
+
+
+@attr.s
+class DesktopGeckodriver(Geckodriver):
+ async def start(self):
+ port = free_port()
+ await self._check_version()
+ logger.info("Running Webdriver on port %d" % port)
+ logger.info("Running Marionette on port 2828")
+ pargs = [
+ self.binary,
+ "--log",
+ "trace",
+ "--port",
+ str(port),
+ "--marionette-port",
+ "2828",
+ ]
+ try:
+ return await subprocess_based_service(
+ pargs, f"http://localhost:{port}", self.log_file
+ )
+ except ProcessLookupError as e:
+ return await subprocess_based_service(
+ pargs.extend(["--host", "127.0.0.1"]),
+ f"http://localhost:{port}",
+ self.log_file,
+ )
+
+
+@contextlib.contextmanager
+def dummy_device(*args, **kw):
+ yield None
+
+
+class DesktopEnv(BaseEnv):
+ def get_target_platform(self):
+ return get_current_platform()
+
+ def get_device(self, *args, **kw):
+ return dummy_device(*args, **kw)
+
+ @contextlib.contextmanager
+ def get_browser(self):
+ with latest_nightly(self.firefox) as binary:
+ self.firefox = os.path.abspath(binary)
+ if not os.path.exists(self.firefox):
+ raise IOError(self.firefox)
+ yield
+
+ def get_browser_args(self, headless, prefs=None):
+ final_prefs = dict(DEFAULT_PREFS)
+ if prefs is not None:
+ final_prefs.update(prefs)
+ options = ["--allow-downgrade", "-profile", self.profile]
+ if headless:
+ options.append("-headless")
+ args = {"moz:firefoxOptions": {"args": options}}
+ if self.firefox is not None:
+ args["moz:firefoxOptions"]["binary"] = self.firefox
+ args["moz:firefoxOptions"]["prefs"] = final_prefs
+ args["moz:firefoxOptions"]["log"] = {"level": "trace"}
+ return args
+
+ def get_browser_version(self):
+ try:
+ return get_version(self.firefox)
+ except Exception:
+ logger.error("Could not get Firefox version", exc_info=True)
+ return "unknown"
+
+ def get_geckodriver(self, log_file):
+ return DesktopGeckodriver(binary=self.geckodriver, log_file=log_file)