# 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("//testing/test.gni")

source_set("lib") {
  sources = [
    "broadcasting_receiver.cc",
    "broadcasting_receiver.h",
    "device_factory_media_to_mojo_adapter.cc",
    "device_factory_media_to_mojo_adapter.h",
    "device_media_to_mojo_adapter.cc",
    "device_media_to_mojo_adapter.h",
    "push_video_stream_subscription_impl.cc",
    "push_video_stream_subscription_impl.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",
    "shared_memory_virtual_device_mojo_adapter.cc",
    "shared_memory_virtual_device_mojo_adapter.h",
    "testing_controls_impl.cc",
    "testing_controls_impl.h",
    "texture_virtual_device_mojo_adapter.cc",
    "texture_virtual_device_mojo_adapter.h",
    "video_capture_service_impl.cc",
    "video_capture_service_impl.h",
    "video_source_impl.cc",
    "video_source_impl.h",
    "video_source_provider_impl.cc",
    "video_source_provider_impl.h",
    "virtual_device_enabled_device_factory.cc",
    "virtual_device_enabled_device_factory.h",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]

  public_deps = [
    "//base",
    "//media",
    "//media/capture:capture",
    "//media/capture/mojom:image_capture",
    "//media/mojo/common:common",
    "//mojo/public/cpp/system",
    "//services/video_capture/public/cpp",
    "//services/video_capture/public/mojom",
    "//services/video_capture/public/mojom:constants",
    "//services/video_capture/public/uma",
    "//services/viz/public/cpp/gpu",
  ]

  deps = [
    "//media/capture:capture_switches",
  ]

  if (is_chromeos) {
    public_deps += [ "//media/capture/video/chromeos/mojom:cros_camera" ]
  }
}

source_set("tests") {
  testonly = true

  sources = [
    "broadcasting_receiver_unittest.cc",
    "device_media_to_mojo_adapter_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_shared_access_unittest.cc",
    "test/mock_device_test.cc",
    "test/mock_device_test.h",
    "test/mock_device_unittest.cc",
    "test/mock_devices_changed_observer.cc",
    "test/mock_devices_changed_observer.h",
    "test/service_lifecycle_unittest.cc",
    "test/video_capture_service_test.cc",
    "test/video_capture_service_test.h",
    "test/video_capture_service_unittest.cc",
    "test/virtual_device_unittest.cc",
    "texture_virtual_device_mojo_adapter_unittest.cc",
  ]

  deps = [
    ":lib",
    "//base/test:test_support",
    "//media/capture:test_support",
    "//media/capture/mojom:video_capture",
    "//services/video_capture/public/cpp:mocks",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/gfx:test_support",
  ]
}
