# 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 = [
    "authenticator.cc",
    "authenticator.h",
    "background_eid_generator.cc",
    "background_eid_generator.h",
    "connection.cc",
    "connection.h",
    "cryptauth_api_call_flow.cc",
    "cryptauth_api_call_flow.h",
    "cryptauth_client.h",
    "cryptauth_client_impl.cc",
    "cryptauth_client_impl.h",
    "cryptauth_device_manager.cc",
    "cryptauth_device_manager.h",
    "cryptauth_device_manager_impl.cc",
    "cryptauth_device_manager_impl.h",
    "cryptauth_enroller.h",
    "cryptauth_enroller_impl.cc",
    "cryptauth_enroller_impl.h",
    "cryptauth_enrollment_manager.cc",
    "cryptauth_enrollment_manager.h",
    "cryptauth_enrollment_manager_impl.cc",
    "cryptauth_enrollment_manager_impl.h",
    "cryptauth_enrollment_utils.cc",
    "cryptauth_enrollment_utils.h",
    "cryptauth_gcm_manager.cc",
    "cryptauth_gcm_manager.h",
    "cryptauth_gcm_manager_impl.cc",
    "cryptauth_gcm_manager_impl.h",
    "cryptauth_service.cc",
    "cryptauth_service.h",
    "data_with_timestamp.cc",
    "data_with_timestamp.h",
    "device_classifier_util.cc",
    "device_classifier_util.h",
    "device_to_device_authenticator.cc",
    "device_to_device_authenticator.h",
    "device_to_device_initiator_helper.cc",
    "device_to_device_initiator_helper.h",
    "device_to_device_secure_context.cc",
    "device_to_device_secure_context.h",
    "foreground_eid_generator.cc",
    "foreground_eid_generator.h",
    "gcm_device_info_provider.h",
    "network_request_error.cc",
    "network_request_error.h",
    "pref_names.cc",
    "pref_names.h",
    "raw_eid_generator.h",
    "raw_eid_generator_impl.cc",
    "raw_eid_generator_impl.h",
    "remote_device_loader.cc",
    "remote_device_loader.h",
    "remote_device_provider.cc",
    "remote_device_provider.h",
    "remote_device_provider_impl.cc",
    "remote_device_provider_impl.h",
    "secure_channel.cc",
    "secure_channel.h",
    "secure_context.h",
    "secure_message_delegate.cc",
    "secure_message_delegate.h",
    "secure_message_delegate_impl.cc",
    "secure_message_delegate_impl.h",
    "session_keys.cc",
    "session_keys.h",
    "software_feature_manager.h",
    "software_feature_manager_impl.cc",
    "software_feature_manager_impl.h",
    "switches.cc",
    "switches.h",
    "sync_scheduler.cc",
    "sync_scheduler.h",
    "sync_scheduler_impl.cc",
    "sync_scheduler_impl.h",
    "wire_message.cc",
    "wire_message.h",
  ]

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

  public_deps = [
    "//components/cryptauth/proto",
  ]

  # TODO (hansberry): Resolve this.
  allow_circular_includes_from = [ "//components/cryptauth/ble" ]
}

static_library("test_support") {
  testonly = true

  sources = [
    "device_to_device_responder_operations.cc",
    "device_to_device_responder_operations.h",
    "fake_authenticator.cc",
    "fake_authenticator.h",
    "fake_background_eid_generator.cc",
    "fake_background_eid_generator.h",
    "fake_connection.cc",
    "fake_connection.h",
    "fake_cryptauth_device_manager.cc",
    "fake_cryptauth_device_manager.h",
    "fake_cryptauth_enrollment_manager.cc",
    "fake_cryptauth_enrollment_manager.h",
    "fake_cryptauth_gcm_manager.cc",
    "fake_cryptauth_gcm_manager.h",
    "fake_cryptauth_service.cc",
    "fake_cryptauth_service.h",
    "fake_gcm_device_info_provider.cc",
    "fake_gcm_device_info_provider.h",
    "fake_remote_device_provider.cc",
    "fake_remote_device_provider.h",
    "fake_secure_channel.cc",
    "fake_secure_channel.h",
    "fake_secure_context.cc",
    "fake_secure_context.h",
    "fake_secure_message_delegate.cc",
    "fake_secure_message_delegate.h",
    "fake_software_feature_manager.cc",
    "fake_software_feature_manager.h",
    "mock_cryptauth_client.cc",
    "mock_cryptauth_client.h",
    "mock_foreground_eid_generator.cc",
    "mock_foreground_eid_generator.h",
    "mock_sync_scheduler.cc",
    "mock_sync_scheduler.h",
  ]

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

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

source_set("unit_tests") {
  testonly = true
  sources = [
    "background_eid_generator_unittest.cc",
    "connection_unittest.cc",
    "cryptauth_api_call_flow_unittest.cc",
    "cryptauth_client_impl_unittest.cc",
    "cryptauth_device_manager_impl_unittest.cc",
    "cryptauth_enroller_impl_unittest.cc",
    "cryptauth_enrollment_manager_impl_unittest.cc",
    "cryptauth_gcm_manager_impl_unittest.cc",
    "device_to_device_authenticator_unittest.cc",
    "device_to_device_operations_unittest.cc",
    "device_to_device_secure_context_unittest.cc",
    "fake_secure_message_delegate_unittest.cc",
    "foreground_eid_generator_unittest.cc",
    "raw_eid_generator_impl_unittest.cc",
    "remote_device_loader_unittest.cc",
    "remote_device_provider_impl_unittest.cc",
    "secure_channel_unittest.cc",
    "session_keys_unittest.cc",
    "software_feature_manager_impl_unittest.cc",
    "sync_scheduler_impl_unittest.cc",
    "wire_message_unittest.cc",
  ]

  deps = [
    ":cryptauth",
    ":test_support",
    "//base/test:test_support",
    "//chromeos/components/multidevice",
    "//chromeos/components/multidevice:test_support",
    "//components/cryptauth/ble:unit_tests",
    "//components/cryptauth/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",
  ]
}
