# 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/jumbo.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

action("bake_in_configs") {
  visibility = [ ":*" ]
  script = "bake_in_configs.py"

  inputs = [
    "baked_in_configs/c_android_clients_google_com.json",
    "baked_in_configs/c_bigcache_googleapis_com.json",
    "baked_in_configs/c_doc-0-0-sj_sj_googleusercontent_com.json",
    "baked_in_configs/c_docs_google_com.json",
    "baked_in_configs/c_drive_google_com.json",
    "baked_in_configs/c_googlesyndication_com.json",
    "baked_in_configs/c_pack_google_com.json",
    "baked_in_configs/c_play_google_com.json",
    "baked_in_configs/c_youtube_com.json",
    "baked_in_configs/clients2_google_com.json",
    "baked_in_configs/docs_google_com.json",
    "baked_in_configs/gcp_gvt2_com.json",
    "baked_in_configs/gcp_gvt6_com.json",
    "baked_in_configs/google-analytics_com.json",
    "baked_in_configs/googlevideo_com.json",
    "baked_in_configs/gvt1_com.json",
    "baked_in_configs/gvt2_com.json",
    "baked_in_configs/gvt6_com.json",
    "baked_in_configs/ssl_gstatic_com.json",
    "baked_in_configs/www_google_com.json",
  ]

  output_file = "$target_gen_dir/baked_in_configs.cc"
  outputs = [
    output_file,
  ]

  # The JSON file list is too long for the command line on Windows, so put
  # them in a response file.
  response_file_contents = rebase_path(inputs, root_build_dir)
  args = [
    "--file-list",
    "{{response_file_name}}",
    "--output",
    rebase_path(output_file, root_build_dir),
  ]
}

jumbo_component("domain_reliability") {
  sources = [
    "baked_in_configs.h",
    "beacon.cc",
    "beacon.h",
    "clear_mode.h",
    "config.cc",
    "config.h",
    "context.cc",
    "context.h",
    "context_manager.cc",
    "context_manager.h",
    "dispatcher.cc",
    "dispatcher.h",
    "domain_reliability_export.h",
    "google_configs.cc",
    "google_configs.h",
    "header.cc",
    "header.h",
    "monitor.cc",
    "monitor.h",
    "quic_error_mapping.cc",
    "quic_error_mapping.h",
    "scheduler.cc",
    "scheduler.h",
    "uploader.cc",
    "uploader.h",
    "util.cc",
    "util.h",
  ]
  sources += get_target_outputs(":bake_in_configs")

  defines = [ "DOMAIN_RELIABILITY_IMPLEMENTATION" ]

  deps = [
    ":bake_in_configs",
    "//base",
    "//net",
    "//url",
  ]
}

jumbo_source_set("unit_tests") {
  testonly = true
  sources = [
    "config_unittest.cc",
    "context_unittest.cc",
    "dispatcher_unittest.cc",
    "google_configs_unittest.cc",
    "header_unittest.cc",
    "monitor_unittest.cc",
    "scheduler_unittest.cc",
    "test_util.cc",
    "test_util.h",
    "uploader_unittest.cc",
    "util_unittest.cc",
  ]

  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

  deps = [
    ":domain_reliability",
    "//base",
    "//base/test:test_support",
    "//net:test_support",
    "//testing/gtest",
  ]
}

fuzzer_test("domain_reliability_header_fuzzer") {
  sources = [
    "header_fuzzer.cc",
  ]
  deps = [
    ":domain_reliability",
    "//base",
    "//base:i18n",
  ]
  dict = "header.dict"
}
