Upstream version 5.34.92.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 util
6
7 # TODO(tonyg): Move webpagereplay.py to a common location.
8 util.AddDirToPythonPath(
9     util.GetChromiumSrcDir(), 'chrome', 'test', 'functional')
10 import webpagereplay  # pylint: disable=F0401
11
12 def GetChromeFlags(replay_host, http_port, https_port):
13   return webpagereplay.GetChromeFlags(replay_host, http_port, https_port)
14
15 class ReplayServer(object):
16   def __init__(self, browser_backend, path, is_record_mode, is_append_mode,
17                make_javascript_deterministic):
18     self._browser_backend = browser_backend
19     self._forwarder = None
20     self._web_page_replay = None
21     self._is_record_mode = is_record_mode
22     self._is_append_mode = is_append_mode
23
24     wpr_args = browser_backend.browser_options.extra_wpr_args
25     if self._is_record_mode:
26       if self._is_append_mode:
27         wpr_args.append('--append')
28       else:
29         wpr_args.append('--record')
30     if not make_javascript_deterministic:
31       wpr_args.append('--inject_scripts=')
32     browser_backend.AddReplayServerOptions(wpr_args)
33     self._web_page_replay = webpagereplay.ReplayServer(
34         path,
35         browser_backend.WEBPAGEREPLAY_HOST,
36         browser_backend.wpr_http_port_pair.local_port,
37         browser_backend.wpr_https_port_pair.local_port,
38         wpr_args)
39     # Remove --no-dns_forwarding if it wasn't explicitly requested by backend.
40     if '--no-dns_forwarding' not in wpr_args:
41       self._web_page_replay.replay_options.remove('--no-dns_forwarding')
42     self._web_page_replay.StartServer()
43
44     browser_backend.wpr_http_port_pair.local_port = (
45         self._web_page_replay.http_port)
46     browser_backend.wpr_http_port_pair.remote_port = (
47         browser_backend.wpr_http_port_pair.remote_port or
48         self._web_page_replay.http_port)
49     browser_backend.wpr_https_port_pair.local_port = (
50         self._web_page_replay.https_port)
51     browser_backend.wpr_https_port_pair.remote_port = (
52         browser_backend.wpr_https_port_pair.remote_port or
53         self._web_page_replay.https_port)
54
55     self._forwarder = browser_backend.CreateForwarder(
56         browser_backend.wpr_http_port_pair, browser_backend.wpr_https_port_pair)
57
58   def __enter__(self):
59     return self
60
61   def __exit__(self, *args):
62     self.Close()
63
64   def Close(self):
65     if self._forwarder:
66       self._forwarder.Close()
67       self._forwarder = None
68     if self._web_page_replay:
69       self._web_page_replay.StopServer()
70       self._web_page_replay = None