# 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_enroller_factory_impl.cc",
    "cryptauth_enroller_factory_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",
  ]

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

  deps = [
    "//base",
    "//chromeos/components/proximity_auth/logging",
    "//chromeos/services/device_sync/public/mojom",
    "//components/gcm_driver",
    "//net",
    "//services/identity/public/cpp",
    "//services/preferences/public/cpp",
    "//services/service_manager/public/cpp",
  ]
}

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

static_library("test_support") {
  testonly = true

  sources = [
    "fake_device_sync.cc",
    "fake_device_sync.h",
    "fake_device_sync_observer.cc",
    "fake_device_sync_observer.h",
  ]

  public_deps = [
    ":device_sync",
  ]

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

source_set("unit_tests") {
  testonly = true

  sources = [
    "device_sync_service_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/public/cpp:unit_tests",
    "//chromeos/services/device_sync/public/mojom",
    "//components/cryptauth",
    "//components/cryptauth:test_support",
    "//components/gcm_driver:test_support",
    "//components/prefs:test_support",
    "//services/identity/public/cpp:test_support",
    "//services/network:test_support",
    "//services/service_manager/public/cpp/test:test_support",
    "//testing/gtest",
  ]
}
