Reland "Refactor rtc_base build targets."

This is a reland of 69241a93fb14f6527a26d5c94dde879013012d2a

Fix: The problem was related to NO_MAIN_THREAD_WRAPPING, which
affects https://source.chromium.org/chromium/chromium/src/+/master:third_party/webrtc/rtc_base/thread.cc;l=257-263;drc=7acc2d9fe3a6e3c4d8881d2bdfc9b8968a724cd5.
The original CL didn't attach the definition of the macro
NO_MAIN_THREAD_WRAPPING when building for Chromium (which doesn't have
to be related to //rtc_base anymore but to //rtc_base:threading).

Original change's description:
> Refactor rtc_base build targets.
>
> The "//rtc_base:rtc_base" build target has historically been one of the
> biggest targets in the WebRTC build. Big targets are the main source of
> circular dependencies and non-API types leakage.
>
> This CL is a step forward into splitting "//rtc_base:rtc_base" into
> smaller targets (as originally started in 2018).
>
> The only non-automated changes are (like re-wiring the build system):
> * The creation of //rtc_base/async_resolver.{h,cc} which allows to
>   break a circular dependency (is has been extracted from
>   //rtc_base/net_helpers.{h,cc}).
> * The creation of //rtc_base/internal/default_socket_server.{h,cc} to
>   break another circular dependency.
>
> Bug: webrtc:9987
> Change-Id: I0c8f5e7efe2c8fd8e6bffa0d6dd2dd494cf3df02
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/196903
> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Cr-Commit-Position: refs/heads/master@{#32941}

Bug: webrtc:9987
Change-Id: I7cdf49d2aac8357f1f50f90010bf2c2f62fa19f6
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/202021
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#33001}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index f02c5fd..3c73d51 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -52,6 +52,7 @@
       "../pc:peerconnection",
       "../rtc_base",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:threading",
       "audio:audio_mixer_api",
       "audio_codecs:audio_codecs_api",
       "task_queue:default_task_queue_factory",
@@ -174,6 +175,7 @@
     ":rtp_parameters",
     ":rtp_transceiver_direction",
     ":scoped_refptr",
+    "../rtc_base:network_constants",
     "adaptation:resource_adaptation_api",
     "audio:audio_mixer_api",
     "audio_codecs:audio_codecs_api",
@@ -204,7 +206,10 @@
     "../rtc_base",
     "../rtc_base:checks",
     "../rtc_base:deprecation",
+    "../rtc_base:ip_address",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:socket_address",
+    "../rtc_base:threading",
     "../rtc_base/system:rtc_export",
   ]
   absl_deps = [
@@ -248,6 +253,7 @@
     "packet_socket_factory.h",
   ]
   deps = [
+    "../rtc_base:async_resolver_interface",
     "../rtc_base:rtc_base",
     "../rtc_base/system:rtc_export",
   ]
@@ -383,6 +389,7 @@
     ":video_quality_analyzer_api",
     "../media:rtc_media_base",
     "../rtc_base:rtc_base",
+    "../rtc_base:threading",
     "rtc_event_log",
     "task_queue",
     "transport:network_control",
@@ -600,6 +607,8 @@
     ":time_controller",
     "../call:simulated_network",
     "../rtc_base",
+    "../rtc_base:network_constants",
+    "../rtc_base:threading",
     "test/network_emulation",
     "units:data_rate",
     "units:data_size",
@@ -617,6 +626,7 @@
   deps = [
     "../modules/utility",
     "../rtc_base",
+    "../rtc_base:threading",
     "../rtc_base/synchronization:yield_policy",
     "../system_wrappers",
     "task_queue",
@@ -670,6 +680,7 @@
     ":scoped_refptr",
     "../p2p:rtc_p2p",
     "../rtc_base",
+    "../rtc_base:threading",
     "../rtc_base/system:rtc_export",
     "rtc_event_log:rtc_event_log",
   ]
diff --git a/api/test/network_emulation/BUILD.gn b/api/test/network_emulation/BUILD.gn
index 58cd27d..a8044d7 100644
--- a/api/test/network_emulation/BUILD.gn
+++ b/api/test/network_emulation/BUILD.gn
@@ -21,7 +21,9 @@
     "../..:array_view",
     "../../../rtc_base",
     "../../../rtc_base:checks",
+    "../../../rtc_base:ip_address",
     "../../../rtc_base:rtc_base_approved",
+    "../../../rtc_base:socket_address",
     "../../numerics",
     "../../task_queue",
     "../../units:data_rate",
diff --git a/api/transport/BUILD.gn b/api/transport/BUILD.gn
index 7bcda8b..7d23adc 100644
--- a/api/transport/BUILD.gn
+++ b/api/transport/BUILD.gn
@@ -108,8 +108,10 @@
   deps = [
     "../../api:array_view",
     "../../rtc_base:checks",
+    "../../rtc_base:ip_address",
     "../../rtc_base:rtc_base",
     "../../rtc_base:rtc_base_approved",
+    "../../rtc_base:socket_address",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
 }
@@ -147,6 +149,7 @@
       ":stun_types",
       "../../rtc_base",
       "../../rtc_base:rtc_base_approved",
+      "../../rtc_base:socket_address",
       "../../test:test_support",
       "//testing/gtest",
     ]
diff --git a/audio/BUILD.gn b/audio/BUILD.gn
index 6901e33..1fea09c 100644
--- a/audio/BUILD.gn
+++ b/audio/BUILD.gn
@@ -90,6 +90,7 @@
     "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_task_queue",
     "../rtc_base:safe_minmax",
+    "../rtc_base:threading",
     "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/synchronization:mutex",
     "../rtc_base/synchronization:sequence_checker",
diff --git a/call/BUILD.gn b/call/BUILD.gn
index cef43f4..7730382 100644
--- a/call/BUILD.gn
+++ b/call/BUILD.gn
@@ -504,6 +504,7 @@
       "../rtc_base:rtc_base_approved",
       "../rtc_base:task_queue_for_test",
       "../rtc_base:task_queue_for_test",
+      "../rtc_base:threading",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/task_utils:repeating_task",
       "../system_wrappers",
diff --git a/examples/BUILD.gn b/examples/BUILD.gn
index c267896..a08ab46 100644
--- a/examples/BUILD.gn
+++ b/examples/BUILD.gn
@@ -686,6 +686,8 @@
       "../p2p:rtc_p2p",
       "../pc:video_track_source",
       "../rtc_base:checks",
+      "../rtc_base:net_helpers",
+      "../rtc_base:threading",
       "../rtc_base/third_party/sigslot",
       "../system_wrappers:field_trial",
       "../test:field_trial",
@@ -777,7 +779,11 @@
       "../p2p:rtc_p2p",
       "../pc:rtc_pc",
       "../rtc_base",
+      "../rtc_base:ip_address",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:socket_address",
+      "../rtc_base:socket_server",
+      "../rtc_base:threading",
     ]
   }
   rtc_executable("stunserver") {
@@ -789,6 +795,9 @@
       "../pc:rtc_pc",
       "../rtc_base",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:socket_address",
+      "../rtc_base:socket_server",
+      "../rtc_base:threading",
     ]
   }
 }
@@ -912,6 +921,8 @@
       "../rtc_base",
       "../rtc_base:checks",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:socket_address",
+      "../rtc_base:threading",
       "//third_party/abseil-cpp/absl/flags:flag",
       "//third_party/abseil-cpp/absl/flags:parse",
     ]
diff --git a/examples/androidvoip/BUILD.gn b/examples/androidvoip/BUILD.gn
index 649e601..31b20d3 100644
--- a/examples/androidvoip/BUILD.gn
+++ b/examples/androidvoip/BUILD.gn
@@ -56,6 +56,9 @@
 
     deps = [
       ":generated_jni",
+      "../../rtc_base:socket_address",
+      "../../rtc_base:socket_server",
+      "../../rtc_base:threading",
       "//api:transport_api",
       "//api/audio_codecs:audio_codecs_api",
       "//api/audio_codecs:builtin_audio_decoder_factory",
diff --git a/logging/BUILD.gn b/logging/BUILD.gn
index 8eb5631..9fccf5c 100644
--- a/logging/BUILD.gn
+++ b/logging/BUILD.gn
@@ -288,6 +288,7 @@
     "../api/rtc_event_log",
     "../rtc_base",
     "../rtc_base:checks",
+    "../rtc_base:threading",
   ]
 }
 
diff --git a/media/BUILD.gn b/media/BUILD.gn
index db5028f..b253a61 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -113,6 +113,7 @@
     "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_task_queue",
     "../rtc_base:sanitizer",
+    "../rtc_base:socket",
     "../rtc_base:stringutils",
     "../rtc_base/synchronization:mutex",
     "../rtc_base/synchronization:sequence_checker",
@@ -323,6 +324,7 @@
     "../rtc_base:ignore_wundef",
     "../rtc_base:rtc_task_queue",
     "../rtc_base:stringutils",
+    "../rtc_base:threading",
     "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/experiments:min_video_bitrate_experiment",
     "../rtc_base/experiments:normalize_simulcast_size_experiment",
@@ -410,6 +412,7 @@
     "../p2p:rtc_p2p",
     "../rtc_base",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:threading",
     "../rtc_base/synchronization:mutex",
     "../rtc_base/task_utils:pending_task_safety_flag",
     "../rtc_base/task_utils:to_queued_task",
@@ -486,6 +489,7 @@
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:stringutils",
+      "../rtc_base:threading",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/third_party/sigslot",
       "../test:test_support",
@@ -595,6 +599,7 @@
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:stringutils",
+      "../rtc_base:threading",
       "../rtc_base/experiments:min_video_bitrate_experiment",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/third_party/sigslot",
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index dbb1882..f2f28a7 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -367,6 +367,7 @@
       "../../rtc_base:rtc_base_tests_utils",
       "../../rtc_base:safe_minmax",
       "../../rtc_base:task_queue_for_test",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/system:arch",
       "../../rtc_base/system:file_wrapper",
diff --git a/modules/video_coding/BUILD.gn b/modules/video_coding/BUILD.gn
index b706c6b..2373b9f 100644
--- a/modules/video_coding/BUILD.gn
+++ b/modules/video_coding/BUILD.gn
@@ -189,6 +189,7 @@
     "../../rtc_base:rtc_base_approved",
     "../../rtc_base:rtc_numerics",
     "../../rtc_base:rtc_task_queue",
+    "../../rtc_base:threading",
     "../../rtc_base/experiments:alr_experiment",
     "../../rtc_base/experiments:field_trial_parser",
     "../../rtc_base/experiments:jitter_upper_bound_experiment",
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index d4330ef..5838f31 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -96,8 +96,17 @@
     "../api/transport:stun_types",
     "../logging:ice_log",
     "../rtc_base",
+    "../rtc_base:async_resolver_interface",
+    "../rtc_base:async_socket",
     "../rtc_base:checks",
+    "../rtc_base:ip_address",
+    "../rtc_base:net_helpers",
+    "../rtc_base:network_constants",
     "../rtc_base:rtc_numerics",
+    "../rtc_base:socket",
+    "../rtc_base:socket_address",
+    "../rtc_base:socket_server",
+    "../rtc_base:threading",
     "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/synchronization:sequence_checker",
     "../rtc_base/system:no_unique_address",
@@ -148,6 +157,8 @@
     deps = [
       ":rtc_p2p",
       "../rtc_base",
+      "../rtc_base:net_helpers",
+      "../rtc_base:threading",
     ]
   }
 
@@ -173,9 +184,14 @@
       "../api/crypto:options",
       "../api/transport:stun_types",
       "../rtc_base",
+      "../rtc_base:async_resolver_interface",
+      "../rtc_base:async_socket",
       "../rtc_base:gunit_helpers",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_utils",
+      "../rtc_base:socket_address",
+      "../rtc_base:socket_server",
+      "../rtc_base:threading",
       "../rtc_base/third_party/sigslot",
       "../test:test_support",
     ]
@@ -221,11 +237,18 @@
       "../api/transport:stun_types",
       "../api/units:time_delta",
       "../rtc_base",
+      "../rtc_base:async_socket",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
+      "../rtc_base:ip_address",
+      "../rtc_base:net_helpers",
+      "../rtc_base:network_constants",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_utils",
+      "../rtc_base:socket",
+      "../rtc_base:socket_address",
       "../rtc_base:testclient",
+      "../rtc_base:threading",
       "../rtc_base/network:sent_packet",
       "../rtc_base/third_party/sigslot",
       "../system_wrappers:metrics",
@@ -256,6 +279,8 @@
     "../rtc_base",
     "../rtc_base:checks",
     "../rtc_base:rtc_base_tests_utils",
+    "../rtc_base:socket_address",
+    "../rtc_base:threading",
     "../rtc_base/third_party/sigslot",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ]
@@ -273,7 +298,11 @@
     "../api:packet_socket_factory",
     "../api/transport:stun_types",
     "../rtc_base",
+    "../rtc_base:async_resolver_interface",
     "../rtc_base:checks",
+    "../rtc_base:ip_address",
+    "../rtc_base:socket_address",
+    "../rtc_base:threading",
     "../rtc_base/system:rtc_export",
   ]
 }
@@ -290,6 +319,7 @@
       "../rtc_base",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
+      "../rtc_base:ip_address",
       "../rtc_base:rtc_base_tests_utils",
       "../test:test_support",
       "//testing/gtest",
diff --git a/p2p/base/basic_async_resolver_factory.cc b/p2p/base/basic_async_resolver_factory.cc
index 9d8266e..027358b 100644
--- a/p2p/base/basic_async_resolver_factory.cc
+++ b/p2p/base/basic_async_resolver_factory.cc
@@ -10,7 +10,7 @@
 
 #include "p2p/base/basic_async_resolver_factory.h"
 
-#include "rtc_base/net_helpers.h"
+#include "rtc_base/async_resolver.h"
 
 namespace webrtc {
 
diff --git a/p2p/base/basic_packet_socket_factory.cc b/p2p/base/basic_packet_socket_factory.cc
index ebc11bb..232e58b 100644
--- a/p2p/base/basic_packet_socket_factory.cc
+++ b/p2p/base/basic_packet_socket_factory.cc
@@ -15,6 +15,7 @@
 #include <string>
 
 #include "p2p/base/async_stun_tcp_socket.h"
+#include "rtc_base/async_resolver.h"
 #include "rtc_base/async_tcp_socket.h"
 #include "rtc_base/async_udp_socket.h"
 #include "rtc_base/checks.h"
diff --git a/p2p/base/stun_port.cc b/p2p/base/stun_port.cc
index 4e1a1f6..7a76af5 100644
--- a/p2p/base/stun_port.cc
+++ b/p2p/base/stun_port.cc
@@ -17,11 +17,11 @@
 #include "p2p/base/connection.h"
 #include "p2p/base/p2p_constants.h"
 #include "p2p/base/port_allocator.h"
+#include "rtc_base/async_resolver_interface.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/helpers.h"
 #include "rtc_base/ip_address.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/net_helpers.h"
 #include "rtc_base/strings/string_builder.h"
 
 namespace cricket {
diff --git a/p2p/base/turn_port.h b/p2p/base/turn_port.h
index a9ec434..6f9caaf 100644
--- a/p2p/base/turn_port.h
+++ b/p2p/base/turn_port.h
@@ -25,6 +25,7 @@
 #include "p2p/client/basic_port_allocator.h"
 #include "rtc_base/async_invoker.h"
 #include "rtc_base/async_packet_socket.h"
+#include "rtc_base/async_resolver_interface.h"
 #include "rtc_base/ssl_certificate.h"
 
 namespace webrtc {
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 143ce25..9e296b5 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -114,7 +114,9 @@
     "../rtc_base:checks",
     "../rtc_base:deprecation",
     "../rtc_base:rtc_task_queue",
+    "../rtc_base:socket_address",
     "../rtc_base:stringutils",
+    "../rtc_base:threading",
     "../rtc_base/synchronization:mutex",
     "../rtc_base/synchronization:sequence_checker",
     "../rtc_base/system:file_wrapper",
@@ -277,9 +279,13 @@
     "../rtc_base:callback_list",
     "../rtc_base:checks",
     "../rtc_base:deprecation",
+    "../rtc_base:ip_address",
+    "../rtc_base:network_constants",
     "../rtc_base:rtc_base_approved",
     "../rtc_base:rtc_operations_chain",
     "../rtc_base:safe_minmax",
+    "../rtc_base:socket_address",
+    "../rtc_base:threading",
     "../rtc_base:weak_ptr",
     "../rtc_base/experiments:field_trial_parser",
     "../rtc_base/network:sent_packet",
@@ -324,6 +330,7 @@
     "../p2p:rtc_p2p",
     "../rtc_base",
     "../rtc_base:checks",
+    "../rtc_base:threading",
   ]
 }
 
@@ -338,6 +345,7 @@
     "../api:media_stream_interface",
     "../api:rtc_error",
     "../rtc_base",
+    "../rtc_base:threading",
     "../rtc_base/synchronization:sequence_checker",
   ]
 }
@@ -400,6 +408,7 @@
     "../media:rtc_media_base",
     "../rtc_base",
     "../rtc_base:checks",
+    "../rtc_base:threading",
     "../rtc_base/third_party/sigslot",
   ]
   absl_deps = [
@@ -436,6 +445,7 @@
     "../rtc_base:logging",
     "../rtc_base:rtc_base",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:threading",
   ]
   absl_deps = [
     "//third_party/abseil-cpp/absl/algorithm:container",
@@ -466,6 +476,7 @@
     "../rtc_base",
     "../rtc_base:checks",
     "../rtc_base:refcount",
+    "../rtc_base:threading",
   ]
   absl_deps = [
     "//third_party/abseil-cpp/absl/algorithm:container",
@@ -498,6 +509,7 @@
     "../rtc_base",
     "../rtc_base:checks",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:threading",
   ]
   absl_deps = [
     "//third_party/abseil-cpp/absl/algorithm:container",
@@ -548,6 +560,7 @@
     "../rtc_base:checks",
     "../rtc_base:refcount",
     "../rtc_base:rtc_base_approved",
+    "../rtc_base:threading",
   ]
 }
 
@@ -593,6 +606,7 @@
     "../rtc_base:checks",
     "../rtc_base:refcount",
     "../rtc_base:safe_minmax",
+    "../rtc_base:threading",
   ]
   absl_deps = [
     "//third_party/abseil-cpp/absl/algorithm:container",
@@ -617,6 +631,7 @@
     "../rtc_base:rtc_base_approved",
     "../rtc_base:safe_conversions",
     "../rtc_base:stringutils",
+    "../rtc_base:threading",
     "../rtc_base/synchronization:mutex",
   ]
   absl_deps = [
@@ -680,6 +695,7 @@
     "../api:libjingle_peerconnection_api",
     "../rtc_base:checks",
     "../rtc_base:rtc_base",
+    "../rtc_base:threading",
   ]
   absl_deps = [
     "//third_party/abseil-cpp/absl/algorithm:container",
@@ -803,6 +819,7 @@
       "../rtc_base:gunit_helpers",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_base_tests_utils",
+      "../rtc_base:threading",
       "../rtc_base/third_party/sigslot",
       "../system_wrappers:metrics",
       "../test:field_trial",
@@ -851,6 +868,8 @@
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
       "../rtc_base:rtc_base_tests_utils",
+      "../rtc_base:socket_address",
+      "../rtc_base:threading",
       "../system_wrappers",
       "../test:perf_test",
       "../test:test_support",
@@ -951,6 +970,7 @@
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:task_queue_for_test",
+      "../rtc_base:threading",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/synchronization:sequence_checker",
       "../rtc_base/task_utils:repeating_task",
@@ -1066,8 +1086,11 @@
       "../p2p:fake_port_allocator",
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
+      "../rtc_base:ip_address",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:rtc_json",
+      "../rtc_base:socket_address",
+      "../rtc_base:threading",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/third_party/base64",
       "../rtc_base/third_party/sigslot",
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 3448504..184c298 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -15,7 +15,7 @@
   import("//build/config/android/rules.gni")
 }
 
-config("rtc_base_chromium_config") {
+config("threading_chromium_config") {
   defines = [ "NO_MAIN_THREAD_WRAPPING" ]
 }
 
@@ -666,139 +666,220 @@
 }
 
 rtc_source_set("async_resolver") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  # async_resolver source files (see
-  # https://webrtc-review.googlesource.com/c/src/+/196903).
-  sources = [ "async_resolver.h" ]
+  # TODO(bugs.webrtc.org/9987): Remove when downstream clients have
+  # been redirected on //rtc_base:threading.
+  sources = []
 }
 
-rtc_source_set("net_helpers") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "net_helpers.cc",
-  #   "net_helpers.h",
-  # ]
+rtc_library("net_helpers") {
+  sources = [
+    "net_helpers.cc",
+    "net_helpers.h",
+  ]
+  deps = []
+  if (is_android) {
+    deps += [ ":ifaddrs_android" ]
+  }
+  if (is_win) {
+    deps += [ ":win32" ]
+  }
 }
 
-rtc_source_set("async_resolver_interface") {
+rtc_library("async_resolver_interface") {
   visibility = [ "*" ]
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "async_resolver_interface.cc",
-  #   "async_resolver_interface.h",
-  # ]
+  sources = [
+    "async_resolver_interface.cc",
+    "async_resolver_interface.h",
+  ]
+  deps = [
+    ":socket_address",
+    "system:rtc_export",
+    "third_party/sigslot",
+  ]
 }
 
-rtc_source_set("ip_address") {
+rtc_library("ip_address") {
   visibility = [ "*" ]
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "ip_address.cc",
-  #   "ip_address.h",
-  # ]
+  sources = [
+    "ip_address.cc",
+    "ip_address.h",
+  ]
+  deps = [
+    ":net_helpers",
+    ":rtc_base_approved",
+    ":stringutils",
+    "system:rtc_export",
+  ]
+  if (is_win) {
+    deps += [ ":win32" ]
+  }
 }
 
-rtc_source_set("socket_address") {
+rtc_library("socket_address") {
   visibility = [ "*" ]
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "socket_address.cc",
-  #   "socket_address.h",
-  # ]
+  sources = [
+    "socket_address.cc",
+    "socket_address.h",
+  ]
+  deps = [
+    ":checks",
+    ":ip_address",
+    ":logging",
+    ":net_helpers",
+    ":rtc_base_approved",
+    ":safe_conversions",
+    ":stringutils",
+    "system:rtc_export",
+  ]
+  if (is_win) {
+    deps += [ ":win32" ]
+  }
 }
 
-rtc_source_set("null_socket_server") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "null_socket_server.cc",
-  #   "null_socket_server.h",
-  # ]
+rtc_library("null_socket_server") {
+  sources = [
+    "null_socket_server.cc",
+    "null_socket_server.h",
+  ]
+  deps = [
+    ":async_socket",
+    ":checks",
+    ":rtc_event",
+    ":socket",
+    ":socket_server",
+    "system:rtc_export",
+  ]
 }
 
 rtc_source_set("socket_server") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "socket_server.h",
-  # ]
+  sources = [ "socket_server.h" ]
+  deps = [ ":socket_factory" ]
 }
 
-rtc_source_set("threading") {
+rtc_library("threading") {
   visibility = [ "*" ]
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "asyncresolver.cc",
-  #   "asyncresolver.h",
-  #   "defaultsocketserver.cc",
-  #   "defaultsocketserver.h",
-  #   "message_handler.cc",
-  #   "message_handler.h",
-  #   "network_monitor.cc",
-  #   "network_monitor.h",
-  #   "network_monitor_factory.cc",
-  #   "network_monitor_factory.h",
-  #   "physical_socket_server.cc",
-  #   "physical_socket_server.h",
-  #   "signal_thread.cc",
-  #   "signal_thread.h",
-  #   "thread.cc",
-  #   "thread.h",
-  # ]
+
+  if (build_with_chromium) {
+    public_configs = [ ":threading_chromium_config" ]
+  }
+
+  sources = [
+    "async_resolver.cc",
+    "async_resolver.h",
+    "internal/default_socket_server.cc",
+    "internal/default_socket_server.h",
+    "message_handler.cc",
+    "message_handler.h",
+    "network_monitor.cc",
+    "network_monitor.h",
+    "network_monitor_factory.cc",
+    "network_monitor_factory.h",
+    "physical_socket_server.cc",
+    "physical_socket_server.h",
+
+    #   "signal_thread.cc",
+    #   "signal_thread.h",
+    "thread.cc",
+    "thread.h",
+    "thread_message.h",
+  ]
+  absl_deps = [ "//third_party/abseil-cpp/absl/algorithm:container" ]
+  deps = [
+    ":async_resolver_interface",
+    ":atomicops",
+    ":checks",
+    ":criticalsection",
+    ":ip_address",
+    ":logging",
+    ":macromagic",
+    ":network_constants",
+    ":null_socket_server",
+    ":platform_thread_types",
+    ":rtc_base_approved",
+    ":rtc_event",
+    ":rtc_task_queue",
+    ":socket_address",
+    ":socket_server",
+    ":timeutils",
+    "../api:function_view",
+    "../api:scoped_refptr",
+    "../api/task_queue",
+    "synchronization:sequence_checker",
+    "system:no_unique_address",
+    "system:rtc_export",
+    "task_utils:pending_task_safety_flag",
+    "task_utils:to_queued_task",
+    "third_party/sigslot",
+  ]
+  if (is_android) {
+    deps += [ ":ifaddrs_android" ]
+  }
+  if (is_win) {
+    deps += [ ":win32" ]
+  }
+  if (is_mac || is_ios) {
+    deps += [ "system:cocoa_threading" ]
+  }
 }
 
 rtc_source_set("socket_factory") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "socket_factory.h",
-  # ]
+  sources = [ "socket_factory.h" ]
+  deps = [
+    ":async_socket",
+    ":socket",
+  ]
 }
 
-rtc_source_set("async_socket") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "async_socket.cc",
-  #   "async_socket.h",
-  # ]
+rtc_library("async_socket") {
+  sources = [
+    "async_socket.cc",
+    "async_socket.h",
+  ]
+  deps = [
+    ":checks",
+    ":socket",
+    ":socket_address",
+    "third_party/sigslot",
+  ]
 }
 
-rtc_source_set("socket") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "socket.cc",
-  #   "socket.h",
-  # ]
+rtc_library("socket") {
+  sources = [
+    "socket.cc",
+    "socket.h",
+  ]
+  deps = [
+    ":macromagic",
+    ":socket_address",
+  ]
+  if (is_win) {
+    deps += [ ":win32" ]
+  }
 }
 
 rtc_source_set("network_constants") {
-  # TODO(bugs.webrtc.org/9987): This build target will soon contain
-  #                             the following files:
-  # sources = [
-  #   "network_constants.h",
-  # ]
+  sources = [
+    "network_constants.cc",
+    "network_constants.h",
+  ]
+  deps = [ ":checks" ]
 }
 
 if (is_android) {
-  rtc_source_set("ifaddrs_android") {
-    # TODO(bugs.webrtc.org/9987): This build target will soon contain
-    #                             the following files:
-    # sources = [
-    #   "ifaddrs_android.cc",
-    #   "ifaddrs_android.h",
-    # ]
+  rtc_library("ifaddrs_android") {
+    sources = [
+      "ifaddrs_android.cc",
+      "ifaddrs_android.h",
+    ]
+    libs = [
+      "log",
+      "GLESv2",
+    ]
   }
 }
 
 if (is_win) {
-  rtc_source_set("win32") {
+  rtc_library("win32") {
     sources = [
       "win32.cc",
       "win32.h",
@@ -829,10 +910,20 @@
   libs = []
   defines = []
   deps = [
+    ":async_resolver_interface",
+    ":async_socket",
     ":checks",
     ":deprecation",
+    ":ip_address",
+    ":network_constants",
+    ":null_socket_server",
     ":rtc_task_queue",
+    ":socket",
+    ":socket_address",
+    ":socket_factory",
+    ":socket_server",
     ":stringutils",
+    ":threading",
     "../api:array_view",
     "../api:function_view",
     "../api:scoped_refptr",
@@ -868,10 +959,6 @@
     "async_invoker_inl.h",
     "async_packet_socket.cc",
     "async_packet_socket.h",
-    "async_resolver_interface.cc",
-    "async_resolver_interface.h",
-    "async_socket.cc",
-    "async_socket.h",
     "async_tcp_socket.cc",
     "async_tcp_socket.h",
     "async_udp_socket.cc",
@@ -891,30 +978,16 @@
     "helpers.h",
     "http_common.cc",
     "http_common.h",
-    "ip_address.cc",
-    "ip_address.h",
     "keep_ref_until_done.h",
     "mdns_responder_interface.h",
     "message_digest.cc",
     "message_digest.h",
-    "message_handler.cc",
-    "message_handler.h",
     "net_helper.cc",
     "net_helper.h",
-    "net_helpers.cc",
-    "net_helpers.h",
     "network.cc",
     "network.h",
-    "network_constants.cc",
-    "network_constants.h",
-    "network_monitor.cc",
-    "network_monitor.h",
-    "network_monitor_factory.cc",
-    "network_monitor_factory.h",
     "network_route.cc",
     "network_route.h",
-    "null_socket_server.cc",
-    "null_socket_server.h",
     "openssl.h",
     "openssl_adapter.cc",
     "openssl_adapter.h",
@@ -928,8 +1001,6 @@
     "openssl_stream_adapter.h",
     "openssl_utility.cc",
     "openssl_utility.h",
-    "physical_socket_server.cc",
-    "physical_socket_server.h",
     "proxy_info.cc",
     "proxy_info.h",
     "rtc_certificate.cc",
@@ -938,16 +1009,10 @@
     "rtc_certificate_generator.h",
     "signal_thread.h",
     "sigslot_repeater.h",
-    "socket.cc",
-    "socket.h",
     "socket_adapters.cc",
     "socket_adapters.h",
-    "socket_address.cc",
-    "socket_address.h",
     "socket_address_pair.cc",
     "socket_address_pair.h",
-    "socket_factory.h",
-    "socket_server.h",
     "ssl_adapter.cc",
     "ssl_adapter.h",
     "ssl_certificate.cc",
@@ -960,9 +1025,6 @@
     "ssl_stream_adapter.h",
     "stream.cc",
     "stream.h",
-    "thread.cc",
-    "thread.h",
-    "thread_message.h",
     "unique_id_generator.cc",
     "unique_id_generator.h",
   ]
@@ -986,7 +1048,6 @@
 
   if (build_with_chromium) {
     include_dirs = [ "../../boringssl/src/include" ]
-    public_configs += [ ":rtc_base_chromium_config" ]
   } else {
     sources += [
       "callback.h",
@@ -1016,20 +1077,11 @@
   }
 
   if (is_android) {
-    sources += [
-      "ifaddrs_android.cc",
-      "ifaddrs_android.h",
-    ]
-
-    libs += [
-      "log",
-      "GLESv2",
-    ]
+    deps += [ ":ifaddrs_android" ]
   }
 
   if (is_ios || is_mac) {
     sources += [ "mac_ifaddrs_converter.cc" ]
-    deps += [ "system:cocoa_threading" ]
   }
 
   if (is_linux || is_chromeos) {
@@ -1084,6 +1136,7 @@
     ":rtc_base",
     ":rtc_base_tests_utils",
     ":stringutils",
+    ":threading",
     "../test:test_support",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
@@ -1100,6 +1153,7 @@
     ":gunit_helpers",
     ":rtc_base",
     ":rtc_base_tests_utils",
+    ":threading",
     ":timeutils",
     "synchronization:mutex",
   ]
@@ -1158,8 +1212,15 @@
     "virtual_socket_server.h",
   ]
   deps = [
+    ":async_socket",
     ":checks",
+    ":ip_address",
     ":rtc_base",
+    ":socket",
+    ":socket_address",
+    ":socket_factory",
+    ":socket_server",
+    ":threading",
     "../api/units:time_delta",
     "../api/units:timestamp",
     "memory:fifo_buffer",
@@ -1227,11 +1288,19 @@
       "socket_unittest.h",
     ]
     deps = [
+      ":async_socket",
       ":checks",
       ":gunit_helpers",
+      ":ip_address",
+      ":net_helpers",
+      ":null_socket_server",
       ":rtc_base",
       ":rtc_base_tests_utils",
+      ":socket",
+      ":socket_address",
+      ":socket_server",
       ":testclient",
+      ":threading",
       "../system_wrappers",
       "../test:fileutils",
       "../test:test_main",
@@ -1295,10 +1364,13 @@
       sources += [ "win/windows_version_unittest.cc" ]
     }
     deps = [
+      ":async_socket",
       ":bounded_inline_vector",
       ":checks",
       ":divide_round",
       ":gunit_helpers",
+      ":ip_address",
+      ":null_socket_server",
       ":rate_limiter",
       ":rtc_base",
       ":rtc_base_approved",
@@ -1308,8 +1380,12 @@
       ":safe_compare",
       ":safe_minmax",
       ":sanitizer",
+      ":socket",
+      ":socket_address",
+      ":socket_server",
       ":stringutils",
       ":testclient",
+      ":threading",
       "../api:array_view",
       "../api:scoped_refptr",
       "../api/numerics",
@@ -1356,6 +1432,7 @@
       ":rtc_base_approved",
       ":rtc_event",
       ":rtc_operations_chain",
+      ":threading",
       "../test:test_support",
     ]
   }
@@ -1437,11 +1514,19 @@
       "unique_id_generator_unittest.cc",
     ]
     deps = [
+      ":async_socket",
       ":checks",
       ":gunit_helpers",
+      ":ip_address",
+      ":net_helpers",
+      ":null_socket_server",
       ":rtc_base_tests_utils",
+      ":socket_address",
+      ":socket_factory",
+      ":socket_server",
       ":stringutils",
       ":testclient",
+      ":threading",
       "../api:array_view",
       "../api/task_queue",
       "../api/task_queue:task_queue_test",
diff --git a/rtc_base/async_resolver.cc b/rtc_base/async_resolver.cc
new file mode 100644
index 0000000..198b498
--- /dev/null
+++ b/rtc_base/async_resolver.cc
@@ -0,0 +1,169 @@
+/*
+ *  Copyright 2008 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "rtc_base/async_resolver.h"
+
+#include <string>
+#include <utility>
+
+#if defined(WEBRTC_WIN)
+#include <ws2spi.h>
+#include <ws2tcpip.h>
+
+#include "rtc_base/win32.h"
+#endif
+#if defined(WEBRTC_POSIX) && !defined(__native_client__)
+#if defined(WEBRTC_ANDROID)
+#include "rtc_base/ifaddrs_android.h"
+#else
+#include <ifaddrs.h>
+#endif
+#endif  // defined(WEBRTC_POSIX) && !defined(__native_client__)
+
+#include "api/task_queue/task_queue_base.h"
+#include "rtc_base/ip_address.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/task_queue.h"
+#include "rtc_base/task_utils/to_queued_task.h"
+#include "rtc_base/third_party/sigslot/sigslot.h"  // for signal_with_thread...
+
+namespace rtc {
+
+int ResolveHostname(const std::string& hostname,
+                    int family,
+                    std::vector<IPAddress>* addresses) {
+#ifdef __native_client__
+  RTC_NOTREACHED();
+  RTC_LOG(LS_WARNING) << "ResolveHostname() is not implemented for NaCl";
+  return -1;
+#else   // __native_client__
+  if (!addresses) {
+    return -1;
+  }
+  addresses->clear();
+  struct addrinfo* result = nullptr;
+  struct addrinfo hints = {0};
+  hints.ai_family = family;
+  // |family| here will almost always be AF_UNSPEC, because |family| comes from
+  // AsyncResolver::addr_.family(), which comes from a SocketAddress constructed
+  // with a hostname. When a SocketAddress is constructed with a hostname, its
+  // family is AF_UNSPEC. However, if someday in the future we construct
+  // a SocketAddress with both a hostname and a family other than AF_UNSPEC,
+  // then it would be possible to get a specific family value here.
+
+  // The behavior of AF_UNSPEC is roughly "get both ipv4 and ipv6", as
+  // documented by the various operating systems:
+  // Linux: http://man7.org/linux/man-pages/man3/getaddrinfo.3.html
+  // Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/
+  // ms738520(v=vs.85).aspx
+  // Mac: https://developer.apple.com/legacy/library/documentation/Darwin/
+  // Reference/ManPages/man3/getaddrinfo.3.html
+  // Android (source code, not documentation):
+  // https://android.googlesource.com/platform/bionic/+/
+  // 7e0bfb511e85834d7c6cb9631206b62f82701d60/libc/netbsd/net/getaddrinfo.c#1657
+  hints.ai_flags = AI_ADDRCONFIG;
+  int ret = getaddrinfo(hostname.c_str(), nullptr, &hints, &result);
+  if (ret != 0) {
+    return ret;
+  }
+  struct addrinfo* cursor = result;
+  for (; cursor; cursor = cursor->ai_next) {
+    if (family == AF_UNSPEC || cursor->ai_family == family) {
+      IPAddress ip;
+      if (IPFromAddrInfo(cursor, &ip)) {
+        addresses->push_back(ip);
+      }
+    }
+  }
+  freeaddrinfo(result);
+  return 0;
+#endif  // !__native_client__
+}
+
+AsyncResolver::AsyncResolver() : error_(-1) {}
+
+AsyncResolver::~AsyncResolver() {
+  RTC_DCHECK_RUN_ON(&sequence_checker_);
+}
+
+void AsyncResolver::Start(const SocketAddress& addr) {
+  RTC_DCHECK_RUN_ON(&sequence_checker_);
+  RTC_DCHECK(!destroy_called_);
+  addr_ = addr;
+  webrtc::TaskQueueBase* current_task_queue = webrtc::TaskQueueBase::Current();
+  popup_thread_ = Thread::Create();
+  popup_thread_->Start();
+  popup_thread_->PostTask(webrtc::ToQueuedTask(
+      [this, flag = safety_.flag(), addr, current_task_queue] {
+        std::vector<IPAddress> addresses;
+        int error =
+            ResolveHostname(addr.hostname().c_str(), addr.family(), &addresses);
+        current_task_queue->PostTask(webrtc::ToQueuedTask(
+            std::move(flag), [this, error, addresses = std::move(addresses)] {
+              RTC_DCHECK_RUN_ON(&sequence_checker_);
+              ResolveDone(std::move(addresses), error);
+            }));
+      }));
+}
+
+bool AsyncResolver::GetResolvedAddress(int family, SocketAddress* addr) const {
+  RTC_DCHECK_RUN_ON(&sequence_checker_);
+  RTC_DCHECK(!destroy_called_);
+  if (error_ != 0 || addresses_.empty())
+    return false;
+
+  *addr = addr_;
+  for (size_t i = 0; i < addresses_.size(); ++i) {
+    if (family == addresses_[i].family()) {
+      addr->SetResolvedIP(addresses_[i]);
+      return true;
+    }
+  }
+  return false;
+}
+
+int AsyncResolver::GetError() const {
+  RTC_DCHECK_RUN_ON(&sequence_checker_);
+  RTC_DCHECK(!destroy_called_);
+  return error_;
+}
+
+void AsyncResolver::Destroy(bool wait) {
+  // Some callers have trouble guaranteeing that Destroy is called on the
+  // sequence guarded by |sequence_checker_|.
+  // RTC_DCHECK_RUN_ON(&sequence_checker_);
+  RTC_DCHECK(!destroy_called_);
+  destroy_called_ = true;
+  MaybeSelfDestruct();
+}
+
+const std::vector<IPAddress>& AsyncResolver::addresses() const {
+  RTC_DCHECK_RUN_ON(&sequence_checker_);
+  RTC_DCHECK(!destroy_called_);
+  return addresses_;
+}
+
+void AsyncResolver::ResolveDone(std::vector<IPAddress> addresses, int error) {
+  addresses_ = addresses;
+  error_ = error;
+  recursion_check_ = true;
+  SignalDone(this);
+  MaybeSelfDestruct();
+}
+
+void AsyncResolver::MaybeSelfDestruct() {
+  if (!recursion_check_) {
+    delete this;
+  } else {
+    recursion_check_ = false;
+  }
+}
+
+}  // namespace rtc
diff --git a/rtc_base/async_resolver.h b/rtc_base/async_resolver.h
index 3c3ad82..c05377a 100644
--- a/rtc_base/async_resolver.h
+++ b/rtc_base/async_resolver.h
@@ -11,7 +11,62 @@
 #ifndef RTC_BASE_ASYNC_RESOLVER_H_
 #define RTC_BASE_ASYNC_RESOLVER_H_
 
-// Placeholder header for the refactoring in:
-// https://webrtc-review.googlesource.com/c/src/+/196903
+#if defined(WEBRTC_POSIX)
+#include <sys/socket.h>
+#elif WEBRTC_WIN
+#include <winsock2.h>  // NOLINT
+#endif
+
+#include <memory>
+#include <vector>
+
+#include "rtc_base/async_resolver_interface.h"
+#include "rtc_base/ip_address.h"
+#include "rtc_base/socket_address.h"
+#include "rtc_base/synchronization/sequence_checker.h"
+#include "rtc_base/system/no_unique_address.h"
+#include "rtc_base/system/rtc_export.h"
+#include "rtc_base/task_utils/pending_task_safety_flag.h"
+#include "rtc_base/thread.h"
+#include "rtc_base/thread_annotations.h"
+
+namespace rtc {
+
+// AsyncResolver will perform async DNS resolution, signaling the result on
+// the SignalDone from AsyncResolverInterface when the operation completes.
+//
+// This class is thread-compatible, and all methods and destruction needs to
+// happen from the same rtc::Thread, except for Destroy which is allowed to
+// happen on another context provided it's not happening concurrently to another
+// public API call, and is the last access to the object.
+class RTC_EXPORT AsyncResolver : public AsyncResolverInterface {
+ public:
+  AsyncResolver();
+  ~AsyncResolver() override;
+
+  void Start(const SocketAddress& addr) override;
+  bool GetResolvedAddress(int family, SocketAddress* addr) const override;
+  int GetError() const override;
+  void Destroy(bool wait) override;
+
+  const std::vector<IPAddress>& addresses() const;
+
+ private:
+  void ResolveDone(std::vector<IPAddress> addresses, int error)
+      RTC_EXCLUSIVE_LOCKS_REQUIRED(sequence_checker_);
+  void MaybeSelfDestruct();
+
+  SocketAddress addr_ RTC_GUARDED_BY(sequence_checker_);
+  std::vector<IPAddress> addresses_ RTC_GUARDED_BY(sequence_checker_);
+  int error_ RTC_GUARDED_BY(sequence_checker_);
+  webrtc::ScopedTaskSafety safety_ RTC_GUARDED_BY(sequence_checker_);
+  std::unique_ptr<Thread> popup_thread_ RTC_GUARDED_BY(sequence_checker_);
+  bool recursion_check_ =
+      false;  // Protects against SignalDone calling into Destroy.
+  bool destroy_called_ = false;
+  RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker sequence_checker_;
+};
+
+}  // namespace rtc
 
 #endif  // RTC_BASE_ASYNC_RESOLVER_H_
diff --git a/rtc_base/internal/default_socket_server.cc b/rtc_base/internal/default_socket_server.cc
new file mode 100644
index 0000000..5632b98
--- /dev/null
+++ b/rtc_base/internal/default_socket_server.cc
@@ -0,0 +1,33 @@
+/*
+ *  Copyright 2020 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "rtc_base/internal/default_socket_server.h"
+
+#include <memory>
+
+#include "rtc_base/socket_server.h"
+
+#if defined(__native_client__)
+#include "rtc_base/null_socket_server.h"
+#else
+#include "rtc_base/physical_socket_server.h"
+#endif
+
+namespace rtc {
+
+std::unique_ptr<SocketServer> CreateDefaultSocketServer() {
+#if defined(__native_client__)
+  return std::unique_ptr<SocketServer>(new rtc::NullSocketServer);
+#else
+  return std::unique_ptr<SocketServer>(new rtc::PhysicalSocketServer);
+#endif
+}
+
+}  // namespace rtc
diff --git a/rtc_base/internal/default_socket_server.h b/rtc_base/internal/default_socket_server.h
new file mode 100644
index 0000000..5b3489f
--- /dev/null
+++ b/rtc_base/internal/default_socket_server.h
@@ -0,0 +1,24 @@
+/*
+ *  Copyright 2020 The WebRTC Project Authors. All rights reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_
+#define RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_
+
+#include <memory>
+
+#include "rtc_base/socket_server.h"
+
+namespace rtc {
+
+std::unique_ptr<SocketServer> CreateDefaultSocketServer();
+
+}  // namespace rtc
+
+#endif  // RTC_BASE_INTERNAL_DEFAULT_SOCKET_SERVER_H_
diff --git a/rtc_base/ip_address.cc b/rtc_base/ip_address.cc
index 9dd534c..9f1df58 100644
--- a/rtc_base/ip_address.cc
+++ b/rtc_base/ip_address.cc
@@ -20,8 +20,9 @@
 #include <netdb.h>
 #endif
 
-#include "rtc_base/byte_order.h"
 #include "rtc_base/ip_address.h"
+
+#include "rtc_base/byte_order.h"
 #include "rtc_base/net_helpers.h"
 #include "rtc_base/string_utils.h"
 
diff --git a/rtc_base/memory/BUILD.gn b/rtc_base/memory/BUILD.gn
index 838fbc6..8fbb549 100644
--- a/rtc_base/memory/BUILD.gn
+++ b/rtc_base/memory/BUILD.gn
@@ -36,6 +36,7 @@
   ]
   deps = [
     "..:rtc_base",
+    "..:threading",
     "../synchronization:mutex",
     "../task_utils:pending_task_safety_flag",
     "../task_utils:to_queued_task",
diff --git a/rtc_base/net_helpers.cc b/rtc_base/net_helpers.cc
index c6685e2..e51a51a 100644
--- a/rtc_base/net_helpers.cc
+++ b/rtc_base/net_helpers.cc
@@ -10,6 +10,8 @@
 
 #include "rtc_base/net_helpers.h"
 
+#include <memory>
+
 #if defined(WEBRTC_WIN)
 #include <ws2spi.h>
 #include <ws2tcpip.h>
@@ -17,6 +19,7 @@
 #include "rtc_base/win32.h"
 #endif
 #if defined(WEBRTC_POSIX) && !defined(__native_client__)
+#include <arpa/inet.h>
 #if defined(WEBRTC_ANDROID)
 #include "rtc_base/ifaddrs_android.h"
 #else
@@ -24,145 +27,8 @@
 #endif
 #endif  // defined(WEBRTC_POSIX) && !defined(__native_client__)
 
-#include "api/task_queue/task_queue_base.h"
-#include "rtc_base/logging.h"
-#include "rtc_base/signal_thread.h"
-#include "rtc_base/task_queue.h"
-#include "rtc_base/task_utils/to_queued_task.h"
-#include "rtc_base/third_party/sigslot/sigslot.h"  // for signal_with_thread...
-
 namespace rtc {
 
-int ResolveHostname(const std::string& hostname,
-                    int family,
-                    std::vector<IPAddress>* addresses) {
-#ifdef __native_client__
-  RTC_NOTREACHED();
-  RTC_LOG(LS_WARNING) << "ResolveHostname() is not implemented for NaCl";
-  return -1;
-#else   // __native_client__
-  if (!addresses) {
-    return -1;
-  }
-  addresses->clear();
-  struct addrinfo* result = nullptr;
-  struct addrinfo hints = {0};
-  hints.ai_family = family;
-  // |family| here will almost always be AF_UNSPEC, because |family| comes from
-  // AsyncResolver::addr_.family(), which comes from a SocketAddress constructed
-  // with a hostname. When a SocketAddress is constructed with a hostname, its
-  // family is AF_UNSPEC. However, if someday in the future we construct
-  // a SocketAddress with both a hostname and a family other than AF_UNSPEC,
-  // then it would be possible to get a specific family value here.
-
-  // The behavior of AF_UNSPEC is roughly "get both ipv4 and ipv6", as
-  // documented by the various operating systems:
-  // Linux: http://man7.org/linux/man-pages/man3/getaddrinfo.3.html
-  // Windows: https://msdn.microsoft.com/en-us/library/windows/desktop/
-  // ms738520(v=vs.85).aspx
-  // Mac: https://developer.apple.com/legacy/library/documentation/Darwin/
-  // Reference/ManPages/man3/getaddrinfo.3.html
-  // Android (source code, not documentation):
-  // https://android.googlesource.com/platform/bionic/+/
-  // 7e0bfb511e85834d7c6cb9631206b62f82701d60/libc/netbsd/net/getaddrinfo.c#1657
-  hints.ai_flags = AI_ADDRCONFIG;
-  int ret = getaddrinfo(hostname.c_str(), nullptr, &hints, &result);
-  if (ret != 0) {
-    return ret;
-  }
-  struct addrinfo* cursor = result;
-  for (; cursor; cursor = cursor->ai_next) {
-    if (family == AF_UNSPEC || cursor->ai_family == family) {
-      IPAddress ip;
-      if (IPFromAddrInfo(cursor, &ip)) {
-        addresses->push_back(ip);
-      }
-    }
-  }
-  freeaddrinfo(result);
-  return 0;
-#endif  // !__native_client__
-}
-
-AsyncResolver::AsyncResolver() : error_(-1) {}
-
-AsyncResolver::~AsyncResolver() {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-}
-
-void AsyncResolver::Start(const SocketAddress& addr) {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-  RTC_DCHECK(!destroy_called_);
-  addr_ = addr;
-  webrtc::TaskQueueBase* current_task_queue = webrtc::TaskQueueBase::Current();
-  popup_thread_ = Thread::Create();
-  popup_thread_->Start();
-  popup_thread_->PostTask(webrtc::ToQueuedTask(
-      [this, flag = safety_.flag(), addr, current_task_queue] {
-        std::vector<IPAddress> addresses;
-        int error =
-            ResolveHostname(addr.hostname().c_str(), addr.family(), &addresses);
-        current_task_queue->PostTask(webrtc::ToQueuedTask(
-            std::move(flag), [this, error, addresses = std::move(addresses)] {
-              RTC_DCHECK_RUN_ON(&sequence_checker_);
-              ResolveDone(std::move(addresses), error);
-            }));
-      }));
-}
-
-bool AsyncResolver::GetResolvedAddress(int family, SocketAddress* addr) const {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-  RTC_DCHECK(!destroy_called_);
-  if (error_ != 0 || addresses_.empty())
-    return false;
-
-  *addr = addr_;
-  for (size_t i = 0; i < addresses_.size(); ++i) {
-    if (family == addresses_[i].family()) {
-      addr->SetResolvedIP(addresses_[i]);
-      return true;
-    }
-  }
-  return false;
-}
-
-int AsyncResolver::GetError() const {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-  RTC_DCHECK(!destroy_called_);
-  return error_;
-}
-
-void AsyncResolver::Destroy(bool wait) {
-  // Some callers have trouble guaranteeing that Destroy is called on the
-  // sequence guarded by |sequence_checker_|.
-  // RTC_DCHECK_RUN_ON(&sequence_checker_);
-  RTC_DCHECK(!destroy_called_);
-  destroy_called_ = true;
-  MaybeSelfDestruct();
-}
-
-const std::vector<IPAddress>& AsyncResolver::addresses() const {
-  RTC_DCHECK_RUN_ON(&sequence_checker_);
-  RTC_DCHECK(!destroy_called_);
-  return addresses_;
-}
-
-void AsyncResolver::ResolveDone(std::vector<IPAddress> addresses, int error) {
-  addresses_ = addresses;
-  error_ = error;
-  recursion_check_ = true;
-  SignalDone(this);
-  MaybeSelfDestruct();
-}
-
-void AsyncResolver::MaybeSelfDestruct() {
-  if (!recursion_check_) {
-    delete this;
-  } else {
-    recursion_check_ = false;
-  }
-}
-
 const char* inet_ntop(int af, const void* src, char* dst, socklen_t size) {
 #if defined(WEBRTC_WIN)
   return win32_inet_ntop(af, src, dst, size);
diff --git a/rtc_base/net_helpers.h b/rtc_base/net_helpers.h
index 172a222..4ed8478 100644
--- a/rtc_base/net_helpers.h
+++ b/rtc_base/net_helpers.h
@@ -15,57 +15,12 @@
 #include <sys/socket.h>
 #elif WEBRTC_WIN
 #include <winsock2.h>  // NOLINT
+
+#include "rtc_base/win32.h"
 #endif
 
-#include <vector>
-
-#include "rtc_base/async_resolver_interface.h"
-#include "rtc_base/ip_address.h"
-#include "rtc_base/socket_address.h"
-#include "rtc_base/synchronization/sequence_checker.h"
-#include "rtc_base/system/no_unique_address.h"
-#include "rtc_base/system/rtc_export.h"
-#include "rtc_base/task_utils/pending_task_safety_flag.h"
-#include "rtc_base/thread.h"
-#include "rtc_base/thread_annotations.h"
-
 namespace rtc {
 
-// AsyncResolver will perform async DNS resolution, signaling the result on
-// the SignalDone from AsyncResolverInterface when the operation completes.
-//
-// This class is thread-compatible, and all methods and destruction needs to
-// happen from the same rtc::Thread, except for Destroy which is allowed to
-// happen on another context provided it's not happening concurrently to another
-// public API call, and is the last access to the object.
-class RTC_EXPORT AsyncResolver : public AsyncResolverInterface {
- public:
-  AsyncResolver();
-  ~AsyncResolver() override;
-
-  void Start(const SocketAddress& addr) override;
-  bool GetResolvedAddress(int family, SocketAddress* addr) const override;
-  int GetError() const override;
-  void Destroy(bool wait) override;
-
-  const std::vector<IPAddress>& addresses() const;
-
- private:
-  void ResolveDone(std::vector<IPAddress> addresses, int error)
-      RTC_EXCLUSIVE_LOCKS_REQUIRED(sequence_checker_);
-  void MaybeSelfDestruct();
-
-  SocketAddress addr_ RTC_GUARDED_BY(sequence_checker_);
-  std::vector<IPAddress> addresses_ RTC_GUARDED_BY(sequence_checker_);
-  int error_ RTC_GUARDED_BY(sequence_checker_);
-  webrtc::ScopedTaskSafety safety_ RTC_GUARDED_BY(sequence_checker_);
-  std::unique_ptr<Thread> popup_thread_ RTC_GUARDED_BY(sequence_checker_);
-  bool recursion_check_ =
-      false;  // Protects against SignalDone calling into Destroy.
-  bool destroy_called_ = false;
-  RTC_NO_UNIQUE_ADDRESS webrtc::SequenceChecker sequence_checker_;
-};
-
 // rtc namespaced wrappers for inet_ntop and inet_pton so we can avoid
 // the windows-native versions of these.
 const char* inet_ntop(int af, const void* src, char* dst, socklen_t size);
@@ -73,6 +28,7 @@
 
 bool HasIPv4Enabled();
 bool HasIPv6Enabled();
+
 }  // namespace rtc
 
 #endif  // RTC_BASE_NET_HELPERS_H_
diff --git a/rtc_base/physical_socket_server.cc b/rtc_base/physical_socket_server.cc
index 3cb7c20..adf3fab 100644
--- a/rtc_base/physical_socket_server.cc
+++ b/rtc_base/physical_socket_server.cc
@@ -119,14 +119,6 @@
 
 namespace rtc {
 
-std::unique_ptr<SocketServer> SocketServer::CreateDefault() {
-#if defined(__native_client__)
-  return std::unique_ptr<SocketServer>(new rtc::NullSocketServer);
-#else
-  return std::unique_ptr<SocketServer>(new rtc::PhysicalSocketServer);
-#endif
-}
-
 PhysicalSocket::PhysicalSocket(PhysicalSocketServer* ss, SOCKET s)
     : ss_(ss),
       s_(s),
diff --git a/rtc_base/physical_socket_server.h b/rtc_base/physical_socket_server.h
index cc21a67..5a09aac 100644
--- a/rtc_base/physical_socket_server.h
+++ b/rtc_base/physical_socket_server.h
@@ -21,8 +21,9 @@
 #include <unordered_map>
 #include <vector>
 
+#include "rtc_base/async_resolver.h"
+#include "rtc_base/async_resolver_interface.h"
 #include "rtc_base/deprecated/recursive_critical_section.h"
-#include "rtc_base/net_helpers.h"
 #include "rtc_base/socket_server.h"
 #include "rtc_base/system/rtc_export.h"
 #include "rtc_base/thread_annotations.h"
diff --git a/rtc_base/physical_socket_server_unittest.cc b/rtc_base/physical_socket_server_unittest.cc
index 648f397..3762762 100644
--- a/rtc_base/physical_socket_server_unittest.cc
+++ b/rtc_base/physical_socket_server_unittest.cc
@@ -18,6 +18,7 @@
 #include "rtc_base/gunit.h"
 #include "rtc_base/ip_address.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/net_helpers.h"
 #include "rtc_base/network_monitor.h"
 #include "rtc_base/socket_unittest.h"
 #include "rtc_base/test_utils.h"
diff --git a/rtc_base/synchronization/BUILD.gn b/rtc_base/synchronization/BUILD.gn
index 618e224..16922af 100644
--- a/rtc_base/synchronization/BUILD.gn
+++ b/rtc_base/synchronization/BUILD.gn
@@ -88,6 +88,7 @@
       "..:macromagic",
       "..:rtc_base",
       "..:rtc_event",
+      "..:threading",
       "../../test:test_support",
       "//third_party/google_benchmark",
     ]
diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc
index 3244902..1045398 100644
--- a/rtc_base/thread.cc
+++ b/rtc_base/thread.cc
@@ -33,6 +33,7 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/deprecated/recursive_critical_section.h"
 #include "rtc_base/event.h"
+#include "rtc_base/internal/default_socket_server.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/null_socket_server.h"
 #include "rtc_base/synchronization/sequence_checker.h"
@@ -257,7 +258,7 @@
 #ifndef NO_MAIN_THREAD_WRAPPING
   // Only autowrap the thread which instantiated the ThreadManager.
   if (!thread && manager->IsMainThread()) {
-    thread = new Thread(SocketServer::CreateDefault());
+    thread = new Thread(CreateDefaultSocketServer());
     thread->WrapCurrentWithThreadManager(manager, true);
   }
 #endif
@@ -326,7 +327,7 @@
 Thread* ThreadManager::WrapCurrentThread() {
   Thread* result = CurrentThread();
   if (nullptr == result) {
-    result = new Thread(SocketServer::CreateDefault());
+    result = new Thread(CreateDefaultSocketServer());
     result->WrapCurrentWithThreadManager(this, true);
   }
   return result;
@@ -696,7 +697,7 @@
 }
 
 std::unique_ptr<Thread> Thread::CreateWithSocketServer() {
-  return std::unique_ptr<Thread>(new Thread(SocketServer::CreateDefault()));
+  return std::unique_ptr<Thread>(new Thread(CreateDefaultSocketServer()));
 }
 
 std::unique_ptr<Thread> Thread::Create() {
@@ -1137,7 +1138,7 @@
 }
 
 AutoThread::AutoThread()
-    : Thread(SocketServer::CreateDefault(), /*do_init=*/false) {
+    : Thread(CreateDefaultSocketServer(), /*do_init=*/false) {
   if (!ThreadManager::Instance()->CurrentThread()) {
     // DoInit registers with ThreadManager. Do that only if we intend to
     // be rtc::Thread::Current(), otherwise ProcessAllMessageQueuesInternal will
diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc
index 5132198..705e268 100644
--- a/rtc_base/thread_unittest.cc
+++ b/rtc_base/thread_unittest.cc
@@ -19,6 +19,7 @@
 #include "rtc_base/atomic_ops.h"
 #include "rtc_base/event.h"
 #include "rtc_base/gunit.h"
+#include "rtc_base/internal/default_socket_server.h"
 #include "rtc_base/null_socket_server.h"
 #include "rtc_base/physical_socket_server.h"
 #include "rtc_base/socket_address.h"
@@ -505,7 +506,7 @@
 
 class ThreadQueueTest : public ::testing::Test, public Thread {
  public:
-  ThreadQueueTest() : Thread(SocketServer::CreateDefault(), true) {}
+  ThreadQueueTest() : Thread(CreateDefaultSocketServer(), true) {}
   bool IsLocked_Worker() {
     if (!CritForTest()->TryEnter()) {
       return true;
@@ -555,7 +556,7 @@
 }
 
 TEST_F(ThreadQueueTest, DelayedPostsWithIdenticalTimesAreProcessedInFifoOrder) {
-  Thread q(SocketServer::CreateDefault(), true);
+  Thread q(CreateDefaultSocketServer(), true);
   DelayedPostsWithIdenticalTimesAreProcessedInFifoOrder(&q);
 
   NullSocketServer nullss;
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index 9ba498c..1f0892b 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -181,6 +181,7 @@
       "../rtc_base",
       "../rtc_base:rtc_base_approved",
       "../rtc_base:rtc_json",
+      "../rtc_base:threading",
       "../rtc_base/system:file_wrapper",
       "../test:fileutils",
       "../test:rtp_test_utils",
@@ -489,6 +490,8 @@
       "../common_video",
       "../rtc_base",
       "../rtc_base:checks",
+      "../rtc_base:null_socket_server",
+      "../rtc_base:threading",
       "../test:fileutils",
       "../test:test_main",
       "../test:test_support",
diff --git a/rtc_tools/network_tester/BUILD.gn b/rtc_tools/network_tester/BUILD.gn
index b270262..95b5c90 100644
--- a/rtc_tools/network_tester/BUILD.gn
+++ b/rtc_tools/network_tester/BUILD.gn
@@ -45,9 +45,12 @@
       "../../rtc_base",
       "../../rtc_base:checks",
       "../../rtc_base:ignore_wundef",
+      "../../rtc_base:ip_address",
       "../../rtc_base:protobuf_utils",
       "../../rtc_base:rtc_base_approved",
       "../../rtc_base:rtc_task_queue",
+      "../../rtc_base:socket_address",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/synchronization:sequence_checker",
       "../../rtc_base/system:no_unique_address",
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 00c87ef..e557ce4 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -236,7 +236,10 @@
 
         sources = [ "objc/native/src/audio/audio_session_observer.h" ]
 
-        deps = [ "../rtc_base" ]
+        deps = [
+          "../rtc_base",
+          "../rtc_base:threading",
+        ]
       }
 
       rtc_library("audio_device") {
@@ -265,6 +268,7 @@
           "../modules/audio_device:audio_device_generic",
           "../rtc_base",
           "../rtc_base:checks",
+          "../rtc_base:threading",
           "../system_wrappers:field_trial",
           "../system_wrappers:metrics",
         ]
@@ -338,7 +342,11 @@
 
         sources = [ "objc/native/src/network_monitor_observer.h" ]
 
-        deps = [ "../rtc_base" ]
+        deps = [
+          "../rtc_base",
+          "../rtc_base:network_constants",
+          "../rtc_base:threading",
+        ]
       }
 
       rtc_library("network_monitor_objc") {
@@ -383,6 +391,7 @@
         "../media:rtc_media_base",
         "../rtc_base",
         "../rtc_base:checks",
+        "../rtc_base:threading",
         "//third_party/libyuv",
       ]
 
@@ -973,6 +982,7 @@
         "../pc:peerconnection",
         "../rtc_base",
         "../rtc_base:checks",
+        "../rtc_base:network_constants",
         "../system_wrappers:field_trial",
         "../system_wrappers:metrics",
       ]
@@ -1077,6 +1087,7 @@
             ":sdk_unittests_bundle_data",
             ":sdk_unittests_sources",
             "../rtc_base",
+            "../rtc_base:threading",
             "//test:test_support",
           ]
           ldflags = [ "-all_load" ]
@@ -1096,6 +1107,7 @@
             ":framework_objc+link",
             ":ios_framework_bundle",
             "../rtc_base",
+            "../rtc_base:threading",
             "//test:test_support",
           ]
         }
@@ -1500,6 +1512,7 @@
         "../api/video_codecs:video_codecs_api",
         "../common_video",
         "../rtc_base",
+        "../rtc_base:threading",
       ]
       if (is_ios) {
         deps += [ ":native_network_monitor" ]
@@ -1520,6 +1533,7 @@
           ":network_monitor_objc",
           ":network_monitor_observer",
           "../rtc_base",
+          "../rtc_base:threading",
           "../rtc_base/synchronization:sequence_checker",
         ]
       }
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index ce5db77..b7992e1 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -559,7 +559,9 @@
       "../../api:scoped_refptr",
       "../../rtc_base",
       "../../rtc_base:checks",
+      "../../rtc_base:ip_address",
       "../../rtc_base:rtc_base_approved",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:sequence_checker",
       "../../system_wrappers:field_trial",
       "../../system_wrappers:metrics",
@@ -656,6 +658,7 @@
       "../../rtc_base",
       "../../rtc_base:checks",
       "../../rtc_base:rtc_task_queue",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/task_utils:to_queued_task",
       "//third_party/libyuv",
@@ -746,6 +749,7 @@
       "../../rtc_base:checks",
       "../../rtc_base:rtc_base_approved",
       "../../rtc_base:rtc_task_queue",
+      "../../rtc_base:threading",
       "../../rtc_base/system:thread_registry",
       "../../system_wrappers:field_trial",
     ]
@@ -916,6 +920,7 @@
 
     deps = [
       ":base_jni",
+      "../../rtc_base:threading",
       "//rtc_base",
     ]
   }
@@ -930,6 +935,7 @@
     deps = [
       ":base_jni",
       ":peerconnection_jni",
+      "../../rtc_base:threading",
       "//api:libjingle_peerconnection_api",
       "//api/video_codecs:video_codecs_api",
       "//rtc_base",
@@ -968,6 +974,7 @@
       ":native_api_jni",
       ":video_jni",
       ":videoframe_jni",
+      "../../rtc_base:threading",
       "//api:libjingle_peerconnection_api",
       "//api:media_stream_interface",
       "//api/video:video_frame",
@@ -1471,6 +1478,7 @@
       "../../modules/utility",
       "../../pc:libjingle_peerconnection",
       "../../rtc_base:checks",
+      "../../rtc_base:ip_address",
       "../../rtc_base:rtc_base",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/system:inline",
diff --git a/test/BUILD.gn b/test/BUILD.gn
index 0e1209f..a337979 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -145,6 +145,7 @@
         "../api:scoped_refptr",
         "../modules/video_capture:video_capture_module",
         "../rtc_base",
+        "../rtc_base:threading",
         "../sdk:base_objc",
         "../sdk:native_api",
         "../sdk:native_video",
@@ -415,6 +416,7 @@
       "../rtc_base:checks",
       "../rtc_base:logging",
       "../rtc_base:rtc_base_approved",
+      "../rtc_base:threading",
       "../system_wrappers:field_trial",
       "../system_wrappers:metrics",
     ]
@@ -865,6 +867,7 @@
     "../rtc_base:rtc_base",
     "../rtc_base:rtc_event",
     "../rtc_base:task_queue_for_test",
+    "../rtc_base:threading",
     "../rtc_base/task_utils:to_queued_task",
     "../system_wrappers",
     "../system_wrappers:field_trial",
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 4975f42..af7a4b7 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -439,6 +439,7 @@
   deps = [
     "../../p2p:rtc_p2p",
     "../../rtc_base",
+    "../../rtc_base:threading",
   ]
 }
 
diff --git a/test/network/BUILD.gn b/test/network/BUILD.gn
index e250ccb..ceae0c9 100644
--- a/test/network/BUILD.gn
+++ b/test/network/BUILD.gn
@@ -52,10 +52,16 @@
     "../../call:simulated_network",
     "../../p2p:p2p_server_utils",
     "../../rtc_base",
+    "../../rtc_base:async_socket",
+    "../../rtc_base:ip_address",
+    "../../rtc_base:network_constants",
     "../../rtc_base:rtc_base_tests_utils",
     "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_minmax",
+    "../../rtc_base:socket_address",
+    "../../rtc_base:socket_server",
     "../../rtc_base:task_queue_for_test",
+    "../../rtc_base:threading",
     "../../rtc_base/synchronization:mutex",
     "../../rtc_base/synchronization:sequence_checker",
     "../../rtc_base/task_utils:repeating_task",
@@ -127,6 +133,7 @@
     "../../call:simulated_network",
     "../../rtc_base",
     "../../rtc_base:logging",
+    "../../rtc_base:network_constants",
     "../../rtc_base:rtc_event",
     "../time_controller",
   ]
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 3901297..8af76c3 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -61,6 +61,7 @@
       "../../../api/transport:webrtc_key_value_config",
       "../../../api/video_codecs:video_codecs_api",
       "../../../rtc_base",
+      "../../../rtc_base:threading",
     ]
   }
 
@@ -328,6 +329,7 @@
         "../../../api/transport:network_control",
         "../../../api/video_codecs:video_codecs_api",
         "../../../rtc_base",
+        "../../../rtc_base:threading",
       ]
       absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
     }
@@ -404,6 +406,7 @@
         "../../../rtc_base:rtc_base_approved",
         "../../../rtc_base:safe_conversions",
         "../../../rtc_base:task_queue_for_test",
+        "../../../rtc_base:threading",
         "../../../rtc_base/synchronization:mutex",
         "../../../system_wrappers",
         "../../../system_wrappers:field_trial",
@@ -697,6 +700,7 @@
       "../../../api/units:data_size",
       "../../../api/units:timestamp",
       "../../../rtc_base",
+      "../../../rtc_base:ip_address",
       "../../../rtc_base:rtc_event",
       "../../../rtc_base:stringutils",
       "../../../rtc_base/synchronization:mutex",
diff --git a/test/peer_scenario/BUILD.gn b/test/peer_scenario/BUILD.gn
index 70a7471..2034c9a 100644
--- a/test/peer_scenario/BUILD.gn
+++ b/test/peer_scenario/BUILD.gn
@@ -48,6 +48,7 @@
       "../../pc:pc_test_utils",
       "../../pc:rtc_pc_base",
       "../../rtc_base",
+      "../../rtc_base:null_socket_server",
       "../../rtc_base:stringutils",
       "../logging:log_writer",
       "../network:emulated_network",
diff --git a/test/scenario/BUILD.gn b/test/scenario/BUILD.gn
index ede93c6..a6e3ed9 100644
--- a/test/scenario/BUILD.gn
+++ b/test/scenario/BUILD.gn
@@ -132,7 +132,9 @@
       "../../rtc_base:rtc_stats_counters",
       "../../rtc_base:rtc_task_queue",
       "../../rtc_base:safe_minmax",
+      "../../rtc_base:socket_address",
       "../../rtc_base:task_queue_for_test",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/synchronization:sequence_checker",
       "../../rtc_base/task_utils:repeating_task",
diff --git a/test/time_controller/BUILD.gn b/test/time_controller/BUILD.gn
index c9fffe6..ee49445 100644
--- a/test/time_controller/BUILD.gn
+++ b/test/time_controller/BUILD.gn
@@ -35,6 +35,7 @@
     "../../modules/utility:utility",
     "../../rtc_base",
     "../../rtc_base:checks",
+    "../../rtc_base:null_socket_server",
     "../../rtc_base:rtc_base_tests_utils",
     "../../rtc_base:rtc_event",
     "../../rtc_base/synchronization:mutex",
@@ -62,6 +63,7 @@
       "../../rtc_base",
       "../../rtc_base:rtc_base_approved",
       "../../rtc_base:rtc_task_queue",
+      "../../rtc_base:threading",
       "../../rtc_base/synchronization:mutex",
       "../../rtc_base/task_utils:repeating_task",
       "../../rtc_base/task_utils:to_queued_task",
diff --git a/video/BUILD.gn b/video/BUILD.gn
index f3e5817..acd1616 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -120,6 +120,7 @@
     "../rtc_base:rtc_numerics",
     "../rtc_base:rtc_task_queue",
     "../rtc_base:stringutils",
+    "../rtc_base:threading",
     "../rtc_base:weak_ptr",
     "../rtc_base/experiments:alr_experiment",
     "../rtc_base/experiments:field_trial_parser",
@@ -668,6 +669,7 @@
       "../rtc_base:rtc_numerics",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:task_queue_for_test",
+      "../rtc_base:threading",
       "../rtc_base/experiments:alr_experiment",
       "../rtc_base/synchronization:mutex",
       "../rtc_base/synchronization:sequence_checker",