# 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",
    "expiring_remote_device_cache.cc",
    "expiring_remote_device_cache.h",
    "foreground_eid_generator.cc",
    "foreground_eid_generator.h",
    "gcm_device_info_provider.h",
    "local_device_data_provider.cc",
    "local_device_data_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.cc",
    "remote_device.h",
    "remote_device_cache.cc",
    "remote_device_cache.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",
    "remote_device_ref.cc",
    "remote_device_ref.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",
    "software_feature_state.cc",
    "software_feature_state.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/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_id_provider.cc",
    "fake_cryptauth_device_id_provider.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_local_device_data_provider.cc",
    "mock_local_device_data_provider.h",
    "mock_sync_scheduler.cc",
    "mock_sync_scheduler.h",
    "remote_device_test_util.cc",
    "remote_device_test_util.h",
  ]

  public_deps = [
    ":cryptauth",
    "//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",
    "expiring_remote_device_cache_unittest.cc",
    "fake_secure_message_delegate_unittest.cc",
    "foreground_eid_generator_unittest.cc",
    "local_device_data_provider_unittest.cc",
    "raw_eid_generator_impl_unittest.cc",
    "remote_device_cache_unittest.cc",
    "remote_device_loader_unittest.cc",
    "remote_device_provider_impl_unittest.cc",
    "remote_device_ref_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",
    "//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",
  ]
}
