# 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