# 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/interfaces: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/interfaces: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",
  ]
}
