# 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("sync_bookmarks") {
  sources = [
    "bookmark_local_changes_builder.cc",
    "bookmark_local_changes_builder.h",
    "bookmark_model_merger.cc",
    "bookmark_model_merger.h",
    "bookmark_model_observer_impl.cc",
    "bookmark_model_observer_impl.h",
    "bookmark_model_type_processor.cc",
    "bookmark_model_type_processor.h",
    "bookmark_remote_updates_handler.cc",
    "bookmark_remote_updates_handler.h",
    "bookmark_specifics_conversions.cc",
    "bookmark_specifics_conversions.h",
    "bookmark_sync_service.cc",
    "bookmark_sync_service.h",
    "synced_bookmark_tracker.cc",
    "synced_bookmark_tracker.h",
  ]

  deps = [
    "//base",
    "//components/bookmarks/browser",
    "//components/favicon/core",
    "//components/history/core/browser",
    "//components/keyed_service/core:core",
    "//components/sync",
    "//components/undo",
    "//ui/base",
    "//ui/gfx",
  ]
}

source_set("unit_tests") {
  testonly = true

  sources = [
    "bookmark_model_merger_unittest.cc",
    "bookmark_model_observer_impl_unittest.cc",
    "bookmark_model_type_processor_unittest.cc",
    "bookmark_remote_updates_handler_unittest.cc",
    "bookmark_specifics_conversions_unittest.cc",
    "synced_bookmark_tracker_unittest.cc",
  ]

  deps = [
    ":sync_bookmarks",
    "//base",
    "//base/test:test_support",
    "//components/bookmarks/browser",
    "//components/bookmarks/test",
    "//components/favicon/core/test:test_support",
    "//components/history/core/browser",
    "//components/prefs:test_support",
    "//components/sync:test_support",
    "//components/undo",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
