| Index: chrome/test/chromedriver/embed_networks_in_cpp.py
|
| diff --git a/chrome/test/chromedriver/embed_networks_in_cpp.py b/chrome/test/chromedriver/embed_networks_in_cpp.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..45797abc34ca5ea81634e43f7e8fca45268d65a4
|
| --- /dev/null
|
| +++ b/chrome/test/chromedriver/embed_networks_in_cpp.py
|
| @@ -0,0 +1,88 @@
|
| +#!/usr/bin/env python
|
| +# Copyright 2015 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.
|
| +
|
| +"""Embeds standalone JavaScript snippets in C++ code.
|
| +
|
| +The script requires the devtools/front_end/toolbox/OverridesUI.js file from
|
| +WebKit that lists the preset network conditions to be passed in as the only
|
| +argument. The list of network conditions will be written to a C-style string to
|
| +be parsed with JSONReader.
|
| +"""
|
| +
|
| +import optparse
|
| +import os
|
| +import re
|
| +import subprocess
|
| +import sys
|
| +
|
| +import cpp_source
|
| +
|
| +UNLIMITED_THROUGHPUT = ('WebInspector.OverridesSupport'
|
| + '.NetworkThroughputUnlimitedValue')
|
| +
|
| +
|
| +def quotizeKeys(s, keys):
|
| + """Returns the string s with each instance of each key wrapped in quotes.
|
| +
|
| + Args:
|
| + s: a string containing keys that need to be wrapped in quotes.
|
| + keys: an iterable of keys to be wrapped in quotes in the string.
|
| + """
|
| + for key in keys:
|
| + s = re.sub('%s: ' % key, '"%s": ' % key, s)
|
| + return s
|
| +
|
| +def evaluateMultiplications(s):
|
| + """Returns the string s with each bare multiplication evaluated.
|
| +
|
| + Since the source is JavaScript, which includes bare arithmetic, and the
|
| + output must be JSON format, we must evaluate all expressions.
|
| +
|
| + Args:
|
| + s: a string containing bare multiplications that need to be evaluated.
|
| + """
|
| + def evaluateBinaryMultiplication(match):
|
| + return str(float(match.group(1)) * float(match.group(2)))
|
| +
|
| + return re.sub('([0-9\.]+) \* ([0-9\.]+)', evaluateBinaryMultiplication, s)
|
| +
|
| +
|
| +def main():
|
| + parser = optparse.OptionParser()
|
| + parser.add_option(
|
| + '', '--directory', type='string', default='.',
|
| + help='Path to directory where the cc/h files should be created')
|
| + options, args = parser.parse_args()
|
| +
|
| + networks = '['
|
| + file_name = args[0]
|
| + inside_list = False
|
| + with open(file_name, 'r') as f:
|
| + for line in f:
|
| + if not inside_list:
|
| + if 'WebInspector.OverridesUI._networkConditionsPresets = [' in line:
|
| + inside_list = True
|
| + else:
|
| + if line.strip() == '];':
|
| + inside_list = False
|
| + continue
|
| + line = line.replace(UNLIMITED_THROUGHPUT, "-1")
|
| + networks += line.strip()
|
| +
|
| + output_dir = 'chrome/test/chromedriver/chrome'
|
| + networks += ']'
|
| + networks = quotizeKeys(networks, ['id', 'title', 'throughput', 'latency'])
|
| + networks = evaluateMultiplications(networks)
|
| + cpp_source.WriteSource('network_list',
|
| + output_dir,
|
| + options.directory, {'kNetworks': networks})
|
| +
|
| + clang_format = ['clang-format', '-i']
|
| + subprocess.Popen(clang_format + ['%s/network_list.cc' % output_dir])
|
| + subprocess.Popen(clang_format + ['%s/network_list.h' % output_dir])
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(main())
|
|
|