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

static_library("service") {
  sources = [
    "safe_seed_manager.cc",
    "safe_seed_manager.h",
    "ui_string_overrider.cc",
    "ui_string_overrider.h",
    "variations_field_trial_creator.cc",
    "variations_field_trial_creator.h",
    "variations_service.cc",
    "variations_service.h",
    "variations_service_client.cc",
    "variations_service_client.h",
  ]

  deps = [
    "//base",
    "//components/data_use_measurement/core",
    "//components/encrypted_messages",
    "//components/metrics",
    "//components/network_time",
    "//components/pref_registry",
    "//components/prefs",
    "//components/variations",
    "//components/variations/field_trial_config",
    "//components/variations/proto",
    "//components/version_info",
    "//components/web_resource",
    "//net",
    "//services/network/public/cpp",
    "//ui/base",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "safe_seed_manager_unittest.cc",
    "ui_string_overrider_unittest.cc",
    "variations_field_trial_creator_unittest.cc",
    "variations_service_unittest.cc",
  ]

  deps = [
    ":service",
    "//base",
    "//base/test:test_support",
    "//components/metrics",
    "//components/metrics:test_support",
    "//components/prefs:test_support",
    "//components/variations",
    "//components/variations/proto",
    "//components/web_resource:test_support",
    "//net",
    "//net:test_support",
    "//services/network:test_support",
    "//services/network/public/cpp",
    "//testing/gtest",
  ]
}
