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

import("//build/config/features.gni")
import("//build/config/jumbo.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

group("common") {
  if (is_component_build) {
    public_deps = [
      "//components/policy",
    ]
  } else {
    public_deps = [
      ":internal",
    ]
  }
}

jumbo_source_set("internal") {
  visibility = [ "//components/policy/*" ]

  configs += [ "//components/policy:component_implementation" ]

  sources = [
    "../../policy_export.h",
    "async_policy_loader.cc",
    "async_policy_loader.h",
    "async_policy_provider.cc",
    "async_policy_provider.h",
    "chrome_schema.cc",
    "chrome_schema.h",
    "cloud/cloud_external_data_manager.cc",
    "cloud/cloud_external_data_manager.h",
    "cloud/cloud_policy_client.cc",
    "cloud/cloud_policy_client.h",
    "cloud/cloud_policy_client_registration_helper.cc",
    "cloud/cloud_policy_client_registration_helper.h",
    "cloud/cloud_policy_core.cc",
    "cloud/cloud_policy_core.h",
    "cloud/cloud_policy_manager.cc",
    "cloud/cloud_policy_manager.h",
    "cloud/cloud_policy_refresh_scheduler.cc",
    "cloud/cloud_policy_refresh_scheduler.h",
    "cloud/cloud_policy_service.cc",
    "cloud/cloud_policy_service.h",
    "cloud/cloud_policy_store.cc",
    "cloud/cloud_policy_store.h",
    "cloud/cloud_policy_util.cc",
    "cloud/cloud_policy_util.h",
    "cloud/cloud_policy_validator.cc",
    "cloud/cloud_policy_validator.h",
    "cloud/component_cloud_policy_service.cc",
    "cloud/component_cloud_policy_service.h",
    "cloud/component_cloud_policy_store.cc",
    "cloud/component_cloud_policy_store.h",
    "cloud/component_cloud_policy_updater.cc",
    "cloud/component_cloud_policy_updater.h",
    "cloud/device_management_service.cc",
    "cloud/device_management_service.h",
    "cloud/dm_auth.cc",
    "cloud/dm_auth.h",
    "cloud/enterprise_metrics.cc",
    "cloud/enterprise_metrics.h",
    "cloud/external_policy_data_fetcher.cc",
    "cloud/external_policy_data_fetcher.h",
    "cloud/external_policy_data_updater.cc",
    "cloud/external_policy_data_updater.h",
    "cloud/machine_level_user_cloud_policy_manager.cc",
    "cloud/machine_level_user_cloud_policy_manager.h",
    "cloud/machine_level_user_cloud_policy_metrics.h",
    "cloud/machine_level_user_cloud_policy_store.cc",
    "cloud/machine_level_user_cloud_policy_store.h",
    "cloud/policy_header_service.cc",
    "cloud/policy_header_service.h",
    "cloud/policy_value_validator.h",
    "cloud/resource_cache.cc",
    "cloud/resource_cache.h",
    "cloud/signing_service.h",
    "cloud/user_cloud_policy_manager.cc",
    "cloud/user_cloud_policy_manager.h",
    "cloud/user_cloud_policy_store.cc",
    "cloud/user_cloud_policy_store.h",
    "cloud/user_cloud_policy_store_base.cc",
    "cloud/user_cloud_policy_store_base.h",
    "cloud/user_info_fetcher.cc",
    "cloud/user_info_fetcher.h",
    "config_dir_policy_loader.cc",
    "config_dir_policy_loader.h",
    "configuration_policy_provider.cc",
    "configuration_policy_provider.h",
    "extension_policy_migrator.h",
    "external_data_fetcher.cc",
    "external_data_fetcher.h",
    "external_data_manager.h",
    "json_schema_constants.cc",
    "json_schema_constants.h",
    "plist_writer.cc",
    "plist_writer.h",
    "policy_bundle.cc",
    "policy_bundle.h",
    "policy_details.h",
    "policy_load_status.cc",
    "policy_load_status.h",
    "policy_loader_ios.h",
    "policy_loader_ios.mm",
    "policy_loader_mac.h",
    "policy_loader_mac.mm",
    "policy_loader_win.cc",
    "policy_loader_win.h",
    "policy_map.cc",
    "policy_map.h",
    "policy_namespace.cc",
    "policy_namespace.h",
    "policy_proto_decoders.cc",
    "policy_proto_decoders.h",
    "policy_service.cc",
    "policy_service.h",
    "policy_service_impl.cc",
    "policy_service_impl.h",
    "policy_statistics_collector.cc",
    "policy_statistics_collector.h",
    "preferences_mac.cc",
    "preferences_mac.h",
    "remote_commands/remote_command_job.cc",
    "remote_commands/remote_command_job.h",
    "remote_commands/remote_commands_factory.cc",
    "remote_commands/remote_commands_factory.h",
    "remote_commands/remote_commands_queue.cc",
    "remote_commands/remote_commands_queue.h",
    "remote_commands/remote_commands_service.cc",
    "remote_commands/remote_commands_service.h",
    "schema.cc",
    "schema.h",
    "schema_internal.h",
    "schema_map.cc",
    "schema_map.h",
    "schema_registry.cc",
    "schema_registry.h",
    "schema_registry_tracking_policy_provider.cc",
    "schema_registry_tracking_policy_provider.h",
  ]

  configs += [ "//build/config:precompiled_headers" ]

  public_deps = [
    ":common_constants",
    "//components/policy:generated",
    "//components/policy/proto",
  ]
  deps = [
    "//base:i18n",
    "//base/third_party/dynamic_annotations",
    "//components/account_id",
    "//components/crash/core/common:crash_key",  # Remove once https://crbug.com/685996 is fixed.
    "//components/data_use_measurement/core",
    "//components/prefs",
    "//components/version_info",
    "//extensions/buildflags",
    "//google_apis",
    "//net",
    "//services/network/public/cpp",
    "//third_party/libxml",
    "//third_party/re2",
    "//url",
  ]

  if (is_win) {
    libs = [
      "netapi32.lib",
      "ntdsapi.lib",
      "secur32.lib",
      "shlwapi.lib",
      "userenv.lib",
    ]
  }

  # Compile on Linux for fuzzer and since code is reused on Chrome OS.
  if (is_win || is_linux) {
    sources += [
      "preg_parser.cc",
      "preg_parser.h",
      "registry_dict.cc",
      "registry_dict.h",
    ]
  }
  if (is_android) {
    sources += [ "cloud/component_cloud_policy_service_stub.cc" ]
    sources -= [
      "cloud/component_cloud_policy_service.cc",
      "cloud/component_cloud_policy_store.cc",
      "cloud/component_cloud_policy_store.h",
      "cloud/component_cloud_policy_updater.cc",
      "cloud/component_cloud_policy_updater.h",
      "cloud/external_policy_data_fetcher.cc",
      "cloud/external_policy_data_fetcher.h",
      "cloud/external_policy_data_updater.cc",
      "cloud/external_policy_data_updater.h",
      "cloud/resource_cache.cc",
      "cloud/resource_cache.h",
      "config_dir_policy_loader.cc",
      "config_dir_policy_loader.h",
      "policy_load_status.cc",
      "policy_load_status.h",
    ]
  }
  if (is_chromeos) {
    sources += [
      "policy_scheduler.cc",
      "policy_scheduler.h",
      "proxy_policy_provider.cc",
      "proxy_policy_provider.h",
    ]
    sources -= [
      "cloud/cloud_policy_client_registration_helper.cc",
      "cloud/cloud_policy_client_registration_helper.h",
      "cloud/machine_level_user_cloud_policy_manager.cc",
      "cloud/machine_level_user_cloud_policy_manager.h",
      "cloud/machine_level_user_cloud_policy_metrics.h",
      "cloud/machine_level_user_cloud_policy_store.cc",
      "cloud/machine_level_user_cloud_policy_store.h",
      "cloud/user_cloud_policy_manager.cc",
      "cloud/user_cloud_policy_manager.h",
      "cloud/user_cloud_policy_store.cc",
      "cloud/user_cloud_policy_store.h",
    ]
  }
  if (is_mac) {
    libs = [ "CoreFoundation.framework" ]
  }
  if (is_ios || is_mac) {
    sources += [
      "mac_util.cc",
      "mac_util.h",
    ]
  }
}

jumbo_static_library("test_support") {
  testonly = true
  sources = [
    "cloud/mock_cloud_external_data_manager.cc",
    "cloud/mock_cloud_external_data_manager.h",
    "cloud/mock_cloud_policy_client.cc",
    "cloud/mock_cloud_policy_client.h",
    "cloud/mock_cloud_policy_store.cc",
    "cloud/mock_cloud_policy_store.h",
    "cloud/mock_device_management_service.cc",
    "cloud/mock_device_management_service.h",
    "cloud/mock_signing_service.cc",
    "cloud/mock_signing_service.h",
    "cloud/mock_user_cloud_policy_store.cc",
    "cloud/mock_user_cloud_policy_store.h",
    "cloud/policy_builder.cc",
    "cloud/policy_builder.h",
    "configuration_policy_provider_test.cc",
    "configuration_policy_provider_test.h",
    "fake_async_policy_loader.cc",
    "fake_async_policy_loader.h",
    "mock_configuration_policy_provider.cc",
    "mock_configuration_policy_provider.h",
    "mock_policy_service.cc",
    "mock_policy_service.h",
    "policy_test_utils.cc",
    "policy_test_utils.h",
    "preferences_mock_mac.cc",
    "preferences_mock_mac.h",
    "remote_commands/test_remote_command_job.cc",
    "remote_commands/test_remote_command_job.h",
    "remote_commands/testing_remote_commands_server.cc",
    "remote_commands/testing_remote_commands_server.h",
  ]

  if (is_chromeos) {
    sources -= [
      "cloud/mock_user_cloud_policy_store.cc",
      "cloud/mock_user_cloud_policy_store.h",
    ]
  }

  public_deps = [
    ":common",
    "//base",
    "//base/test:test_support",

    # Explicitly link in the generated policy target into the test support
    # so it will be linked to dependent targets. Otherwise in component
    # build, it will be hidden inside the policy component.
    "//components/account_id",
    "//components/policy:generated",
    "//components/policy/proto",
    "//crypto",
    "//net",
    "//services/network/public/cpp",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

source_set("common_constants") {
  configs += [ "//components/policy:component_implementation" ]
  deps = [
    "//base",
  ]
  sources = [
    "../../policy_export.h",
    "cloud/cloud_policy_constants.cc",
    "cloud/cloud_policy_constants.h",
    "policy_pref_names.cc",
    "policy_pref_names.h",
    "policy_switches.cc",
    "policy_switches.h",
    "policy_types.h",
  ]
}

source_set("unit_tests") {
  testonly = true
  sources = [
    "//extensions/buildflags",
    "cloud/cloud_policy_client_unittest.cc",
    "cloud/cloud_policy_core_unittest.cc",
    "cloud/cloud_policy_manager_unittest.cc",
    "cloud/cloud_policy_refresh_scheduler_unittest.cc",
    "cloud/cloud_policy_service_unittest.cc",
    "cloud/cloud_policy_validator_unittest.cc",
    "cloud/device_management_service_unittest.cc",
    "cloud/policy_header_service_unittest.cc",
    "cloud/user_info_fetcher_unittest.cc",
    "generate_policy_source_unittest.cc",
    "plist_writer_unittest.cc",
    "policy_bundle_unittest.cc",
    "policy_loader_ios_unittest.mm",
    "policy_loader_mac_unittest.cc",
    "policy_loader_win_unittest.cc",
    "policy_map_unittest.cc",
    "policy_service_impl_unittest.cc",
    "policy_statistics_collector_unittest.cc",
    "remote_commands/remote_commands_queue_unittest.cc",
    "remote_commands/remote_commands_service_unittest.cc",
    "schema_map_unittest.cc",
    "schema_registry_tracking_policy_provider_unittest.cc",
    "schema_registry_unittest.cc",
    "schema_unittest.cc",
  ]
  if (is_win || is_linux) {
    sources += [
      "preg_parser_unittest.cc",
      "registry_dict_unittest.cc",
    ]
  }
  if (is_chromeos) {
    sources += [
      "policy_scheduler_unittest.cc",
      "proxy_policy_provider_unittest.cc",
    ]
  } else {
    sources += [
      "cloud/machine_level_user_cloud_policy_manager_unittest.cc",
      "cloud/machine_level_user_cloud_policy_store_unittest.cc",
      "cloud/user_cloud_policy_manager_unittest.cc",
      "cloud/user_cloud_policy_store_unittest.cc",
    ]
  }
  if (!is_android) {
    sources += [ "async_policy_provider_unittest.cc" ]
  }
  if (!is_android && !is_ios) {
    sources += [
      "cloud/component_cloud_policy_service_unittest.cc",
      "cloud/component_cloud_policy_store_unittest.cc",
      "cloud/component_cloud_policy_updater_unittest.cc",
      "cloud/external_policy_data_fetcher_unittest.cc",
      "cloud/external_policy_data_updater_unittest.cc",
      "cloud/resource_cache_unittest.cc",
      "config_dir_policy_loader_unittest.cc",
    ]
  }
  if (is_mac || is_ios) {
    sources += [ "mac_util_unittest.cc" ]
  }
  if (is_win || is_linux) {
    # Needed by policy_loader_win_unittest.cc and preg_parser_unittest.cc
    data = [
      "//chrome/test/data/policy/",
    ]
  }

  deps = [
    ":test_support",
    "//base",
    "//base/test:test_support",
    "//components/account_id",
    "//components/policy:generated",
    "//components/prefs:test_support",
    "//extensions/buildflags",
    "//google_apis",
    "//net:test_support",
    "//services/network:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/libxml",
  ]
}

if (is_win || is_linux) {
  fuzzer_test("preg_parser_fuzzer") {
    sources = [
      "preg_parser_fuzzer.cc",
    ]
    seed_corpus = "//chrome/test/data/policy/gpo/fuzzer_corpus"
    dict = "//chrome/test/data/policy/gpo/fuzzer.dict"
    deps = [
      ":internal",
      "//base",
    ]
  }
}
