| OLD | NEW |
| (Empty) |
| 1 # Copyright 2013 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import logging | |
| 6 import time | |
| 7 | |
| 8 from telemetry.core import exceptions | |
| 9 | |
| 10 | |
| 11 class AndroidBrowserBackendSettings(object): | |
| 12 | |
| 13 def __init__(self, activity, cmdline_file, package, pseudo_exec_name, | |
| 14 supports_tab_control): | |
| 15 self._activity = activity | |
| 16 self._cmdline_file = cmdline_file | |
| 17 self._package = package | |
| 18 self._pseudo_exec_name = pseudo_exec_name | |
| 19 self._supports_tab_control = supports_tab_control | |
| 20 | |
| 21 @property | |
| 22 def activity(self): | |
| 23 return self._activity | |
| 24 | |
| 25 @property | |
| 26 def package(self): | |
| 27 return self._package | |
| 28 | |
| 29 @property | |
| 30 def pseudo_exec_name(self): | |
| 31 return self._pseudo_exec_name | |
| 32 | |
| 33 @property | |
| 34 def supports_tab_control(self): | |
| 35 return self._supports_tab_control | |
| 36 | |
| 37 def GetCommandLineFile(self, is_user_debug_build): | |
| 38 del is_user_debug_build # unused | |
| 39 return self._cmdline_file | |
| 40 | |
| 41 def GetDevtoolsRemotePort(self, device): | |
| 42 raise NotImplementedError() | |
| 43 | |
| 44 @property | |
| 45 def profile_ignore_list(self): | |
| 46 # Don't delete lib, since it is created by the installer. | |
| 47 return ['lib'] | |
| 48 | |
| 49 | |
| 50 class ChromeBackendSettings(AndroidBrowserBackendSettings): | |
| 51 # Stores a default Preferences file, re-used to speed up "--page-repeat". | |
| 52 _default_preferences_file = None | |
| 53 | |
| 54 def GetCommandLineFile(self, is_user_debug_build): | |
| 55 if is_user_debug_build: | |
| 56 return '/data/local/tmp/chrome-command-line' | |
| 57 else: | |
| 58 return '/data/local/chrome-command-line' | |
| 59 | |
| 60 def __init__(self, package): | |
| 61 super(ChromeBackendSettings, self).__init__( | |
| 62 activity='com.google.android.apps.chrome.Main', | |
| 63 cmdline_file=None, | |
| 64 package=package, | |
| 65 pseudo_exec_name='chrome', | |
| 66 supports_tab_control=True) | |
| 67 | |
| 68 def GetDevtoolsRemotePort(self, device): | |
| 69 return 'localabstract:chrome_devtools_remote' | |
| 70 | |
| 71 | |
| 72 class ContentShellBackendSettings(AndroidBrowserBackendSettings): | |
| 73 def __init__(self, package): | |
| 74 super(ContentShellBackendSettings, self).__init__( | |
| 75 activity='org.chromium.content_shell_apk.ContentShellActivity', | |
| 76 cmdline_file='/data/local/tmp/content-shell-command-line', | |
| 77 package=package, | |
| 78 pseudo_exec_name='content_shell', | |
| 79 supports_tab_control=False) | |
| 80 | |
| 81 def GetDevtoolsRemotePort(self, device): | |
| 82 return 'localabstract:content_shell_devtools_remote' | |
| 83 | |
| 84 | |
| 85 class WebviewBackendSettings(AndroidBrowserBackendSettings): | |
| 86 def __init__(self, | |
| 87 package, | |
| 88 activity='org.chromium.webview_shell.TelemetryActivity', | |
| 89 cmdline_file='/data/local/tmp/webview-command-line'): | |
| 90 super(WebviewBackendSettings, self).__init__( | |
| 91 activity=activity, | |
| 92 cmdline_file=cmdline_file, | |
| 93 package=package, | |
| 94 pseudo_exec_name='webview', | |
| 95 supports_tab_control=False) | |
| 96 | |
| 97 def GetDevtoolsRemotePort(self, device): | |
| 98 # The DevTools socket name for WebView depends on the activity PID's. | |
| 99 retries = 0 | |
| 100 timeout = 1 | |
| 101 pid = None | |
| 102 while True: | |
| 103 pids = device.GetPids(self.package) | |
| 104 if not pids or self.package not in pids: | |
| 105 time.sleep(timeout) | |
| 106 retries += 1 | |
| 107 timeout *= 2 | |
| 108 if retries == 4: | |
| 109 logging.critical('android_browser_backend: Timeout while waiting for ' | |
| 110 'activity %s:%s to come up', | |
| 111 self.package, | |
| 112 self.activity) | |
| 113 raise exceptions.BrowserGoneException(self.browser, | |
| 114 'Timeout waiting for PID.') | |
| 115 if len(pids[self.package]) > 1: | |
| 116 raise Exception( | |
| 117 'At most one instance of process %s expected but found pids: ' | |
| 118 '%s' % (self.package, pids)) | |
| 119 pid = pids[self.package][0] | |
| 120 break | |
| 121 return 'localabstract:webview_devtools_remote_%s' % str(pid) | |
| 122 | |
| 123 | |
| 124 class WebviewShellBackendSettings(WebviewBackendSettings): | |
| 125 def __init__(self, package): | |
| 126 super(WebviewShellBackendSettings, self).__init__( | |
| 127 activity='org.chromium.android_webview.shell.AwShellActivity', | |
| 128 cmdline_file='/data/local/tmp/android-webview-command-line', | |
| 129 package=package) | |
| OLD | NEW |