Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(8801)

Unified Diff: chrome/test/chromedriver/embed_networks_in_cpp.py

Issue 1004843002: [chromedriver] Add Network Presets to Network Throttling feature (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cleaning up Network Names; adding integration tests Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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())

Powered by Google App Engine
This is Rietveld 408576698