| 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 os | 5 import os |
| 6 | 6 |
| 7 from telemetry.internal.util import wpr_server | |
| 8 from telemetry.internal.util import webpagereplay_go_server | 7 from telemetry.internal.util import webpagereplay_go_server |
| 9 from telemetry.internal.util import ts_proxy_server | 8 from telemetry.internal.util import ts_proxy_server |
| 10 from telemetry.util import wpr_modes | 9 from telemetry.util import wpr_modes |
| 11 | 10 |
| 12 | 11 |
| 13 class ArchiveDoesNotExistError(Exception): | 12 class ArchiveDoesNotExistError(Exception): |
| 14 """Raised when the archive path does not exist for replay mode.""" | 13 """Raised when the archive path does not exist for replay mode.""" |
| 15 pass | 14 pass |
| 16 | 15 |
| 17 | 16 |
| 18 class ReplayAndBrowserPortsError(Exception): | 17 class ReplayAndBrowserPortsError(Exception): |
| 19 """Raised an existing browser would get different remote replay ports.""" | 18 """Raised an existing browser would get different remote replay ports.""" |
| 20 pass | 19 pass |
| 21 | 20 |
| 22 | 21 |
| 23 class NetworkControllerBackend(object): | 22 class NetworkControllerBackend(object): |
| 24 """Control network settings and servers to simulate the Web. | 23 """Control network settings and servers to simulate the Web. |
| 25 | 24 |
| 26 Network changes include forwarding device ports to host platform ports. | 25 Network changes include forwarding device ports to host platform ports. |
| 27 Web Page Replay is used to record and replay HTTP/HTTPS responses. | 26 Web Page Replay is used to record and replay HTTP/HTTPS responses. |
| 28 """ | 27 """ |
| 29 | 28 |
| 30 def __init__(self, platform_backend): | 29 def __init__(self, platform_backend): |
| 31 self._platform_backend = platform_backend | 30 self._platform_backend = platform_backend |
| 32 self._wpr_mode = None | 31 self._wpr_mode = None |
| 33 self._extra_wpr_args = None | 32 self._extra_wpr_args = None |
| 34 self._use_wpr_go = False | |
| 35 self._archive_path = None | 33 self._archive_path = None |
| 36 self._make_javascript_deterministic = None | 34 self._make_javascript_deterministic = None |
| 37 self._forwarder = None | 35 self._forwarder = None |
| 38 self._wpr_server = None | 36 self._wpr_server = None |
| 39 self._ts_proxy_server = None | 37 self._ts_proxy_server = None |
| 40 self._port_pair = None | 38 self._port_pair = None |
| 41 self._use_live_traffic = None | 39 self._use_live_traffic = None |
| 42 | 40 |
| 43 def InitializeIfNeeded(self, use_live_traffic): | 41 def InitializeIfNeeded(self, use_live_traffic): |
| 44 """ | 42 """ |
| (...skipping 25 matching lines...) Expand all Loading... |
| 70 def host_ip(self): | 68 def host_ip(self): |
| 71 return self._platform_backend.forwarder_factory.host_ip | 69 return self._platform_backend.forwarder_factory.host_ip |
| 72 | 70 |
| 73 @property | 71 @property |
| 74 def wpr_device_ports(self): | 72 def wpr_device_ports(self): |
| 75 try: | 73 try: |
| 76 return self._forwarder.port_pairs.remote_ports | 74 return self._forwarder.port_pairs.remote_ports |
| 77 except AttributeError: | 75 except AttributeError: |
| 78 return None | 76 return None |
| 79 | 77 |
| 80 def Open(self, wpr_mode, extra_wpr_args, use_wpr_go=False): | 78 def Open(self, wpr_mode, extra_wpr_args): |
| 81 """Configure and prepare target platform for network control. | 79 """Configure and prepare target platform for network control. |
| 82 | 80 |
| 83 This may, e.g., install test certificates and perform any needed setup | 81 This may, e.g., install test certificates and perform any needed setup |
| 84 on the target platform. | 82 on the target platform. |
| 85 | 83 |
| 86 After network interactions are over, clients should call the Close method. | 84 After network interactions are over, clients should call the Close method. |
| 87 | 85 |
| 88 Args: | 86 Args: |
| 89 wpr_mode: a mode for web page replay; available modes are | 87 wpr_mode: a mode for web page replay; available modes are |
| 90 wpr_modes.WPR_OFF, wpr_modes.APPEND, wpr_modes.WPR_REPLAY, or | 88 wpr_modes.WPR_OFF, wpr_modes.APPEND, wpr_modes.WPR_REPLAY, or |
| 91 wpr_modes.WPR_RECORD. | 89 wpr_modes.WPR_RECORD. |
| 92 extra_wpr_args: an list of extra arguments for web page replay. | 90 extra_wpr_args: an list of extra arguments for web page replay. |
| 93 """ | 91 """ |
| 94 assert not self.is_open, 'Network controller is already open' | 92 assert not self.is_open, 'Network controller is already open' |
| 95 self._wpr_mode = wpr_mode | 93 self._wpr_mode = wpr_mode |
| 96 self._extra_wpr_args = extra_wpr_args | 94 self._extra_wpr_args = extra_wpr_args |
| 97 self._use_wpr_go = use_wpr_go | |
| 98 | 95 |
| 99 def Close(self): | 96 def Close(self): |
| 100 """Undo changes in the target platform used for network control. | 97 """Undo changes in the target platform used for network control. |
| 101 | 98 |
| 102 Implicitly stops replay if currently active. | 99 Implicitly stops replay if currently active. |
| 103 """ | 100 """ |
| 104 self.StopReplay() | 101 self.StopReplay() |
| 105 self._StopForwarder() | 102 self._StopForwarder() |
| 106 self._StopTsProxyServer() | 103 self._StopTsProxyServer() |
| 107 self._make_javascript_deterministic = None | 104 self._make_javascript_deterministic = None |
| 108 self._archive_path = None | 105 self._archive_path = None |
| 109 self._extra_wpr_args = None | 106 self._extra_wpr_args = None |
| 110 self._use_wpr_go = False | |
| 111 self._wpr_mode = None | 107 self._wpr_mode = None |
| 112 | 108 |
| 113 def StartReplay(self, archive_path, make_javascript_deterministic=False): | 109 def StartReplay(self, archive_path, make_javascript_deterministic=False): |
| 114 """Start web page replay from a given replay archive. | 110 """Start web page replay from a given replay archive. |
| 115 | 111 |
| 116 Starts as needed, and reuses if possible, the replay server on the host and | 112 Starts as needed, and reuses if possible, the replay server on the host and |
| 117 a forwarder from the host to the target platform. | 113 a forwarder from the host to the target platform. |
| 118 | 114 |
| 119 Implementation details | 115 Implementation details |
| 120 ---------------------- | 116 ---------------------- |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 def StopReplay(self): | 166 def StopReplay(self): |
| 171 """Stop web page replay. | 167 """Stop web page replay. |
| 172 | 168 |
| 173 Stops both the replay server and the forwarder if currently active. | 169 Stops both the replay server and the forwarder if currently active. |
| 174 """ | 170 """ |
| 175 self._StopReplayServer() | 171 self._StopReplayServer() |
| 176 | 172 |
| 177 def _StartReplayServer(self): | 173 def _StartReplayServer(self): |
| 178 """Start the replay server and return the started local_ports.""" | 174 """Start the replay server and return the started local_ports.""" |
| 179 self._StopReplayServer() # In case it was already running. | 175 self._StopReplayServer() # In case it was already running. |
| 180 if self._use_wpr_go: | 176 self._wpr_server = webpagereplay_go_server.ReplayServer( |
| 181 self._wpr_server = webpagereplay_go_server.ReplayServer( | 177 self._archive_path, |
| 182 self._archive_path, | 178 self.host_ip, |
| 183 self.host_ip, | 179 http_port=0, |
| 184 http_port=0, | 180 https_port=0, |
| 185 https_port=0, | 181 replay_options=self._ReplayCommandLineArgs()) |
| 186 replay_options=self._ReplayCommandLineArgs()) | |
| 187 else: | |
| 188 self._wpr_server = wpr_server.ReplayServer( | |
| 189 self._archive_path, | |
| 190 self.host_ip, | |
| 191 http_port=0, | |
| 192 https_port=0, | |
| 193 dns_port=None, | |
| 194 replay_options=self._ReplayCommandLineArgs()) | |
| 195 return self._wpr_server.StartServer() | 182 return self._wpr_server.StartServer() |
| 196 | 183 |
| 197 def _StopReplayServer(self): | 184 def _StopReplayServer(self): |
| 198 """Stop the replay server only.""" | 185 """Stop the replay server only.""" |
| 199 if self._wpr_server: | 186 if self._wpr_server: |
| 200 self._wpr_server.StopServer() | 187 self._wpr_server.StopServer() |
| 201 self._wpr_server = None | 188 self._wpr_server = None |
| 202 | 189 |
| 203 def _StopTsProxyServer(self): | 190 def _StopTsProxyServer(self): |
| 204 """Stop the replay server only.""" | 191 """Stop the replay server only.""" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 225 self._ts_proxy_server.StartServer() | 212 self._ts_proxy_server.StartServer() |
| 226 return self._ts_proxy_server.port | 213 return self._ts_proxy_server.port |
| 227 | 214 |
| 228 @property | 215 @property |
| 229 def forwarder(self): | 216 def forwarder(self): |
| 230 return self._forwarder | 217 return self._forwarder |
| 231 | 218 |
| 232 @property | 219 @property |
| 233 def ts_proxy_server(self): | 220 def ts_proxy_server(self): |
| 234 return self._ts_proxy_server | 221 return self._ts_proxy_server |
| OLD | NEW |