| Index: tools/telemetry/telemetry/internal/backends/chrome/android_browser_finder.py
|
| diff --git a/tools/telemetry/telemetry/internal/backends/chrome/android_browser_finder.py b/tools/telemetry/telemetry/internal/backends/chrome/android_browser_finder.py
|
| deleted file mode 100644
|
| index f83814e47a7695c020871e8c8b412f081fbffac0..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/backends/chrome/android_browser_finder.py
|
| +++ /dev/null
|
| @@ -1,230 +0,0 @@
|
| -# Copyright 2013 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""Finds android browsers that can be controlled by telemetry."""
|
| -
|
| -import logging
|
| -import os
|
| -import sys
|
| -
|
| -from telemetry.core import exceptions
|
| -from telemetry.core import platform
|
| -from telemetry.core import util
|
| -from telemetry import decorators
|
| -from telemetry.internal.backends import android_browser_backend_settings
|
| -from telemetry.internal.backends.chrome import android_browser_backend
|
| -from telemetry.internal.browser import browser
|
| -from telemetry.internal.browser import possible_browser
|
| -from telemetry.internal.platform import android_device
|
| -
|
| -from devil.android import apk_helper
|
| -
|
| -
|
| -CHROME_PACKAGE_NAMES = {
|
| - 'android-content-shell':
|
| - ['org.chromium.content_shell_apk',
|
| - android_browser_backend_settings.ContentShellBackendSettings,
|
| - 'ContentShell.apk'],
|
| - 'android-webview':
|
| - ['org.chromium.webview_shell',
|
| - android_browser_backend_settings.WebviewBackendSettings,
|
| - None],
|
| - 'android-webview-shell':
|
| - ['org.chromium.android_webview.shell',
|
| - android_browser_backend_settings.WebviewShellBackendSettings,
|
| - 'AndroidWebView.apk'],
|
| - 'android-chromium':
|
| - ['org.chromium.chrome',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - 'ChromePublic.apk'],
|
| - 'android-chrome':
|
| - ['com.google.android.apps.chrome',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - 'Chrome.apk'],
|
| - 'android-chrome-work':
|
| - ['com.chrome.work',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - None],
|
| - 'android-chrome-beta':
|
| - ['com.chrome.beta',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - None],
|
| - 'android-chrome-dev':
|
| - ['com.chrome.dev',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - None],
|
| - 'android-chrome-canary':
|
| - ['com.chrome.canary',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - None],
|
| - 'android-jb-system-chrome':
|
| - ['com.android.chrome',
|
| - android_browser_backend_settings.ChromeBackendSettings,
|
| - None]
|
| -}
|
| -
|
| -
|
| -class PossibleAndroidBrowser(possible_browser.PossibleBrowser):
|
| - """A launchable android browser instance."""
|
| - def __init__(self, browser_type, finder_options, android_platform,
|
| - backend_settings, apk_name):
|
| - super(PossibleAndroidBrowser, self).__init__(
|
| - browser_type, 'android', backend_settings.supports_tab_control)
|
| - assert browser_type in FindAllBrowserTypes(finder_options), (
|
| - 'Please add %s to android_browser_finder.FindAllBrowserTypes' %
|
| - browser_type)
|
| - self._platform = android_platform
|
| - self._platform_backend = (
|
| - android_platform._platform_backend) # pylint: disable=protected-access
|
| - self._backend_settings = backend_settings
|
| - self._local_apk = None
|
| -
|
| - if browser_type == 'exact':
|
| - if not os.path.exists(apk_name):
|
| - raise exceptions.PathMissingError(
|
| - 'Unable to find exact apk %s specified by --browser-executable' %
|
| - apk_name)
|
| - self._local_apk = apk_name
|
| - elif apk_name:
|
| - assert finder_options.chrome_root, (
|
| - 'Must specify Chromium source to use apk_name')
|
| - chrome_root = finder_options.chrome_root
|
| - candidate_apks = []
|
| - for build_dir, build_type in util.GetBuildDirectories():
|
| - apk_full_name = os.path.join(chrome_root, build_dir, build_type, 'apks',
|
| - apk_name)
|
| - if os.path.exists(apk_full_name):
|
| - last_changed = os.path.getmtime(apk_full_name)
|
| - candidate_apks.append((last_changed, apk_full_name))
|
| -
|
| - if candidate_apks:
|
| - # Find the candidate .apk with the latest modification time.
|
| - newest_apk_path = sorted(candidate_apks)[-1][1]
|
| - self._local_apk = newest_apk_path
|
| -
|
| - def __repr__(self):
|
| - return 'PossibleAndroidBrowser(browser_type=%s)' % self.browser_type
|
| -
|
| - def _InitPlatformIfNeeded(self):
|
| - pass
|
| -
|
| - def Create(self, finder_options):
|
| - self._InitPlatformIfNeeded()
|
| - browser_backend = android_browser_backend.AndroidBrowserBackend(
|
| - self._platform_backend,
|
| - finder_options.browser_options, self._backend_settings,
|
| - output_profile_path=finder_options.output_profile_path,
|
| - extensions_to_load=finder_options.extensions_to_load,
|
| - target_arch=finder_options.target_arch)
|
| - try:
|
| - return browser.Browser(
|
| - browser_backend, self._platform_backend, self._credentials_path)
|
| - except Exception:
|
| - logging.exception('Failure while creating Android browser.')
|
| - original_exception = sys.exc_info()
|
| - try:
|
| - browser_backend.Close()
|
| - except Exception:
|
| - logging.exception('Secondary failure while closing browser backend.')
|
| -
|
| - raise original_exception[0], original_exception[1], original_exception[2]
|
| -
|
| - def SupportsOptions(self, finder_options):
|
| - if len(finder_options.extensions_to_load) != 0:
|
| - return False
|
| - return True
|
| -
|
| - def HaveLocalAPK(self):
|
| - return self._local_apk and os.path.exists(self._local_apk)
|
| -
|
| - @decorators.Cache
|
| - def UpdateExecutableIfNeeded(self):
|
| - if self.HaveLocalAPK():
|
| - logging.warn('Installing %s on device if needed.' % self._local_apk)
|
| - self.platform.InstallApplication(self._local_apk)
|
| -
|
| - def last_modification_time(self):
|
| - if self.HaveLocalAPK():
|
| - return os.path.getmtime(self._local_apk)
|
| - return -1
|
| -
|
| -
|
| -def SelectDefaultBrowser(possible_browsers):
|
| - """Return the newest possible browser."""
|
| - if not possible_browsers:
|
| - return None
|
| - return max(possible_browsers, key=lambda b: b.last_modification_time())
|
| -
|
| -
|
| -def CanFindAvailableBrowsers():
|
| - return android_device.CanDiscoverDevices()
|
| -
|
| -
|
| -def CanPossiblyHandlePath(target_path):
|
| - return os.path.splitext(target_path.lower())[1] == '.apk'
|
| -
|
| -
|
| -def FindAllBrowserTypes(options):
|
| - del options # unused
|
| - return CHROME_PACKAGE_NAMES.keys() + ['exact']
|
| -
|
| -
|
| -def _FindAllPossibleBrowsers(finder_options, android_platform):
|
| - """Testable version of FindAllAvailableBrowsers."""
|
| - if not android_platform:
|
| - return []
|
| - possible_browsers = []
|
| -
|
| - # Add the exact APK if given.
|
| - if (finder_options.browser_executable and
|
| - CanPossiblyHandlePath(finder_options.browser_executable)):
|
| - apk_name = os.path.basename(finder_options.browser_executable)
|
| - package_info = next((info for info in CHROME_PACKAGE_NAMES.itervalues()
|
| - if info[2] == apk_name), None)
|
| -
|
| - # It is okay if the APK name doesn't match any of known chrome browser APKs,
|
| - # since it may be of a different browser (say, mandoline).
|
| - if package_info:
|
| - normalized_path = os.path.expanduser(finder_options.browser_executable)
|
| - exact_package = apk_helper.GetPackageName(normalized_path)
|
| - if not exact_package:
|
| - raise exceptions.PackageDetectionError(
|
| - 'Unable to find package for %s specified by --browser-executable' %
|
| - normalized_path)
|
| -
|
| - [package, backend_settings, _] = package_info
|
| - if package == exact_package:
|
| - possible_browsers.append(PossibleAndroidBrowser(
|
| - 'exact',
|
| - finder_options,
|
| - android_platform,
|
| - backend_settings(package),
|
| - normalized_path))
|
| - else:
|
| - raise exceptions.UnknownPackageError(
|
| - '%s specified by --browser-executable has an unknown package: %s' %
|
| - (normalized_path, exact_package))
|
| -
|
| - for name, package_info in CHROME_PACKAGE_NAMES.iteritems():
|
| - package, backend_settings, local_apk = package_info
|
| - b = PossibleAndroidBrowser(name,
|
| - finder_options,
|
| - android_platform,
|
| - backend_settings(package),
|
| - local_apk)
|
| - if b.platform.CanLaunchApplication(package) or b.HaveLocalAPK():
|
| - possible_browsers.append(b)
|
| - return possible_browsers
|
| -
|
| -
|
| -def FindAllAvailableBrowsers(finder_options, device):
|
| - """Finds all the possible browsers on one device.
|
| -
|
| - The device is either the only device on the host platform,
|
| - or |finder_options| specifies a particular device.
|
| - """
|
| - if not isinstance(device, android_device.AndroidDevice):
|
| - return []
|
| - android_platform = platform.GetPlatformForDevice(device, finder_options)
|
| - return _FindAllPossibleBrowsers(finder_options, android_platform)
|
|
|