# Copyright 2015 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("//build/config/features.gni")

static_library("browser_sync") {
  sources = [
    "browser_sync_client.cc",
    "browser_sync_client.h",
    "browser_sync_switches.cc",
    "browser_sync_switches.h",
    "profile_sync_components_factory_impl.cc",
    "profile_sync_components_factory_impl.h",
    "profile_sync_service.cc",
    "profile_sync_service.h",
    "signin_confirmation_helper.cc",
    "signin_confirmation_helper.h",
    "sync_auth_manager.cc",
    "sync_auth_manager.h",
  ]

  public_deps = [
    "//components/sync",
  ]

  deps = [
    "//base",
    "//components/autofill/core/browser",
    "//components/autofill/core/common",
    "//components/history/core/browser",
    "//components/invalidation/impl",
    "//components/invalidation/public",
    "//components/password_manager/core/browser",
    "//components/prefs",
    "//components/reading_list/features:flags",
    "//components/signin/core/browser",
    "//components/sync_bookmarks",
    "//components/sync_sessions",
    "//components/version_info",
    "//components/version_info:generate_version_info",
    "//google_apis",
    "//net",
    "//services/identity/public/cpp",
    "//services/network/public/cpp",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "profile_sync_service_autofill_unittest.cc",
    "profile_sync_service_bookmark_unittest.cc",
    "profile_sync_service_startup_unittest.cc",
    "profile_sync_service_unittest.cc",
    "sync_auth_manager_unittest.cc",
  ]

  deps = [
    ":browser_sync",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/autofill/core/browser:test_support",
    "//components/autofill/core/common",
    "//components/bookmarks/browser",
    "//components/bookmarks/managed",
    "//components/bookmarks/test",
    "//components/history/core/browser",
    "//components/invalidation/impl",
    "//components/invalidation/public",
    "//components/prefs",
    "//components/signin/core/browser",
    "//components/signin/core/browser:internals_test_support",
    "//components/sync",
    "//components/sync:test_support_driver",
    "//components/sync:test_support_engine",
    "//components/sync:test_support_model",
    "//components/sync_bookmarks",
    "//components/sync_preferences",
    "//components/sync_preferences:test_support",
    "//components/sync_sessions",
    "//components/sync_sessions:test_support",
    "//components/version_info",
    "//components/version_info:generate_version_info",
    "//components/webdata/common",
    "//components/webdata_services:test_support",
    "//google_apis",
    "//net",
    "//services/identity/public/cpp:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "abstract_profile_sync_service_test.cc",
    "abstract_profile_sync_service_test.h",
    "profile_sync_service_mock.cc",
    "profile_sync_service_mock.h",
    "profile_sync_test_util.cc",
    "profile_sync_test_util.h",
    "test_http_bridge_factory.cc",
    "test_http_bridge_factory.h",
    "test_profile_sync_service.cc",
    "test_profile_sync_service.h",
  ]

  deps = [
    ":browser_sync",
    "//base",
    "//base/test:test_support",
    "//components/bookmarks/browser",
    "//components/history/core/browser",
    "//components/invalidation/impl",
    "//components/invalidation/impl:test_support",
    "//components/pref_registry",
    "//components/signin/core/browser",
    "//components/signin/core/browser:internals_test_support",
    "//components/sync",
    "//components/sync:test_support_driver",
    "//components/sync:test_support_engine",
    "//components/sync:test_support_model",
    "//components/sync_preferences:test_support",
    "//components/sync_sessions:test_support",
    "//google_apis",
    "//net:test_support",
    "//services/identity/public/cpp",
    "//services/identity/public/cpp:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//testing/gmock",
  ]
}
