# 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",
  ]
}

static_library("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.h",
    "internal/proto_database_wrapper.cc",
    "internal/proto_database_wrapper.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.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",
  ]
  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_wrapper_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 = [
    ":test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
