| # Copyright 2015 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from autotest_lib.client.bin import utils |
| from telemetry.internal.util import webpagereplay |
| |
| |
| class WebPageReplayWrapper(object): |
| """ |
| Wraps around WPR Server to be conveniently used in autotest. |
| |
| """ |
| |
| _REPLAY_HOST = "127.0.0.1" |
| |
| |
| def __init__(self, archive_path): |
| """ |
| Creates a WPR server using archive_path and pre-set arguments. |
| |
| @param archive_path: path to the .wpr archive to be used. |
| |
| """ |
| |
| port = utils.get_unused_port() |
| self._http_port = port if port else 8080 |
| |
| port = utils.get_unused_port() |
| self._https_port = port if port else 8713 |
| |
| self._server = webpagereplay.ReplayServer( |
| archive_path=archive_path, |
| replay_host=WebPageReplayWrapper._REPLAY_HOST, |
| http_port=self._http_port, |
| https_port=self._https_port, |
| dns_port=None, |
| replay_options=[]) |
| |
| |
| @property |
| def chrome_flags_for_wpr(self): |
| """ |
| @return: list of Chrome flags needed to direct traffic to WPR server. |
| |
| """ |
| return ['--host-resolver-rules=MAP * %s, EXCLUDE localhost' % |
| WebPageReplayWrapper._REPLAY_HOST, |
| '--testing-fixed-http-port=%s' % self._http_port, |
| '--testing-fixed-https-port=%s' % self._https_port, |
| '--ignore-certificate-errors'] |
| |
| |
| def __enter__(self): |
| return self._server.__enter__() |
| |
| |
| def __exit__(self, exc_type, exc_val, exc_tb): |
| return self._server.__exit__(exc_type, exc_val, exc_tb) |
| |
| |
| class NullWebPageReplayWrapper(object): |
| """ |
| Empty class. Created to simply clients code, no other purpose. |
| |
| Client will do: |
| with chrome.Chrome() as cr, wpr_server: |
| .... |
| |
| When we are not using WPR we will return this empty class, leaving client's |
| code uniform and unchanged. |
| |
| """ |
| |
| @property |
| def chrome_flags_for_wpr(self): |
| """ |
| @return: an empty list. This is an empty class. |
| |
| """ |
| return [] |
| |
| |
| def __enter__(self): |
| return self |
| |
| |
| def __exit__(self, exc_type, exc_val, exc_tb): |
| pass |