Adds CreateTaskQueueFactory to TimeController

Bug: webrtc:11255
Change-Id: I02bdc944c7081590f40a77b315f64c63adbc6ff8
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/166921
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Reviewed-by: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30349}
diff --git a/api/test/time_controller.cc b/api/test/time_controller.cc
index 26fe69c..b3b2f46 100644
--- a/api/test/time_controller.cc
+++ b/api/test/time_controller.cc
@@ -10,6 +10,22 @@
 #include "api/test/time_controller.h"
 
 namespace webrtc {
+std::unique_ptr<TaskQueueFactory> TimeController::CreateTaskQueueFactory() {
+  class FactoryWrapper final : public TaskQueueFactory {
+   public:
+    explicit FactoryWrapper(TaskQueueFactory* inner_factory)
+        : inner_(inner_factory) {}
+    std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(
+        absl::string_view name,
+        Priority priority) const override {
+      return inner_->CreateTaskQueue(name, priority);
+    }
+
+   private:
+    TaskQueueFactory* const inner_;
+  };
+  return std::make_unique<FactoryWrapper>(GetTaskQueueFactory());
+}
 bool TimeController::Wait(const std::function<bool()>& done,
                           TimeDelta max_duration) {
   // Step size is chosen to be short enough to not significantly affect latency
diff --git a/api/test/time_controller.h b/api/test/time_controller.h
index 6d09481..aa69c52 100644
--- a/api/test/time_controller.h
+++ b/api/test/time_controller.h
@@ -35,6 +35,12 @@
   // The returned factory will created task queues that runs in implementation
   // defined time domain.
   virtual TaskQueueFactory* GetTaskQueueFactory() = 0;
+  // Simple helper to create an owned factory that can be used as a parameter
+  // for PeerConnectionFactory. Note that this might depend on the underlying
+  // time controller and therfore must be destroyed before the time controller
+  // is destroyed.
+  std::unique_ptr<TaskQueueFactory> CreateTaskQueueFactory();
+
   // Creates a process thread.
   virtual std::unique_ptr<ProcessThread> CreateProcessThread(
       const char* thread_name) = 0;
diff --git a/test/peer_scenario/peer_scenario_client.cc b/test/peer_scenario/peer_scenario_client.cc
index 4614942..3485298 100644
--- a/test/peer_scenario/peer_scenario_client.cc
+++ b/test/peer_scenario/peer_scenario_client.cc
@@ -114,21 +114,6 @@
   PeerScenarioClient::CallbackHandlers* handlers_;
 };
 
-// Used to supply a unique_ptr for an unowned TaskQueueFactory.
-class TaskQueueFactoryWrapper final : public TaskQueueFactory {
- public:
-  explicit TaskQueueFactoryWrapper(TaskQueueFactory* inner_factory)
-      : inner_factory_(inner_factory) {}
-  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> CreateTaskQueue(
-      absl::string_view name,
-      Priority priority) const override {
-    return inner_factory_->CreateTaskQueue(name, priority);
-  }
-
- private:
-  TaskQueueFactory* const inner_factory_;
-};
-
 class TimeControllerBasedCallFactory : public CallFactoryInterface {
  public:
   explicit TimeControllerBasedCallFactory(TimeController* time_controller)
@@ -192,7 +177,7 @@
   pcf_deps.call_factory =
       std::make_unique<TimeControllerBasedCallFactory>(net->time_controller());
   pcf_deps.task_queue_factory =
-      std::make_unique<TaskQueueFactoryWrapper>(task_queue_factory_);
+      net->time_controller()->CreateTaskQueueFactory();
   pcf_deps.event_log_factory =
       std::make_unique<RtcEventLogFactory>(task_queue_factory_);