| Index: tools/telemetry/telemetry/internal/backends/chrome/desktop_browser_finder.py
|
| diff --git a/tools/telemetry/telemetry/internal/backends/chrome/desktop_browser_finder.py b/tools/telemetry/telemetry/internal/backends/chrome/desktop_browser_finder.py
|
| deleted file mode 100644
|
| index 7c266281ae6473851849b8453aa5e72f3b1caf68..0000000000000000000000000000000000000000
|
| --- a/tools/telemetry/telemetry/internal/backends/chrome/desktop_browser_finder.py
|
| +++ /dev/null
|
| @@ -1,293 +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 desktop browsers that can be controlled by telemetry."""
|
| -
|
| -import logging
|
| -import os
|
| -import sys
|
| -
|
| -import dependency_manager # pylint: disable=import-error
|
| -
|
| -from telemetry.core import exceptions
|
| -from telemetry.core import platform as platform_module
|
| -from telemetry.internal.backends.chrome import desktop_browser_backend
|
| -from telemetry.internal.browser import browser
|
| -from telemetry.internal.browser import possible_browser
|
| -from telemetry.internal.platform import desktop_device
|
| -from telemetry.internal.util import binary_manager
|
| -# This is a workaround for https://goo.gl/1tGNgd
|
| -from telemetry.internal.util import path as path_module
|
| -
|
| -
|
| -class PossibleDesktopBrowser(possible_browser.PossibleBrowser):
|
| - """A desktop browser that can be controlled."""
|
| -
|
| - def __init__(self, browser_type, finder_options, executable, flash_path,
|
| - is_content_shell, browser_directory, is_local_build=False):
|
| - target_os = sys.platform.lower()
|
| - super(PossibleDesktopBrowser, self).__init__(
|
| - browser_type, target_os, not is_content_shell)
|
| - assert browser_type in FindAllBrowserTypes(finder_options), (
|
| - 'Please add %s to desktop_browser_finder.FindAllBrowserTypes' %
|
| - browser_type)
|
| - self._local_executable = executable
|
| - self._flash_path = flash_path
|
| - self._is_content_shell = is_content_shell
|
| - self._browser_directory = browser_directory
|
| - self.is_local_build = is_local_build
|
| -
|
| - def __repr__(self):
|
| - return 'PossibleDesktopBrowser(type=%s, executable=%s, flash=%s)' % (
|
| - self.browser_type, self._local_executable, self._flash_path)
|
| -
|
| - def _InitPlatformIfNeeded(self):
|
| - if self._platform:
|
| - return
|
| -
|
| - self._platform = platform_module.GetHostPlatform()
|
| -
|
| - # pylint: disable=protected-access
|
| - self._platform_backend = self._platform._platform_backend
|
| -
|
| - def Create(self, finder_options):
|
| - if self._flash_path and not os.path.exists(self._flash_path):
|
| - logging.warning(
|
| - 'Could not find Flash at %s. Continuing without Flash.\n'
|
| - 'To run with Flash, check it out via http://go/read-src-internal',
|
| - self._flash_path)
|
| - self._flash_path = None
|
| -
|
| - self._InitPlatformIfNeeded()
|
| -
|
| - browser_backend = desktop_browser_backend.DesktopBrowserBackend(
|
| - self._platform_backend,
|
| - finder_options.browser_options, self._local_executable,
|
| - self._flash_path, self._is_content_shell, self._browser_directory,
|
| - output_profile_path=finder_options.output_profile_path,
|
| - extensions_to_load=finder_options.extensions_to_load)
|
| - return browser.Browser(
|
| - browser_backend, self._platform_backend, self._credentials_path)
|
| -
|
| - def SupportsOptions(self, finder_options):
|
| - if (len(finder_options.extensions_to_load) != 0) and self._is_content_shell:
|
| - return False
|
| - return True
|
| -
|
| - def UpdateExecutableIfNeeded(self):
|
| - pass
|
| -
|
| - def last_modification_time(self):
|
| - if os.path.exists(self._local_executable):
|
| - return os.path.getmtime(self._local_executable)
|
| - return -1
|
| -
|
| -def SelectDefaultBrowser(possible_browsers):
|
| - local_builds_by_date = [
|
| - b for b in sorted(possible_browsers,
|
| - key=lambda b: b.last_modification_time())
|
| - if b.is_local_build]
|
| - if local_builds_by_date:
|
| - return local_builds_by_date[-1]
|
| - return None
|
| -
|
| -def CanFindAvailableBrowsers():
|
| - return not platform_module.GetHostPlatform().GetOSName() == 'chromeos'
|
| -
|
| -def CanPossiblyHandlePath(target_path):
|
| - _, extension = os.path.splitext(target_path.lower())
|
| - if sys.platform == 'darwin' or sys.platform.startswith('linux'):
|
| - return not extension
|
| - elif sys.platform.startswith('win'):
|
| - return extension == '.exe'
|
| - return False
|
| -
|
| -def FindAllBrowserTypes(_):
|
| - return [
|
| - 'exact',
|
| - 'reference',
|
| - 'release',
|
| - 'release_x64',
|
| - 'debug',
|
| - 'debug_x64',
|
| - 'default',
|
| - 'stable',
|
| - 'beta',
|
| - 'dev',
|
| - 'canary',
|
| - 'content-shell-debug',
|
| - 'content-shell-debug_x64',
|
| - 'content-shell-release',
|
| - 'content-shell-release_x64',
|
| - 'content-shell-default',
|
| - 'system']
|
| -
|
| -def FindAllAvailableBrowsers(finder_options, device):
|
| - """Finds all the desktop browsers available on this machine."""
|
| - if not isinstance(device, desktop_device.DesktopDevice):
|
| - return []
|
| -
|
| - browsers = []
|
| -
|
| - if not CanFindAvailableBrowsers():
|
| - return []
|
| -
|
| - has_x11_display = True
|
| - if (sys.platform.startswith('linux') and
|
| - os.getenv('DISPLAY') == None):
|
| - has_x11_display = False
|
| -
|
| - os_name = platform_module.GetHostPlatform().GetOSName()
|
| - arch_name = platform_module.GetHostPlatform().GetArchName()
|
| - try:
|
| - flash_path = binary_manager.LocalPath('flash', arch_name, os_name)
|
| - except dependency_manager.NoPathFoundError:
|
| - flash_path = None
|
| - logging.warning(
|
| - 'Chrome build location is not specified. Browser will be run without '
|
| - 'Flash.')
|
| -
|
| - chromium_app_names = []
|
| - if sys.platform == 'darwin':
|
| - chromium_app_names.append('Chromium.app/Contents/MacOS/Chromium')
|
| - chromium_app_names.append('Google Chrome.app/Contents/MacOS/Google Chrome')
|
| - content_shell_app_name = 'Content Shell.app/Contents/MacOS/Content Shell'
|
| - elif sys.platform.startswith('linux'):
|
| - chromium_app_names.append('chrome')
|
| - content_shell_app_name = 'content_shell'
|
| - elif sys.platform.startswith('win'):
|
| - chromium_app_names.append('chrome.exe')
|
| - content_shell_app_name = 'content_shell.exe'
|
| - else:
|
| - raise Exception('Platform not recognized')
|
| -
|
| - # Add the explicit browser executable if given and we can handle it.
|
| - if (finder_options.browser_executable and
|
| - CanPossiblyHandlePath(finder_options.browser_executable)):
|
| - is_content_shell = finder_options.browser_executable.endswith(
|
| - content_shell_app_name)
|
| - is_chrome_or_chromium = len([x for x in chromium_app_names if
|
| - finder_options.browser_executable.endswith(x)]) != 0
|
| -
|
| - # It is okay if the executable name doesn't match any of known chrome
|
| - # browser executables, since it may be of a different browser (say,
|
| - # mandoline).
|
| - if is_chrome_or_chromium or is_content_shell:
|
| - normalized_executable = os.path.expanduser(
|
| - finder_options.browser_executable)
|
| - if path_module.IsExecutable(normalized_executable):
|
| - browser_directory = os.path.dirname(finder_options.browser_executable)
|
| - browsers.append(PossibleDesktopBrowser(
|
| - 'exact', finder_options, normalized_executable, flash_path,
|
| - is_content_shell,
|
| - browser_directory))
|
| - else:
|
| - raise exceptions.PathMissingError(
|
| - '%s specified by --browser-executable does not exist or is not '
|
| - 'executable' %
|
| - normalized_executable)
|
| -
|
| - def AddIfFound(browser_type, build_dir, type_dir, app_name, content_shell):
|
| - if not finder_options.chrome_root:
|
| - return False
|
| - browser_directory = os.path.join(finder_options.chrome_root,
|
| - build_dir, type_dir)
|
| - app = os.path.join(browser_directory, app_name)
|
| - if path_module.IsExecutable(app):
|
| - browsers.append(PossibleDesktopBrowser(
|
| - browser_type, finder_options, app, flash_path,
|
| - content_shell, browser_directory, is_local_build=True))
|
| - return True
|
| - return False
|
| -
|
| - # Add local builds
|
| - for build_dir, build_type in path_module.GetBuildDirectories():
|
| - for chromium_app_name in chromium_app_names:
|
| - AddIfFound(build_type.lower(), build_dir, build_type, chromium_app_name,
|
| - False)
|
| - AddIfFound('content-shell-' + build_type.lower(), build_dir, build_type,
|
| - content_shell_app_name, True)
|
| -
|
| - reference_build = None
|
| - if finder_options.browser_type == 'reference':
|
| - # Reference builds are only available in a Chromium checkout. We should not
|
| - # raise an error just because they don't exist.
|
| - os_name = platform_module.GetHostPlatform().GetOSName()
|
| - arch_name = platform_module.GetHostPlatform().GetArchName()
|
| - reference_build = binary_manager.FetchPath(
|
| - 'reference_build', arch_name, os_name)
|
| -
|
| - # Mac-specific options.
|
| - if sys.platform == 'darwin':
|
| - mac_canary_root = '/Applications/Google Chrome Canary.app/'
|
| - mac_canary = mac_canary_root + 'Contents/MacOS/Google Chrome Canary'
|
| - mac_system_root = '/Applications/Google Chrome.app'
|
| - mac_system = mac_system_root + '/Contents/MacOS/Google Chrome'
|
| - if path_module.IsExecutable(mac_canary):
|
| - browsers.append(PossibleDesktopBrowser('canary', finder_options,
|
| - mac_canary, None, False,
|
| - mac_canary_root))
|
| -
|
| - if path_module.IsExecutable(mac_system):
|
| - browsers.append(PossibleDesktopBrowser('system', finder_options,
|
| - mac_system, None, False,
|
| - mac_system_root))
|
| -
|
| - if reference_build and path_module.IsExecutable(reference_build):
|
| - reference_root = os.path.dirname(os.path.dirname(os.path.dirname(
|
| - reference_build)))
|
| - browsers.append(PossibleDesktopBrowser('reference', finder_options,
|
| - reference_build, None, False,
|
| - reference_root))
|
| -
|
| - # Linux specific options.
|
| - if sys.platform.startswith('linux'):
|
| - versions = {
|
| - 'system': os.path.split(os.path.realpath('/usr/bin/google-chrome'))[0],
|
| - 'stable': '/opt/google/chrome',
|
| - 'beta': '/opt/google/chrome-beta',
|
| - 'dev': '/opt/google/chrome-unstable'
|
| - }
|
| -
|
| - for version, root in versions.iteritems():
|
| - browser_path = os.path.join(root, 'chrome')
|
| - if path_module.IsExecutable(browser_path):
|
| - browsers.append(PossibleDesktopBrowser(version, finder_options,
|
| - browser_path, None, False, root))
|
| - if reference_build and path_module.IsExecutable(reference_build):
|
| - reference_root = os.path.dirname(reference_build)
|
| - browsers.append(PossibleDesktopBrowser('reference', finder_options,
|
| - reference_build, None, False,
|
| - reference_root))
|
| -
|
| - # Win32-specific options.
|
| - if sys.platform.startswith('win'):
|
| - app_paths = [
|
| - ('system', os.path.join('Google', 'Chrome', 'Application')),
|
| - ('canary', os.path.join('Google', 'Chrome SxS', 'Application')),
|
| - ]
|
| - if reference_build:
|
| - app_paths.append(
|
| - ('reference', os.path.dirname(reference_build)))
|
| -
|
| - for browser_name, app_path in app_paths:
|
| - for chromium_app_name in chromium_app_names:
|
| - app_path = os.path.join(app_path, chromium_app_name)
|
| - app_path = path_module.FindInstalledWindowsApplication(app_path)
|
| - if app_path:
|
| - browsers.append(PossibleDesktopBrowser(
|
| - browser_name, finder_options, app_path,
|
| - None, False, os.path.dirname(app_path)))
|
| -
|
| - has_ozone_platform = False
|
| - for arg in finder_options.browser_options.extra_browser_args:
|
| - if "--ozone-platform" in arg:
|
| - has_ozone_platform = True
|
| -
|
| - if len(browsers) and not has_x11_display and not has_ozone_platform:
|
| - logging.warning(
|
| - 'Found (%s), but you do not have a DISPLAY environment set.' %
|
| - ','.join([b.browser_type for b in browsers]))
|
| - return []
|
| -
|
| - return browsers
|
|
|