# 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 = [
    "aura_desktop_capturer.cc",
    "aura_desktop_capturer.h",
    "clipboard_aura.cc",
    "clipboard_aura.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",
    "//cc",
    "//gpu/command_buffer/common",
    "//ppapi/host",
    "//remoting/protocol",
    "//skia",
    "//third_party/webrtc/modules/desktop_capture",
    "//ui/aura",
    "//ui/compositor",
    "//ui/events",
    "//ui/views",
  ]
}

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

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

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

  deps = [
    "//remoting/host:common",
    "//remoting/host:test_support",
    "//remoting/proto",
    "//remoting/resources",
    "//skia",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
