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

# CryptAuth is a component which manages data about devices associated with a
# user's account. This component both sends data about the current device and
# requets data about associated devices.

assert(is_chromeos, "CryptAuth is Chrome OS only")

static_library("cryptauth") {
  sources = [
    "cryptauth_service.cc",
    "cryptauth_service.h",
  ]

  deps = [
    ":secure_message",
    "//base",
    "//chromeos",
    "//chromeos/components/multidevice",
    "//chromeos/components/proximity_auth/logging",
    "//chromeos/services/device_sync",
    "//chromeos/services/device_sync/proto:util",
    "//components/gcm_driver",
    "//components/gcm_driver/common",
    "//components/prefs",
    "//components/version_info",
    "//crypto",
    "//google_apis",
    "//net",
    "//services/identity/public/cpp",
  ]

  public_deps = [
    "//chromeos/services/device_sync/proto",
  ]
}

static_library("secure_message") {
  sources = [
    "secure_message_delegate.cc",
    "secure_message_delegate.h",
    "secure_message_delegate_impl.cc",
    "secure_message_delegate_impl.h",
  ]

  deps = [
    "//base",
    "//chromeos",
    "//chromeos/components/proximity_auth/logging",
  ]

  public_deps = [
    "//chromeos/services/device_sync/proto",
  ]
}

static_library("secure_message_test_support") {
  sources = [
    "fake_secure_message_delegate.cc",
    "fake_secure_message_delegate.h",
  ]

  deps = [
    ":secure_message",
    "//base",
  ]
}

static_library("test_support") {
  testonly = true

  sources = [
    "fake_cryptauth_service.cc",
    "fake_cryptauth_service.h",
  ]

  public_deps = [
    ":cryptauth",
    "//chromeos/components/multidevice",
    "//chromeos/services/device_sync/proto",
  ]

  deps = [
    ":secure_message",
    "//base",
    "//chromeos/components/proximity_auth/logging",
    "//chromeos/services/device_sync:test_support",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "fake_secure_message_delegate_unittest.cc",
  ]

  deps = [
    ":cryptauth",
    ":secure_message",
    ":secure_message_test_support",
    ":test_support",
    "//base/test:test_support",
    "//chromeos/components/multidevice",
    "//chromeos/components/multidevice:test_support",
    "//chromeos/services/device_sync/proto:util",
    "//components/gcm_driver:test_support",
    "//components/prefs:test_support",
    "//google_apis:test_support",
    "//net:test_support",
    "//services/identity/public/cpp:test_support",
    "//testing/gtest",
  ]
}
