# Copyright 2018 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("//services/service_manager/public/service_manifest.gni")

assert(is_chromeos, "Non-ChromeOS builds cannot depend on //chromeos")

static_library("device_sync") {
  sources = [
    "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_factory_impl.cc",
    "cryptauth_enroller_factory_impl.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_gcm_manager.cc",
    "cryptauth_gcm_manager.h",
    "cryptauth_gcm_manager_impl.cc",
    "cryptauth_gcm_manager_impl.h",
    "device_sync_base.cc",
    "device_sync_base.h",
    "device_sync_impl.cc",
    "device_sync_impl.h",
    "device_sync_service.cc",
    "device_sync_service.h",
    "device_sync_type_converters.cc",
    "device_sync_type_converters.h",
    "network_request_error.cc",
    "network_request_error.h",
    "pref_names.cc",
    "pref_names.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",
    "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",
  ]

  public_deps = [
    "//chromeos/components/multidevice",
    "//chromeos/components/multidevice/logging",
    "//chromeos/services/device_sync/public/mojom",
    "//services/identity/public/mojom",
    "//services/service_manager/public/cpp",
  ]

  deps = [
    "//base",
    "//chromeos/components/multidevice",
    "//chromeos/components/multidevice/logging",
    "//chromeos/services/device_sync/proto:util",
    "//chromeos/services/device_sync/public/cpp",
    "//chromeos/services/device_sync/public/mojom",
    "//components/gcm_driver",
    "//net",
    "//services/identity/public/cpp",
    "//services/preferences/public/cpp",
    "//services/service_manager/public/cpp",
  ]

  visibility = [
    ":*",
    "//chrome/browser",
    "//chrome/test:test_support_ui",
    "//chromeos/services/device_sync/public/cpp:unit_tests",
  ]
}

service_manifest("manifest") {
  name = "device_sync"
  source = "manifest.json"
}

static_library("test_support") {
  testonly = true

  sources = [
    "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_device_sync.cc",
    "fake_device_sync.h",
    "fake_device_sync_observer.cc",
    "fake_device_sync_observer.h",
    "fake_remote_device_provider.cc",
    "fake_remote_device_provider.h",
    "fake_software_feature_manager.cc",
    "fake_software_feature_manager.h",
    "mock_cryptauth_client.cc",
    "mock_cryptauth_client.h",
    "mock_sync_scheduler.cc",
    "mock_sync_scheduler.h",
  ]

  public_deps = [
    ":device_sync",
  ]

  deps = [
    ":device_sync",
    "//base",
    "//chromeos/services/device_sync/public/cpp",
    "//chromeos/services/device_sync/public/mojom",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "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_sync_service_unittest.cc",
    "remote_device_loader_unittest.cc",
    "remote_device_provider_impl_unittest.cc",
    "software_feature_manager_impl_unittest.cc",
    "sync_scheduler_impl_unittest.cc",
  ]

  deps = [
    ":device_sync",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//chromeos",
    "//chromeos/components/multidevice",
    "//chromeos/components/multidevice:test_support",
    "//chromeos/services/device_sync/proto:util",
    "//chromeos/services/device_sync/public/cpp:test_support",
    "//chromeos/services/device_sync/public/cpp:unit_tests",
    "//chromeos/services/device_sync/public/mojom",
    "//components/gcm_driver:test_support",
    "//components/prefs:test_support",
    "//net/traffic_annotation:test_support",
    "//services/identity/public/cpp:test_support",
    "//services/network:test_support",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
