Index: tools/ipc_fuzzer/play_testcase.py |
diff --git a/tools/ipc_fuzzer/play_testcase.py b/tools/ipc_fuzzer/play_testcase.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..19dc4ce274cc16700385967abeef0cf0700b18fe |
--- /dev/null |
+++ b/tools/ipc_fuzzer/play_testcase.py |
@@ -0,0 +1,85 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2013 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. |
+ |
+"""Wrapper around chrome. |
+ |
+Replaces all the child processes (renderer, GPU, plugins and utility) with the |
+IPC fuzzer. The fuzzer will then play back a specified testcase. |
+ |
+Depends on ipc_fuzzer being available on the same directory as chrome. |
+""" |
+ |
+import os |
+import platform |
+import subprocess |
+import sys |
+ |
+def main(): |
+ if len(sys.argv) <= 1: |
+ print 'Usage: play_testcase.py [chrome_flag...] testcase' |
+ return 1 |
+ |
+ script_path = os.path.realpath(__file__) |
+ ipc_fuzzer_dir = os.path.dirname(script_path) |
+ out_dir = os.path.abspath(os.path.join(ipc_fuzzer_dir, os.pardir, |
+ os.pardir, 'out')); |
+ build_dir = '' |
+ chrome_path = '' |
+ chrome_binary = 'chrome' |
+ |
+ for build in ['Debug', 'Release']: |
+ try_build = os.path.join(out_dir, build) |
+ try_chrome = os.path.join(try_build, chrome_binary) |
+ if os.path.exists(try_chrome): |
+ build_dir = try_build |
+ chrome_path = try_chrome |
+ |
+ if not chrome_path: |
+ print 'chrome executable not found.' |
+ return 1 |
+ |
+ fuzzer_path = os.path.join(build_dir, 'ipc_fuzzer') |
+ if not os.path.exists(fuzzer_path): |
+ print fuzzer_path + ' not found.' |
+ print ('Please use enable_ipc_fuzzer=1 GYP define and ' |
+ 'build ipc_fuzzer target.') |
+ return 1 |
+ |
+ prefixes = { |
+ '--renderer-cmd-prefix', |
+ '--gpu-launcher', |
+ '--plugin-launcher', |
+ '--ppapi-plugin-launcher', |
+ '--utility-cmd-prefix', |
+ } |
+ |
+ args = [ |
+ chrome_path, |
+ '--ipc-fuzzer-testcase=' + sys.argv[-1], |
+ '--no-sandbox', |
+ ] |
+ |
+ launchers = {} |
+ for prefix in prefixes: |
+ launchers[prefix] = fuzzer_path |
+ |
+ for arg in sys.argv[1:-1]: |
+ if arg.find('=') != -1: |
+ switch, value = arg.split('=', 1) |
+ if switch in prefixes: |
+ launchers[switch] = value + ' ' + launchers[switch] |
+ continue |
+ args.append(arg) |
+ |
+ for switch, value in launchers.items(): |
+ args.append(switch + '=' + value) |
+ |
+ print args |
+ |
+ return subprocess.call(args) |
+ |
+ |
+if __name__ == "__main__": |
+ sys.exit(main()) |