# Copyright 2018 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("//mojo/public/tools/bindings/mojom.gni")

template("chrome_cleaner_mojom") {
  mojom(target_name) {
    # chrome_cleaner does not interface with blink or any language except C++,
    # so build only the basic (cpp) interface variant.
    disable_variants = true

    # Forward all other variables unchanged.
    forward_variables_from(invoker, "*", [ "disable_variants" ])
  }
}

chrome_cleaner_mojom("engine_sandbox_interface") {
  sources = [
    "cleaner_engine_requests.mojom",
    "engine_file_requests.mojom",
    "engine_requests.mojom",
    "engine_sandbox.mojom",
    "pup.mojom",
    "string16_embedded_nulls.mojom",
    "windows_handle.mojom",
  ]
  deps = [
    "//components/chrome_cleaner/public/interfaces:interfaces",
    "//mojo/public/mojom/base",
  ]
}

chrome_cleaner_mojom("json_parser_interface") {
  sources = [
    "json_parser.mojom",
  ]
  deps = [
    "//mojo/public/mojom/base",
  ]
}

chrome_cleaner_mojom("engine_sandbox_test_interface") {
  testonly = true

  sources = [
    "test_pup_typemap.mojom",
    "test_string16_embedded_nulls.mojom",
  ]

  deps = [
    ":engine_sandbox_interface",
  ]
}

chrome_cleaner_mojom("mojo_sandbox_hooks_test_interface") {
  testonly = true

  sources = [
    "test_mojo_sandbox_hooks.mojom",
  ]
}
