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

import("//testing/test.gni")

# The Url-Keyed Metrics (UKM) service is responsible for gathering and
# uploading reports that contain fine grained performance metrics including
# URLs for top-level navigations.
static_library("ukm") {
  sources = [
    "persisted_logs_metrics_impl.cc",
    "persisted_logs_metrics_impl.h",
    "ukm_pref_names.cc",
    "ukm_pref_names.h",
    "ukm_recorder_impl.cc",
    "ukm_recorder_impl.h",
    "ukm_reporting_service.cc",
    "ukm_reporting_service.h",
    "ukm_rotation_scheduler.cc",
    "ukm_rotation_scheduler.h",
    "ukm_service.cc",
    "ukm_service.h",
  ]

  public_deps = [
    "//services/metrics/public/cpp:metrics_cpp",
    "//services/metrics/public/cpp:ukm_builders",
    "//services/metrics/public/mojom",
    "//third_party/metrics_proto",
  ]

  deps = [
    "//base",
    "//components/data_use_measurement/core",
    "//components/metrics",
    "//components/prefs",
    "//components/variations",
    "//url",
  ]
}

# Helper library for observing signals that we need to clear any local data.
static_library("observers") {
  sources = [
    "observers/history_delete_observer.cc",
    "observers/history_delete_observer.h",
    "observers/sync_disable_observer.cc",
    "observers/sync_disable_observer.h",
  ]

  deps = [
    "//base",
    "//components/history/core/browser",
    "//components/sync",
  ]

  public_deps = [
    "//components/unified_consent",
  ]
}

static_library("test_support") {
  testonly = true
  sources = [
    "test_ukm_recorder.cc",
    "test_ukm_recorder.h",
  ]

  public_deps = [
    ":ukm",
    "//third_party/metrics_proto",
  ]
  deps = [
    "//base",
    "//components/metrics:test_support",
    "//components/prefs:test_support",
    "//testing/gtest:gtest",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "observers/sync_disable_observer_unittest.cc",
    "ukm_service_unittest.cc",
  ]

  deps = [
    ":observers",
    ":test_support",
    ":ukm",
    "//base",
    "//base/test:test_support",
    "//components/metrics",
    "//components/metrics:test_support",
    "//components/prefs:test_support",
    "//components/sync",
    "//components/sync:test_support_driver",
    "//components/sync_preferences:test_support",
    "//components/variations",
    "//net:test_support",
    "//services/metrics/public/cpp:ukm_builders",
    "//testing/gtest",
    "//third_party/zlib/google:compression_utils",
    "//url",
  ]
}

# Convenience testing target
test("ukm_unittests") {
  deps = [
    ":unit_tests",
    "//base",
    "//base/test:test_support",
    "//components/test:run_all_unittests",
  ]
}
