Index: tools/telemetry/telemetry/android_browser_backend.py |
diff --git a/tools/telemetry/telemetry/android_browser_backend.py b/tools/telemetry/telemetry/android_browser_backend.py |
deleted file mode 100644 |
index 290e71dd13c97a989a60efa727fd921df9688a25..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/telemetry/android_browser_backend.py |
+++ /dev/null |
@@ -1,190 +0,0 @@ |
-# Copyright (c) 2012 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 json |
-import logging |
-import os |
-import subprocess |
-import sys |
-import tempfile |
-import time |
- |
-from telemetry import adb_commands |
-from telemetry import browser_backend |
-from telemetry import browser_gone_exception |
- |
-class AndroidBrowserBackend(browser_backend.BrowserBackend): |
- """The backend for controlling a browser instance running on Android. |
- """ |
- def __init__(self, options, adb, package, is_content_shell, |
- cmdline_file, activity, devtools_remote_port): |
- super(AndroidBrowserBackend, self).__init__( |
- is_content_shell=is_content_shell, |
- supports_extensions=False, options=options) |
- if len(options.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._options = options |
- self._adb = adb |
- self._package = package |
- self._cmdline_file = cmdline_file |
- self._activity = activity |
- if not options.keep_test_server_ports: |
- adb_commands.ResetTestServerPortAllocation() |
- self._port = adb_commands.AllocateTestServerPort() |
- self._devtools_remote_port = devtools_remote_port |
- |
- # Kill old browser. |
- self._adb.CloseApplication(self._package) |
- self._adb.KillAll('device_forwarder') |
- self._adb.Forward('tcp:%d' % self._port, self._devtools_remote_port) |
- |
- # Chrome Android doesn't listen to --user-data-dir. |
- # TODO: symlink the app's Default, files and cache dir |
- # to somewhere safe. |
- if not is_content_shell and not options.dont_override_profile: |
- # Set up the temp dir |
- # self._tmpdir = '/sdcard/telemetry_data' |
- # self._adb.RunShellCommand('rm -r %s' % self._tmpdir) |
- # args.append('--user-data-dir=%s' % self._tmpdir) |
- pass |
- |
- # Set up the command line. |
- if is_content_shell: |
- pseudo_exec_name = 'content_shell' |
- else: |
- pseudo_exec_name = 'chrome' |
- |
- args = [pseudo_exec_name] |
- args.extend(self.GetBrowserStartupArgs()) |
- |
- with tempfile.NamedTemporaryFile() as f: |
- def EscapeIfNeeded(arg): |
- params = arg.split('=') |
- if (len(params) == 2 and |
- params[1] and params[1][0] == '"' and params[1][-1] == '"'): |
- # CommandLine.java requires this extra escaping. |
- return '%s="\\%s\\"' % (params[0], params[1]) |
- return arg.replace(' ', '" "') |
- f.write(' '.join([EscapeIfNeeded(arg) for arg in args])) |
- f.flush() |
- self._adb.Push(f.name, cmdline_file) |
- |
- # Force devtools protocol on, if not already done and we can access |
- # protected files. |
- if (not is_content_shell and |
- self._adb.Adb().CanAccessProtectedFileContents()): |
- # Make sure we can find the apps' prefs file |
- app_data_dir = '/data/data/%s' % self._package |
- prefs_file = (app_data_dir + |
- '/app_chrome/Default/Preferences') |
- if not self._adb.FileExistsOnDevice(prefs_file): |
- # Start it up the first time so we can tweak the prefs. |
- self._adb.StartActivity(self._package, |
- self._activity, |
- True, |
- None, |
- None) |
- retries = 0 |
- timeout = 3 |
- time.sleep(timeout) |
- while not self._adb.Adb().GetProtectedFileContents(prefs_file): |
- time.sleep(timeout) |
- retries += 1 |
- timeout *= 2 |
- if retries == 3: |
- logging.critical('android_browser_backend: Could not find ' |
- 'preferences file %s for %s', |
- prefs_file, self._package) |
- raise browser_gone_exception.BrowserGoneException( |
- 'Missing preferences file.') |
- self._adb.CloseApplication(self._package) |
- |
- preferences = json.loads(''.join( |
- self._adb.Adb().GetProtectedFileContents(prefs_file))) |
- changed = False |
- if 'devtools' not in preferences: |
- preferences['devtools'] = {} |
- changed = True |
- if not preferences['devtools'].get('remote_enabled'): |
- preferences['devtools']['remote_enabled'] = True |
- changed = True |
- if changed: |
- logging.warning('Manually enabled devtools protocol on %s' % |
- self._package) |
- txt = json.dumps(preferences, indent=2) |
- self._adb.Adb().SetProtectedFileContents(prefs_file, txt) |
- |
- # Start it up with a fresh log. |
- self._adb.RunShellCommand('logcat -c') |
- self._adb.StartActivity(self._package, |
- self._activity, |
- True, |
- None, |
- 'chrome://newtab/') |
- try: |
- self._WaitForBrowserToComeUp() |
- self._PostBrowserStartupInitialization() |
- except browser_gone_exception.BrowserGoneException: |
- logging.critical('Failed to connect to browser.') |
- if not self._adb.IsRootEnabled(): |
- logging.critical( |
- 'Ensure web debugging is enabled in Chrome at ' |
- '"Settings > Developer tools > Enable USB Web debugging".') |
- sys.exit(1) |
- except: |
- import traceback |
- traceback.print_exc() |
- self.Close() |
- raise |
- |
- def GetBrowserStartupArgs(self): |
- args = super(AndroidBrowserBackend, self).GetBrowserStartupArgs() |
- args.append('--disable-fre') |
- return args |
- |
- def __del__(self): |
- self.Close() |
- |
- def Close(self): |
- super(AndroidBrowserBackend, self).Close() |
- |
- self._adb.RunShellCommand('rm %s' % self._cmdline_file) |
- self._adb.CloseApplication(self._package) |
- |
- def IsBrowserRunning(self): |
- pids = self._adb.ExtractPid(self._package) |
- return len(pids) != 0 |
- |
- def GetRemotePort(self, local_port): |
- return local_port |
- |
- def GetStandardOutput(self): |
- # If we can find symbols and there is a stack, output the symbolized stack. |
- symbol_paths = [ |
- os.path.join(adb_commands.GetOutDirectory(), 'Release', 'lib.target'), |
- os.path.join(adb_commands.GetOutDirectory(), 'Debug', 'lib.target')] |
- for symbol_path in symbol_paths: |
- if not os.path.isdir(symbol_path): |
- continue |
- with tempfile.NamedTemporaryFile() as f: |
- lines = self._adb.RunShellCommand('logcat -d') |
- for line in lines: |
- f.write(line + '\n') |
- symbolized_stack = None |
- try: |
- logging.info('Symbolizing stack...') |
- symbolized_stack = subprocess.Popen([ |
- 'ndk-stack', '-sym', symbol_path, |
- '-dump', f.name], stdout=subprocess.PIPE).communicate()[0] |
- except Exception: |
- pass |
- if symbolized_stack: |
- return symbolized_stack |
- # Otherwise, just return the last 100 lines of logcat. |
- return '\n'.join(self._adb.RunShellCommand('logcat -d -t 100')) |
- |
- def CreateForwarder(self, *port_pairs): |
- return adb_commands.Forwarder(self._adb, *port_pairs) |