# 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("//build/config/jumbo.gni")
import("//testing/test.gni")

jumbo_static_library("rappor") {
  sources = [
    "bloom_filter.cc",
    "bloom_filter.h",
    "byte_vector_utils.cc",
    "byte_vector_utils.h",
    "log_uploader.cc",
    "log_uploader.h",
    "log_uploader_interface.h",
    "rappor_metric.cc",
    "rappor_metric.h",
    "rappor_parameters.cc",
    "rappor_pref_names.cc",
    "rappor_pref_names.h",
    "rappor_prefs.cc",
    "rappor_prefs.h",
    "rappor_service_impl.cc",
    "rappor_service_impl.h",
    "rappor_utils.cc",
    "reports.cc",
    "reports.h",
    "sample.cc",
    "sampler.cc",
    "sampler.h",
  ]

  public_deps = [
    "//components/rappor/proto",
    "//components/rappor/public",
  ]

  deps = [
    "//base",
    "//components/metrics",
    "//components/prefs",
    "//components/variations",
    "//crypto",
    "//net",
    "//services/network/public/cpp:cpp",
    "//third_party/smhasher:cityhash",
  ]
}

jumbo_static_library("rappor_recorder") {
  sources = [
    "rappor_recorder_impl.cc",
    "rappor_recorder_impl.h",
  ]

  public_deps = [
    "//base",
    "//components/rappor/public/interfaces",
  ]

  deps = [
    ":rappor",
    "//mojo/public/cpp/bindings",
  ]
}

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "test_log_uploader.cc",
    "test_log_uploader.h",
    "test_rappor_service.cc",
    "test_rappor_service.h",
  ]

  public_deps = [
    ":rappor",
  ]
  deps = [
    "//base",
    "//components/prefs:test_support",
  ]
}

jumbo_source_set("unit_tests") {
  testonly = true
  sources = [
    "bloom_filter_unittest.cc",
    "byte_vector_utils_unittest.cc",
    "log_uploader_unittest.cc",
    "rappor_metric_unittest.cc",
    "rappor_prefs_unittest.cc",
    "rappor_service_unittest.cc",
    "rappor_utils_unittest.cc",
    "reports_unittest.cc",
    "sampler_unittest.cc",
  ]

  deps = [
    ":rappor",
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/metrics",
    "//components/prefs:test_support",
    "//net:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp:cpp",
    "//testing/gtest",
    "//url",
  ]
}

# Convenience testing target
test("rappor_unittests") {
  sources = [
    "//components/test/run_all_unittests.cc",
  ]
  deps = [
    ":unit_tests",
    "//components/test:test_support",
  ]
}
