# 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/bytes_consumer.cc",
    "fetch/bytes_consumer.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/data_pipe_bytes_consumer.cc",
    "fetch/data_pipe_bytes_consumer.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.cc",
    "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/response_body_loader.cc",
    "fetch/response_body_loader.h",
    "fetch/response_body_loader_client.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/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/bytes_consumer_test.cc",
    "fetch/client_hints_preferences_test.cc",
    "fetch/data_pipe_bytes_consumer_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/response_body_loader_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/bytes_consumer_test_reader.cc",
    "testing/bytes_consumer_test_reader.h",
    "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/replaying_bytes_consumer.cc",
    "testing/replaying_bytes_consumer.h",
    "testing/test_loader_factory.h",
    "testing/test_resource_fetcher_properties.cc",
    "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",
  ]
}
