| Index: chrome/test/base/js2gtest.gni | 
| diff --git a/chrome/test/base/js2gtest.gni b/chrome/test/base/js2gtest.gni | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..35f142f6a63294c7a7947a2a1cf79acb3c32dcb4 | 
| --- /dev/null | 
| +++ b/chrome/test/base/js2gtest.gni | 
| @@ -0,0 +1,108 @@ | 
| +# 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. | 
| + | 
| +import("//build/module_args/v8.gni") | 
| + | 
| +template("js2gtest") { | 
| +  assert(defined(invoker.test_type) && | 
| +         (invoker.test_type == "webui" || invoker.test_type == "unit" || | 
| +          invoker.test_type == "extension")) | 
| +  action_name = target_name + "_action" | 
| +  source_set_name = target_name | 
| + | 
| +  action_foreach(action_name) { | 
| +    testonly = true | 
| +    visibility = [ ":$source_set_name" ] | 
| +    script = "//tools/gypv8sh.py" | 
| + | 
| +    sources = invoker.sources | 
| + | 
| +    d8_path = get_label_info("//v8:d8($host_toolchain)", "root_out_dir") + "/d8" | 
| +    if (is_win) { | 
| +      d8_path += ".exe" | 
| +    } | 
| + | 
| +    input_js = [ | 
| +      "//chrome/third_party/mock4js/mock4js.js", | 
| +      "//chrome/test/data/webui/test_api.js", | 
| +      "//chrome/test/base/js2gtest.js", | 
| +    ] | 
| +    inputs = [ d8_path ] + input_js | 
| +    if (defined(invoker.deps_js)) { | 
| +      inputs += [ invoker.deps_js ] | 
| +    } | 
| + | 
| +    outputs = [ | 
| +      "$target_gen_dir/{{source_name_part}}-gen.cc", | 
| +      "$root_out_dir/test_data/{{source_root_relative_dir}}/{{source_file_part}}", | 
| +    ] | 
| + | 
| +    args = [] | 
| +    if (defined(invoker.deps_js)) { | 
| +      args += [ | 
| +        "--deps_js", | 
| +        rebase_path(invoker.deps_js, root_build_dir), | 
| +      ] | 
| +    } | 
| +    args += [ | 
| +      # Need "./" for script to find binary (cur dir is not on path). | 
| +      "./" + rebase_path(d8_path, root_build_dir), | 
| +    ] | 
| +    args += rebase_path(input_js, root_build_dir) + [ invoker.test_type ] | 
| +    if (v8_use_external_startup_data) { | 
| +      args += [ "--external=y" ] | 
| +    } else { | 
| +      args += [ "--external=n" ] | 
| +    } | 
| +    args += [ | 
| +      "{{source}}", | 
| +      "{{source_root_relative_dir}}/{{source_file_part}}", | 
| +    ] | 
| +    args += rebase_path(outputs, root_build_dir) | 
| + | 
| +    deps = [ | 
| +      "//v8:d8($host_toolchain)", | 
| +    ] | 
| +    if (defined(invoker.deps)) { | 
| +      deps += invoker.deps | 
| +    } | 
| +  } | 
| + | 
| +  if (defined(invoker.extra_js_files)) { | 
| +    copy_target_name = target_name + "_copy" | 
| +    copy(copy_target_name) { | 
| +      visibility = [ ":$source_set_name" ] | 
| +      sources = invoker.extra_js_files | 
| +      outputs = [ | 
| +        "$root_out_dir/test_data/{{source_root_relative_dir}}/{{source_file_part}}", | 
| +      ] | 
| +    } | 
| +  } | 
| + | 
| +  source_set(source_set_name) { | 
| +    testonly = true | 
| +    if (defined(invoker.visibility)) { | 
| +      visibility = invoker.visibility | 
| +    } | 
| +    sources = get_target_outputs(":$action_name") | 
| +    if (defined(invoker.defines)) { | 
| +      defines = invoker.defines | 
| +    } | 
| +    deps = [ | 
| +      ":$action_name", | 
| + | 
| +      # The generator implicitly makes includes from these targets. | 
| +      "//chrome/test:test_support", | 
| +      "//testing/gmock", | 
| +      "//testing/gtest", | 
| +      "//url", | 
| +    ] | 
| +    if (defined(invoker.deps)) { | 
| +      deps += invoker.deps | 
| +    } | 
| +    if (defined(invoker.extra_js_files)) { | 
| +      data_deps = [ ":$copy_target_name" ] | 
| +    } | 
| +  } | 
| +} | 
|  |