| Index: tools/perf/measurements/chrome_proxy.py
|
| diff --git a/tools/perf/measurements/chrome_proxy.py b/tools/perf/measurements/chrome_proxy.py
|
| deleted file mode 100644
|
| index a04df6ab13da63066a0f1ba1ce3f5575fab7fdcb..0000000000000000000000000000000000000000
|
| --- a/tools/perf/measurements/chrome_proxy.py
|
| +++ /dev/null
|
| @@ -1,252 +0,0 @@
|
| -# Copyright 2014 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -import base64
|
| -import logging
|
| -import urlparse
|
| -
|
| -from metrics import chrome_proxy
|
| -from metrics import loading
|
| -from telemetry.core import util
|
| -from telemetry.page import page_measurement
|
| -
|
| -
|
| -class ChromeProxyLatency(page_measurement.PageMeasurement):
|
| - """Chrome proxy latency measurement."""
|
| -
|
| - def __init__(self, *args, **kwargs):
|
| - super(ChromeProxyLatency, self).__init__(*args, **kwargs)
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - tab.ClearCache(force=True)
|
| -
|
| - def MeasurePage(self, page, tab, results):
|
| - # Wait for the load event.
|
| - tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
|
| - loading.LoadingMetric().AddResults(tab, results)
|
| -
|
| -
|
| -class ChromeProxyDataSaving(page_measurement.PageMeasurement):
|
| - """Chrome proxy data daving measurement."""
|
| - def __init__(self, *args, **kwargs):
|
| - super(ChromeProxyDataSaving, self).__init__(*args, **kwargs)
|
| - self._metrics = chrome_proxy.ChromeProxyMetric()
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - tab.ClearCache(force=True)
|
| - self._metrics.Start(page, tab)
|
| -
|
| - def MeasurePage(self, page, tab, results):
|
| - # Wait for the load event.
|
| - tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
|
| - self._metrics.Stop(page, tab)
|
| - self._metrics.AddResultsForDataSaving(tab, results)
|
| -
|
| -
|
| -class ChromeProxyValidation(page_measurement.PageMeasurement):
|
| - """Base class for all chrome proxy correctness measurements."""
|
| -
|
| - def __init__(self, restart_after_each_page=False):
|
| - super(ChromeProxyValidation, self).__init__(
|
| - needs_browser_restart_after_each_page=restart_after_each_page)
|
| - self._metrics = chrome_proxy.ChromeProxyMetric()
|
| - self._page = None
|
| - # Whether a timeout exception is expected during the test.
|
| - self._expect_timeout = False
|
| -
|
| - def CustomizeBrowserOptions(self, options):
|
| - # Enable the chrome proxy (data reduction proxy).
|
| - options.AppendExtraBrowserArgs('--enable-spdy-proxy-auth')
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - tab.ClearCache(force=True)
|
| - assert self._metrics
|
| - self._metrics.Start(page, tab)
|
| -
|
| - def MeasurePage(self, page, tab, results):
|
| - self._page = page
|
| - # Wait for the load event.
|
| - tab.WaitForJavaScriptExpression('performance.timing.loadEventStart', 300)
|
| - assert self._metrics
|
| - self._metrics.Stop(page, tab)
|
| - self.AddResults(tab, results)
|
| -
|
| - def AddResults(self, tab, results):
|
| - raise NotImplementedError
|
| -
|
| - def StopBrowserAfterPage(self, browser, page): # pylint: disable=W0613
|
| - if hasattr(page, 'restart_after') and page.restart_after:
|
| - return True
|
| - return False
|
| -
|
| - def RunNavigateSteps(self, page, tab):
|
| - # The redirect from safebrowsing causes a timeout. Ignore that.
|
| - try:
|
| - super(ChromeProxyValidation, self).RunNavigateSteps(page, tab)
|
| - except util.TimeoutException, e:
|
| - if self._expect_timeout:
|
| - logging.warning('Navigation timeout on page %s',
|
| - page.name if page.name else page.url)
|
| - else:
|
| - raise e
|
| -
|
| -
|
| -class ChromeProxyHeaders(ChromeProxyValidation):
|
| - """Correctness measurement for response headers."""
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxyHeaders, self).__init__(restart_after_each_page=True)
|
| -
|
| - def AddResults(self, tab, results):
|
| - self._metrics.AddResultsForHeaderValidation(tab, results)
|
| -
|
| -
|
| -class ChromeProxyBypass(ChromeProxyValidation):
|
| - """Correctness measurement for bypass responses."""
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxyBypass, self).__init__(restart_after_each_page=True)
|
| -
|
| - def AddResults(self, tab, results):
|
| - self._metrics.AddResultsForBypass(tab, results)
|
| -
|
| -
|
| -class ChromeProxySafebrowsing(ChromeProxyValidation):
|
| - """Correctness measurement for safebrowsing."""
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxySafebrowsing, self).__init__()
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - super(ChromeProxySafebrowsing, self).WillNavigateToPage(page, tab)
|
| - self._expect_timeout = True
|
| -
|
| - def AddResults(self, tab, results):
|
| - self._metrics.AddResultsForSafebrowsing(tab, results)
|
| -
|
| -
|
| -_FAKE_PROXY_AUTH_VALUE = 'aabbccdd3b7579186c1b0620614fdb1f0000ffff'
|
| -_TEST_SERVER = 'chromeproxy-test.appspot.com'
|
| -_TEST_SERVER_DEFAULT_URL = 'http://' + _TEST_SERVER + '/default'
|
| -
|
| -
|
| -# We rely on the chromeproxy-test server to facilitate some of the tests.
|
| -# The test server code is at <TBD location> and runs at _TEST_SERVER
|
| -#
|
| -# The test server allow request to override response status, headers, and
|
| -# body through query parameters. See GetResponseOverrideURL.
|
| -def GetResponseOverrideURL(url, respStatus=0, respHeader="", respBody=""):
|
| - """ Compose the request URL with query parameters to override
|
| - the chromeproxy-test server response.
|
| - """
|
| -
|
| - queries = []
|
| - if respStatus > 0:
|
| - queries.append('respStatus=%d' % respStatus)
|
| - if respHeader:
|
| - queries.append('respHeader=%s' % base64.b64encode(respHeader))
|
| - if respBody:
|
| - queries.append('respBody=%s' % base64.b64encode(respBody))
|
| - if len(queries) == 0:
|
| - return url
|
| - "&".join(queries)
|
| - # url has query already
|
| - if urlparse.urlparse(url).query:
|
| - return url + '&' + "&".join(queries)
|
| - else:
|
| - return url + '?' + "&".join(queries)
|
| -
|
| -
|
| -class ChromeProxyHTTPFallbackProbeURL(ChromeProxyValidation):
|
| - """Correctness measurement for proxy fallback.
|
| -
|
| - In this test, the probe URL does not return 'OK'. Chrome is expected
|
| - to use the fallback proxy.
|
| - """
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxyHTTPFallbackProbeURL, self).__init__()
|
| -
|
| - def CustomizeBrowserOptions(self, options):
|
| - super(ChromeProxyHTTPFallbackProbeURL,
|
| - self).CustomizeBrowserOptions(options)
|
| - # Use the test server probe URL which returns the response
|
| - # body as specified by respBody.
|
| - probe_url = GetResponseOverrideURL(
|
| - _TEST_SERVER_DEFAULT_URL,
|
| - respBody='not OK')
|
| - options.AppendExtraBrowserArgs(
|
| - '--data-reduction-proxy-probe-url=%s' % probe_url)
|
| -
|
| - def AddResults(self, tab, results):
|
| - self._metrics.AddResultsForHTTPFallback(tab, results)
|
| -
|
| -
|
| -# Depends on the fix of http://crbug.com/330342.
|
| -class ChromeProxyHTTPFallbackViaHeader(ChromeProxyValidation):
|
| - """Correctness measurement for proxy fallback.
|
| -
|
| - In this test, the configured proxy is the chromeproxy-test server which
|
| - will send back a response without the expected Via header. Chrome is
|
| - expected to use the fallback proxy and add the configured proxy to the
|
| - bad proxy list.
|
| - """
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxyHTTPFallbackViaHeader, self).__init__()
|
| -
|
| - def CustomizeBrowserOptions(self, options):
|
| - super(ChromeProxyHTTPFallbackViaHeader,
|
| - self).CustomizeBrowserOptions(options)
|
| - options.AppendExtraBrowserArgs('--ignore-certificate-errors')
|
| - options.AppendExtraBrowserArgs(
|
| - '--spdy-proxy-auth-origin=http://%s' % _TEST_SERVER)
|
| - options.AppendExtraBrowserArgs(
|
| - '--spdy-proxy-auth-value=%s' % _FAKE_PROXY_AUTH_VALUE)
|
| -
|
| - def AddResults(self, tab, results):
|
| - proxies = [
|
| - _TEST_SERVER + ":80",
|
| - self._metrics.effective_proxies['fallback'],
|
| - self._metrics.effective_proxies['direct']]
|
| - bad_proxies = [_TEST_SERVER + ":80"]
|
| - self._metrics.AddResultsForHTTPFallback(tab, results, proxies, bad_proxies)
|
| -
|
| -
|
| -class ChromeProxySmoke(ChromeProxyValidation):
|
| - """Smoke measurement for basic chrome proxy correctness."""
|
| -
|
| - def __init__(self):
|
| - super(ChromeProxySmoke, self).__init__()
|
| -
|
| - def WillNavigateToPage(self, page, tab):
|
| - super(ChromeProxySmoke, self).WillNavigateToPage(page, tab)
|
| - if page.name == 'safebrowsing':
|
| - self._expect_timeout = True
|
| -
|
| - def AddResults(self, tab, results):
|
| - # Map a page name to its AddResults func.
|
| - page_to_metrics = {
|
| - 'header validation': [self._metrics.AddResultsForHeaderValidation],
|
| - 'compression: image': [
|
| - self._metrics.AddResultsForHeaderValidation,
|
| - self._metrics.AddResultsForDataSaving,
|
| - ],
|
| - 'compression: javascript': [
|
| - self._metrics.AddResultsForHeaderValidation,
|
| - self._metrics.AddResultsForDataSaving,
|
| - ],
|
| - 'compression: css': [
|
| - self._metrics.AddResultsForHeaderValidation,
|
| - self._metrics.AddResultsForDataSaving,
|
| - ],
|
| - 'bypass': [self._metrics.AddResultsForBypass],
|
| - 'safebrowsing': [self._metrics.AddResultsForSafebrowsing],
|
| - }
|
| - if not self._page.name in page_to_metrics:
|
| - raise page_measurement.MeasurementFailure(
|
| - 'Invalid page name (%s) in smoke. Page name must be one of:\n%s' % (
|
| - self._page.name, page_to_metrics.keys()))
|
| - for add_result in page_to_metrics[self._page.name]:
|
| - add_result(tab, results)
|
|
|