| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | |
| 6 import os | 5 import os |
| 7 | 6 |
| 8 from telemetry.internal.util import wpr_server | 7 from telemetry.internal.util import wpr_server |
| 9 from telemetry.internal.util import webpagereplay_go_server | 8 from telemetry.internal.util import webpagereplay_go_server |
| 10 from telemetry.internal.util import ts_proxy_server | 9 from telemetry.internal.util import ts_proxy_server |
| 11 from telemetry.util import wpr_modes | 10 from telemetry.util import wpr_modes |
| 12 | 11 |
| 13 | 12 |
| 14 class ArchiveDoesNotExistError(Exception): | 13 class ArchiveDoesNotExistError(Exception): |
| 15 """Raised when the archive path does not exist for replay mode.""" | 14 """Raised when the archive path does not exist for replay mode.""" |
| (...skipping 13 matching lines...) Expand all Loading... |
| 29 """ | 28 """ |
| 30 | 29 |
| 31 def __init__(self, platform_backend): | 30 def __init__(self, platform_backend): |
| 32 self._platform_backend = platform_backend | 31 self._platform_backend = platform_backend |
| 33 self._wpr_mode = None | 32 self._wpr_mode = None |
| 34 self._extra_wpr_args = None | 33 self._extra_wpr_args = None |
| 35 self._use_wpr_go = False | 34 self._use_wpr_go = False |
| 36 self._archive_path = None | 35 self._archive_path = None |
| 37 self._make_javascript_deterministic = None | 36 self._make_javascript_deterministic = None |
| 38 self._forwarder = None | 37 self._forwarder = None |
| 39 self._is_test_ca_installed = None | |
| 40 self._wpr_server = None | 38 self._wpr_server = None |
| 41 self._ts_proxy_server = None | 39 self._ts_proxy_server = None |
| 42 self._port_pair = None | 40 self._port_pair = None |
| 43 self._use_live_traffic = None | 41 self._use_live_traffic = None |
| 44 | 42 |
| 45 def InitializeIfNeeded(self, use_live_traffic): | 43 def InitializeIfNeeded(self, use_live_traffic): |
| 46 """ | 44 """ |
| 47 This may, e.g., install test certificates and perform any needed setup | 45 This may, e.g., install test certificates and perform any needed setup |
| 48 on the target platform. | 46 on the target platform. |
| 49 | 47 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 90 Args: | 88 Args: |
| 91 wpr_mode: a mode for web page replay; available modes are | 89 wpr_mode: a mode for web page replay; available modes are |
| 92 wpr_modes.WPR_OFF, wpr_modes.APPEND, wpr_modes.WPR_REPLAY, or | 90 wpr_modes.WPR_OFF, wpr_modes.APPEND, wpr_modes.WPR_REPLAY, or |
| 93 wpr_modes.WPR_RECORD. | 91 wpr_modes.WPR_RECORD. |
| 94 extra_wpr_args: an list of extra arguments for web page replay. | 92 extra_wpr_args: an list of extra arguments for web page replay. |
| 95 """ | 93 """ |
| 96 assert not self.is_open, 'Network controller is already open' | 94 assert not self.is_open, 'Network controller is already open' |
| 97 self._wpr_mode = wpr_mode | 95 self._wpr_mode = wpr_mode |
| 98 self._extra_wpr_args = extra_wpr_args | 96 self._extra_wpr_args = extra_wpr_args |
| 99 self._use_wpr_go = use_wpr_go | 97 self._use_wpr_go = use_wpr_go |
| 100 self._InstallTestCa() | |
| 101 | 98 |
| 102 def Close(self): | 99 def Close(self): |
| 103 """Undo changes in the target platform used for network control. | 100 """Undo changes in the target platform used for network control. |
| 104 | 101 |
| 105 Implicitly stops replay if currently active. | 102 Implicitly stops replay if currently active. |
| 106 """ | 103 """ |
| 107 self.StopReplay() | 104 self.StopReplay() |
| 108 self._StopForwarder() | 105 self._StopForwarder() |
| 109 self._StopTsProxyServer() | 106 self._StopTsProxyServer() |
| 110 self._RemoveTestCa() | |
| 111 self._make_javascript_deterministic = None | 107 self._make_javascript_deterministic = None |
| 112 self._archive_path = None | 108 self._archive_path = None |
| 113 self._extra_wpr_args = None | 109 self._extra_wpr_args = None |
| 114 self._use_wpr_go = False | 110 self._use_wpr_go = False |
| 115 self._wpr_mode = None | 111 self._wpr_mode = None |
| 116 | 112 |
| 117 def _InstallTestCa(self): | |
| 118 if not self._platform_backend.supports_test_ca or not self._use_wpr_go: | |
| 119 return | |
| 120 try: | |
| 121 self._platform_backend.InstallTestCa() | |
| 122 logging.info('Test certificate authority installed on target platform.') | |
| 123 except Exception: # pylint: disable=broad-except | |
| 124 logging.exception( | |
| 125 'Failed to install test certificate authority on target platform. ' | |
| 126 'Browsers may fall back to ignoring certificate errors.') | |
| 127 self._RemoveTestCa() | |
| 128 | |
| 129 @property | |
| 130 def is_test_ca_installed(self): | |
| 131 return self._is_test_ca_installed | |
| 132 | |
| 133 def _RemoveTestCa(self): | |
| 134 if not self._is_test_ca_installed: | |
| 135 return | |
| 136 try: | |
| 137 self._platform_backend.RemoveTestCa() | |
| 138 except Exception: # pylint: disable=broad-except | |
| 139 # Best effort cleanup - show the error and continue. | |
| 140 logging.exception( | |
| 141 'Error trying to remove certificate authority from target platform.') | |
| 142 finally: | |
| 143 self._is_test_ca_installed = False | |
| 144 | |
| 145 def StartReplay(self, archive_path, make_javascript_deterministic=False): | 113 def StartReplay(self, archive_path, make_javascript_deterministic=False): |
| 146 """Start web page replay from a given replay archive. | 114 """Start web page replay from a given replay archive. |
| 147 | 115 |
| 148 Starts as needed, and reuses if possible, the replay server on the host and | 116 Starts as needed, and reuses if possible, the replay server on the host and |
| 149 a forwarder from the host to the target platform. | 117 a forwarder from the host to the target platform. |
| 150 | 118 |
| 151 Implementation details | 119 Implementation details |
| 152 ---------------------- | 120 ---------------------- |
| 153 | 121 |
| 154 The local host is where Telemetry is run. The remote is host where | 122 The local host is where Telemetry is run. The remote is host where |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 self._ts_proxy_server.StartServer() | 225 self._ts_proxy_server.StartServer() |
| 258 return self._ts_proxy_server.port | 226 return self._ts_proxy_server.port |
| 259 | 227 |
| 260 @property | 228 @property |
| 261 def forwarder(self): | 229 def forwarder(self): |
| 262 return self._forwarder | 230 return self._forwarder |
| 263 | 231 |
| 264 @property | 232 @property |
| 265 def ts_proxy_server(self): | 233 def ts_proxy_server(self): |
| 266 return self._ts_proxy_server | 234 return self._ts_proxy_server |
| OLD | NEW |