buildbot: Run the webkit layout tests under swarming on RandomOrder bots.

This CL enables the RandomOrder FYI bots to run the webkit layout tests on
swarming. It does this by;

 * Creating a dummy webkit_layout_tests_exparchive build target which tells
   recipes to use 'isolate exparchive' for uploading (rather than 'isolate
   batcharchive'). See;
    - https://chromium-review.googlesource.com/c/436324/
    - https://chromium-review.googlesource.com/c/422460/

 * Updates the testing/buildbot/chromium.fyi.json to include the RandomOrder
   bots.

This CL is based on Dirk's CL at http://crrev.com/2595793002#ps40001

BUG=524758
NOTRY=true

Review-Url: https://codereview.chromium.org/2678153003
Cr-Commit-Position: refs/heads/master@{#450911}
diff --git a/testing/scripts/run_isolated_script_test.py b/testing/scripts/run_isolated_script_test.py
new file mode 100755
index 0000000..c2d2bd8a
--- /dev/null
+++ b/testing/scripts/run_isolated_script_test.py
@@ -0,0 +1,74 @@
+#!/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.
+
+"""Runs a script that can run as an isolate (or not).
+
+The main requirement is that
+
+  --isolated-script-test-output=[FILENAME]
+
+is passed on the command line to run_isolated_script_tests. This gets
+remapped to the command line argument --write-full-results-to.
+
+json is written to that file in the format produced by
+common.parse_common_test_results.
+
+This script is intended to be the base command invoked by the isolate,
+followed by a subsequent Python script. It could be generalized to
+invoke an arbitrary executable.
+"""
+
+# TODO(tansell): Remove this script once LayoutTests can accept the isolated
+# arguments and start xvfb itself.
+
+import argparse
+import json
+import os
+import pprint
+import sys
+
+
+import common
+
+# Add src/testing/ into sys.path for importing xvfb.
+sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
+import xvfb
+
+
+def main():
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--isolated-script-test-output', type=str,
+                      required=True)
+  parser.add_argument('--xvfb', help='start xvfb', action='store_true')
+
+  # This argument is ignored for now.
+  parser.add_argument('--isolated-script-test-chartjson-output', type=str)
+
+  args, rest_args = parser.parse_known_args()
+
+  env = os.environ
+  cmd = [sys.executable] + rest_args
+  cmd += ['--write-full-results-to', args.isolated_script_test_output]
+  if args.xvfb:
+    return xvfb.run_executable(cmd, env)
+  else:
+    return common.run_command(cmd, env=env)
+
+
+# This is not really a "script test" so does not need to manually add
+# any additional compile targets.
+def main_compile_targets(args):
+  json.dump([], args.output)
+
+
+if __name__ == '__main__':
+  # Conform minimally to the protocol defined by ScriptTest.
+  if 'compile_targets' in sys.argv:
+    funcs = {
+      'run': None,
+      'compile_targets': main_compile_targets,
+    }
+    sys.exit(common.run_script(sys.argv[1:], funcs))
+  sys.exit(main())