# 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("//remoting/build/config/remoting_build.gni")

source_set("chromeos") {
  sources = [
    "ash_display_util.cc",
    "ash_display_util.h",
    "aura_desktop_capturer.cc",
    "aura_desktop_capturer.h",
    "clipboard_aura.cc",
    "clipboard_aura.h",
    "features.cc",
    "features.h",
    "message_box.cc",
    "message_box.h",
    "mouse_cursor_monitor_aura.cc",
    "mouse_cursor_monitor_aura.h",
    "point_transformer.cc",
    "point_transformer.h",
    "skia_bitmap_desktop_frame.cc",
    "skia_bitmap_desktop_frame.h",
  ]

  public_deps = [
    "//ash",
    "//build:chromeos_buildflags",
    "//cc",
    "//gpu/command_buffer/common",
    "//remoting/protocol",
    "//skia",
    "//third_party/webrtc_overrides:webrtc_component",
    "//ui/aura",
    "//ui/base/cursor",
    "//ui/compositor",
    "//ui/events",
    "//ui/views",
  ]

  deps = [
    "//remoting/base:base",
    "//remoting/host:clipboard",
    "//ui/aura/cursor",
    "//ui/base/cursor/mojom:cursor_type",
    "//ui/display/manager",
  ]
}

# ChromeOS enterprise specific stuff that is also accessed from other areas
# like //remoting/host/it2me.
# Split out in its own target to prevent cyclic dependencies.
source_set("enterprise_support") {
  sources = [ "chromeos_enterprise_params.h" ]
}

source_set("remoting_service") {
  sources = [
    "remote_support_host_ash.cc",
    "remote_support_host_ash.h",
    "remoting_service.cc",
    "remoting_service.h",
  ]

  public_deps = [
    ":enterprise_support",
    "//remoting/host/it2me:chrome_os_host",
  ]

  configs += [ "//remoting/build/config:version" ]

  deps = [
    "//chrome/browser:browser_process",
    "//content/public/browser:browser",
    "//mojo/public/cpp/bindings",
    "//remoting/base:base",
    "//remoting/host",
    "//remoting/host/mojom:mojom",
  ]
}

static_library("host_event_reporter_impl") {
  sources = [
    "host_event_reporter_impl.cc",
    "host_event_reporter_impl.h",
  ]
  public_deps = [
    "//base",
    "//chrome/browser/policy/messaging_layer/proto:crd_event_proto",
    "//components/reporting/proto:record_constants",
    "//remoting/host:common",
    "//remoting/protocol",
  ]
}

# All unit tests are built as part of the //remoting/host:unit_tests target
# and must be one target named "unit_tests".
source_set("reporter_unit_tests") {
  testonly = true
  sources = [ "host_event_reporter_impl_unittest.cc" ]
  deps = [
    ":host_event_reporter_impl",
    "//base",
    "//base/test:test_support",
    "//remoting/host:common",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

# The host portions of the remoting unit tests.
source_set("unit_tests") {
  testonly = true

  sources = [
    "aura_desktop_capturer_unittest.cc",
    "clipboard_aura_unittest.cc",
    "scoped_fake_ash_display_util.cc",
    "scoped_fake_ash_display_util.h",
  ]

  configs += [ "//remoting/build/config:version" ]

  deps = [
    ":chromeos",
    "//base/test:test_support",
    "//remoting/host:common",
    "//remoting/host:test_support",
    "//remoting/proto",
    "//remoting/resources",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
    "//ui/display/manager",
  ]
}
