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

# Nothing outside //chrome/chrome_cleaner can depend on these targets.
visibility = [ "//chrome/chrome_cleaner/*" ]

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",
    "//chrome/chrome_cleaner:buildflags",
    "//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",
  ]

  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",
    ":file_remover_api",
    "//base",
    "//chrome/chrome_cleaner/constants:common_strings",
    "//chrome/chrome_cleaner/constants:quarantine_constants",
    "//chrome/chrome_cleaner/constants:version_header",
    "//chrome/chrome_cleaner/logging/proto:removal_status_proto",
    "//chrome/chrome_cleaner/mojom:zip_archiver_interface",
    "//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 = [ "//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",
    "task_scheduler_unittest.cc",
    "whitelisted_directory_unittest.cc",
  ]

  deps = [
    ":cleaner_os",
    ":common_os",
    ":file_remover_api",
    "//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",
    "//components/chrome_cleaner/test:test_name_helper",
    "//sandbox/win:sandbox",
    "//testing/gmock",
    "//testing/gtest",
  ]
}
