Home | History | Annotate | Download | only in net
      1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 # Use of this source code is governed by a BSD-style license that can be
      3 # found in the LICENSE file.
      4 
      5 import("//build/config/crypto.gni")
      6 import("//build/config/features.gni")
      7 import("//build/config/ui.gni")
      8 import("//url/config.gni")
      9 
     10 # TODO(cjhopman): //build/config/android/rules.gni also imports grit_rule.gni.
     11 # Currently, that file can't be imported multiple times.  Make this always
     12 # imported when http://crbug.com/393704 is fixed.
     13 if (!is_android) {
     14   import("//tools/grit/grit_rule.gni")
     15 }
     16 
     17 if (is_android) {
     18   import("//build/config/android/config.gni")
     19   import("//build/config/android/rules.gni")
     20 } else if (is_mac) {
     21   import("//build/config/mac/mac_sdk.gni")
     22 }
     23 
     24 # The list of net files is kept in net.gypi. Read it.
     25 gypi_values = exec_script(
     26     "//build/gypi_to_gn.py",
     27     [ rebase_path("net.gypi") ],
     28     "scope",
     29     [ "net.gypi" ])
     30 
     31 # Disable Kerberos on ChromeOS, Android and iOS, at least for now. It needs
     32 # configuration (krb5.conf and so on).
     33 use_kerberos = !is_chromeos && !is_android && !is_ios
     34 
     35 # The way the cache uses mmap() is inefficient on some Android devices. If
     36 # this flag is set, we hackily avoid using mmap() in the disk cache. We are
     37 # pretty confident that mmap-ing the index would not hurt any existing x86
     38 # android devices, but we cannot be so sure about the variety of ARM devices.
     39 # So enable it for x86 only for now.
     40 posix_avoid_mmap = is_android && cpu_arch != "x86"
     41 
     42 # WebSockets and socket stream code are used everywhere except iOS.
     43 enable_websockets = !is_ios
     44 use_v8_in_net = !is_ios
     45 enable_built_in_dns = !is_ios
     46 disable_ftp_support = is_ios
     47 
     48 declare_args() {
     49   # Disables support for file URLs.  File URL support requires use of icu.
     50   disable_file_support = false
     51 }
     52 
     53 config("net_config") {
     54   defines = []
     55   if (posix_avoid_mmap) {
     56     defines += [ "POSIX_AVOID_MMAP" ]
     57   }
     58   if (disable_file_support) {
     59     defines += [ "DISABLE_FILE_SUPPORT" ]
     60   }
     61 }
     62 
     63 # Disables Windows warning about size to int truncations.
     64 # TODO(jschuh): crbug.com/167187 fix this and delete this config.
     65 config("net_win_size_truncation") {
     66   if (is_win) {
     67     cflags = [ "/wd4267" ]
     68   }
     69 }
     70 
     71 component("net") {
     72   sources =
     73     gypi_values.net_nacl_common_sources +
     74     gypi_values.net_non_nacl_sources
     75 
     76   cflags = []
     77   defines = [
     78     # TODO(GYP) Note that he GYP file supports linux_link_kerberos (defaults to
     79     # 0) which implies that we run pkg_config on kerberos and link to that
     80     # rather than setting this define which will dynamically open it. That
     81     # doesn't seem to be set in the regular builds, so we're skipping this
     82     # capability here.
     83     "DLOPEN_KERBEROS",
     84     "NET_IMPLEMENTATION"
     85   ]
     86   configs += [ ":net_win_size_truncation" ]
     87   public_configs = [ ":net_config" ]
     88   include_dirs = []
     89 
     90   public_deps = [
     91     "//crypto",
     92     "//crypto:platform"
     93   ]
     94   deps = [
     95    ":net_resources",
     96     "//base",
     97     "//base:i18n",
     98     "//base:prefs",
     99     "//base/third_party/dynamic_annotations",
    100     "//net/base/registry_controlled_domains",
    101     "//sdch",
    102     "//third_party/icu",
    103     "//third_party/zlib",
    104     "//url",
    105   ]
    106 
    107   if (use_kerberos) {
    108     defines += [ "USE_KERBEROS" ]
    109     if (is_android) {
    110       include_dirs += [ "/usr/include/kerberosV" ]
    111     }
    112   } else {
    113     sources -= [
    114       "http/http_auth_gssapi_posix.cc",
    115       "http/http_auth_gssapi_posix.h",
    116       "http/http_auth_handler_negotiate.h",
    117       "http/http_auth_handler_negotiate.cc",
    118     ]
    119   }
    120 
    121   if (is_posix) {
    122     if (posix_avoid_mmap) {
    123       sources -= [ "disk_cache/blockfile/mapped_file_posix.cc" ]
    124     } else {
    125       sources -= [ "disk_cache/blockfile/mapped_file_avoid_mmap_posix.cc" ]
    126     }
    127   }
    128 
    129   if (disable_file_support) {
    130     sources -= [
    131       "base/directory_lister.cc",
    132       "base/directory_lister.h",
    133       "url_request/url_request_file_dir_job.cc",
    134       "url_request/url_request_file_dir_job.h",
    135       "url_request/url_request_file_job.cc",
    136       "url_request/url_request_file_job.h",
    137       "url_request/file_protocol_handler.cc",
    138       "url_request/file_protocol_handler.h",
    139     ]
    140   }
    141 
    142   if (disable_ftp_support) {
    143     sources -= [
    144       "ftp/ftp_auth_cache.cc",
    145       "ftp/ftp_auth_cache.h",
    146       "ftp/ftp_ctrl_response_buffer.cc",
    147       "ftp/ftp_ctrl_response_buffer.h",
    148       "ftp/ftp_directory_listing_parser.cc",
    149       "ftp/ftp_directory_listing_parser.h",
    150       "ftp/ftp_directory_listing_parser_ls.cc",
    151       "ftp/ftp_directory_listing_parser_ls.h",
    152       "ftp/ftp_directory_listing_parser_netware.cc",
    153       "ftp/ftp_directory_listing_parser_netware.h",
    154       "ftp/ftp_directory_listing_parser_os2.cc",
    155       "ftp/ftp_directory_listing_parser_os2.h",
    156       "ftp/ftp_directory_listing_parser_vms.cc",
    157       "ftp/ftp_directory_listing_parser_vms.h",
    158       "ftp/ftp_directory_listing_parser_windows.cc",
    159       "ftp/ftp_directory_listing_parser_windows.h",
    160       "ftp/ftp_network_layer.cc",
    161       "ftp/ftp_network_layer.h",
    162       "ftp/ftp_network_session.cc",
    163       "ftp/ftp_network_session.h",
    164       "ftp/ftp_network_transaction.cc",
    165       "ftp/ftp_network_transaction.h",
    166       "ftp/ftp_request_info.h",
    167       "ftp/ftp_response_info.cc",
    168       "ftp/ftp_response_info.h",
    169       "ftp/ftp_server_type_histograms.cc",
    170       "ftp/ftp_server_type_histograms.h",
    171       "ftp/ftp_transaction.h",
    172       "ftp/ftp_transaction_factory.h",
    173       "ftp/ftp_util.cc",
    174       "ftp/ftp_util.h",
    175       "url_request/ftp_protocol_handler.cc",
    176       "url_request/ftp_protocol_handler.h",
    177       "url_request/url_request_ftp_job.cc",
    178       "url_request/url_request_ftp_job.h",
    179     ]
    180   }
    181 
    182   if (enable_built_in_dns) {
    183     defines += [ "ENABLE_BUILT_IN_DNS" ]
    184   } else {
    185     sources -= [
    186       "dns/address_sorter_posix.cc",
    187       "dns/address_sorter_posix.h",
    188       "dns/dns_client.cc",
    189     ]
    190   }
    191 
    192   if (use_openssl) {
    193     sources -= [
    194       "base/nss_memio.c",
    195       "base/nss_memio.h",
    196       "cert/ct_log_verifier_nss.cc",
    197       "cert/ct_objects_extractor_nss.cc",
    198       "cert/jwk_serializer_nss.cc",
    199       "cert/scoped_nss_types.h",
    200       "cert/x509_util_nss.cc",
    201       "cert/x509_util_nss.h",
    202       "quic/crypto/aead_base_decrypter_nss.cc",
    203       "quic/crypto/aead_base_encrypter_nss.cc",
    204       "quic/crypto/aes_128_gcm_12_decrypter_nss.cc",
    205       "quic/crypto/aes_128_gcm_12_encrypter_nss.cc",
    206       "quic/crypto/chacha20_poly1305_decrypter_nss.cc",
    207       "quic/crypto/chacha20_poly1305_encrypter_nss.cc",
    208       "quic/crypto/channel_id_nss.cc",
    209       "quic/crypto/p256_key_exchange_nss.cc",
    210       "socket/nss_ssl_util.cc",
    211       "socket/nss_ssl_util.h",
    212       "socket/ssl_client_socket_nss.cc",
    213       "socket/ssl_client_socket_nss.h",
    214       "socket/ssl_server_socket_nss.cc",
    215       "socket/ssl_server_socket_nss.h",
    216     ]
    217     if (is_chromeos) {
    218       sources -= [
    219         "cert/nss_cert_database_chromeos.cc",
    220         "cert/nss_cert_database_chromeos.h",
    221         "cert/nss_profile_filter_chromeos.cc",
    222         "cert/nss_profile_filter_chromeos.h",
    223       ]
    224     }
    225     if (is_linux) {
    226       # These are always removed for non-Linux cases below.
    227       sources -= [
    228         "base/crypto_module_nss.cc",
    229         "base/keygen_handler_nss.cc",
    230         "cert/cert_database_nss.cc",
    231         "cert/nss_cert_database.cc",
    232         "cert/nss_cert_database.h",
    233         "cert/x509_certificate_nss.cc",
    234         "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
    235         "third_party/mozilla_security_manager/nsKeygenHandler.h",
    236         "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
    237         "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
    238         "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
    239         "third_party/mozilla_security_manager/nsPKCS12Blob.h",
    240       ]
    241     }
    242     if (is_ios) {
    243       # Always removed for !ios below.
    244       sources -= [
    245         "cert/cert_verify_proc_nss.cc",
    246         "cert/cert_verify_proc_nss.h",
    247         "cert/test_root_certs_nss.cc",
    248         "ocsp/nss_ocsp.cc",
    249         "ocsp/nss_ocsp.h",
    250       ]
    251     }
    252   } else {
    253     sources -= [
    254       "base/crypto_module_openssl.cc",
    255       "cert/ct_log_verifier_openssl.cc",
    256       "cert/ct_objects_extractor_openssl.cc",
    257       "cert/jwk_serializer_openssl.cc",
    258       "cert/x509_util_openssl.cc",
    259       "cert/x509_util_openssl.h",
    260       "quic/crypto/aead_base_decrypter_openssl.cc",
    261       "quic/crypto/aead_base_encrypter_openssl.cc",
    262       "quic/crypto/aes_128_gcm_12_decrypter_openssl.cc",
    263       "quic/crypto/aes_128_gcm_12_encrypter_openssl.cc",
    264       "quic/crypto/chacha20_poly1305_decrypter_openssl.cc",
    265       "quic/crypto/chacha20_poly1305_encrypter_openssl.cc",
    266       "quic/crypto/channel_id_openssl.cc",
    267       "quic/crypto/p256_key_exchange_openssl.cc",
    268       "quic/crypto/scoped_evp_aead_ctx.cc",
    269       "quic/crypto/scoped_evp_aead_ctx.h",
    270       "socket/ssl_client_socket_openssl.cc",
    271       "socket/ssl_client_socket_openssl.h",
    272       "socket/ssl_server_socket_openssl.cc",
    273       "socket/ssl_server_socket_openssl.h",
    274       "socket/ssl_session_cache_openssl.cc",
    275       "socket/ssl_session_cache_openssl.h",
    276       "ssl/openssl_platform_key.h",
    277       "ssl/openssl_ssl_util.cc",
    278       "ssl/openssl_ssl_util.h",
    279     ]
    280     if (is_mac) {
    281       sources -= [
    282         "ssl/openssl_platform_key_mac.cc",
    283       ]
    284     }
    285     if (is_win) {
    286       sources -= [
    287         "ssl/openssl_platform_key_win.cc",
    288       ]
    289     }
    290   }
    291 
    292   if (!use_openssl_certs) {
    293     sources -= [
    294       "base/keygen_handler_openssl.cc",
    295       "base/openssl_private_key_store.h",
    296       "base/openssl_private_key_store_memory.cc",
    297       "cert/cert_database_openssl.cc",
    298       "cert/cert_verify_proc_openssl.cc",
    299       "cert/cert_verify_proc_openssl.h",
    300       "cert/test_root_certs_openssl.cc",
    301       "cert/x509_certificate_openssl.cc",
    302       "ssl/openssl_client_key_store.cc",
    303       "ssl/openssl_client_key_store.h",
    304     ]
    305     if (is_android) {
    306       sources -= [
    307         "base/openssl_private_key_store_android.cc",
    308       ]
    309     }
    310   } else if (is_android) {
    311     # Android doesn't use these even when using OpenSSL.
    312     sources -= [
    313       "base/openssl_private_key_store_memory.cc",
    314       "cert/cert_database_openssl.cc",
    315       "cert/cert_verify_proc_openssl.cc",
    316       "cert/test_root_certs_openssl.cc",
    317     ]
    318   }
    319 
    320   if (use_glib) {
    321     configs += [ "//build/config/linux:gconf" ]
    322     deps += [ "//build/config/linux:gio" ]
    323   }
    324 
    325   if (is_linux) {
    326     configs += [ "//build/config/linux:libresolv" ]
    327   } else {
    328     sources -= [
    329       "base/crypto_module_nss.cc",
    330       "base/keygen_handler_nss.cc",
    331       "cert/cert_database_nss.cc",
    332       "cert/nss_cert_database.cc",
    333       "cert/nss_cert_database.h",
    334       "cert/x509_certificate_nss.cc",
    335       "third_party/mozilla_security_manager/nsKeygenHandler.cpp",
    336       "third_party/mozilla_security_manager/nsKeygenHandler.h",
    337       "third_party/mozilla_security_manager/nsNSSCertificateDB.cpp",
    338       "third_party/mozilla_security_manager/nsNSSCertificateDB.h",
    339       "third_party/mozilla_security_manager/nsPKCS12Blob.cpp",
    340       "third_party/mozilla_security_manager/nsPKCS12Blob.h",
    341     ]
    342 
    343     if (!is_ios) {
    344       # These files are part of the partial implementation of NSS on iOS so
    345       # keep them in that case.
    346       sources -= [
    347         "cert/test_root_certs_nss.cc",
    348         "ocsp/nss_ocsp.cc",
    349         "ocsp/nss_ocsp.h",
    350       ]
    351     }
    352   }
    353 
    354   if (!use_nss_certs) {
    355     sources -= [
    356       "ssl/client_cert_store_nss.cc",
    357       "ssl/client_cert_store_nss.h",
    358     ]
    359     if (!is_ios) {
    360       # These files are part of the partial implementation of NSS on iOS so
    361       # keep them in that case (even though use_nss_certs is not set).
    362       sources -= [
    363         "cert/cert_verify_proc_nss.cc",
    364         "cert/cert_verify_proc_nss.h",
    365       ]
    366     }
    367     if (is_chromeos) {
    368       # These were already removed on non-ChromeOS.
    369       sources -= [
    370         "ssl/client_cert_store_chromeos.cc",
    371         "ssl/client_cert_store_chromeos.h",
    372       ]
    373     }
    374   }
    375 
    376   if (!enable_websockets) {
    377     sources -= [
    378       "socket_stream/socket_stream.cc",
    379       "socket_stream/socket_stream.h",
    380       "socket_stream/socket_stream_job.cc",
    381       "socket_stream/socket_stream_job.h",
    382       "socket_stream/socket_stream_job_manager.cc",
    383       "socket_stream/socket_stream_job_manager.h",
    384       "socket_stream/socket_stream_metrics.cc",
    385       "socket_stream/socket_stream_metrics.h",
    386       "spdy/spdy_websocket_stream.cc",
    387       "spdy/spdy_websocket_stream.h",
    388       "websockets/websocket_basic_handshake_stream.cc",
    389       "websockets/websocket_basic_handshake_stream.h",
    390       "websockets/websocket_basic_stream.cc",
    391       "websockets/websocket_basic_stream.h",
    392       "websockets/websocket_channel.cc",
    393       "websockets/websocket_channel.h",
    394       "websockets/websocket_deflate_predictor.h",
    395       "websockets/websocket_deflate_predictor_impl.cc",
    396       "websockets/websocket_deflate_predictor_impl.h",
    397       "websockets/websocket_deflate_stream.cc",
    398       "websockets/websocket_deflate_stream.h",
    399       "websockets/websocket_deflater.cc",
    400       "websockets/websocket_deflater.h",
    401       "websockets/websocket_errors.cc",
    402       "websockets/websocket_errors.h",
    403       "websockets/websocket_extension.cc",
    404       "websockets/websocket_extension.h",
    405       "websockets/websocket_extension_parser.cc",
    406       "websockets/websocket_extension_parser.h",
    407       "websockets/websocket_frame.cc",
    408       "websockets/websocket_frame.h",
    409       "websockets/websocket_frame_parser.cc",
    410       "websockets/websocket_frame_parser.h",
    411       "websockets/websocket_handshake_constants.cc",
    412       "websockets/websocket_handshake_constants.h",
    413       "websockets/websocket_handshake_handler.cc",
    414       "websockets/websocket_handshake_handler.h",
    415       "websockets/websocket_handshake_request_info.cc",
    416       "websockets/websocket_handshake_request_info.h",
    417       "websockets/websocket_handshake_response_info.cc",
    418       "websockets/websocket_handshake_response_info.h",
    419       "websockets/websocket_handshake_stream_base.h",
    420       "websockets/websocket_handshake_stream_create_helper.cc",
    421       "websockets/websocket_handshake_stream_create_helper.h",
    422       "websockets/websocket_inflater.cc",
    423       "websockets/websocket_inflater.h",
    424       "websockets/websocket_job.cc",
    425       "websockets/websocket_job.h",
    426       "websockets/websocket_mux.h",
    427       "websockets/websocket_net_log_params.cc",
    428       "websockets/websocket_net_log_params.h",
    429       "websockets/websocket_stream.cc",
    430       "websockets/websocket_stream.h",
    431       "websockets/websocket_throttle.cc",
    432       "websockets/websocket_throttle.h",
    433     ]
    434   }
    435 
    436   if (!enable_mdns) {
    437     sources -= [
    438       "dns/mdns_cache.cc",
    439       "dns/mdns_cache.h",
    440       "dns/mdns_client.cc",
    441       "dns/mdns_client.h",
    442       "dns/mdns_client_impl.cc",
    443       "dns/mdns_client_impl.h",
    444       "dns/record_parsed.cc",
    445       "dns/record_parsed.h",
    446       "dns/record_rdata.cc",
    447       "dns/record_rdata.h",
    448     ]
    449   }
    450 
    451   if (is_win) {
    452     sources -= [
    453       "http/http_auth_handler_ntlm_portable.cc",
    454       "socket/socket_libevent.cc",
    455       "socket/socket_libevent.h",
    456       "socket/tcp_socket_libevent.cc",
    457       "socket/tcp_socket_libevent.h",
    458       "udp/udp_socket_libevent.cc",
    459       "udp/udp_socket_libevent.h",
    460     ]
    461     deps += [
    462       "//third_party/nss:nspr",
    463       "//third_party/nss",
    464     ]
    465   } else {  # !is_win
    466     sources -= [
    467       "base/winsock_init.cc",
    468       "base/winsock_init.h",
    469       "base/winsock_util.cc",
    470       "base/winsock_util.h",
    471       "proxy/proxy_resolver_winhttp.cc",
    472       "proxy/proxy_resolver_winhttp.h",
    473     ]
    474   }
    475 
    476   if (is_mac) {
    477     if (!use_openssl) {
    478       deps += [
    479         "//third_party/nss:nspr",
    480         "//third_party/nss",
    481       ]
    482     }
    483     libs = [
    484       "Foundation.framework",
    485       "Security.framework",
    486       "SystemConfiguration.framework",
    487       "resolv",
    488     ]
    489   }
    490 
    491   if (is_ios) {
    492     # Add back some sources that were otherwise filtered out. iOS additionally
    493     # doesn't set USE_NSS but needs some of the files.
    494     set_sources_assignment_filter([])
    495     sources += [
    496       "base/network_change_notifier_mac.cc",
    497       "base/network_config_watcher_mac.cc",
    498       "base/platform_mime_util_mac.mm",
    499       "cert/cert_verify_proc_nss.cc",
    500       "cert/cert_verify_proc_nss.h",
    501       "cert/test_root_certs_nss.cc",
    502       "cert/x509_util_nss.cc",
    503       "cert/x509_util_nss.h",
    504       "proxy/proxy_resolver_mac.cc",
    505       "proxy/proxy_server_mac.cc",
    506       "ocsp/nss_ocsp.cc",
    507       "ocsp/nss_ocsp.h",
    508     ]
    509     set_sources_assignment_filter(sources_assignment_filter)
    510 
    511     sources -= [ "disk_cache/blockfile/file_posix.cc" ]
    512     deps += [
    513       "//third_party/nss",
    514     ]
    515     libs = [
    516       "CFNetwork.framework",
    517       "MobileCoreServices.framework",
    518       "Security.framework",
    519       "SystemConfiguration.framework",
    520       "resolv",
    521     ]
    522   }
    523 
    524   if (is_android) {
    525     # Add some Linux sources that were excluded by the filter, but which
    526     # are needed.
    527     set_sources_assignment_filter([])
    528     sources += [
    529       "base/platform_mime_util_linux.cc",
    530       "base/address_tracker_linux.cc",
    531       "base/address_tracker_linux.h",
    532     ]
    533     set_sources_assignment_filter(sources_assignment_filter)
    534 
    535     if (!is_android_webview_build) {
    536       deps += [ ":net_jni_headers" ]
    537     }
    538   }
    539 
    540   if (use_icu_alternatives_on_android) {
    541     deps -= [
    542       "//base:i18n",
    543       "//third_party/icu",
    544     ]
    545     sources -= [
    546       "base/filename_util_icu.cc",
    547       "base/net_string_util_icu.cc",
    548       "base/net_util_icu.cc",
    549     ]
    550     sources += [
    551       "base/net_string_util_icu_alternatives_android.cc",
    552       "base/net_string_util_icu_alternatives_android.h",
    553     ]
    554   }
    555 }
    556 
    557 grit("net_resources") {
    558   source = "base/net_resources.grd"
    559   use_qualified_include = true
    560   outputs = [
    561     "grit/net_resources.h",
    562     "net_resources.pak",
    563     "net_resources.rc",
    564   ]
    565 }
    566 
    567 static_library("extras") {
    568   sources = gypi_values.net_extras_sources
    569   configs += [ "//build/config/compiler:wexit_time_destructors" ]
    570   deps = [
    571     ":net",
    572     "//sql:sql",
    573   ]
    574 }
    575 
    576 static_library("http_server") {
    577   sources = [
    578     "server/http_connection.cc",
    579     "server/http_connection.h",
    580     "server/http_server.cc",
    581     "server/http_server.h",
    582     "server/http_server_request_info.cc",
    583     "server/http_server_request_info.h",
    584     "server/http_server_response_info.cc",
    585     "server/http_server_response_info.h",
    586     "server/web_socket.cc",
    587     "server/web_socket.h",
    588   ]
    589   configs += [ "//build/config/compiler:wexit_time_destructors" ]
    590   deps = [
    591     ":net",
    592     "//base",
    593   ]
    594 }
    595 
    596 executable("dump_cache") {
    597   testonly = true
    598   sources = [
    599     "tools/dump_cache/cache_dumper.cc",
    600     "tools/dump_cache/cache_dumper.h",
    601     "tools/dump_cache/dump_cache.cc",
    602     "tools/dump_cache/dump_files.cc",
    603     "tools/dump_cache/dump_files.h",
    604     "tools/dump_cache/simple_cache_dumper.cc",
    605     "tools/dump_cache/simple_cache_dumper.h",
    606     "tools/dump_cache/url_to_filename_encoder.cc",
    607     "tools/dump_cache/url_to_filename_encoder.h",
    608     "tools/dump_cache/url_utilities.h",
    609     "tools/dump_cache/url_utilities.cc",
    610   ]
    611 
    612   configs += [ ":net_win_size_truncation" ]
    613 
    614   deps = [
    615     "//base",
    616     ":net",
    617     ":test_support",
    618   ]
    619 }
    620 
    621 source_set("test_support") {
    622   testonly = true
    623   sources = [
    624     "base/capturing_net_log.cc",
    625     "base/capturing_net_log.h",
    626     "base/load_timing_info_test_util.cc",
    627     "base/load_timing_info_test_util.h",
    628     "base/mock_file_stream.cc",
    629     "base/mock_file_stream.h",
    630     "base/test_completion_callback.cc",
    631     "base/test_completion_callback.h",
    632     "base/test_data_directory.cc",
    633     "base/test_data_directory.h",
    634     "cert/mock_cert_verifier.cc",
    635     "cert/mock_cert_verifier.h",
    636     "cookies/cookie_monster_store_test.cc",
    637     "cookies/cookie_monster_store_test.h",
    638     "cookies/cookie_store_test_callbacks.cc",
    639     "cookies/cookie_store_test_callbacks.h",
    640     "cookies/cookie_store_test_helpers.cc",
    641     "cookies/cookie_store_test_helpers.h",
    642     "disk_cache/disk_cache_test_base.cc",
    643     "disk_cache/disk_cache_test_base.h",
    644     "disk_cache/disk_cache_test_util.cc",
    645     "disk_cache/disk_cache_test_util.h",
    646     "dns/dns_test_util.cc",
    647     "dns/dns_test_util.h",
    648     "dns/mock_host_resolver.cc",
    649     "dns/mock_host_resolver.h",
    650     "dns/mock_mdns_socket_factory.cc",
    651     "dns/mock_mdns_socket_factory.h",
    652     "http/http_transaction_test_util.cc",
    653     "http/http_transaction_test_util.h",
    654     "proxy/mock_proxy_resolver.cc",
    655     "proxy/mock_proxy_resolver.h",
    656     "proxy/mock_proxy_script_fetcher.cc",
    657     "proxy/mock_proxy_script_fetcher.h",
    658     "proxy/proxy_config_service_common_unittest.cc",
    659     "proxy/proxy_config_service_common_unittest.h",
    660     "socket/socket_test_util.cc",
    661     "socket/socket_test_util.h",
    662     "test/cert_test_util.cc",
    663     "test/cert_test_util.h",
    664     "test/cert_test_util_nss.cc",
    665     "test/ct_test_util.cc",
    666     "test/ct_test_util.h",
    667     "test/embedded_test_server/embedded_test_server.cc",
    668     "test/embedded_test_server/embedded_test_server.h",
    669     "test/embedded_test_server/http_connection.cc",
    670     "test/embedded_test_server/http_connection.h",
    671     "test/embedded_test_server/http_request.cc",
    672     "test/embedded_test_server/http_request.h",
    673     "test/embedded_test_server/http_response.cc",
    674     "test/embedded_test_server/http_response.h",
    675     "test/net_test_suite.cc",
    676     "test/net_test_suite.h",
    677     "test/python_utils.cc",
    678     "test/python_utils.h",
    679     "test/spawned_test_server/base_test_server.cc",
    680     "test/spawned_test_server/base_test_server.h",
    681     "test/spawned_test_server/local_test_server_posix.cc",
    682     "test/spawned_test_server/local_test_server_win.cc",
    683     "test/spawned_test_server/local_test_server.cc",
    684     "test/spawned_test_server/local_test_server.h",
    685     "test/spawned_test_server/remote_test_server.cc",
    686     "test/spawned_test_server/remote_test_server.h",
    687     "test/spawned_test_server/spawned_test_server.h",
    688     "test/spawned_test_server/spawner_communicator.cc",
    689     "test/spawned_test_server/spawner_communicator.h",
    690     "url_request/test_url_fetcher_factory.cc",
    691     "url_request/test_url_fetcher_factory.h",
    692     "url_request/test_url_request_interceptor.cc",
    693     "url_request/test_url_request_interceptor.h",
    694     "url_request/url_request_test_util.cc",
    695     "url_request/url_request_test_util.h",
    696   ]
    697 
    698   configs += [ ":net_win_size_truncation" ]
    699 
    700   public_deps = [
    701     "//base",
    702     "//base/test:test_support",
    703     "//crypto",
    704     "//net",
    705     "//net/tools/tld_cleanup",
    706     "//testing/gmock",
    707     "//testing/gtest",
    708     "//url",
    709   ]
    710 
    711   if (is_ios) {
    712     public_deps += [ "//third_party/nss" ]
    713   }
    714 
    715   if (!is_android) {
    716     sources -= [
    717       "test/spawned_test_server/remote_test_server.cc",
    718       "test/spawned_test_server/remote_test_server.h",
    719       "test/spawned_test_server/spawner_communicator.cc",
    720       "test/spawned_test_server/spawner_communicator.h",
    721     ]
    722   }
    723 
    724   if (use_v8_in_net) {
    725     public_deps += [ ":net_with_v8" ]
    726   }
    727 
    728   if (!enable_mdns) {
    729     sources -= [
    730       "dns/mock_mdns_socket_factory.cc",
    731       "dns/mock_mdns_socket_factory.h",
    732     ]
    733   }
    734 
    735   if (use_nss_certs) {
    736     public_deps += ["//crypto:platform" ]
    737   } else {
    738     sources -= [
    739       "test/cert_test_util_nss.cc",
    740     ]
    741   }
    742 }
    743 
    744 source_set("balsa") {
    745   sources = [
    746     "tools/balsa/balsa_enums.h",
    747     "tools/balsa/balsa_frame.cc",
    748     "tools/balsa/balsa_frame.h",
    749     "tools/balsa/balsa_headers.cc",
    750     "tools/balsa/balsa_headers.h",
    751     "tools/balsa/balsa_headers_token_utils.cc",
    752     "tools/balsa/balsa_headers_token_utils.h",
    753     "tools/balsa/balsa_visitor_interface.h",
    754     "tools/balsa/http_message_constants.cc",
    755     "tools/balsa/http_message_constants.h",
    756     "tools/balsa/noop_balsa_visitor.h",
    757     "tools/balsa/simple_buffer.cc",
    758     "tools/balsa/simple_buffer.h",
    759     "tools/balsa/split.cc",
    760     "tools/balsa/split.h",
    761     "tools/balsa/string_piece_utils.h",
    762     "tools/quic/spdy_utils.cc",
    763     "tools/quic/spdy_utils.h",
    764   ]
    765   deps = [
    766     ":net",
    767     "//base",
    768     "//url",
    769   ]
    770 }
    771 
    772 if (use_v8_in_net) {
    773   component("net_with_v8") {
    774     sources = [
    775       "proxy/proxy_resolver_v8.cc",
    776       "proxy/proxy_resolver_v8.h",
    777       "proxy/proxy_resolver_v8_tracing.cc",
    778       "proxy/proxy_resolver_v8_tracing.h",
    779       "proxy/proxy_service_v8.cc",
    780       "proxy/proxy_service_v8.h",
    781     ]
    782 
    783     defines = [ "NET_IMPLEMENTATION" ]
    784     configs += [
    785       ":net_win_size_truncation",
    786       "//build/config/compiler:wexit_time_destructors",
    787     ]
    788 
    789     public_deps = [
    790       ":net",
    791     ]
    792     deps = [
    793       "//base",
    794       "//gin",
    795       "//url",
    796       "//v8",
    797     ]
    798   }
    799 }
    800 
    801 if (!is_ios && !is_android) {
    802   executable("crash_cache") {
    803     testonly = true
    804     sources = [ "tools/crash_cache/crash_cache.cc" ]
    805     configs += [ ":net_win_size_truncation" ]
    806     deps = [
    807       ":net",
    808       ":test_support",
    809       "//base",
    810     ]
    811   }
    812 
    813   executable("crl_set_dump") {
    814     testonly = true
    815     sources = [ "tools/crl_set_dump/crl_set_dump.cc" ]
    816     configs += [ ":net_win_size_truncation" ]
    817     deps = [
    818       ":net",
    819       "//base",
    820     ]
    821   }
    822 
    823   executable("dns_fuzz_stub") {
    824     testonly = true
    825     sources = [ "tools/dns_fuzz_stub/dns_fuzz_stub.cc" ]
    826     configs += [ ":net_win_size_truncation" ]
    827     deps = [
    828       ":net",
    829       "//base",
    830     ]
    831   }
    832 
    833   executable("gdig") {
    834     testonly = true
    835     sources = [
    836       "tools/gdig/file_net_log.cc",
    837       "tools/gdig/gdig.cc",
    838     ]
    839     deps = [
    840       ":net",
    841       "//base",
    842     ]
    843   }
    844 
    845   executable("get_server_time") {
    846     testonly = true
    847     sources = [ "tools/get_server_time/get_server_time.cc" ]
    848     configs += [ ":net_win_size_truncation" ]
    849     deps = [
    850       ":net",
    851       "//base",
    852       "//base:i18n",
    853       "//url",
    854     ]
    855   }
    856 
    857   if (use_v8_in_net) {
    858     executable("net_watcher") {
    859       testonly = true
    860       sources = [ "tools/net_watcher/net_watcher.cc" ]
    861       deps = [
    862         ":net",
    863         ":net_with_v8",
    864         "//base",
    865       ]
    866 
    867       if (is_linux) {
    868         configs += [
    869           "//build/config/linux:gconf",
    870           "//build/config/linux:glib",
    871         ]
    872         deps += [ "//build/config/linux:gio" ]
    873       }
    874     }
    875   }
    876 
    877   executable("run_testserver") {
    878     testonly = true
    879     sources = [ "tools/testserver/run_testserver.cc" ]
    880     deps = [
    881       ":net",  # TODO(brettw) bug 363749: this shouldn't be necessary. It's not
    882                # in the GYP build, and can be removed when the bug is fixed.
    883       ":test_support",
    884       "//base",
    885       "//base/test:test_support",
    886       "//testing/gtest",
    887     ]
    888   }
    889 
    890   executable("stress_cache") {
    891     testonly = true
    892     sources = [ "disk_cache/blockfile/stress_cache.cc" ]
    893     configs += [ ":net_win_size_truncation" ]
    894     deps = [
    895       ":net",
    896       ":test_support",
    897       "//base",
    898     ]
    899   }
    900 
    901   executable("tld_cleanup") {
    902     sources = [ "tools/tld_cleanup/tld_cleanup.cc" ]
    903     configs += [ ":net_win_size_truncation" ]
    904     deps = [
    905       "//base",
    906       "//base:i18n",
    907       "//net/tools/tld_cleanup",
    908     ]
    909   }
    910 }
    911 
    912 if (is_linux) {
    913   static_library("epoll_server") {
    914     sources = [
    915       "tools/epoll_server/epoll_server.cc",
    916       "tools/epoll_server/epoll_server.h",
    917     ]
    918     deps = [
    919       ":net",
    920       "//base",
    921     ]
    922   }
    923 
    924   static_library("flip_in_mem_edsm_server_base") {
    925     testonly = true
    926     sources = [
    927       "tools/dump_cache/url_to_filename_encoder.cc",
    928       "tools/dump_cache/url_to_filename_encoder.h",
    929       "tools/dump_cache/url_utilities.h",
    930       "tools/dump_cache/url_utilities.cc",
    931       "tools/flip_server/acceptor_thread.h",
    932       "tools/flip_server/acceptor_thread.cc",
    933       "tools/flip_server/create_listener.cc",
    934       "tools/flip_server/create_listener.h",
    935       "tools/flip_server/constants.h",
    936       "tools/flip_server/flip_config.cc",
    937       "tools/flip_server/flip_config.h",
    938       "tools/flip_server/http_interface.cc",
    939       "tools/flip_server/http_interface.h",
    940       "tools/flip_server/loadtime_measurement.h",
    941       "tools/flip_server/mem_cache.h",
    942       "tools/flip_server/mem_cache.cc",
    943       "tools/flip_server/output_ordering.cc",
    944       "tools/flip_server/output_ordering.h",
    945       "tools/flip_server/ring_buffer.cc",
    946       "tools/flip_server/ring_buffer.h",
    947       "tools/flip_server/sm_connection.cc",
    948       "tools/flip_server/sm_connection.h",
    949       "tools/flip_server/sm_interface.h",
    950       "tools/flip_server/spdy_ssl.cc",
    951       "tools/flip_server/spdy_ssl.h",
    952       "tools/flip_server/spdy_interface.cc",
    953       "tools/flip_server/spdy_interface.h",
    954       "tools/flip_server/spdy_util.cc",
    955       "tools/flip_server/spdy_util.h",
    956       "tools/flip_server/streamer_interface.cc",
    957       "tools/flip_server/streamer_interface.h",
    958     ]
    959     deps = [
    960       ":balsa",
    961       ":epoll_server",
    962       ":net",
    963       "//base",
    964       "//third_party/boringssl",
    965     ]
    966   }
    967 
    968   executable("flip_in_mem_edsm_server_unittests") {
    969     testonly = true
    970     sources = [
    971       "tools/flip_server/flip_test_utils.cc",
    972       "tools/flip_server/flip_test_utils.h",
    973       "tools/flip_server/http_interface_test.cc",
    974       "tools/flip_server/mem_cache_test.cc",
    975       "tools/flip_server/run_all_tests.cc",
    976       "tools/flip_server/spdy_interface_test.cc",
    977     ]
    978     deps = [
    979       ":flip_in_mem_edsm_server_base",
    980       ":net",
    981       ":test_support",
    982       "//testing/gtest",
    983       "//testing/gmock",
    984       "//third_party/boringssl",
    985     ]
    986   }
    987 
    988   executable("flip_in_mem_edsm_server") {
    989     testonly = true
    990     sources = [ "tools/flip_server/flip_in_mem_edsm_server.cc" ]
    991     deps = [
    992       ":flip_in_mem_edsm_server_base",
    993       ":net",
    994       "//base",
    995     ]
    996   }
    997 
    998   source_set("quic_base") {
    999     sources = [
   1000       "tools/quic/quic_client.cc",
   1001       "tools/quic/quic_client.h",
   1002       "tools/quic/quic_client_session.cc",
   1003       "tools/quic/quic_client_session.h",
   1004       "tools/quic/quic_default_packet_writer.cc",
   1005       "tools/quic/quic_default_packet_writer.h",
   1006       "tools/quic/quic_dispatcher.h",
   1007       "tools/quic/quic_dispatcher.cc",
   1008       "tools/quic/quic_epoll_clock.cc",
   1009       "tools/quic/quic_epoll_clock.h",
   1010       "tools/quic/quic_epoll_connection_helper.cc",
   1011       "tools/quic/quic_epoll_connection_helper.h",
   1012       "tools/quic/quic_in_memory_cache.cc",
   1013       "tools/quic/quic_in_memory_cache.h",
   1014       "tools/quic/quic_packet_writer_wrapper.cc",
   1015       "tools/quic/quic_packet_writer_wrapper.h",
   1016       "tools/quic/quic_per_connection_packet_writer.cc",
   1017       "tools/quic/quic_per_connection_packet_writer.h",
   1018       "tools/quic/quic_server.cc",
   1019       "tools/quic/quic_server.h",
   1020       "tools/quic/quic_server_session.cc",
   1021       "tools/quic/quic_server_session.h",
   1022       "tools/quic/quic_socket_utils.cc",
   1023       "tools/quic/quic_socket_utils.h",
   1024       "tools/quic/quic_spdy_client_stream.cc",
   1025       "tools/quic/quic_spdy_client_stream.h",
   1026       "tools/quic/quic_spdy_server_stream.cc",
   1027       "tools/quic/quic_spdy_server_stream.h",
   1028       "tools/quic/quic_time_wait_list_manager.h",
   1029       "tools/quic/quic_time_wait_list_manager.cc",
   1030     ]
   1031     deps = [
   1032       ":balsa",
   1033       ":epoll_server",
   1034       ":net",
   1035       "//base",
   1036       "//base/third_party/dynamic_annotations",
   1037       "//crypto",
   1038       "//third_party/boringssl",
   1039       "//url",
   1040     ]
   1041   }
   1042 
   1043   executable("quic_client") {
   1044     sources = [ "tools/quic/quic_client_bin.cc" ]
   1045     deps = [
   1046       ":quic_base",
   1047       ":net",
   1048       "//base",
   1049       "//third_party/boringssl",
   1050     ]
   1051   }
   1052 }
   1053 
   1054 if (is_android) {
   1055   generate_jni("net_jni_headers") {
   1056     sources = [
   1057       "android/java/src/org/chromium/net/AndroidCertVerifyResult.java",
   1058       "android/java/src/org/chromium/net/AndroidKeyStore.java",
   1059       "android/java/src/org/chromium/net/AndroidNetworkLibrary.java",
   1060       "android/java/src/org/chromium/net/AndroidPrivateKey.java",
   1061       "android/java/src/org/chromium/net/GURLUtils.java",
   1062       "android/java/src/org/chromium/net/NetworkChangeNotifier.java",
   1063       "android/java/src/org/chromium/net/ProxyChangeListener.java",
   1064       "android/java/src/org/chromium/net/X509Util.java",
   1065     ]
   1066     jni_package = "net"
   1067   }
   1068   generate_jni("net_test_jni_headers") {
   1069     sources = [
   1070       "android/javatests/src/org/chromium/net/AndroidKeyStoreTestUtil.java",
   1071     ]
   1072     jni_package = "net"
   1073   }
   1074 }
   1075 
   1076 if (is_android || is_linux) {
   1077   executable("disk_cache_memory_test") {
   1078     testonly = true
   1079     sources = [ "tools/disk_cache_memory_test/disk_cache_memory_test.cc" ]
   1080     deps = [
   1081       ":net",
   1082       "//base",
   1083     ]
   1084   }
   1085 }
   1086 
   1087 # TODO(GYP) make this compile on Android, we need some native test deps done.
   1088 # TODO(GYP) Also doesn't work on Windows; dependency on boringssl is wrong.
   1089 if (!is_android && !is_win) {
   1090 
   1091 source_set("quic_tools") {
   1092   sources = [
   1093     "quic/quic_dispatcher.cc",
   1094     "quic/quic_dispatcher.h",
   1095     "quic/quic_in_memory_cache.cc",
   1096     "quic/quic_in_memory_cache.h",
   1097     "quic/quic_per_connection_packet_writer.cc",
   1098     "quic/quic_per_connection_packet_writer.h",
   1099     "quic/quic_server.cc",
   1100     "quic/quic_server.h",
   1101     "quic/quic_server_packet_writer.cc",
   1102     "quic/quic_server_packet_writer.h",
   1103     "quic/quic_server_session.cc",
   1104     "quic/quic_server_session.h",
   1105     "quic/quic_spdy_server_stream.cc",
   1106     "quic/quic_spdy_server_stream.h",
   1107     "quic/quic_time_wait_list_manager.cc",
   1108     "quic/quic_time_wait_list_manager.h",
   1109   ]
   1110   deps = [
   1111     ":net",
   1112     "//base",
   1113     "//base/third_party/dynamic_annotations",
   1114     "//url",
   1115   ]
   1116 }
   1117 
   1118 test("net_unittests") {
   1119   sources = gypi_values.net_test_sources
   1120 
   1121   configs += [ ":net_win_size_truncation" ]
   1122   defines = []
   1123 
   1124   deps = [
   1125     ":extras",
   1126     ":http_server",
   1127     ":net",
   1128     ":quic_tools",
   1129     ":test_support",
   1130     "//base",
   1131     "//base:i18n",
   1132     "//base:prefs_test_support",
   1133     "//base/allocator",
   1134     "//base/third_party/dynamic_annotations",
   1135     "//crypto",
   1136     "//crypto:platform",
   1137     "//crypto:test_support",
   1138     "//net/base/registry_controlled_domains",
   1139     "//testing/gmock",
   1140     "//testing/gtest",
   1141     "//third_party/zlib",
   1142     "//url",
   1143   ]
   1144 
   1145   if (is_linux) {
   1146     sources += gypi_values.net_linux_test_sources
   1147     deps += [
   1148       ":balsa",
   1149       ":epoll_server",
   1150       ":flip_in_mem_edsm_server_base",
   1151       ":quic_base",
   1152     ]
   1153   }
   1154 
   1155   if (is_chromeos) {
   1156     sources -= [
   1157       "proxy/proxy_config_service_linux_unittest.cc",
   1158     ]
   1159   }
   1160 
   1161   if (is_android) {
   1162     sources -= [
   1163       # See bug http://crbug.com/344533.
   1164       "disk_cache/blockfile/index_table_v3_unittest.cc",
   1165       # No res_ninit() et al on Android, so this doesn't make a lot of
   1166       # sense.
   1167       "dns/dns_config_service_posix_unittest.cc",
   1168     ]
   1169     deps += [
   1170       ":net_javatests",  # FIXME(brettw)
   1171       ":net_test_jni_headers",
   1172     ]
   1173   }
   1174 
   1175   if (!use_nss_certs) {
   1176     sources -= [
   1177       "ssl/client_cert_store_nss_unittest.cc",
   1178     ]
   1179     if (is_chromeos) {  # Already removed for all non-ChromeOS builds.
   1180       sources -= [
   1181         "ssl/client_cert_store_chromeos_unittest.cc",
   1182       ]
   1183     }
   1184   }
   1185 
   1186   if (use_openssl) {
   1187     # When building for OpenSSL, we need to exclude NSS specific tests
   1188     # or functionality not supported by OpenSSL yet.
   1189     # TODO(bulach): Add equivalent tests when the underlying
   1190     #               functionality is ported to OpenSSL.
   1191     sources -= [
   1192       "cert/nss_cert_database_unittest.cc",
   1193       "cert/x509_util_nss_unittest.cc",
   1194       "quic/test_tools/crypto_test_utils_nss.cc",
   1195     ]
   1196     if (is_chromeos) {
   1197       # These were already removed in the non-ChromeOS case.
   1198       sources -= [
   1199         "cert/nss_cert_database_chromeos_unittest.cc",
   1200         "cert/nss_profile_filter_chromeos_unittest.cc",
   1201       ]
   1202     }
   1203   } else {
   1204     sources -= [
   1205       "cert/x509_util_openssl_unittest.cc",
   1206       "quic/test_tools/crypto_test_utils_openssl.cc",
   1207       "socket/ssl_client_socket_openssl_unittest.cc",
   1208       "socket/ssl_session_cache_openssl_unittest.cc",
   1209     ]
   1210     if (!is_desktop_linux && !is_chromeos) {
   1211       sources -= [ "cert/nss_cert_database_unittest.cc" ]
   1212     }
   1213   }
   1214 
   1215   if (use_kerberos) {
   1216     defines += [ "USE_KERBEROS" ]
   1217   } else {
   1218     sources -= [
   1219       "http/http_auth_gssapi_posix_unittest.cc",
   1220       "http/http_auth_handler_negotiate_unittest.cc",
   1221       "http/mock_gssapi_library_posix.cc",
   1222       "http/mock_gssapi_library_posix.h",
   1223     ]
   1224   }
   1225 
   1226   if (use_openssl || (!is_desktop_linux && !is_chromeos && !is_ios)) {
   1227     # Only include this test when on Posix and using NSS for
   1228     # cert verification or on iOS (which also uses NSS for certs).
   1229     sources -= [ "ocsp/nss_ocsp_unittest.cc" ]
   1230   }
   1231 
   1232   if (!use_openssl_certs) {
   1233     sources -= [ "ssl/openssl_client_key_store_unittest.cc" ]
   1234   }
   1235 
   1236   if (!enable_websockets) {
   1237     sources -= [
   1238       "socket_stream/socket_stream_metrics_unittest.cc",
   1239       "socket_stream/socket_stream_unittest.cc",
   1240       "spdy/spdy_websocket_stream_unittest.cc",
   1241       "websockets/websocket_basic_stream_test.cc",
   1242       "websockets/websocket_channel_test.cc",
   1243       "websockets/websocket_deflate_predictor_impl_test.cc",
   1244       "websockets/websocket_deflate_stream_test.cc",
   1245       "websockets/websocket_deflater_test.cc",
   1246       "websockets/websocket_errors_test.cc",
   1247       "websockets/websocket_extension_parser_test.cc",
   1248       "websockets/websocket_frame_parser_test.cc",
   1249       "websockets/websocket_frame_test.cc",
   1250       "websockets/websocket_handshake_handler_spdy_test.cc",
   1251       "websockets/websocket_handshake_handler_test.cc",
   1252       "websockets/websocket_handshake_stream_create_helper_test.cc",
   1253       "websockets/websocket_inflater_test.cc",
   1254       "websockets/websocket_job_test.cc",
   1255       "websockets/websocket_net_log_params_test.cc",
   1256       "websockets/websocket_stream_test.cc",
   1257       "websockets/websocket_test_util.cc",
   1258       "websockets/websocket_test_util.h",
   1259       "websockets/websocket_throttle_test.cc",
   1260     ]
   1261   }
   1262 
   1263   if (disable_file_support) {
   1264     sources -= [
   1265       "base/directory_lister_unittest.cc",
   1266       "url_request/url_request_file_job_unittest.cc",
   1267     ]
   1268   }
   1269 
   1270   if (disable_ftp_support) {
   1271     sources -= [
   1272       "ftp/ftp_auth_cache_unittest.cc",
   1273       "ftp/ftp_ctrl_response_buffer_unittest.cc",
   1274       "ftp/ftp_directory_listing_parser_ls_unittest.cc",
   1275       "ftp/ftp_directory_listing_parser_netware_unittest.cc",
   1276       "ftp/ftp_directory_listing_parser_os2_unittest.cc",
   1277       "ftp/ftp_directory_listing_parser_unittest.cc",
   1278       "ftp/ftp_directory_listing_parser_unittest.h",
   1279       "ftp/ftp_directory_listing_parser_vms_unittest.cc",
   1280       "ftp/ftp_directory_listing_parser_windows_unittest.cc",
   1281       "ftp/ftp_network_transaction_unittest.cc",
   1282       "ftp/ftp_util_unittest.cc",
   1283       "url_request/url_request_ftp_job_unittest.cc",
   1284     ]
   1285   }
   1286 
   1287   if (!enable_built_in_dns) {
   1288     sources -= [
   1289       "dns/address_sorter_posix_unittest.cc",
   1290       "dns/address_sorter_unittest.cc",
   1291     ]
   1292   }
   1293 
   1294   # Always need use_v8_in_net to be 1 to run on Android, so just remove
   1295   # net_unittest's dependency on v8 when using icu alternatives instead of
   1296   # setting use_v8_in_net to 0.
   1297   if (use_v8_in_net && !use_icu_alternatives_on_android) {
   1298     deps += [ ":net_with_v8" ]
   1299   } else {
   1300     sources -= [
   1301       "proxy/proxy_resolver_v8_unittest.cc",
   1302       "proxy/proxy_resolver_v8_tracing_unittest.cc",
   1303     ]
   1304   }
   1305 
   1306   if (!enable_mdns) {
   1307     sources -= [
   1308       "dns/mdns_cache_unittest.cc",
   1309       "dns/mdns_client_unittest.cc",
   1310       "dns/record_parsed_unittest.cc",
   1311       "dns/record_rdata_unittest.cc",
   1312     ]
   1313   }
   1314 
   1315   if (is_ios) {
   1316     # TODO(GYP)
   1317     #  'actions': [
   1318     #    {
   1319     #      'action_name': 'copy_test_data',
   1320     #      'variables': {
   1321     #        'test_data_files': [
   1322     #          'data/ssl/certificates/',
   1323     #          'data/test.html',
   1324     #          'data/url_request_unittest/',
   1325     #        ],
   1326     #        'test_data_prefix': 'net',
   1327     #      },
   1328     #      'includes': [ '../build/copy_test_data_ios.gypi' ],
   1329     #    },
   1330     #  ],
   1331     sources -= [
   1332       # TODO(droger): The following tests are disabled because the
   1333       # implementation is missing or incomplete.
   1334       # KeygenHandler::GenKeyAndSignChallenge() is not ported to iOS.
   1335       "base/keygen_handler_unittest.cc",
   1336       "disk_cache/backend_unittest.cc",
   1337       "disk_cache/blockfile/block_files_unittest.cc",
   1338       # Need to read input data files.
   1339       "filter/gzip_filter_unittest.cc",
   1340       "socket/ssl_server_socket_unittest.cc",
   1341       "spdy/fuzzing/hpack_fuzz_util_test.cc",
   1342       # Need TestServer.
   1343       "proxy/proxy_script_fetcher_impl_unittest.cc",
   1344       "socket/ssl_client_socket_unittest.cc",
   1345       "url_request/url_fetcher_impl_unittest.cc",
   1346       "url_request/url_request_context_builder_unittest.cc",
   1347       # Needs GetAppOutput().
   1348       "test/python_utils_unittest.cc",
   1349 
   1350       # The following tests are disabled because they don't apply to
   1351       # iOS.
   1352       # OS is not "linux" or "freebsd" or "openbsd".
   1353       "socket/unix_domain_client_socket_posix_unittest.cc",
   1354       "socket/unix_domain_listen_socket_posix_unittest.cc",
   1355       "socket/unix_domain_server_socket_posix_unittest.cc",
   1356 
   1357       # See bug http://crbug.com/344533.
   1358       "disk_cache/blockfile/index_table_v3_unittest.cc",
   1359     ]
   1360   }
   1361 
   1362   if (is_android) {
   1363     sources -= [
   1364       "dns/dns_config_service_posix_unittest.cc",
   1365     ]
   1366     # TODO(GYP)
   1367     # # TODO(mmenke):  This depends on test_support_base, which depends on
   1368     # #                icu.  Figure out a way to remove that dependency.
   1369     # 'dependencies': [
   1370     #   '../testing/android/native_test.gyp:native_test_native_code',
   1371     # ]
   1372 
   1373     set_sources_assignment_filter([])
   1374     sources += [ "base/address_tracker_linux_unittest.cc" ]
   1375     set_sources_assignment_filter(sources_assignment_filter)
   1376   }
   1377 
   1378   if (use_icu_alternatives_on_android) {
   1379     sources -= [
   1380       "base/filename_util_unittest.cc",
   1381       "base/net_util_icu_unittest.cc",
   1382     ]
   1383     deps -= [ "//base:i18n" ]
   1384   }
   1385 }
   1386 
   1387 executable("quic_server") {
   1388   sources = [ "quic/quic_server_bin.cc" ]
   1389   deps = [
   1390     ":quic_tools",
   1391     ":net",
   1392     "//base",
   1393     "//third_party/boringssl",
   1394   ]
   1395 }
   1396 
   1397 }  # !is_android
   1398