# 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("common_os") {
  sources = [
    "digest_verifier.cc",
    "digest_verifier.h",
    "disk_util.cc",
    "disk_util.h",
    "disk_util_types.cc",
    "disk_util_types.h",
    "early_exit.cc",
    "early_exit.h",
    "file_path_sanitization.cc",
    "file_path_sanitization.h",
    "file_path_set.cc",
    "file_path_set.h",
    "inheritable_event.cc",
    "inheritable_event.h",
    "initializer.cc",
    "initializer.h",
    "layered_service_provider_api.h",
    "layered_service_provider_wrapper.cc",
    "layered_service_provider_wrapper.h",
    "nt_internals.h",
    "post_reboot_registration.cc",
    "post_reboot_registration.h",
    "pre_fetched_paths.cc",
    "pre_fetched_paths.h",
    "process.cc",
    "process.h",
    "registry.cc",
    "registry.h",
    "registry_util.cc",
    "registry_util.h",
    "resource_util.cc",
    "resource_util.h",
    "scoped_disable_wow64_redirection.cc",
    "scoped_disable_wow64_redirection.h",
    "scoped_service_handle.cc",
    "scoped_service_handle.h",
    "secure_dll_loading.cc",
    "secure_dll_loading.h",
    "shutdown_watchdog.cc",
    "shutdown_watchdog.h",
    "system_util.cc",
    "system_util.h",
    "task_scheduler.cc",
    "task_scheduler.h",
    "whitelisted_directory.cc",
    "whitelisted_directory.h",
  ]

  deps = [
    "//base:base",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/constants:version_header",
    "//chrome/chrome_cleaner/proto:file_digest_proto",
    "//chrome/chrome_cleaner/strings",
    "//components/chrome_cleaner/public/constants:constants",

    # For file_path_sanitization
    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
    "//crypto:crypto",
  ]

  libs = [
    "crypt32.lib",  # For CertEnumCertificatesInStore
    "ntdll.lib",  # For NtQueryKey
    "secur32.lib",  # For GetUserNameEx
    "taskschd.lib",  # For CLSID_TaskScheduler
  ]

  defines = [ "SECURITY_WIN32" ]  # For secur32.lib
}

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

  deps = [
    "//base",
    "//chrome/chrome_cleaner/os:common_os",
  ]
}

source_set("cleaner_os") {
  sources = [
    "file_removal_status_updater.cc",
    "file_removal_status_updater.h",
    "file_remover.cc",
    "file_remover.h",
    "rebooter.cc",
    "rebooter.h",
    "rebooter_api.h",
    "system_util_cleaner.cc",
    "system_util_cleaner.h",
  ]

  deps = [
    ":common_os",
    "//base:base",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/constants:quarantine_constants",
    "//chrome/chrome_cleaner/constants:version_header",
    "//chrome/chrome_cleaner/interfaces:zip_archiver_interface",
    "//chrome/chrome_cleaner/logging/proto:removal_status_proto",
    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
    "//chrome/chrome_cleaner/zip_archiver:common",
    "//components/chrome_cleaner/public/constants:constants",
    "//sandbox/win:sandbox",
  ]

  public_deps = [
    ":file_remover_api",
    "//chrome/chrome_cleaner/logging/proto:removal_status_proto",
  ]
}

source_set("unittest_sources") {
  testonly = true

  sources = [
    "digest_verifier_unittest.cc",
    "disk_util_unittest.cc",
    "file_path_sanitization_unittest.cc",
    "file_path_set_unittest.cc",
    "file_removal_status_updater_unittest.cc",
    "file_remover_unittest.cc",
    "post_reboot_registration_unittest.cc",
    "pre_fetched_paths_unittest.cc",
    "process_unittest.cc",
    "rebooter_unittest.cc",
    "registry_unittest.cc",
    "registry_util_unittest.cc",
    "resource_util_unittest.cc",
    "shutdown_watchdog_unittest.cc",
    "system_util_cleaner_unittest.cc",
    "system_util_unittest.cc",
    "task_scheduler_unittest.cc",
    "whitelisted_directory_unittest.cc",
  ]

  deps = [
    ":cleaner_os",
    ":common_os",
    ":file_remover_api",
    "//base:base",
    "//base/test:test_config",
    "//base/test:test_support",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/constants:quarantine_constants",
    "//chrome/chrome_cleaner/constants:version_header",
    "//chrome/chrome_cleaner/ipc:mojo_task_runner",
    "//chrome/chrome_cleaner/logging/proto:removal_status_proto",
    "//chrome/chrome_cleaner/proto:shared_pup_enums_proto",
    "//chrome/chrome_cleaner/strings",
    "//chrome/chrome_cleaner/test:test_branding_header",
    "//chrome/chrome_cleaner/test:test_executables",
    "//chrome/chrome_cleaner/test:test_scoped_service_handle",
    "//chrome/chrome_cleaner/test:test_strings",
    "//chrome/chrome_cleaner/test:test_util",
    "//chrome/chrome_cleaner/test/resources:test_resources",
    "//chrome/chrome_cleaner/zip_archiver:common",
    "//chrome/chrome_cleaner/zip_archiver/broker:common",
    "//chrome/chrome_cleaner/zip_archiver/target:common",
    "//components/chrome_cleaner/public/constants:constants",
    "//sandbox/win:sandbox",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
