Index: tools/telemetry/telemetry/internal/backends/chrome/android_browser_backend.py |
diff --git a/tools/telemetry/telemetry/internal/backends/chrome/android_browser_backend.py b/tools/telemetry/telemetry/internal/backends/chrome/android_browser_backend.py |
deleted file mode 100644 |
index 6c857b75ec48a8190a9055093da169966e61c3ef..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/internal/backends/chrome/android_browser_backend.py |
+++ /dev/null |
@@ -1,231 +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. |
- |
-import logging |
-import subprocess |
- |
-from telemetry.core import exceptions |
-from telemetry.internal.platform import android_platform_backend as \ |
- android_platform_backend_module |
-from telemetry.core import util |
-from telemetry.internal.backends import android_command_line_backend |
-from telemetry.internal.backends import browser_backend |
-from telemetry.internal.backends.chrome import chrome_browser_backend |
-from telemetry.internal.browser import user_agent |
-from telemetry.internal import forwarders |
- |
-from devil.android.sdk import intent |
- |
- |
-class AndroidBrowserBackend(chrome_browser_backend.ChromeBrowserBackend): |
- """The backend for controlling a browser instance running on Android.""" |
- def __init__(self, android_platform_backend, browser_options, |
- backend_settings, output_profile_path, extensions_to_load, |
- target_arch): |
- assert isinstance(android_platform_backend, |
- android_platform_backend_module.AndroidPlatformBackend) |
- super(AndroidBrowserBackend, self).__init__( |
- android_platform_backend, |
- supports_tab_control=backend_settings.supports_tab_control, |
- supports_extensions=False, browser_options=browser_options, |
- output_profile_path=output_profile_path, |
- extensions_to_load=extensions_to_load) |
- |
- self._port_keeper = util.PortKeeper() |
- # Use the port hold by _port_keeper by default. |
- self._port = self._port_keeper.port |
- |
- |
- if len(extensions_to_load) > 0: |
- raise browser_backend.ExtensionsNotSupportedException( |
- 'Android browser does not support extensions.') |
- |
- # Initialize fields so that an explosion during init doesn't break in Close. |
- self._backend_settings = backend_settings |
- self._target_arch = target_arch |
- self._saved_sslflag = '' |
- |
- # TODO(wuhu): Move to network controller backend. |
- self.platform_backend.InstallTestCa() |
- |
- # Kill old browser. |
- self._KillBrowser() |
- |
- if self.device.HasRoot() or self.device.NeedsSU(): |
- if self.browser_options.profile_dir: |
- self.platform_backend.PushProfile( |
- self._backend_settings.package, |
- self.browser_options.profile_dir) |
- elif not self.browser_options.dont_override_profile: |
- self.platform_backend.RemoveProfile( |
- self._backend_settings.package, |
- self._backend_settings.profile_ignore_list) |
- |
- if self.browser_options.netsim: |
- assert self.platform_backend.use_rndis_forwarder, ( |
- 'Netsim requires RNDIS forwarding.') |
- self.wpr_port_pairs = forwarders.PortPairs( |
- http=forwarders.PortPair(0, 80), |
- https=forwarders.PortPair(0, 443), |
- dns=forwarders.PortPair(0, 53)) |
- |
- # Set the debug app if needed. |
- self.platform_backend.SetDebugApp(self._backend_settings.package) |
- |
- @property |
- def log_file_path(self): |
- return None |
- |
- @property |
- def device(self): |
- return self.platform_backend.device |
- |
- def _KillBrowser(self): |
- if self.device.IsUserBuild(): |
- self.platform_backend.StopApplication(self._backend_settings.package) |
- else: |
- self.platform_backend.KillApplication(self._backend_settings.package) |
- |
- def Start(self): |
- self.device.RunShellCommand('logcat -c') |
- if self.browser_options.startup_url: |
- url = self.browser_options.startup_url |
- elif self.browser_options.profile_dir: |
- url = None |
- else: |
- # If we have no existing tabs start with a blank page since default |
- # startup with the NTP can lead to race conditions with Telemetry |
- url = 'about:blank' |
- |
- self.platform_backend.DismissCrashDialogIfNeeded() |
- |
- user_agent_dict = user_agent.GetChromeUserAgentDictFromType( |
- self.browser_options.browser_user_agent_type) |
- |
- browser_startup_args = self.GetBrowserStartupArgs() |
- with android_command_line_backend.SetUpCommandLineFlags( |
- self.device, self._backend_settings, browser_startup_args): |
- self.device.StartActivity( |
- intent.Intent(package=self._backend_settings.package, |
- activity=self._backend_settings.activity, |
- action=None, data=url, category=None, |
- extras=user_agent_dict), |
- blocking=True) |
- |
- remote_devtools_port = self._backend_settings.GetDevtoolsRemotePort( |
- self.device) |
- try: |
- # Release reserved port right before forwarding host to device. |
- self._port_keeper.Release() |
- assert self._port == self._port_keeper.port, ( |
- 'Android browser backend must use reserved port by _port_keeper') |
- self.platform_backend.ForwardHostToDevice( |
- self._port, remote_devtools_port) |
- except Exception: |
- logging.exception('Failed to forward %s to %s.', |
- str(self._port), str(remote_devtools_port)) |
- logging.warning('Currently forwarding:') |
- try: |
- for line in self.device.adb.ForwardList().splitlines(): |
- logging.warning(' %s', line) |
- except Exception: |
- logging.warning('Exception raised while listing forwarded ' |
- 'connections.') |
- |
- logging.warning('Host tcp ports in use:') |
- try: |
- for line in subprocess.check_output(['netstat', '-t']).splitlines(): |
- logging.warning(' %s', line) |
- except Exception: |
- logging.warning('Exception raised while listing tcp ports.') |
- |
- logging.warning('Device unix domain sockets in use:') |
- try: |
- for line in self.device.ReadFile('/proc/net/unix', as_root=True, |
- force_pull=True).splitlines(): |
- logging.warning(' %s', line) |
- except Exception: |
- logging.warning('Exception raised while listing unix domain sockets.') |
- |
- raise |
- |
- try: |
- self._WaitForBrowserToComeUp() |
- self._InitDevtoolsClientBackend(remote_devtools_port) |
- except exceptions.BrowserGoneException: |
- logging.critical('Failed to connect to browser.') |
- if not (self.device.HasRoot() or self.device.NeedsSU()): |
- logging.critical( |
- 'Resolve this by either: ' |
- '(1) Flashing to a userdebug build OR ' |
- '(2) Manually enabling web debugging in Chrome at ' |
- 'Settings > Developer tools > Enable USB Web debugging.') |
- self.Close() |
- raise |
- except: |
- self.Close() |
- raise |
- |
- def GetBrowserStartupArgs(self): |
- args = super(AndroidBrowserBackend, self).GetBrowserStartupArgs() |
- args.append('--enable-remote-debugging') |
- args.append('--disable-fre') |
- args.append('--disable-external-intent-requests') |
- return args |
- |
- @property |
- def pid(self): |
- pids = self.device.GetPids(self._backend_settings.package) |
- if not pids or self._backend_settings.package not in pids: |
- raise exceptions.BrowserGoneException(self.browser) |
- if len(pids[self._backend_settings.package]) > 1: |
- raise Exception( |
- 'At most one instance of process %s expected but found pids: ' |
- '%s' % (self._backend_settings.package, pids)) |
- return int(pids[self._backend_settings.package][0]) |
- |
- @property |
- def browser_directory(self): |
- return None |
- |
- @property |
- def profile_directory(self): |
- return self._backend_settings.profile_dir |
- |
- @property |
- def package(self): |
- return self._backend_settings.package |
- |
- @property |
- def activity(self): |
- return self._backend_settings.activity |
- |
- def __del__(self): |
- self.Close() |
- |
- def Close(self): |
- super(AndroidBrowserBackend, self).Close() |
- |
- self.platform_backend.RemoveTestCa() |
- |
- self._KillBrowser() |
- |
- self.platform_backend.StopForwardingHost(self._port) |
- |
- if self._output_profile_path: |
- self.platform_backend.PullProfile( |
- self._backend_settings.package, self._output_profile_path) |
- |
- def IsBrowserRunning(self): |
- return self.platform_backend.IsAppRunning(self._backend_settings.package) |
- |
- def GetStandardOutput(self): |
- return self.platform_backend.GetStandardOutput() |
- |
- def GetStackTrace(self): |
- return self.platform_backend.GetStackTrace(self._target_arch) |
- |
- @property |
- def should_ignore_certificate_errors(self): |
- return not self.platform_backend.is_test_ca_installed |