Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / wpr_server.py
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.
4
5 from telemetry.core import forwarders
6 from telemetry.core import util
7
8
9 # TODO(tonyg): Move webpagereplay.py's guts into this class and
10 # make ReplayServer subclass LocalServer.
11 util.AddDirToPythonPath(
12     util.GetChromiumSrcDir(), 'chrome', 'test', 'functional')
13 import webpagereplay  # pylint: disable=F0401
14
15
16 def GetChromeFlags(replay_host, port_pairs):
17   return webpagereplay.GetChromeFlags(replay_host, port_pairs.http.remote_port,
18                                       port_pairs.https.remote_port)
19
20
21 class ReplayServer(object):
22   def __init__(self, browser_backend, path, is_record_mode, is_append_mode,
23                make_javascript_deterministic):
24     self._browser_backend = browser_backend
25     self._forwarder = None
26     self._web_page_replay = None
27     self._is_record_mode = is_record_mode
28     self._is_append_mode = is_append_mode
29
30     wpr_args = browser_backend.browser_options.extra_wpr_args
31     if self._is_record_mode:
32       if self._is_append_mode:
33         wpr_args.append('--append')
34       else:
35         wpr_args.append('--record')
36     if not make_javascript_deterministic:
37       wpr_args.append('--inject_scripts=')
38     browser_backend.AddReplayServerOptions(wpr_args)
39     self._web_page_replay = webpagereplay.ReplayServer(
40         path, self._browser_backend.forwarder_factory.host_ip,
41         browser_backend.wpr_port_pairs.dns.local_port if
42         browser_backend.wpr_port_pairs.dns else 0,
43         browser_backend.wpr_port_pairs.http.local_port,
44         browser_backend.wpr_port_pairs.https.local_port,
45         wpr_args)
46     # Remove --no-dns_forwarding if it wasn't explicitly requested by backend.
47     if '--no-dns_forwarding' not in wpr_args:
48       self._web_page_replay.replay_options.remove('--no-dns_forwarding')
49     self._web_page_replay.StartServer()
50
51     browser_backend.wpr_port_pairs = forwarders.PortPairs(
52         http=forwarders.PortPair(
53             self._web_page_replay.http_port,
54             browser_backend.wpr_port_pairs.http.remote_port or
55             self._web_page_replay.http_port),
56         https=forwarders.PortPair(
57             self._web_page_replay.https_port,
58             browser_backend.wpr_port_pairs.https.remote_port or
59             self._web_page_replay.https_port),
60         dns=forwarders.PortPair(
61             self._web_page_replay.dns_port,
62             browser_backend.wpr_port_pairs.dns.remote_port or
63             self._web_page_replay.dns_port)
64             if browser_backend.wpr_port_pairs.dns else None)
65
66     self._forwarder = browser_backend.forwarder_factory.Create(
67         browser_backend.wpr_port_pairs)
68
69   def __enter__(self):
70     return self
71
72   def __exit__(self, *args):
73     self.Close()
74
75   def Close(self):
76     if self._forwarder:
77       self._forwarder.Close()
78       self._forwarder = None
79     if self._web_page_replay:
80       self._web_page_replay.StopServer()
81       self._web_page_replay = None