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

static_library("component_updater") {
  sources = [
    "component_installer.cc",
    "component_installer.h",
    "component_updater_command_line_config_policy.cc",
    "component_updater_command_line_config_policy.h",
    "component_updater_paths.cc",
    "component_updater_paths.h",
    "component_updater_service.cc",
    "component_updater_service.h",
    "component_updater_service_internal.h",
    "component_updater_switches.cc",
    "component_updater_switches.h",
    "component_updater_url_constants.cc",
    "component_updater_url_constants.h",
    "configurator_impl.cc",
    "configurator_impl.h",
    "pref_names.cc",
    "pref_names.h",
    "timer.cc",
    "timer.h",
    "timer_update_scheduler.cc",
    "timer_update_scheduler.h",
    "update_scheduler.h",
  ]

  deps = [
    "//base",
    "//components/crx_file",
    "//components/update_client",
    "//components/version_info",
    "//third_party/boringssl:boringssl",
    "//ui/base",
    "//url",
  ]
}

static_library("crl_set_remover") {
  sources = [
    "crl_set_remover.cc",
    "crl_set_remover.h",
  ]

  deps = [
    "//base",
  ]
}

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

  public_deps = [
    ":component_updater",
    "//base",
    "//testing/gmock",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "component_installer_unittest.cc",
    "component_updater_service_unittest.cc",
    "configurator_impl_unittest.cc",
    "timer_unittest.cc",
  ]

  deps = [
    ":component_updater",
    "//base",
    "//base/test:test_support",
    "//components/crx_file",
    "//components/update_client:test_support",
    "//services/service_manager/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/boringssl:boringssl",
  ]
}
