# Copyright 2016 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("//media/media_options.gni")
import("//testing/test.gni")
import("//third_party/protobuf/proto_library.gni")

proto_library("media_remoting_proto") {
  proto_out_dir = "media/remoting"
  sources = [
    "media_remoting_rpc.proto",
  ]
}

# This target is separate from "remoting" because this code is shared by the
# receiver implementation (currently outside of the Chromium project).
source_set("rpc") {
  sources = [
    "proto_enum_utils.cc",
    "proto_enum_utils.h",
    "proto_utils.cc",
    "proto_utils.h",
    "rpc_broker.cc",
    "rpc_broker.h",
  ]

  deps = [
    "//base",
    "//media",
  ]

  public_deps = [
    ":media_remoting_proto",
  ]
}

source_set("remoting") {
  sources = [
    "courier_renderer_factory.cc",
    "courier_renderer_factory.h",
    "metrics.cc",
    "metrics.h",
    "renderer_controller.cc",
    "renderer_controller.h",
  ]

  deps = [
    "//base",
    "//media",
    "//media/mojo/common",
    "//media/mojo/mojom:remoting",
    "//mojo/public/cpp/bindings",
    "//ui/gfx",
    "//url",
  ]

  if (enable_media_remoting_rpc) {
    sources += [
      "courier_renderer.cc",
      "courier_renderer.h",
      "demuxer_stream_adapter.cc",
      "demuxer_stream_adapter.h",
      "triggers.h",
    ]

    deps += [ ":rpc" ]
  }
}

source_set("media_remoting_tests") {
  testonly = true
  sources = [
    "fake_remoter.cc",
    "fake_remoter.h",
    "renderer_controller_unittest.cc",
  ]

  deps = [
    ":remoting",
    "//base",
    "//base/test:test_support",
    "//media:test_support",
    "//media/mojo/common",
    "//media/mojo/mojom:remoting",
    "//testing/gmock",
    "//testing/gtest",
    "//url",
  ]

  if (!is_android) {
    sources += [
      "courier_renderer_unittest.cc",
      "demuxer_stream_adapter_unittest.cc",
      "end2end_test_renderer.cc",
      "end2end_test_renderer.h",
      "fake_media_resource.cc",
      "fake_media_resource.h",
      "integration_test.cc",
      "proto_utils_unittest.cc",
      "receiver.cc",
      "receiver.h",
      "rpc_broker_unittest.cc",
      "stream_provider.cc",
      "stream_provider.h",
    ]

    deps += [
      ":rpc",
      "//media/test:pipeline_integration_test_base",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",
    ]
  }
}

test("media_remoting_unittests") {
  deps = [
    ":media_remoting_tests",
    "//media/test:run_all_unittests",
  ]
}
