New struct PeerNetworkDependencies

Preparation to make landing of
https://webrtc-review.googlesource.com/c/src/+/238660
easier.

Bug: webrtc:13145
Change-Id: I314a53cc634f842e5df009d0802b214aa6f8728b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/238663
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Gustaf Ullberg <gustaf@webrtc.org>
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#35403}
diff --git a/api/BUILD.gn b/api/BUILD.gn
index 0352f99..c9dabe3 100644
--- a/api/BUILD.gn
+++ b/api/BUILD.gn
@@ -410,6 +410,16 @@
   absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
 }
 
+rtc_source_set("peer_network_dependencies") {
+  visibility = [ "*" ]
+  sources = [ "test/peer_network_dependencies.h" ]
+  deps = [
+    ":packet_socket_factory",
+    "../rtc_base",
+    "../rtc_base:threading",
+  ]
+}
+
 rtc_source_set("peer_connection_quality_test_fixture_api") {
   visibility = [ "*" ]
   testonly = true
@@ -425,6 +435,7 @@
     ":media_stream_interface",
     ":network_state_predictor_api",
     ":packet_socket_factory",
+    ":peer_network_dependencies",
     ":rtp_parameters",
     ":simulated_network_api",
     ":stats_observer_interface",
@@ -654,6 +665,7 @@
   deps = [
     ":array_view",
     ":packet_socket_factory",
+    ":peer_network_dependencies",
     ":simulated_network_api",
     ":time_controller",
     "../call:simulated_network",
diff --git a/api/test/DEPS b/api/test/DEPS
index 3290768..6c3a9eb 100644
--- a/api/test/DEPS
+++ b/api/test/DEPS
@@ -16,6 +16,10 @@
     "+rtc_base/network.h",
     "+rtc_base/network_constants.h",
   ],
+  "peer_network_dependencies\.h": [
+    "+rtc_base/network.h",
+    "+rtc_base/thread.h",
+  ],
   "peerconnection_quality_test_fixture\.h": [
     "+logging/rtc_event_log/rtc_event_log_factory_interface.h",
     "+rtc_base/network.h",
diff --git a/api/test/network_emulation_manager.h b/api/test/network_emulation_manager.h
index 61973eb..b5c68af 100644
--- a/api/test/network_emulation_manager.h
+++ b/api/test/network_emulation_manager.h
@@ -20,6 +20,7 @@
 #include "api/packet_socket_factory.h"
 #include "api/test/network_emulation/cross_traffic.h"
 #include "api/test/network_emulation/network_emulation_interfaces.h"
+#include "api/test/peer_network_dependencies.h"
 #include "api/test/simulated_network.h"
 #include "api/test/time_controller.h"
 #include "api/units/timestamp.h"
@@ -130,6 +131,9 @@
   // into WebRTC to properly setup network emulation. Returned factory is owned
   // by EmulatedNetworkManagerInterface implementation.
   virtual rtc::PacketSocketFactory* packet_socket_factory() = 0;
+  webrtc::webrtc_pc_e2e::PeerNetworkDependencies network_dependencies() {
+    return {network_thread(), network_manager(), packet_socket_factory()};
+  }
   // Returns list of endpoints that are associated with this instance. Pointers
   // are guaranteed to be non-null and are owned by NetworkEmulationManager.
   virtual std::vector<EmulatedEndpoint*> endpoints() const = 0;
diff --git a/api/test/peer_network_dependencies.h b/api/test/peer_network_dependencies.h
new file mode 100644
index 0000000..6f85ad0
--- /dev/null
+++ b/api/test/peer_network_dependencies.h
@@ -0,0 +1,32 @@
+/*
+ *  Copyright (c) 2021 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 API_TEST_PEER_NETWORK_DEPENDENCIES_H_
+#define API_TEST_PEER_NETWORK_DEPENDENCIES_H_
+
+#include "api/packet_socket_factory.h"
+#include "rtc_base/network.h"
+#include "rtc_base/thread.h"
+
+namespace webrtc {
+namespace webrtc_pc_e2e {
+
+// The network dependencies needed when adding a peer to tests using
+// PeerConnectionE2EQualityTestFixture.
+struct PeerNetworkDependencies {
+  rtc::Thread* network_thread;
+  rtc::NetworkManager* network_manager;
+  rtc::PacketSocketFactory* packet_socket_factory;
+};
+
+}  // namespace webrtc_pc_e2e
+}  // namespace webrtc
+
+#endif  // API_TEST_PEER_NETWORK_DEPENDENCIES_H_
diff --git a/api/test/peerconnection_quality_test_fixture.h b/api/test/peerconnection_quality_test_fixture.h
index 8d07ccb..fb7264b 100644
--- a/api/test/peerconnection_quality_test_fixture.h
+++ b/api/test/peerconnection_quality_test_fixture.h
@@ -30,6 +30,7 @@
 #include "api/task_queue/task_queue_factory.h"
 #include "api/test/audio_quality_analyzer_interface.h"
 #include "api/test/frame_generator_interface.h"
+#include "api/test/peer_network_dependencies.h"
 #include "api/test/simulated_network.h"
 #include "api/test/stats_observer_interface.h"
 #include "api/test/track_id_stream_info_map.h"
@@ -494,11 +495,18 @@
 
   // Add a new peer to the call and return an object through which caller
   // can configure peer's behavior.
-  // `network_thread` will be used as network thread for peer's peer connection
-  // `network_manager` will be used to provide network interfaces for peer's
-  // peer connection.
+  // `network_dependencies` are used to provide networking for peer's peer
+  // connection. Members must be non-null.
   // `configurer` function will be used to configure peer in the call.
   virtual PeerHandle* AddPeer(
+      const PeerNetworkDependencies& network_dependencies,
+      rtc::FunctionView<void(PeerConfigurer*)> configurer) {
+    return AddPeer(network_dependencies.network_thread,
+                   network_dependencies.network_manager, configurer);
+  }
+  // TODO(bugs.webrtc.org/13145): Delete, replaced by above overload with
+  // PeerNetworkDependencies.
+  virtual PeerHandle* AddPeer(
       rtc::Thread* network_thread,
       rtc::NetworkManager* network_manager,
       rtc::FunctionView<void(PeerConfigurer*)> configurer) = 0;
diff --git a/audio/test/pc_low_bandwidth_audio_test.cc b/audio/test/pc_low_bandwidth_audio_test.cc
index 95a3223..9cecc8d 100644
--- a/audio/test/pc_low_bandwidth_audio_test.cc
+++ b/audio/test/pc_low_bandwidth_audio_test.cc
@@ -80,10 +80,10 @@
   auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
       test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
       /*video_quality_analyzer=*/nullptr);
-  fixture->AddPeer(network_links.first->network_thread(),
-                   network_links.first->network_manager(), alice_configurer);
-  fixture->AddPeer(network_links.second->network_thread(),
-                   network_links.second->network_manager(), bob_configurer);
+  fixture->AddPeer(network_links.first->network_dependencies(),
+                   alice_configurer);
+  fixture->AddPeer(network_links.second->network_dependencies(),
+                   bob_configurer);
   fixture->AddQualityMetricsReporter(
       std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
           network_links.first, network_links.second));
diff --git a/test/pc/e2e/peer_connection_e2e_smoke_test.cc b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
index d9c2685..5a7f10b 100644
--- a/test/pc/e2e/peer_connection_e2e_smoke_test.cc
+++ b/test/pc/e2e/peer_connection_e2e_smoke_test.cc
@@ -85,8 +85,7 @@
 
   void AddPeer(EmulatedNetworkManagerInterface* network,
                rtc::FunctionView<void(PeerConfigurer*)> configurer) {
-    fixture_->AddPeer(network->network_thread(), network->network_manager(),
-                      configurer);
+    fixture_->AddPeer(network->network_dependencies(), configurer);
   }
 
   void RunAndCheckEachVideoStreamReceivedFrames(const RunParams& run_params) {
diff --git a/video/pc_full_stack_tests.cc b/video/pc_full_stack_tests.cc
index 6fb83f8..6728e4b 100644
--- a/video/pc_full_stack_tests.cc
+++ b/video/pc_full_stack_tests.cc
@@ -85,10 +85,10 @@
   auto fixture = webrtc_pc_e2e::CreatePeerConnectionE2EQualityTestFixture(
       test_case_name, time_controller, /*audio_quality_analyzer=*/nullptr,
       /*video_quality_analyzer=*/nullptr);
-  fixture->AddPeer(network_links.first->network_thread(),
-                   network_links.first->network_manager(), alice_configurer);
-  fixture->AddPeer(network_links.second->network_thread(),
-                   network_links.second->network_manager(), bob_configurer);
+  fixture->AddPeer(network_links.first->network_dependencies(),
+                   alice_configurer);
+  fixture->AddPeer(network_links.second->network_dependencies(),
+                   bob_configurer);
   fixture->AddQualityMetricsReporter(
       std::make_unique<webrtc_pc_e2e::NetworkQualityMetricsReporter>(
           network_links.first, network_links.second));