# 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_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",
    "sync_user_settings_impl.cc",
    "sync_user_settings_impl.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: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: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",
  ]
}
