# Copyright 2014 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.

static_library("suggestions") {
  sources = [
    "blacklist_store.cc",
    "blacklist_store.h",
    "suggestions_pref_names.cc",
    "suggestions_pref_names.h",
    "suggestions_service.h",
    "suggestions_service_impl.cc",
    "suggestions_service_impl.h",
    "suggestions_store.cc",
    "suggestions_store.h",
    "webui/suggestions_source.cc",
    "webui/suggestions_source.h",
  ]

  public_deps = [
    "//base",
    "//components/prefs",
    "//components/suggestions/proto",
    "//net",
    "//ui/base",
    "//ui/gfx",
    "//url",
  ]
  deps = [
    "//components/google/core/browser",
    "//components/keyed_service/core",
    "//components/pref_registry",
    "//components/sync",
    "//components/variations",
    "//components/variations/net",
    "//google_apis",
    "//services/identity/public/cpp",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "blacklist_store_unittest.cc",
    "suggestions_service_impl_unittest.cc",
    "suggestions_store_unittest.cc",
  ]
  deps = [
    ":suggestions",
    "//base/test:test_support",
    "//components/sync:test_support",
    "//components/sync_preferences:test_support",
    "//net:test_support",
    "//services/identity/public/cpp",
    "//services/identity/public/cpp:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
