# Copyright 2017 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")

mojom("dial_utility_interfaces") {
  sources = [
    "dial_device_description_parser.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
  ]

  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
  use_once_callback = false
}

mojom("media_controller") {
  sources = [
    "media_controller.mojom",
    "media_status.mojom",
  ]

  public_deps = [
    "//mojo/common:common_custom_types",
  ]

  # TODO(crbug.com/699569): Convert to use the new JS bindings.
  use_new_js_bindings = false
}

mojom("media_router") {
  sources = [
    "media_router.mojom",
  ]

  public_deps = [
    ":media_controller",
    "//mojo/common:common_custom_types",
    "//net/interfaces:interfaces",
    "//url/mojo:url_mojom_gurl",
    "//url/mojo:url_mojom_origin",
  ]

  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
  use_once_callback = false

  # TODO(crbug.com/699569): Convert to use the new JS bindings.
  use_new_js_bindings = false
}

mojom("media_router_test_interfaces") {
  sources = [
    "media_router_traits_test_service.mojom",
  ]

  public_deps = [
    ":media_router",
  ]

  # TODO(crbug.com/714018): Convert the implementation to use OnceCallback.
  use_once_callback = false
}
