# 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("//third_party/WebKit/Source/build/scripts/scripts.gni")
import("//third_party/WebKit/Source/platform/platform_generated.gni")

make_names("make_platform_loader_generated_fetch_initiator_type_names") {
  in_files = [ "fetch/FetchInitiatorTypeNames.json5" ]
  outputs = [
    "$blink_platform_output_dir/loader/fetch/FetchInitiatorTypeNames.cpp",
    "$blink_platform_output_dir/loader/fetch/FetchInitiatorTypeNames.h",
  ]
}

source_set("loader") {
  # This target is a logical part of the platform and only the platform target
  # should depend on it.
  visibility = [ "//third_party/WebKit/Source/platform" ]

  sources = [
    "LinkHeader.cpp",
    "LinkHeader.h",
    "fetch/AccessControlStatus.h",
    "fetch/CachedMetadata.cpp",
    "fetch/CachedMetadata.h",
    "fetch/CachedMetadataHandler.h",
    "fetch/ClientHintsPreferences.cpp",
    "fetch/ClientHintsPreferences.h",
    "fetch/CrossOriginAccessControl.cpp",
    "fetch/CrossOriginAccessControl.h",
    "fetch/FetchContext.cpp",
    "fetch/FetchContext.h",
    "fetch/FetchInitiatorInfo.h",
    "fetch/FetchParameters.cpp",
    "fetch/FetchParameters.h",
    "fetch/FetchUtils.cpp",
    "fetch/FetchUtils.h",
    "fetch/IntegrityMetadata.cpp",
    "fetch/IntegrityMetadata.h",
    "fetch/MemoryCache.cpp",
    "fetch/MemoryCache.h",
    "fetch/PreloadKey.h",
    "fetch/RawResource.cpp",
    "fetch/RawResource.h",
    "fetch/Resource.cpp",
    "fetch/Resource.h",
    "fetch/ResourceClient.h",
    "fetch/ResourceClientWalker.h",
    "fetch/ResourceError.cpp",
    "fetch/ResourceError.h",
    "fetch/ResourceFetcher.cpp",
    "fetch/ResourceFetcher.h",
    "fetch/ResourceLoadInfo.h",
    "fetch/ResourceLoadPriority.h",
    "fetch/ResourceLoadTiming.cpp",
    "fetch/ResourceLoadTiming.h",
    "fetch/ResourceLoader.cpp",
    "fetch/ResourceLoader.h",
    "fetch/ResourceLoaderOptions.h",
    "fetch/ResourceLoadingLog.h",
    "fetch/ResourceOwner.h",
    "fetch/ResourceRequest.cpp",
    "fetch/ResourceRequest.h",
    "fetch/ResourceResponse.cpp",
    "fetch/ResourceResponse.h",
    "fetch/ResourceStatus.h",
    "fetch/ResourceTimingInfo.cpp",
    "fetch/ResourceTimingInfo.h",
    "fetch/SubstituteData.h",
    "fetch/UniqueIdentifier.cpp",
    "fetch/UniqueIdentifier.h",
  ]

  sources += get_target_outputs(
          ":make_platform_loader_generated_fetch_initiator_type_names")

  defines = [ "BLINK_PLATFORM_IMPLEMENTATION=1" ]

  configs += [
    "//third_party/WebKit/Source:config",
    "//third_party/WebKit/Source:non_test_config",
    "//third_party/WebKit/Source:inside_blink",

    # TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
    "//build/config/compiler:no_size_t_to_int_warning",
  ]

  deps = [
    ":make_platform_loader_generated_fetch_initiator_type_names",
    "//components/link_header_util:link_header_util",
  ]

  public_deps = [
    "//base",
    "//net",
    "//skia",
    "//third_party/icu",
    "//v8",
  ]
}

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/WebKit/Source/platform:*" ]
  testonly = true

  # Source files for blink_platform_unittests.
  sources = [
    "LinkHeaderTest.cpp",
    "fetch/ClientHintsPreferencesTest.cpp",
    "fetch/CrossOriginAccessControlTest.cpp",
    "fetch/FetchUtilsTest.cpp",
    "fetch/MemoryCacheCorrectnessTest.cpp",
    "fetch/MemoryCacheTest.cpp",
    "fetch/RawResourceTest.cpp",
    "fetch/ResourceFetcherTest.cpp",
    "fetch/ResourceLoaderOptionsTest.cpp",
    "fetch/ResourceRequestTest.cpp",
    "fetch/ResourceTest.cpp",
  ]

  defines = [ "INSIDE_BLINK" ]

  configs += [
    "//third_party/WebKit/Source/platform/wtf:wtf_config",
    "//third_party/WebKit/Source:config",
  ]

  deps = [
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/WebKit/Source/platform",
  ]
}

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/WebKit/Source/platform:test_support" ]
  testonly = true

  # Source files that can be called from blink_platform_unittests and
  # webkit_unit_tests.
  sources = [
    "testing/FetchTestingPlatformSupport.cpp",
    "testing/FetchTestingPlatformSupport.h",
    "testing/MockFetchContext.h",
    "testing/MockResource.cpp",
    "testing/MockResource.h",
    "testing/MockResourceClient.cpp",
    "testing/MockResourceClient.h",
  ]

  defines = [ "INSIDE_BLINK" ]

  configs += [
    "//third_party/WebKit/Source/platform/wtf:wtf_config",
    "//third_party/WebKit/Source:config",
  ]

  deps = [
    "//third_party/WebKit/Source/platform",
  ]
}
