# 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("//services/service_manager/public/cpp/service.gni")
import("//services/service_manager/public/service_manifest.gni")
import("//services/service_manager/public/tools/test/service_test.gni")
import("//testing/test.gni")

service("video_capture") {
  sources = [
    "service_main.cc",
  ]

  deps = [
    ":lib",
    "//mojo/public/cpp/system",
    "//services/video_capture/public/cpp",
    "//services/video_capture/public/interfaces",
  ]
}

service_manifest("manifest") {
  name = "video_capture"
  source = "service_manifest.json"
}

source_set("lib") {
  sources = [
    "device_factory_media_to_mojo_adapter.cc",
    "device_factory_media_to_mojo_adapter.h",
    "device_factory_provider_impl.cc",
    "device_factory_provider_impl.h",
    "device_media_to_mojo_adapter.cc",
    "device_media_to_mojo_adapter.h",
    "receiver_mojo_to_media_adapter.cc",
    "receiver_mojo_to_media_adapter.h",
    "scoped_access_permission_media_to_mojo_adapter.cc",
    "scoped_access_permission_media_to_mojo_adapter.h",
    "service_impl.cc",
    "service_impl.h",
    "testing_controls_impl.cc",
    "testing_controls_impl.h",
    "virtual_device_enabled_device_factory.cc",
    "virtual_device_enabled_device_factory.h",
    "virtual_device_mojo_adapter.cc",
    "virtual_device_mojo_adapter.h",
  ]

  public_deps = [
    "//base",
    "//media",
    "//media/capture:capture",
    "//media/capture/mojo:image_capture",
    "//media/mojo/common:common",
    "//mojo/common:common_base",
    "//services/service_manager/public/cpp",
    "//services/video_capture/public/cpp",
    "//services/video_capture/public/interfaces",
    "//services/video_capture/public/interfaces:constants",
    "//services/video_capture/public/uma",
  ]
}

source_set("tests") {
  testonly = true

  sources = [
    "test/device_factory_provider_connectortest.cc",
    "test/device_factory_provider_test.cc",
    "test/device_factory_provider_test.h",
    "test/device_factory_provider_unittest.cc",
    "test/fake_device_descriptor_test.cc",
    "test/fake_device_descriptor_test.h",
    "test/fake_device_descriptor_unittest.cc",
    "test/fake_device_test.cc",
    "test/fake_device_test.h",
    "test/fake_device_unittest.cc",
    "test/mock_device_factory.cc",
    "test/mock_device_factory.h",
    "test/mock_device_test.cc",
    "test/mock_device_test.h",
    "test/mock_device_unittest.cc",
    "test/mock_producer.cc",
    "test/mock_producer.h",
    "test/mock_receiver.cc",
    "test/mock_receiver.h",
    "test/virtual_device_unittest.cc",
  ]

  deps = [
    ":lib",
    ":video_capture",
    "//base/test:test_support",
    "//media/capture/mojo:capture_types",
    "//services/service_manager/public/cpp",
    "//services/service_manager/public/cpp:service_test_support",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx:test_support",
  ]

  data_deps = [
    ":video_capture",
  ]
}

service_manifest("unittest_manifest") {
  name = "video_capture_unittests"
  source = "test/service_unittest_manifest.json"
}

catalog("tests_catalog") {
  embedded_services = [ ":unittest_manifest" ]
  standalone_services = [ ":manifest" ]
}
