[PCLF] Continue to migrate out from PeerConnectionWrapper

Pair: mbonadei@webrtc.org
Bug: b/213863770
Change-Id: Ibdbd3c4b1b449660bc2677775108d690da7fa848
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/257040
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#36369}
diff --git a/test/pc/e2e/BUILD.gn b/test/pc/e2e/BUILD.gn
index 471ac3c..aef5250 100644
--- a/test/pc/e2e/BUILD.gn
+++ b/test/pc/e2e/BUILD.gn
@@ -226,10 +226,15 @@
         ":peer_configurer",
         ":peer_connection_quality_test_params",
         "../../../api:frame_generator_api",
+        "../../../api:function_view",
+        "../../../api:libjingle_peerconnection_api",
         "../../../api:peer_connection_quality_test_fixture_api",
         "../../../api:scoped_refptr",
+        "../../../api:sequence_checker",
         "../../../modules/audio_processing:api",
         "../../../pc:peerconnection_wrapper",
+        "../../../rtc_base:logging",
+        "../../../rtc_base:refcount",
       ]
       absl_deps = [
         "//third_party/abseil-cpp/absl/memory",
diff --git a/test/pc/e2e/test_peer.cc b/test/pc/e2e/test_peer.cc
index 942bedf..322bb78 100644
--- a/test/pc/e2e/test_peer.cc
+++ b/test/pc/e2e/test_peer.cc
@@ -18,6 +18,45 @@
 
 namespace webrtc {
 namespace webrtc_pc_e2e {
+namespace {
+
+class SetRemoteDescriptionCallback
+    : public webrtc::SetRemoteDescriptionObserverInterface {
+ public:
+  void OnSetRemoteDescriptionComplete(webrtc::RTCError error) override {
+    is_called_ = true;
+    error_ = error;
+  }
+
+  bool is_called() const { return is_called_; }
+
+  webrtc::RTCError error() const { return error_; }
+
+ private:
+  bool is_called_ = false;
+  webrtc::RTCError error_;
+};
+
+}  // namespace
+
+bool TestPeer::SetRemoteDescription(
+    std::unique_ptr<SessionDescriptionInterface> desc,
+    std::string* error_out) {
+  RTC_CHECK(wrapper_) << "TestPeer is already closed";
+
+  auto observer = rtc::make_ref_counted<SetRemoteDescriptionCallback>();
+  // We're assuming (and asserting) that the PeerConnection implementation of
+  // SetRemoteDescription is synchronous when called on the signaling thread.
+  pc()->SetRemoteDescription(std::move(desc), observer);
+  RTC_CHECK(observer->is_called());
+  if (!observer->error().ok()) {
+    RTC_LOG(LS_ERROR) << *params_->name
+                      << ": Failed to set remote description: "
+                      << observer->error().message();
+    *error_out = observer->error().message();
+  }
+  return observer->error().ok();
+}
 
 bool TestPeer::AddIceCandidates(
     std::vector<std::unique_ptr<IceCandidateInterface>> candidates) {
diff --git a/test/pc/e2e/test_peer.h b/test/pc/e2e/test_peer.h
index 44f5551..9858ff3 100644
--- a/test/pc/e2e/test_peer.h
+++ b/test/pc/e2e/test_peer.h
@@ -15,10 +15,15 @@
 #include <vector>
 
 #include "absl/memory/memory.h"
-#include "absl/types/variant.h"
+#include "api/function_view.h"
+#include "api/scoped_refptr.h"
+#include "api/sequence_checker.h"
+#include "api/set_remote_description_observer_interface.h"
 #include "api/test/frame_generator_interface.h"
 #include "api/test/peerconnection_quality_test_fixture.h"
 #include "pc/peer_connection_wrapper.h"
+#include "rtc_base/logging.h"
+#include "rtc_base/ref_counted_object.h"
 #include "test/pc/e2e/peer_configurer.h"
 #include "test/pc/e2e/peer_connection_quality_test_params.h"
 
@@ -47,6 +52,14 @@
     return wrapper_->observer();
   }
 
+  // Tell underlying `PeerConnection` to create an Offer.
+  // `observer` will be invoked on the signaling thread when offer is created.
+  void CreateOffer(
+      rtc::scoped_refptr<CreateSessionDescriptionObserver> observer) {
+    RTC_CHECK(wrapper_) << "TestPeer is already closed";
+    pc()->CreateOffer(observer.release(),
+                      webrtc::PeerConnectionInterface::RTCOfferAnswerOptions());
+  }
   std::unique_ptr<SessionDescriptionInterface> CreateOffer() {
     RTC_CHECK(wrapper_) << "TestPeer is already closed";
     return wrapper_->CreateOffer();
@@ -63,11 +76,9 @@
     return wrapper_->SetLocalDescription(std::move(desc), error_out);
   }
 
+  // `error_out` will be set only if returned value is false.
   bool SetRemoteDescription(std::unique_ptr<SessionDescriptionInterface> desc,
-                            std::string* error_out = nullptr) {
-    RTC_CHECK(wrapper_) << "TestPeer is already closed";
-    return wrapper_->SetRemoteDescription(std::move(desc), error_out);
-  }
+                            std::string* error_out = nullptr);
 
   rtc::scoped_refptr<RtpTransceiverInterface> AddTransceiver(
       cricket::MediaType media_type,