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

component("prefs") {
  sources = [
    "command_line_pref_store.cc",
    "command_line_pref_store.h",
    "default_pref_store.cc",
    "default_pref_store.h",
    "in_memory_pref_store.cc",
    "in_memory_pref_store.h",
    "json_pref_store.cc",
    "json_pref_store.h",
    "overlay_user_pref_store.cc",
    "overlay_user_pref_store.h",
    "persistent_pref_store.cc",
    "persistent_pref_store.h",
    "pref_change_registrar.cc",
    "pref_change_registrar.h",
    "pref_filter.h",
    "pref_member.cc",
    "pref_member.h",
    "pref_notifier.h",
    "pref_notifier_impl.cc",
    "pref_notifier_impl.h",
    "pref_observer.h",
    "pref_registry.cc",
    "pref_registry.h",
    "pref_registry_simple.cc",
    "pref_registry_simple.h",
    "pref_service.cc",
    "pref_service.h",
    "pref_service_factory.cc",
    "pref_service_factory.h",
    "pref_store.cc",
    "pref_store.h",
    "pref_value_map.cc",
    "pref_value_map.h",
    "pref_value_store.cc",
    "pref_value_store.h",
    "prefs_export.h",
    "scoped_user_pref_update.cc",
    "scoped_user_pref_update.h",
    "value_map_pref_store.cc",
    "value_map_pref_store.h",
    "writeable_pref_store.cc",
    "writeable_pref_store.h",
  ]

  defines = [ "COMPONENTS_PREFS_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//base/util/values:values_util",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "mock_pref_change_callback.cc",
    "mock_pref_change_callback.h",
    "pref_store_observer_mock.cc",
    "pref_store_observer_mock.h",
    "testing_pref_service.cc",
    "testing_pref_service.h",
    "testing_pref_store.cc",
    "testing_pref_store.h",
  ]

  public_deps = [
    ":prefs",
  ]
  deps = [
    "//base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "default_pref_store_unittest.cc",
    "in_memory_pref_store_unittest.cc",
    "json_pref_store_unittest.cc",
    "overlay_user_pref_store_unittest.cc",
    "persistent_pref_store_unittest.cc",
    "persistent_pref_store_unittest.h",
    "pref_change_registrar_unittest.cc",
    "pref_member_unittest.cc",
    "pref_notifier_impl_unittest.cc",
    "pref_service_unittest.cc",
    "pref_value_map_unittest.cc",
    "pref_value_store_unittest.cc",
    "scoped_user_pref_update_unittest.cc",
  ]

  deps = [
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
