# Copyright 2015 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("//build/config/features.gni")
import("//build/config/ui.gni")
import("//build/util/version.gni")
import("//remoting/remoting_version.gni")
import("//remoting/remoting_enable.gni")
import("//testing/test.gni")

# Various remoting targets need this version definition.
config("version") {
  defines = [ "VERSION=$chrome_version_full" ]
}

config("enable_webrtc_remoting_client") {
  if (!is_official_build && !is_nacl) {
    defines = [ "ENABLE_WEBRTC_REMOTING_CLIENT=1" ]
  }
}

group("remoting_all") {
  testonly = true

  deps = [
    #"//remoting:remoting_browser_test_resources",
    "//remoting:remoting_unittests",
    "//remoting/test:chromoting_test_driver",

    #"//remoting:remoting_webapp_unittests",
  ]

  # TODO(GYP): add is_mac
  if ((is_linux && !is_chromeos) || is_win) {
    deps += [ "//remoting/webapp" ]
  }

  if (is_win) {
    deps += [
      "//remoting:remoting_breakpad_tester",
      "//remoting/host:remoting_console",
      "//remoting/host:remoting_desktop",

      # "//remoting:remoting_host_installation",
    ]
  }

  if (is_android) {
    deps += [
      "//remoting/android:remoting_apk",
      "//remoting/android:remoting_test_apk",
    ]
  }

  if (enable_remoting_host) {
    deps += [
      "//remoting:remoting_perftests",
      "//remoting/host",
      "//remoting/host:remoting_native_messaging_manifests",
    ]

    if (!is_chromeos) {
      deps += [
        "//remoting/host:remoting_start_host",
        "//remoting/host/it2me:remote_assistance_host",
      ]
    }
  }

  if (enable_me2me_host) {
    deps += [ "//remoting/host:remoting_me2me_host" ]
    if (is_chrome_branded) {
      deps += [ "//remoting/host:remoting_me2me_host_archive" ]
    }
  }

  if (enable_nacl) {
    deps += [ "//remoting/tools/javascript_key_tester" ]
  }
}

if (is_win) {
  # GYP version: remoting/remoting_host_win.gypi:remoting_breakpad_tester
  executable("remoting_breakpad_tester") {
    deps = [
      "//base",
      "//remoting/host",
    ]

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

    sources = [
      "tools/breakpad_tester_win.cc",
    ]
  }
}

# GYP version: remoting/remoting_test.gypi:remoting_test_support
source_set("test_support") {
  testonly = true

  deps = [
    "//base",
    "//net",
    "//remoting/base",
    "//remoting/client",
    "//remoting/codec",
    "//remoting/protocol:test_support",
    "//remoting/resources",
    "//remoting/signaling:test_support",
    "//remoting/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]

  if (enable_configuration_policy) {
    deps += [
      "//components/policy:test_support",

      # TODO(zijiehe): This should belong to //components/policy:test_support
      "//components/prefs",
    ]
  }

  if (enable_remoting_host) {
    deps += [ "//remoting/host:test_support" ]
  }
}

# TODO(GYP) remoting_unittests on Mac. Needs to be tested.
if (!is_mac) {
  test("remoting_unittests") {
    defines = []
    libs = []

    configs += [
      ":version",

      # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
      "//build/config/compiler:no_size_t_to_int_warning",
    ]

    data = [
      "//net/data/ssl/certificates/ok_cert.pem",
      "//net/data/ssl/certificates/unittest.key.bin",
      "//net/data/ssl/certificates/unittest.selfsigned.der",
    ]

    deps = [
      ":test_support",
      "//base",
      "//google_apis",
      "//remoting/base:unit_tests",
      "//remoting/client:unit_tests",
      "//remoting/protocol:unit_tests",
      "//remoting/signaling:unit_tests",
      "//remoting/test:unit_tests",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/webrtc",
    ]

    if (enable_remoting_host) {
      deps += [
        "//remoting/codec:unit_tests",
        "//remoting/host:unit_tests",
        "//ui/gfx",
      ]
    }

    if (enable_webrtc) {
      deps += [ "//third_party/libjingle:libjingle_webrtc" ]
    }

    if (is_android) {
      deps += [ "//net/android:net_java" ]
    }

    if (is_win) {
      defines += [ "_ALT_NO_EXCEPTIONS" ]

      libs += [
        "rpcrt4.lib",
        "wtsapi32.lib",
      ]
    }

    if (enable_configuration_policy) {
      deps += [ "//components/policy:policy_component_test_support" ]
    }
  }

  if (enable_remoting_host) {
    test("remoting_perftests") {
      sources = [
        "test/codec_perftest.cc",
        "test/protocol_perftest.cc",
      ]

      configs += [ ":version" ]

      deps = [
        ":test_support",
        "//base",
        "//base/test:run_all_unittests",
        "//base/test:test_support",
        "//net:test_support",
        "//remoting/base",
        "//testing/gtest",
        "//third_party/libjingle",
        "//third_party/webrtc/modules/desktop_capture",
      ]

      if (enable_webrtc) {
        deps += [ "//third_party/libjingle:libjingle_webrtc" ]
      }
    }
  }
} else {
  group("remoting_unittests") {
  }
}
