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

import("//third_party/protobuf/proto_library.gni")

proto_library("proto") {
  sources = [
    "internal/proto/shared_db_metadata.proto",
  ]
}

component("leveldb_proto") {
  sources = [
    "internal/leveldb_database.cc",
    "internal/leveldb_database.h",
    "internal/leveldb_proto_feature_list.cc",
    "internal/leveldb_proto_feature_list.h",
    "internal/migration_delegate.cc",
    "internal/migration_delegate.h",
    "internal/proto_database_impl.cc",
    "internal/proto_database_impl.h",
    "internal/proto_database_selector.cc",
    "internal/proto_database_selector.h",
    "internal/proto_leveldb_wrapper.cc",
    "internal/proto_leveldb_wrapper.h",
    "internal/proto_leveldb_wrapper_metrics.cc",
    "internal/proto_leveldb_wrapper_metrics.h",
    "internal/shared_proto_database.cc",
    "internal/shared_proto_database.h",
    "internal/shared_proto_database_client.cc",
    "internal/shared_proto_database_client.h",
    "internal/shared_proto_database_provider.cc",
    "internal/shared_proto_database_provider.h",
    "internal/unique_proto_database.cc",
    "internal/unique_proto_database.h",
    "public/proto_database.cc",
    "public/proto_database.h",
    "public/proto_database_provider.cc",
    "public/proto_database_provider.h",
    "public/shared_proto_database_client_list.cc",
    "public/shared_proto_database_client_list.h",
  ]
  defines = [ "IS_LEVELDB_PROTO_IMPL" ]
  deps = [
    ":proto",
  ]

  public_deps = [
    "//base",
    "//components/keyed_service/core",
    "//third_party/leveldatabase",
  ]
}

source_set("test_support") {
  testonly = true
  sources = [
    "testing/fake_db.h",
  ]

  public_deps = [
    ":leveldb_proto",
    "//base",
    "//base/test:test_support",
    "//components/leveldb_proto/testing/proto",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "internal/proto_database_impl_unittest.cc",
    "internal/shared_proto_database_client_list_unittest.cc",
    "internal/shared_proto_database_client_unittest.cc",
    "internal/shared_proto_database_unittest.cc",
    "internal/unique_proto_database_unittest.cc",
  ]
  deps = [
    ":proto",
    ":test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
