# Copyright 2014 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.

static_library("client") {
  sources = [
    "chromoting_client.cc",
    "chromoting_client.h",
    "client_context.cc",
    "client_context.h",
    "client_telemetry_logger.cc",
    "client_telemetry_logger.h",
    "client_user_interface.h",
    "connect_to_host_info.cc",
    "connect_to_host_info.h",
    "cursor_shape_stub_proxy.cc",
    "cursor_shape_stub_proxy.h",
    "empty_cursor_filter.cc",
    "empty_cursor_filter.h",
    "feedback_data.cc",
    "feedback_data.h",
    "host_experiment_sender.cc",
    "host_experiment_sender.h",
    "in_memory_log_handler.cc",
    "in_memory_log_handler.h",
    "queued_task_poster.cc",
    "queued_task_poster.h",
    "software_video_renderer.cc",
    "software_video_renderer.h",
  ]

  configs += [
    "//build/config/compiler:wexit_time_destructors",
    "//remoting/build/config:version",
    "//remoting/build/config:enable_webrtc_remoting_client",
  ]

  public_deps = [
    "//remoting/base",
  ]

  deps = [
    "//remoting/client/audio",
    "//remoting/codec:decoder",
    "//remoting/protocol",
    "//third_party/libyuv",
    "//third_party/webrtc/modules/desktop_capture:primitives",
    "//ui/events:dom_keycode_converter",
  ]

  libs = []

  if (is_nacl) {
    sources -= [ "client_telemetry_logger.cc" ]
  } else {
    sources += [
      "chromoting_client_runtime.cc",
      "chromoting_client_runtime.h",
      "chromoting_session.cc",
      "chromoting_session.h",
      "dual_buffer_frame_consumer.cc",
      "dual_buffer_frame_consumer.h",
    ]
    deps += [
      "//mojo/core/embedder",
      "//remoting/base:authorization",
      "//remoting/client/input",
      "//remoting/client/ui",
      "//services/network:network_service",
      "//services/network/public/mojom",
    ]

    if (!is_chromeos) {
      # GestureInterpreter depends on //remoting/client/display, which currently
      # doesn't build on CrOS. crbug.com/869578
      sources += [
        "gesture_interpreter.cc",
        "gesture_interpreter.h",
      ]

      deps += [ "//remoting/client/display" ]
    }
  }
  if (is_android) {
    libs += [ "android" ]
  }
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "chromoting_client_runtime_unittest.cc",
    "client_telemetry_logger_unittest.cc",
    "dual_buffer_frame_consumer_unittest.cc",
    "empty_cursor_filter_unittest.cc",
    "queued_task_poster_unittest.cc",
    "software_video_renderer_unittest.cc",
  ]

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

  deps = [
    ":client",
    "//remoting/proto",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/webrtc/rtc_base:rtc_base_approved",
  ]
}
