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

if (is_android) {
  import("//build/config/android/rules.gni")
}

static_library("consent_auditor") {
  sources = [
    "consent_auditor.h",
    "consent_auditor_impl.cc",
    "consent_auditor_impl.h",
    "consent_sync_bridge.h",
    "consent_sync_bridge_impl.cc",
    "consent_sync_bridge_impl.h",
    "pref_names.cc",
    "pref_names.h",
  ]

  deps = [
    "//components/keyed_service/core",
    "//components/prefs",
    "//components/sync",
  ]
}

if (is_android) {
  java_cpp_enum("consent_auditor_java") {
    sources = [
      "consent_auditor.h",
    ]
  }
}

source_set("test_support") {
  testonly = true
  sources = [
    "fake_consent_auditor.cc",
    "fake_consent_auditor.h",
  ]

  deps = [
    ":consent_auditor",
    "//components/sync",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "consent_auditor_impl_unittest.cc",
    "consent_sync_bridge_impl_unittest.cc",
  ]

  deps = [
    ":consent_auditor",
    "//base/test:test_support",
    "//components/prefs:test_support",
    "//components/sync",
    "//components/sync:test_support_driver",
    "//components/sync:test_support_model",
    "//components/variations:test_support",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
