1 # Copyright (c) 2012 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.
5 from telemetry.core import forwarders
7 # TODO(tonyg): Move webpagereplay.py's guts into this class and
8 # make ReplayServer subclass LocalServer.
9 from telemetry.core import webpagereplay
12 def GetChromeFlags(replay_host, port_pairs):
13 return webpagereplay.GetChromeFlags(replay_host, port_pairs.http.remote_port,
14 port_pairs.https.remote_port)
17 class ReplayServer(object):
18 def __init__(self, browser_backend, path, is_record_mode, is_append_mode,
19 make_javascript_deterministic):
20 self._browser_backend = browser_backend
21 self._forwarder = None
22 self._web_page_replay = None
23 self._is_record_mode = is_record_mode
24 self._is_append_mode = is_append_mode
26 wpr_args = browser_backend.browser_options.extra_wpr_args
27 if self._is_record_mode:
28 if self._is_append_mode:
29 wpr_args.append('--append')
31 wpr_args.append('--record')
32 if not make_javascript_deterministic:
33 wpr_args.append('--inject_scripts=')
34 browser_backend.AddReplayServerOptions(wpr_args)
35 self._web_page_replay = webpagereplay.ReplayServer(
36 path, self._browser_backend.forwarder_factory.host_ip,
37 browser_backend.wpr_port_pairs.dns.local_port if
38 browser_backend.wpr_port_pairs.dns else 0,
39 browser_backend.wpr_port_pairs.http.local_port,
40 browser_backend.wpr_port_pairs.https.local_port,
42 # Remove --no-dns_forwarding if it wasn't explicitly requested by backend.
43 if '--no-dns_forwarding' not in wpr_args:
44 self._web_page_replay.replay_options.remove('--no-dns_forwarding')
45 self._web_page_replay.StartServer()
47 browser_backend.wpr_port_pairs = forwarders.PortPairs(
48 http=forwarders.PortPair(
49 self._web_page_replay.http_port,
50 browser_backend.wpr_port_pairs.http.remote_port or
51 self._web_page_replay.http_port),
52 https=forwarders.PortPair(
53 self._web_page_replay.https_port,
54 browser_backend.wpr_port_pairs.https.remote_port or
55 self._web_page_replay.https_port),
56 dns=forwarders.PortPair(
57 self._web_page_replay.dns_port,
58 browser_backend.wpr_port_pairs.dns.remote_port or
59 self._web_page_replay.dns_port)
60 if browser_backend.wpr_port_pairs.dns else None)
62 self._forwarder = browser_backend.forwarder_factory.Create(
63 browser_backend.wpr_port_pairs)
68 def __exit__(self, *args):
73 self._forwarder.Close()
74 self._forwarder = None
75 if self._web_page_replay:
76 self._web_page_replay.StopServer()
77 self._web_page_replay = None