| Index: mojo/public/tools/bindings/mojom.gni
 | 
| diff --git a/mojo/public/tools/bindings/mojom.gni b/mojo/public/tools/bindings/mojom.gni
 | 
| index 174e5b88ffa3b77b382351edc0d5dfbd9941031d..61f43e59a3055f52800fce60353c85a02bcf790e 100644
 | 
| --- a/mojo/public/tools/bindings/mojom.gni
 | 
| +++ b/mojo/public/tools/bindings/mojom.gni
 | 
| @@ -25,6 +25,13 @@
 | 
|  #       Mojo environment implementation. Defaults to |true| and in general
 | 
|  #       should only be overridden by mojom targets within the Mojo EDK.
 | 
|  #
 | 
| +#   typemaps (optional)
 | 
| +#       A list of typemap files to apply during bindings generation.
 | 
| +#
 | 
| +#   variant (optional)
 | 
| +#       A variant name to apply to generated bindings. Variant influences
 | 
| +#       generated source filenames as wells the symbols they define.
 | 
| +#
 | 
|  #   testonly (optional)
 | 
|  #
 | 
|  #   visibility (optional)
 | 
| @@ -102,15 +109,26 @@ template("mojom") {
 | 
|        "$generator_root/pylib/mojom/parse/parser.py",
 | 
|        "$generator_root/pylib/mojom/parse/translate.py",
 | 
|      ]
 | 
| -    generator_cpp_outputs = [
 | 
| -      "{{source_gen_dir}}/{{source_name_part}}.mojom.cc",
 | 
| -      "{{source_gen_dir}}/{{source_name_part}}.mojom.h",
 | 
| -      "{{source_gen_dir}}/{{source_name_part}}.mojom-internal.h",
 | 
| -    ]
 | 
| -    generator_js_outputs =
 | 
| -        [ "{{source_gen_dir}}/{{source_name_part}}.mojom.js" ]
 | 
| -    generator_java_outputs =
 | 
| -        [ "{{source_gen_dir}}/{{source_name_part}}.mojom.srcjar" ]
 | 
| +    if (defined(invoker.variant)) {
 | 
| +      variant = invoker.variant
 | 
| +      generator_cpp_outputs = [
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom-${variant}.cc",
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom-${variant}.h",
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom-${variant}-internal.h",
 | 
| +      ]
 | 
| +      generator_js_outputs = []
 | 
| +      generator_java_outputs = []
 | 
| +    } else {
 | 
| +      generator_cpp_outputs = [
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom.cc",
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom.h",
 | 
| +        "{{source_gen_dir}}/{{source_name_part}}.mojom-internal.h",
 | 
| +      ]
 | 
| +      generator_js_outputs =
 | 
| +          [ "{{source_gen_dir}}/{{source_name_part}}.mojom.js" ]
 | 
| +      generator_java_outputs =
 | 
| +          [ "{{source_gen_dir}}/{{source_name_part}}.mojom.srcjar" ]
 | 
| +    }
 | 
|    }
 | 
|  
 | 
|    if (defined(invoker.sources)) {
 | 
| @@ -140,6 +158,29 @@ template("mojom") {
 | 
|            ]
 | 
|          }
 | 
|        }
 | 
| +
 | 
| +      if (defined(invoker.variant)) {
 | 
| +        args += [
 | 
| +          "--variant",
 | 
| +          invoker.variant,
 | 
| +          "-g",
 | 
| +          "c++",
 | 
| +        ]
 | 
| +      } else {
 | 
| +        args += [
 | 
| +          "-g",
 | 
| +          "c++,javascript,java",
 | 
| +        ]
 | 
| +      }
 | 
| +
 | 
| +      if (defined(invoker.typemaps)) {
 | 
| +        foreach(typemap, invoker.typemaps) {
 | 
| +          args += [
 | 
| +            "--typemap",
 | 
| +            rebase_path(typemap, root_build_dir),
 | 
| +          ]
 | 
| +        }
 | 
| +      }
 | 
|      }
 | 
|    }
 | 
|  
 | 
| @@ -150,7 +191,7 @@ template("mojom") {
 | 
|      if (defined(invoker.testonly)) {
 | 
|        testonly = invoker.testonly
 | 
|      }
 | 
| -    if (defined(invoker.sources)) {
 | 
| +    if (defined(invoker.sources) && !defined(invoker.variant)) {
 | 
|        data = process_file_template(invoker.sources, generator_js_outputs)
 | 
|      }
 | 
|  
 | 
| @@ -225,7 +266,7 @@ template("mojom") {
 | 
|      }
 | 
|    }
 | 
|  
 | 
| -  if (is_android) {
 | 
| +  if (is_android && !defined(invoker.variant)) {
 | 
|      import("//build/config/android/rules.gni")
 | 
|  
 | 
|      java_srcjar_target_name = target_name + "_java_sources"
 | 
| 
 |