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()) |