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 |