# Copyright 2017 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("//third_party/blink/renderer/build/scripts/scripts.gni")
import("//third_party/blink/renderer/platform/platform.gni")
import("//third_party/blink/renderer/platform/platform_generated.gni")

make_names("make_platform_loader_generated_fetch_initiator_type_names") {
  in_files = [ "fetch/fetch_initiator_type_names.json5" ]
  output_dir = "$blink_platform_output_dir/loader/fetch"
}

blink_platform_sources("loader") {
  sources = [
    "allowed_by_nosniff.cc",
    "allowed_by_nosniff.h",
    "cors/cors.cc",
    "cors/cors.h",
    "cors/cors_error_string.cc",
    "cors/cors_error_string.h",
    "fetch/buffering_data_pipe_writer.cc",
    "fetch/buffering_data_pipe_writer.h",
    "fetch/cached_metadata.cc",
    "fetch/cached_metadata.h",
    "fetch/cached_metadata_handler.cc",
    "fetch/cached_metadata_handler.h",
    "fetch/client_hints_preferences.cc",
    "fetch/client_hints_preferences.h",
    "fetch/console_logger.h",
    "fetch/fetch_client_settings_object.h",
    "fetch/fetch_client_settings_object_snapshot.cc",
    "fetch/fetch_client_settings_object_snapshot.h",
    "fetch/fetch_context.cc",
    "fetch/fetch_context.h",
    "fetch/fetch_initiator_info.h",
    "fetch/fetch_parameters.cc",
    "fetch/fetch_parameters.h",
    "fetch/fetch_utils.cc",
    "fetch/fetch_utils.h",
    "fetch/https_state.cc",
    "fetch/https_state.h",
    "fetch/integrity_metadata.cc",
    "fetch/integrity_metadata.h",
    "fetch/memory_cache.cc",
    "fetch/memory_cache.h",
    "fetch/null_resource_fetcher_properties.h",
    "fetch/preload_key.h",
    "fetch/raw_resource.cc",
    "fetch/raw_resource.h",
    "fetch/resource.cc",
    "fetch/resource.h",
    "fetch/resource_client.cc",
    "fetch/resource_client.h",
    "fetch/resource_client_walker.h",
    "fetch/resource_error.cc",
    "fetch/resource_error.h",
    "fetch/resource_fetcher.cc",
    "fetch/resource_fetcher.h",
    "fetch/resource_fetcher_properties.h",
    "fetch/resource_finish_observer.h",
    "fetch/resource_load_info.h",
    "fetch/resource_load_priority.h",
    "fetch/resource_load_scheduler.cc",
    "fetch/resource_load_scheduler.h",
    "fetch/resource_load_timing.cc",
    "fetch/resource_load_timing.h",
    "fetch/resource_loader.cc",
    "fetch/resource_loader.h",
    "fetch/resource_loader_options.h",
    "fetch/resource_loading_log.h",
    "fetch/resource_priority.h",
    "fetch/resource_request.cc",
    "fetch/resource_request.h",
    "fetch/resource_response.cc",
    "fetch/resource_response.h",
    "fetch/resource_status.h",
    "fetch/resource_timing_info.cc",
    "fetch/resource_timing_info.h",
    "fetch/script_cached_metadata_handler.cc",
    "fetch/script_cached_metadata_handler.h",
    "fetch/script_fetch_options.cc",
    "fetch/script_fetch_options.h",
    "fetch/source_keyed_cached_metadata_handler.cc",
    "fetch/source_keyed_cached_metadata_handler.h",
    "fetch/stale_revalidation_resource_client.cc",
    "fetch/stale_revalidation_resource_client.h",
    "fetch/substitute_data.h",
    "fetch/text_resource_decoder_options.cc",
    "fetch/text_resource_decoder_options.h",
    "fetch/unique_identifier.cc",
    "fetch/unique_identifier.h",
    "ftp_directory_listing.cc",
    "ftp_directory_listing.h",
    "link_header.cc",
    "link_header.h",
    "mixed_content_autoupgrade_status.h",
    "static_data_navigation_body_loader.cc",
    "static_data_navigation_body_loader.h",
    "subresource_integrity.cc",
    "subresource_integrity.h",
  ]

  sources += get_target_outputs(
          ":make_platform_loader_generated_fetch_initiator_type_names")

  deps = [
    ":make_platform_loader_generated_fetch_initiator_type_names",
    "//components/link_header_util",
    "//services/network/public/cpp",
    "//services/network/public/mojom:mojom_blink",
  ]
}

jumbo_source_set("unit_tests") {
  # This target defines test files for blink_platform_unittests and only the
  # blink_platform_unittests target should depend on it.
  visibility = [ "//third_party/blink/renderer/platform:*" ]
  testonly = true

  # Source files for blink_platform_unittests.
  sources = [
    "fetch/buffering_data_pipe_writer_test.cc",
    "fetch/client_hints_preferences_test.cc",
    "fetch/fetch_utils_test.cc",
    "fetch/memory_cache_correctness_test.cc",
    "fetch/memory_cache_test.cc",
    "fetch/raw_resource_test.cc",
    "fetch/resource_fetcher_test.cc",
    "fetch/resource_load_scheduler_test.cc",
    "fetch/resource_loader_defer_loading_test.cc",
    "fetch/resource_loader_test.cc",
    "fetch/resource_request_test.cc",
    "fetch/resource_response_test.cc",
    "fetch/resource_test.cc",
    "fetch/source_keyed_cached_metadata_handler_test.cc",
    "ftp_directory_listing_test.cc",
    "link_header_test.cc",
    "static_data_navigation_body_loader_test.cc",
    "subresource_integrity_test.cc",
  ]

  configs += [ "//third_party/blink/renderer/platform:blink_platform_config" ]

  deps = [
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/blink/renderer/platform:platform",
  ]
}

jumbo_source_set("test_support") {
  # This target defines test files for platform:test_support that
  # blink_platform_unittests and webkit_unit_tests can use.
  visibility = [ "//third_party/blink/renderer/platform:test_support" ]
  testonly = true

  # Source files that can be called from blink_platform_unittests and
  # webkit_unit_tests.
  sources = [
    "testing/crypto_testing_platform_support.h",
    "testing/fetch_testing_platform_support.cc",
    "testing/fetch_testing_platform_support.h",
    "testing/mock_fetch_context.h",
    "testing/mock_resource.cc",
    "testing/mock_resource.h",
    "testing/mock_resource_client.h",
    "testing/test_resource_fetcher_properties.h",
    "testing/web_url_loader_factory_with_mock.cc",
    "testing/web_url_loader_factory_with_mock.h",
  ]

  configs += [
    "//third_party/blink/renderer:non_test_config",
    "//third_party/blink/renderer/platform:blink_platform_config",
  ]

  public_deps = [
    "//net",
    "//skia",
    "//third_party/blink/public:blink_headers",
    "//third_party/blink/renderer/platform:platform",
    "//third_party/blink/renderer/platform/blob:generator",
    "//third_party/icu",
  ]
}
