# 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")

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",
  ]
}
