Skip to content

Commit

Permalink
Support getting browser version from firefox_android
Browse files Browse the repository at this point in the history
Initially we try to use mozversion on the package, but if that doesn't work
we try to get the version from adb dumpsys.
  • Loading branch information
jgraham committed Nov 22, 2023
1 parent 7672c11 commit 609fa24
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 10 deletions.
17 changes: 9 additions & 8 deletions tools/wpt/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -395,17 +395,18 @@ def setup_kwargs(self, kwargs):
device_serial=device_serial,
prompt=kwargs["prompt"])

if "ADB_PATH" not in os.environ:
adb_path = os.path.join(android.get_paths(None)["sdk"],
"platform-tools",
"adb")
os.environ["ADB_PATH"] = adb_path
adb_path = os.environ["ADB_PATH"]
if kwargs["adb_binary"] is None:
if "ADB_PATH" not in os.environ:
adb_path = os.path.join(android.get_paths(None)["sdk"],
"platform-tools",
"adb")
os.environ["ADB_PATH"] = adb_path
kwargs["adb_binary"] = os.environ["ADB_PATH"]

self._logcat = AndroidLogcat(adb_path, base_path=kwargs["logcat_dir"])
self._logcat = AndroidLogcat(kwargs["adb_binary"], base_path=kwargs["logcat_dir"])

for device_serial in kwargs["device_serial"]:
device = mozdevice.ADBDeviceFactory(adb=adb_path,
device = mozdevice.ADBDeviceFactory(adb=kwargs["adb_binary"],
device=device_serial)
self._logcat.start(device_serial)
if self.browser.apk_path:
Expand Down
34 changes: 34 additions & 0 deletions tools/wptrunner/wptrunner/browsers/firefox_android.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# mypy: allow-untyped-defs

import os
import subprocess
import re

from mozrunner import FennecEmulatorRunner, get_app_context

Expand All @@ -14,6 +16,7 @@
from .base import (Browser,
ExecutorBrowser)
from .firefox import (get_timeout_multiplier, # noqa: F401
run_info_browser_version,
run_info_extras as fx_run_info_extras,
update_properties, # noqa: F401
executor_kwargs as fx_executor_kwargs, # noqa: F401
Expand Down Expand Up @@ -92,9 +95,40 @@ def run_info_extras(logger, **kwargs):
package = kwargs["package_name"]
rv.update({"e10s": True if package is not None and "geckoview" in package else False,
"headless": False})

if kwargs["browser_version"] is None:
rv.update(run_info_browser_version(**kwargs))

if rv.get("browser_version") is None:
# If we didn't get the browser version from the apk, try to get it from adb dumpsys
rv["browser_version"] = get_package_browser_version(logger,
kwargs["adb_binary"],
kwargs["package_name"])

return rv


def get_package_browser_version(logger, adb_binary, package_name):
if adb_binary is None:
logger.warning("Couldn't run adb to get Firefox Android version number")
return None
try:
completed = subprocess.run([adb_binary, "shell", "dumpsys", "package", package_name],
check=True,
capture_output=True,
encoding="utf8")
except subprocess.CalledProcessError as e:
logger.warning(f"adb failed with return code {e.returncode}\nCaptured stderr:\n{e.stderr}")
return None

version_name_re = re.compile(r"^\s+versionName=(.*)")
for line in completed.stdout.splitlines():
m = version_name_re.match(line)
if m is not None:
return m.group(1)
logger.warning("Failed to find versionName property in dumpsys output")


def env_options():
return {"server_host": "127.0.0.1",
"supports_debugger": True}
Expand Down
10 changes: 8 additions & 2 deletions tools/wptrunner/wptrunner/executors/executormarionette.py
Original file line number Diff line number Diff line change
Expand Up @@ -1037,8 +1037,14 @@ def __init__(self, logger, browser, server_config, timeout_multiplier=1,
self.implementation_kwargs = {}
if reftest_internal:
self.implementation_kwargs["screenshot"] = reftest_screenshot
self.implementation_kwargs["chrome_scope"] = (browser_version is not None and
int(browser_version.split(".")[0]) < 82)
self.implementation_kwargs["chrome_scope"] = False
# Older versions of Gecko require switching to chrome scope to run refests
if browser_version is not None:
try:
major_version = int(browser_version.split(".")[0])
self.implementation_kwargs["chrome_scope"] = major_version < 82
except ValueError:
pass
self.close_after_done = close_after_done
self.has_window = False
self.original_pref_values = {}
Expand Down

0 comments on commit 609fa24

Please sign in to comment.