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

source_set("settings_types") {
  sources = [
    "settings_types.h",
  ]
}

source_set("settings") {
  sources = [
    "settings.cc",
    "settings.h",
  ]

  deps = [
    ":settings_types",
    "//base:base",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/engines:resources",
    "//components/chrome_cleaner/public/constants:constants",
  ]

  public_deps = [
    "//chrome/chrome_cleaner/logging/proto:shared_data_proto",
    "//mojo/public/cpp/platform",
  ]
}

source_set("matching_options") {
  sources = [
    "matching_options.cc",
    "matching_options.h",
  ]
}

source_set("default_matching_options") {
  sources = [
    "default_matching_options.cc",
    "default_matching_options.h",
  ]

  deps = [
    ":settings",
  ]

  public_deps = [
    ":matching_options",
  ]
}

source_set("unittest_sources") {
  testonly = true

  sources = [
    "cleaner_settings_unittest.cc",
    "other_settings_definitions.cc",
    "reporter_settings_unittest.cc",
    "settings_unittest.cc",
  ]

  deps = [
    ":settings",
    "//base:base",
    "//base/test:test_support",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/test:test_util",
    "//components/chrome_cleaner/public/constants:constants",
    "//testing/gtest",
  ]
}
