Skip to content
This repository was archived by the owner on Mar 19, 2021. It is now read-only.

Commit 2a4e78b

Browse files
committed
Allow custom package names for Chrome Android
1. [wptrunner] chrome_android now honours (and requires) the --package-name flag instead of hardcoding the package name. 2. [wpt] chrome_android now chooses the correct official package name depending on the channel. 3. [wpt] chrome_android correctly sets browser_version. 4. [wpt] drive-by change: update the logic for adding --binary-arg & --webdriver-arg in chrome & chrome_android (now they both add --enable-experimental... to binary_arg and --disable-build-check to webdriver_arg when running dev or canary channel).
1 parent cc864ad commit 2a4e78b

File tree

4 files changed

+42
-23
lines changed

4 files changed

+42
-23
lines changed

docs/running-tests/chrome_android.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@ Currently, Android support is a prototype with some known issues:
1010
* If you have previously run `./wpt run` against Chrome, you might need to
1111
remove `_venv/bin/chromedriver` so that we can install the correct
1212
ChromeDriver corresponding to your Chrome for Android version.
13-
* The package name is hard coded. If you are testing a custom build, you will
14-
need to search and replace `com.android.chrome` in `tools/`.
1513
* We do not support reftests at the moment.
14+
* You will need to manually kill Chrome (all channels) before running tests.
1615

1716
Note: rooting the device or installing a root CA is no longer required.
1817

19-
Example:
18+
Example (assuming you have Chrome Canary installed on your phone):
2019

2120
```bash
22-
./wpt run --test-type=testharness chrome_android TESTS
21+
./wpt run --test-type=testharness --channel=canary chrome_android TESTS
2322
```

tools/wpt/browser.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -597,17 +597,26 @@ def install(self, dest=None, channel=None):
597597
raise NotImplementedError
598598

599599
def find_binary(self, venv_path=None, channel=None):
600-
raise NotImplementedError
600+
if channel in ("beta", "dev", "canary"):
601+
return "com.chrome." + channel
602+
return "com.android.chrome"
601603

602604
def find_webdriver(self, channel=None):
603605
return find_executable("chromedriver")
604606

605607
def install_webdriver(self, dest=None, channel=None, browser_binary=None):
608+
if browser_binary is None:
609+
browser_binary = self.find_binary(channel)
606610
chrome = Chrome(self.logger)
607-
return chrome.install_webdriver_by_version(self.version(), dest)
611+
return chrome.install_webdriver_by_version(
612+
self.version(browser_binary), dest)
608613

609614
def version(self, binary=None, webdriver_binary=None):
610-
command = ['adb', 'shell', 'dumpsys', 'package', 'com.android.chrome']
615+
if not binary:
616+
self.logger.warning("No package name provided.")
617+
return None
618+
619+
command = ['adb', 'shell', 'dumpsys', 'package', binary]
611620
try:
612621
output = call(*command)
613622
except (subprocess.CalledProcessError, OSError):

tools/wpt/run.py

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ def setup_kwargs(self, kwargs):
281281
logger.info("Downloading chromedriver")
282282
webdriver_binary = self.browser.install_webdriver(
283283
dest=self.venv.bin_path,
284-
browser_binary=kwargs["binary"]
284+
browser_binary=kwargs["binary"],
285285
)
286286
else:
287287
logger.info("Using webdriver binary %s" % webdriver_binary)
@@ -290,8 +290,8 @@ def setup_kwargs(self, kwargs):
290290
kwargs["webdriver_binary"] = webdriver_binary
291291
else:
292292
raise WptrunError("Unable to locate or install chromedriver binary")
293-
if kwargs["browser_channel"] == "dev":
294-
logger.info("Automatically turning on experimental features for Chrome Dev")
293+
if browser_channel in ("dev", "canary"):
294+
logger.info("Automatically turning on experimental features for Chrome Dev/Canary")
295295
kwargs["binary_args"].append("--enable-experimental-web-platform-features")
296296
# HACK(Hexcles): work around https://github.com/web-platform-tests/wpt/issues/16448
297297
kwargs["webdriver_args"].append("--disable-build-check")
@@ -302,6 +302,10 @@ class ChromeAndroid(BrowserSetup):
302302
browser_cls = browser.ChromeAndroid
303303

304304
def setup_kwargs(self, kwargs):
305+
browser_channel = kwargs["browser_channel"]
306+
if kwargs["package_name"] is None:
307+
kwargs["package_name"] = self.browser.find_binary(
308+
channel=browser_channel)
305309
if kwargs["webdriver_binary"] is None:
306310
webdriver_binary = self.browser.find_webdriver()
307311

@@ -310,14 +314,22 @@ def setup_kwargs(self, kwargs):
310314

311315
if install:
312316
logger.info("Downloading chromedriver")
313-
webdriver_binary = self.browser.install_webdriver(dest=self.venv.bin_path)
317+
webdriver_binary = self.browser.install_webdriver(
318+
dest=self.venv.bin_path,
319+
browser_binary=kwargs["package_name"],
320+
)
314321
else:
315322
logger.info("Using webdriver binary %s" % webdriver_binary)
316323

317324
if webdriver_binary:
318325
kwargs["webdriver_binary"] = webdriver_binary
319326
else:
320327
raise WptrunError("Unable to locate or install chromedriver binary")
328+
if browser_channel in ("dev", "canary"):
329+
logger.info("Automatically turning on experimental features for Chrome Dev/Canary")
330+
kwargs["binary_args"].append("--enable-experimental-web-platform-features")
331+
# HACK(Hexcles): work around https://github.com/web-platform-tests/wpt/issues/16448
332+
kwargs["webdriver_args"].append("--disable-build-check")
321333

322334

323335
class ChromeiOS(BrowserSetup):
@@ -626,8 +638,10 @@ def setup_wptrunner(venv, prompt=True, install_browser=False, **kwargs):
626638
# Only update browser_version if it was not given as a command line
627639
# argument, so that it can be overridden on the command line.
628640
if not kwargs["browser_version"]:
629-
kwargs["browser_version"] = setup_cls.browser.version(binary=kwargs.get("binary"),
630-
webdriver_binary=kwargs.get("webdriver_binary"))
641+
kwargs["browser_version"] = setup_cls.browser.version(
642+
binary=kwargs.get("binary") or kwargs.get("package_name"),
643+
webdriver_binary=kwargs.get("webdriver_binary"),
644+
)
631645

632646
return kwargs
633647

tools/wptrunner/wptrunner/browsers/chrome_android.py

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,12 @@
2525

2626

2727
def check_args(**kwargs):
28+
require_arg(kwargs, "package_name")
2829
require_arg(kwargs, "webdriver_binary")
2930

3031

3132
def browser_kwargs(test_type, run_info_data, config, **kwargs):
32-
return {"binary": kwargs["binary"],
33+
return {"package_name": kwargs["package_name"],
3334
"webdriver_binary": kwargs["webdriver_binary"],
3435
"webdriver_args": kwargs.get("webdriver_args")}
3536

@@ -45,15 +46,13 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
4546
executor_kwargs = chrome_executor_kwargs(test_type, server_config,
4647
cache_manager, run_info_data,
4748
**kwargs)
49+
# Remove unsupported options on mobile.
4850
del executor_kwargs["capabilities"]["goog:chromeOptions"]["prefs"]
4951
del executor_kwargs["capabilities"]["goog:chromeOptions"]["useAutomationExtension"]
5052

51-
# TODO(Hexcles): browser_channel should be properly supported.
52-
package_name = "com.android.chrome" # stable channel
53-
# Required to start on mobile
53+
assert kwargs["package_name"], "missing --package-name"
5454
executor_kwargs["capabilities"]["goog:chromeOptions"]["androidPackage"] = \
55-
package_name
56-
# Map wptrunner args to chromeOptions.
55+
kwargs["package_name"]
5756

5857
return executor_kwargs
5958

@@ -71,12 +70,10 @@ class ChromeAndroidBrowser(Browser):
7170
``wptrunner.webdriver.ChromeDriverServer``.
7271
"""
7372

74-
def __init__(self, logger, binary, webdriver_binary="chromedriver",
73+
def __init__(self, logger, package_name, webdriver_binary="chromedriver",
7574
webdriver_args=None):
76-
"""Creates a new representation of Chrome. The `binary` argument gives
77-
the browser binary to use for testing."""
7875
Browser.__init__(self, logger)
79-
self.binary = binary
76+
self.package_name = package_name
8077
self.server = ChromeDriverServer(self.logger,
8178
binary=webdriver_binary,
8279
args=webdriver_args)

0 commit comments

Comments
 (0)