910e62b5创建于 1月15日历史提交
# Copyright 2017 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/buildflag_header.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//net/features.gni")
import("//services/network/public/cpp/features.gni")
import("//testing/libfuzzer/fuzzer_test.gni")
import("//testing/test.gni")
import("//third_party/blink/renderer/build/scripts/scripts.gni")  # TODO(crbug.com/397934758)

_is_directory_transfer_required = is_fuchsia
buildflag_header("buildflags") {
  header = "network_service_buildflags.h"
  flags = [
    "IS_CT_SUPPORTED=$is_ct_supported",
    "IS_P2P_ENABLED=$is_p2p_enabled",
    "IS_DIRECTORY_TRANSFER_REQUIRED=$_is_directory_transfer_required",
  ]
}

# TODO(crbug.com/397934758): Move `blink_python_runner` out of Blink and update
# this action.
blink_python_runner("make_generated_permissions_policy_features") {
  script =
      "//services/network/build/scripts/make_permissions_policy_features.py"

  inputs = scripts_for_json5_files + [
             "//services/network/build/scripts/make_permissions_policy_features.py",
             "//services/network/public/cpp/permissions_policy/permissions_policy_features.json5",
             "//services/network/build/scripts/templates/permissions_policy_features_generated.cc.tmpl",
           ]
  outputs = [ "$root_gen_dir/services/network/public/cpp/permissions_policy/permissions_policy_features_generated.cc" ]

  args = [
    rebase_path(
        "//services/network/public/cpp/permissions_policy/permissions_policy_features.json5",
        root_build_dir),
    "--output_dir",
    rebase_path("$root_gen_dir/services/network/public/cpp/permissions_policy",
                root_build_dir),
  ]
}

component("crash_keys") {
  sources = [
    "crash_keys.cc",
    "crash_keys.h",
  ]
  deps = [ "//base" ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_CRASH_KEYS_IMPL" ]
}

component("cpp") {
  output_name = "network_cpp"

  sources = [
    "attribution_utils.cc",
    "attribution_utils.h",
    "avail_language_header_parser.cc",
    "avail_language_header_parser.h",
    "browsing_topics_parser.cc",
    "browsing_topics_parser.h",
    "constants.cc",
    "constants.h",
    "content_decoding_interceptor.cc",
    "content_decoding_interceptor.h",
    "content_language_parser.cc",
    "content_language_parser.h",
    "cookie_encryption_provider_impl.cc",
    "cookie_encryption_provider_impl.h",
    "cors/cors.cc",
    "cors/cors.h",
    "cors/origin_access_list.cc",
    "cors/origin_access_list.h",
    "cross_origin_embedder_policy_parser.cc",
    "cross_origin_embedder_policy_parser.h",
    "cross_origin_opener_policy_parser.cc",
    "cross_origin_opener_policy_parser.h",
    "cross_origin_resource_policy.cc",
    "cross_origin_resource_policy.h",
    "cross_thread_pending_shared_url_loader_factory.cc",
    "cross_thread_pending_shared_url_loader_factory.h",
    "data_pipe_to_source_stream.cc",
    "data_pipe_to_source_stream.h",
    "devtools_observer_util.cc",
    "devtools_observer_util.h",
    "document_isolation_policy_parser.cc",
    "document_isolation_policy_parser.h",
    "empty_url_loader_client.cc",
    "empty_url_loader_client.h",
    "fence_event_reporting_parser.cc",
    "fence_event_reporting_parser.h",
    "header_util.cc",
    "header_util.h",
    "initiator_lock_compatibility.cc",
    "initiator_lock_compatibility.h",
    "ip_address_space_util.cc",
    "ip_address_space_util.h",
    "link_header_parser.cc",
    "link_header_parser.h",
    "loading_params.cc",
    "loading_params.h",
    "net_adapters.cc",
    "net_adapters.h",
    "network_connection_tracker.cc",
    "network_connection_tracker.h",
    "network_context_getter.h",
    "network_quality_tracker.cc",
    "network_quality_tracker.h",
    "network_service_task_priority.cc",
    "network_service_task_priority.h",
    "no_vary_search_header_parser.cc",
    "no_vary_search_header_parser.h",
    "not_implemented_url_loader_factory.cc",
    "not_implemented_url_loader_factory.h",
    "orb/orb_api.h",
    "origin_agent_cluster_parser.cc",
    "origin_agent_cluster_parser.h",
    "parsed_headers.cc",
    "parsed_headers.h",
    "private_network_access_check_result.cc",
    "private_network_access_check_result.h",
    "record_ontransfersizeupdate_utils.h",
    "request_destination.cc",
    "request_destination.h",
    "request_mode.cc",
    "request_mode.h",
    "resolve_host_client_base.cc",
    "resolve_host_client_base.h",
    "self_deleting_url_loader_factory.cc",
    "self_deleting_url_loader_factory.h",
    "sequence_manager_configurator.cc",
    "sequence_manager_configurator.h",
    "session_cookie_delete_predicate.h",
    "shared_url_loader_factory.cc",
    "shared_url_loader_factory.h",
    "simple_host_resolver.cc",
    "simple_host_resolver.h",
    "simple_url_loader.cc",
    "simple_url_loader.h",
    "simple_url_loader_stream_consumer.h",
    "single_request_url_loader_factory.cc",
    "single_request_url_loader_factory.h",
    "source_stream_to_data_pipe.cc",
    "source_stream_to_data_pipe.h",
    "spki_hash_set.cc",
    "spki_hash_set.h",
    "sri_message_signatures.cc",
    "sri_message_signatures.h",
    "supports_loading_mode/supports_loading_mode_parser.cc",
    "supports_loading_mode/supports_loading_mode_parser.h",
    "timing_allow_origin_parser.cc",
    "timing_allow_origin_parser.h",
    "trust_token_http_headers.cc",
    "trust_token_http_headers.h",
    "unencoded_digests.cc",
    "unencoded_digests.h",
    "url_loader_factory_builder.cc",
    "url_loader_factory_builder.h",
    "url_util.cc",
    "url_util.h",
    "weak_wrapper_shared_url_loader_factory.cc",
    "weak_wrapper_shared_url_loader_factory.h",
    "wrapper_shared_url_loader_factory.cc",
    "wrapper_shared_url_loader_factory.h",
    "x_frame_options_parser.cc",
    "x_frame_options_parser.h",
  ]

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

  public_deps = [
    ":buildflags",
    ":cpp_base",
    ":flags_and_switches",
    ":is_potentially_trustworthy",
    "//net",
    "//services/network/public/mojom",
    "//services/network/public/mojom:url_loader_base",
    "//url",
    "//url/ipc:url_ipc",
  ]

  deps = [
    "//base",
    "//components/link_header_util",
    "//components/os_crypt/async/browser",
    "//components/os_crypt/async/common",
    "//components/prefs",
    "//ipc",
    "//net",
    "//services/proxy_resolver/public/mojom",
  ]

  defines = [ "IS_NETWORK_CPP_IMPL" ]
}

# These interfaces are put in their own target so that modules that only
# need to depend on mojom_ip_address does not depend on the entire cpp_base.
component("ip_address_mojom_support") {
  sources = [
    "address_family_mojom_traits.cc",
    "address_family_mojom_traits.h",
    "address_list_mojom_traits.cc",
    "address_list_mojom_traits.h",
    "alternate_protocol_usage_mojom_traits.cc",
    "alternate_protocol_usage_mojom_traits.h",
    "connection_endpoint_metadata_mojom_traits.cc",
    "connection_endpoint_metadata_mojom_traits.h",
    "host_resolver_endpoint_result_mojom_traits.cc",
    "host_resolver_endpoint_result_mojom_traits.h",
    "ip_address_mojom_traits.cc",
    "ip_address_mojom_traits.h",
    "ip_endpoint_mojom_traits.cc",
    "ip_endpoint_mojom_traits.h",
  ]
  deps = [
    "//net",
    "//services/network/public/mojom:mojom_ip_address_shared",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_IP_ADDRESS_IMPL" ]
}

component("host_resolver_mojom_support") {
  sources = [
    "host_resolver_mojom_traits.cc",
    "host_resolver_mojom_traits.h",
  ]
  deps = [
    ":ip_address_mojom_support",
    "//mojo/public/cpp/base:shared_typemap_traits",
    "//mojo/public/mojom/base",
    "//net",
    "//services/network/public/mojom:mojom_host_resolver_shared",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_HOST_RESOLVER_IMPL" ]
}

component("integrity_metadata_mojom_support") {
  sources = [
    "integrity_metadata.cc",
    "integrity_metadata.h",
    "integrity_metadata_mojom_traits.cc",
    "integrity_metadata_mojom_traits.h",
  ]
  deps = [
    "//services/network/public/mojom:mojom_integrity_algorithm",
    "//services/network/public/mojom:mojom_integrity_metadata_shared",
  ]
  defines = [ "IS_NETWORK_CPP_INTEGRITY_METADATA_IMPL" ]
}

component("integrity_policy") {
  sources = [
    "integrity_policy.cc",
    "integrity_policy.h",
    "integrity_policy_mojom_traits.cc",
    "integrity_policy_mojom_traits.h",
    "integrity_policy_parser.cc",
    "integrity_policy_parser.h",
  ]
  deps = [
    ":flags_and_switches",
    "//net",
    "//services/network/public/mojom:mojom_integrity_policy_shared",
  ]
  defines = [ "IS_NETWORK_CPP_INTEGRITY_POLICY_IMPL" ]
}

component("connection_allowlist") {
  sources = [
    "connection_allowlist.cc",
    "connection_allowlist.h",
    "connection_allowlist_mojom_traits.cc",
    "connection_allowlist_mojom_traits.h",
    "connection_allowlist_parser.cc",
    "connection_allowlist_parser.h",
  ]
  deps = [
    ":flags_and_switches",
    "//net",
    "//services/network/public/mojom:mojom_connection_allowlist_shared",
  ]
  public_deps = [ "//base" ]
  defines = [ "IS_NETWORK_CPP_CONNECTION_ALLOWLIST_IMPL" ]
}

component("fetch_retry_options") {
  sources = [
    "fetch_retry_options.cc",
    "fetch_retry_options.h",
  ]
  deps = [
    "//net",
    "//services/network/public/mojom:url_loader_base_shared",
  ]
  defines = [ "IS_NETWORK_CPP_FETCH_RETRY_OPTIONS_IMPL" ]
}

component("cookies_mojom_support") {
  sources = [
    "cookie_manager_shared_mojom_traits.cc",
    "cookie_manager_shared_mojom_traits.h",
  ]
  deps = [
    ":crash_keys",
    ":first_party_sets_mojom_support",
    ":schemeful_site_mojom_support",
    "//net",
    "//services/network/public/mojom:cookies_mojom_shared",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_COOKIES_IMPL" ]
}

component("network_param_mojom_support") {
  sources = [
    "net_ipc_param_traits.cc",
    "net_ipc_param_traits.h",
    "network_param_mojom_traits.cc",
    "network_param_mojom_traits.h",
  ]
  deps = [
    "//ipc",
    "//mojo/public/cpp/base:shared_typemap_traits",
    "//net",
    "//services/network/public/mojom:mojom_network_param_shared",
    "//url/ipc:url_ipc",
    "//url/mojom:url_mojom_origin",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_NETWORK_PARAM_IMPL" ]
}

component("proxy_config_mojom_support") {
  sources = [
    "mutable_network_traffic_annotation_tag_mojom_traits.h",
    "mutable_partial_network_traffic_annotation_tag_mojom_traits.h",
    "proxy_config_mojom_traits.cc",
    "proxy_config_mojom_traits.h",
    "proxy_config_with_annotation_mojom_traits.cc",
    "proxy_config_with_annotation_mojom_traits.h",
  ]
  deps = [
    ":network_param_mojom_support",
    "//mojo/public/mojom/base",
    "//net",
    "//services/network/public/mojom:mojom_proxy_config_shared",
    "//url/mojom:mojom_traits",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_PROXY_CONFIG_IMPL" ]
}

component("structured_headers_mojom_support") {
  sources = [
    "structured_headers_mojom_traits.cc",
    "structured_headers_mojom_traits.h",
  ]
  deps = [
    "//base",
    "//mojo/public/mojom/base",
    "//net",
    "//services/network/public/mojom:mojom_structured_headers_shared",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_STRUCTURED_HEADERS_IMPL" ]
}

component("flags_and_switches") {
  sources = [
    "features.cc",
    "features.h",
    "network_switches.cc",
    "network_switches.h",
    "web_sandbox_flags.cc",
    "web_sandbox_flags.h",
  ]
  public_deps = [
    "//base",
    "//net",
    "//services/network/public/mojom:mojom_web_sandbox_flags",
    "//url",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_FLAGS_AND_SWITCHES_IMPL" ]
}

component("is_potentially_trustworthy") {
  sources = [
    "is_potentially_trustworthy.cc",
    "is_potentially_trustworthy.h",
  ]
  public_deps = [
    ":flags_and_switches",
    "//base",
    "//net",
    "//url",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_IS_POTENTIALLY_TRUSTWORTHY_IMPL" ]
}

component("web_platform") {
  sources = [
    "client_hints.cc",
    "client_hints.h",
    "content_security_policy/content_security_policy.cc",
    "content_security_policy/content_security_policy.h",
    "content_security_policy/csp_context.cc",
    "content_security_policy/csp_context.h",
    "content_security_policy/csp_source.cc",
    "content_security_policy/csp_source.h",
    "content_security_policy/csp_source_list.cc",
    "content_security_policy/csp_source_list.h",
    "cors/origin_access_entry.cc",
    "cors/origin_access_entry.h",
    "permissions_policy/client_hints_permissions_policy_mapping.cc",
    "permissions_policy/client_hints_permissions_policy_mapping.h",
    "permissions_policy/fenced_frame_permissions_policies.h",
    "permissions_policy/origin_with_possible_wildcards.cc",
    "permissions_policy/origin_with_possible_wildcards.h",
    "permissions_policy/permissions_policy.cc",
    "permissions_policy/permissions_policy.h",
    "permissions_policy/permissions_policy_declaration.cc",
    "permissions_policy/permissions_policy_declaration.h",
    "permissions_policy/permissions_policy_features.cc",
    "permissions_policy/permissions_policy_features.h",
    "permissions_policy/permissions_policy_features_bitset.cc",
    "permissions_policy/permissions_policy_features_bitset.h",
    "permissions_policy/permissions_policy_features_generated.h",
    "permissions_policy/permissions_policy_features_internal.cc",
    "permissions_policy/permissions_policy_features_internal.h",
    "permissions_policy/permissions_policy_mojom_traits.cc",
    "permissions_policy/permissions_policy_mojom_traits.h",
  ]
  sources += get_target_outputs(":make_generated_permissions_policy_features")
  public_deps = [
    ":flags_and_switches",
    ":is_potentially_trustworthy",
    ":make_generated_permissions_policy_features",
    "//net",
    "//services/network/public/mojom:mojom_content_security_policy",
    "//services/network/public/mojom:mojom_cors_origin_pattern",
    "//services/network/public/mojom:mojom_permissions_policy_shared",
    "//services/network/public/mojom:url_loader_base_shared",
    "//url",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_WEB_PLATFORM_IMPL" ]
}

# This component is separate from cpp_base as it is a dependency of
# //services/network/public/mojom:url_loader_base.
component("cross_origin_embedder_policy") {
  sources = [
    "cross_origin_embedder_policy.cc",
    "cross_origin_embedder_policy.h",
    "cross_origin_embedder_policy_mojom_traits.cc",
    "cross_origin_embedder_policy_mojom_traits.h",
  ]

  deps = [
    "//base",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom:url_loader_base_shared",
  ]

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

  defines = [ "IS_NETWORK_CPP_CROSS_ORIGIN_IMPL" ]
}

# This component is separate from cpp_base as it is a dependency of
# //services/network/public/mojom:url_loader_base.
component("document_isolation_policy") {
  sources = [
    "document_isolation_policy.cc",
    "document_isolation_policy.h",
    "document_isolation_policy_mojom_traits.cc",
    "document_isolation_policy_mojom_traits.h",
  ]

  deps = [
    "//base",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom:url_loader_base_shared",
  ]

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

  defines = [ "IS_NETWORK_CPP_DOCUMENT_ISOLATION_IMPL" ]
}

source_set("ip_address_space_overrides_test_utils") {
  testonly = true

  sources = [
    "ip_address_space_overrides_test_utils.cc",
    "ip_address_space_overrides_test_utils.h",
  ]

  public_deps = [
    "//base",
    "//services/network/public/mojom:mojom_ip_address_shared",
  ]

  deps = [
    ":cpp",
    ":flags_and_switches",
    "//base",
    "//net:test_support",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]
}

component("shared_storage_support") {
  sources = [
    "shared_storage_mojom_traits.cc",
    "shared_storage_mojom_traits.h",
    "shared_storage_utils.cc",
    "shared_storage_utils.h",
  ]
  public_deps = [
    ":flags_and_switches",
    "//base",
    "//mojo/public/mojom/base",
    "//services/network/public/mojom:mojom_shared_storage",
  ]

  # TODO(crbug.com/40915226): Remove the need to ignore this warning.
  if (is_win && is_component_build) {
    ldflags = [ "/IGNORE:4217" ]
  }

  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_SHARED_STORAGE_IMPL" ]
}

component("ad_auction_support") {
  sources = [
    "ad_auction/event_record.cc",
    "ad_auction/event_record.h",
    "ad_auction/event_record_mojom_traits.cc",
    "ad_auction/event_record_mojom_traits.h",
  ]
  public_deps = [
    "//base",
    "//net",
    "//services/network/public/mojom:mojom_ad_auction",
  ]

  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_AD_AUCTION_IMPL" ]
}

# This component is separate from cpp_base as it is a dependency of
# //services/network/public/mojom:cookies_mojom.
component("schemeful_site_mojom_support") {
  sources = [
    "schemeful_site_mojom_traits.cc",
    "schemeful_site_mojom_traits.h",
  ]
  deps = [
    "//net",
    "//services/network/public/mojom:mojom_schemeful_site_shared",
    "//url/mojom:url_mojom_origin",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_NETWORK_CPP_SCHEMEFUL_IMPL" ]
}

# This component is separate from cpp_base as it is a dependency of
# //services/network/public/mojom:cookies_mojom.
component("first_party_sets_mojom_support") {
  sources = [
    "first_party_sets_mojom_traits.cc",
    "first_party_sets_mojom_traits.h",
  ]
  deps = [
    ":schemeful_site_mojom_support",
    "//mojo/public/cpp/base:shared_typemap_traits",
    "//net",
    "//services/network/public/mojom:mojom_first_party_sets_shared",
  ]
  configs += [ "//build/config/compiler:wexit_time_destructors" ]
  defines = [ "IS_FIRST_PARTY_SETS_MOJOM_TRAITS_IMPL" ]
}

# This component is separate from cpp_base as it is a dependency of
# //services/network/public/mojom:cookies_mojom.
component("storage_access_api_mojom_support") {
  sources = [
    "storage_access_api_mojom_traits.cc",
    "storage_access_api_mojom_traits.h",
  ]
  deps = [
    "//mojo/public/cpp/base:shared_typemap_traits",
    "//net",
    "//services/network/public/mojom:mojom_storage_access_api_shared",
  ]
  defines = [ "IS_STORAGE_ACCESS_API_MOJOM_TRAITS_IMPL" ]
}

component("cpp_base") {
  output_name = "network_cpp_base"

  sources = [
    "cookie_setting_overrides_mojom_traits.cc",
    "cookie_setting_overrides_mojom_traits.h",
    "cors/cors_error_status.cc",
    "cors/cors_error_status.h",
    "cors/cors_mojom_traits.cc",
    "cors/cors_mojom_traits.h",
    "cross_origin_opener_policy.cc",
    "cross_origin_opener_policy.h",
    "cross_origin_opener_policy_mojom_traits.cc",
    "cross_origin_opener_policy_mojom_traits.h",
    "data_element.cc",
    "data_element.h",
    "http_request_headers_mojom_traits.cc",
    "http_request_headers_mojom_traits.h",
    "isolation_info_mojom_traits.cc",
    "isolation_info_mojom_traits.h",
    "load_timing_info_mojom_traits.cc",
    "load_timing_info_mojom_traits.h",
    "load_timing_internal_info_mojom_traits.cc",
    "load_timing_internal_info_mojom_traits.h",
    "network_anonymization_key_mojom_traits.cc",
    "network_anonymization_key_mojom_traits.h",
    "network_interface_mojom_traits.cc",
    "network_interface_mojom_traits.h",
    "network_ipc_param_traits.cc",
    "network_ipc_param_traits.h",
    "network_isolation_key_mojom_traits.cc",
    "network_isolation_key_mojom_traits.h",
    "optional_trust_token_params.cc",
    "optional_trust_token_params.h",
    "parsed_request_cookie_mojom_traits.cc",
    "parsed_request_cookie_mojom_traits.h",
    "resource_request.cc",
    "resource_request.h",
    "resource_request_body.cc",
    "resource_request_body.h",
    "source_type_mojom_traits.cc",
    "source_type_mojom_traits.h",
    "transferable_directory.cc",
    "transferable_directory.h",
    "transferable_socket.cc",
    "transferable_socket.h",
    "trust_token_parameterization.h",
    "url_loader_completion_status.cc",
    "url_loader_completion_status.h",
    "url_loader_completion_status_mojom_traits.cc",
    "url_loader_completion_status_mojom_traits.h",
    "url_request_mojom_traits.cc",
    "url_request_mojom_traits.h",
    "url_request_param_mojom_traits.cc",
    "url_request_param_mojom_traits.h",
    "web_transport_error_mojom_traits.cc",
    "web_transport_error_mojom_traits.h",
  ]

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

  public_deps = [
    ":ad_auction_support",
    ":connection_allowlist",
    ":cookies_mojom_support",
    ":crash_keys",
    ":cross_origin_embedder_policy",
    ":document_isolation_policy",
    ":fetch_retry_options",
    ":integrity_metadata_mojom_support",
    ":integrity_policy",
    ":ip_address_mojom_support",
    ":network_param_mojom_support",
    ":proxy_config_mojom_support",
    ":schemeful_site_mojom_support",
    ":shared_storage_support",
    ":storage_access_api_mojom_support",
    ":structured_headers_mojom_support",
    ":web_platform",
    "//services/network/public/mojom:url_loader_base",
    "//url/ipc:url_ipc",
    "//url/mojom:url_mojom_gurl",
    "//url/mojom:url_mojom_origin",
  ]
  deps = [
    ":buildflags",
    ":first_party_sets_mojom_support",
    "//base",
    "//ipc",
    "//mojo/public/mojom/base",
    "//net",
    "//services/network/public/mojom:cookies_mojom",
    "//services/network/public/mojom:mojom_first_party_sets",
    "//services/network/public/mojom:mojom_network_isolation_key",
    "//services/network/public/mojom:mojom_storage_access_api",
    "//services/network/public/mojom:url_loader_base",
  ]
  defines = [ "IS_NETWORK_CPP_BASE_IMPL" ]

  if (is_p2p_enabled) {
    sources += [
      "p2p_param_traits.cc",
      "p2p_param_traits.h",
      "p2p_socket_type.h",
    ]

    deps += [ "//services/network/public/mojom:mojom_shared" ]
    public_deps += [ "//third_party/webrtc_overrides:webrtc_component" ]
  }

  if (is_fuchsia) {
    sources += [ "transferable_directory_fuchsia.cc" ]
  }

  if (is_linux) {
    sources += [
      "network_interface_change_listener_mojom_traits.cc",
      "network_interface_change_listener_mojom_traits.h",
    ]
  }

  # TODO(crbug.com/40915226): Remove the need to ignore this warning.
  if (is_win && is_component_build) {
    ldflags = [ "/IGNORE:4217" ]
  }
}

mojom("test_interfaces") {
  sources = [ "network_traits_test_service.mojom" ]
  public_deps = [ "//services/network/public/mojom" ]
}

source_set("test_support") {
  testonly = true

  sources = [ "is_potentially_trustworthy_unittest.h" ]

  public_deps = [
    ":cpp",
    "//base",
    "//base/test:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//url:url_test_support",
  ]

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}

source_set("tests") {
  testonly = true

  sources = [
    "ad_auction/event_record_mojom_traits_unittest.cc",
    "ad_auction/event_record_unittest.cc",
    "attribution_utils_unittest.cc",
    "avail_language_header_parser_unittest.cc",
    "browsing_topics_parser_unittest.cc",
    "client_hints_unittest.cc",
    "connection_allowlist_unittest.cc",
    "content_decoding_interceptor_unittest.cc",
    "content_language_parser_unittest.cc",
    "content_security_policy/content_security_policy_unittest.cc",
    "content_security_policy/csp_context_unittest.cc",
    "content_security_policy/csp_source_list_unittest.cc",
    "content_security_policy/csp_source_unittest.cc",
    "cookie_manager_mojom_traits_unittest.cc",
    "cookie_manager_shared_mojom_traits_unittest.cc",
    "cookie_setting_overrides_mojom_traits_unittest.cc",
    "cors/cors_mojom_traits_unittest.cc",
    "cors/cors_unittest.cc",
    "cors/origin_access_entry_unittest.cc",
    "cors/origin_access_list_unittest.cc",
    "cross_origin_embedder_policy_parser_unittest.cc",
    "cross_origin_opener_policy_parser_unittest.cc",
    "cross_origin_resource_policy_unittest.cc",
    "cross_thread_pending_shared_url_loader_factory_unittest.cc",
    "data_pipe_to_source_stream_unittest.cc",
    "default_credentials_mojom_traits_unittest.cc",
    "device_bound_sessions_mojom_traits_unittest.cc",
    "devtools_observer_unittest.cc",
    "digitally_signed_mojom_traits_unittest.cc",
    "document_isolation_policy_parser_unittest.cc",
    "empty_url_loader_client_unittest.cc",
    "fence_event_reporting_parser_unittest.cc",
    "file_enumeration_entry_mojom_traits_unittest.cc",
    "first_party_sets_mojom_traits_unittest.cc",
    "hash_value_mojom_traits_unittest.cc",
    "header_util_unittest.cc",
    "host_resolver_mojom_traits_unittest.cc",
    "initiator_lock_compatibility_unittest.cc",
    "integrity_policy_parser_unittest.cc",
    "ip_address_mojom_traits_unittest.cc",
    "ip_address_space_util_unittest.cc",
    "is_potentially_trustworthy_unittest.cc",
    "isolation_info_mojom_traits_unittest.cc",
    "link_header_parser_unittest.cc",
    "load_timing_internal_info_mojom_traits_unittest.cc",
    "mutable_network_traffic_annotation_tag_mojom_traits_unittest.cc",
    "mutable_partial_network_traffic_annotation_tag_mojom_traits_unittest.cc",
    "net_log_mojom_traits_unittest.cc",
    "network_anonymization_key_mojom_traits_unittest.cc",
    "network_connection_tracker_unittest.cc",
    "network_isolation_key_mojom_traits_unittest.cc",
    "network_mojom_traits_unittest.cc",
    "network_param_mojom_traits_unittest.cc",
    "network_quality_tracker_unittest.cc",
    "optional_trust_token_params_unittest.cc",
    "origin_agent_cluster_parser_unittest.cc",
    "parsed_headers_unittest.cc",
    "parsed_request_cookie_mojom_traits_unittest.cc",
    "permissions_policy/origin_with_possible_wildcards_unittest.cc",
    "permissions_policy/permissions_policy_declaration_unittest.cc",
    "permissions_policy/permissions_policy_features_bitset_unittest.cc",
    "permissions_policy/permissions_policy_mojom_traits_unittest.cc",
    "permissions_policy/permissions_policy_unittest.cc",
    "proxy_config_mojom_traits_unittest.cc",
    "request_destination_unittest.cc",
    "schemeful_site_mojom_traits_unittest.cc",
    "self_deleting_url_loader_factory_unittest.cc",
    "shared_dictionary_isolation_key_mojom_traits_unittest.cc",
    "shared_dictionary_usage_info_mojom_traits_unittest.cc",
    "shared_storage_mojom_traits_unittest.cc",
    "simple_host_resolver_unittest.cc",
    "simple_url_loader_unittest.cc",
    "source_stream_to_data_pipe_unittest.cc",
    "sri_message_signatures_unittest.cc",
    "storage_access_api_mojom_traits_unittest.cc",
    "structured_headers_mojom_traits_unittest.cc",
    "supports_loading_mode/supports_loading_mode_parser_unittest.cc",
    "timing_allow_origin_parser_unittest.cc",
    "transferable_directory_unittest.cc",
    "transferable_socket_unittest.cc",
    "unencoded_digests_unittest.cc",
    "url_loader_completion_status_mojom_traits_unittest.cc",
    "url_loader_factory_builder_unittest.cc",
    "url_request_mojom_traits_unittest.cc",
    "web_sandbox_flags_unittests.cc",
    "x_frame_options_parser_unittest.cc",
  ]

  if (is_linux) {
    sources += [ "network_interface_change_listener_mojom_traits_unittest.cc" ]
  }

  deps = [
    ":ad_auction_support",
    ":cpp",
    ":shared_storage_support",
    ":test_interfaces",
    ":test_support",
    "//base",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/test_support:test_utils",
    "//net",
    "//net:test_support",
    "//services/network:network_service",
    "//services/network:test_support",
    "//services/network/public/cpp/cert_verifier:cert_verifier_tests",
    "//services/network/public/mojom:mojom_ad_auction",
    "//services/network/public/mojom:mojom_permissions_policy",
    "//testing/gtest",
  ]

  public_deps = [ ":buildflags" ]

  # TODO(crbug.com/40031409): Fix code that adds exit-time destructors and
  # enable the diagnostic by removing this line.
  configs += [ "//build/config/compiler:no_exit_time_destructors" ]
}

source_set("perftests") {
  testonly = true

  sources = [ "url_request_mojom_traits_perftest.cc" ]

  deps = [
    ":cpp_base",
    "//base",
    "//base/test:test_support",
    "//mojo/public/cpp/bindings",
    "//mojo/public/cpp/test_support:test_utils",
    "//net",
    "//testing/gtest",
    "//testing/perf",
    "//third_party/google_benchmark",
  ]
}

test("coep_fuzztest") {
  sources = [ "cross_origin_embedder_policy_parser_fuzztest.cc" ]
  fuzztests = [ "CrossOriginEmbedderPolicyParserTest.CrossOriginEmbedderPolicyParserFuzzerTest" ]
  deps = [
    ":cpp",
    "//third_party/fuzztest:fuzztest_gtest_main",
  ]
}

fuzzer_test("coop_fuzzer") {
  sources = [ "cross_origin_opener_policy_parser_fuzzer.cc" ]
  dict = "cross_origin_opener_policy.dict"
  deps = [ ":cpp" ]
}

fuzzer_test("xfo_fuzzer") {
  sources = [ "x_frame_options_parser_fuzzer.cc" ]
  dict = "x_frame_options.dict"
  deps = [ ":cpp" ]
}

fuzzer_test("cors_fuzzer") {
  sources = [ "cors/cors_fuzzer.cc" ]
  deps = [ ":cpp" ]
  seed_corpus = "//services/network/public/cpp/cors/corpus"
}

fuzzer_test("client_hints_fuzzer") {
  sources = [ "client_hints_fuzzer.cc" ]
  deps = [
    ":cpp",
    "//base",
    "//base:i18n",
  ]
}

fuzzer_test("avail_language_header_fuzzer") {
  sources = [ "avail_language_header_fuzzer.cc" ]
  deps = [
    ":cpp",
    "//services/network/public/mojom:url_loader_base",
  ]
}