In AecDump take raw pointer to TaskQueueBase instead of legacy rtc::TaskQueue

Bug: webrtc:14169
Change-Id: I1e50a945a7637da07bec00ccd7b6b1847a7481cd
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/333480
Reviewed-by: Sam Zackrisson <saza@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41477}
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index 6aca7de..3611c1a 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -193,6 +193,7 @@
     "../../rtc_base:gtest_prod",
     "../../rtc_base:logging",
     "../../rtc_base:macromagic",
+    "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_minmax",
     "../../rtc_base:sanitizer",
     "../../rtc_base:swap_queue",
diff --git a/modules/audio_processing/aec_dump/BUILD.gn b/modules/audio_processing/aec_dump/BUILD.gn
index 78bae56..ffbc098 100644
--- a/modules/audio_processing/aec_dump/BUILD.gn
+++ b/modules/audio_processing/aec_dump/BUILD.gn
@@ -14,10 +14,15 @@
 
   deps = [
     "..:aec_dump_interface",
+    "../../../api/task_queue",
+    "../../../rtc_base:rtc_task_queue",
     "../../../rtc_base/system:file_wrapper",
     "../../../rtc_base/system:rtc_export",
   ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/base:nullability",
+    "//third_party/abseil-cpp/absl/strings",
+  ]
 }
 
 if (rtc_include_tests) {
@@ -71,11 +76,13 @@
       "../../../rtc_base:protobuf_utils",
       "../../../rtc_base:race_checker",
       "../../../rtc_base:rtc_event",
-      "../../../rtc_base:rtc_task_queue",
       "../../../rtc_base/system:file_wrapper",
       "../../../system_wrappers",
     ]
-    absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+    absl_deps = [
+      "//third_party/abseil-cpp/absl/base:nullability",
+      "//third_party/abseil-cpp/absl/strings",
+    ]
 
     deps += [ "../:audioproc_debug_proto" ]
   }
@@ -106,6 +113,10 @@
   deps = [
     ":aec_dump",
     "..:aec_dump_interface",
+    "../../../api/task_queue",
   ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/base:nullability",
+    "//third_party/abseil-cpp/absl/strings",
+  ]
 }
diff --git a/modules/audio_processing/aec_dump/aec_dump_factory.h b/modules/audio_processing/aec_dump/aec_dump_factory.h
index 20718c3..c76e973 100644
--- a/modules/audio_processing/aec_dump/aec_dump_factory.h
+++ b/modules/audio_processing/aec_dump/aec_dump_factory.h
@@ -13,34 +13,44 @@
 
 #include <memory>
 
+#include "absl/base/nullability.h"
 #include "absl/strings/string_view.h"
+#include "api/task_queue/task_queue_base.h"
 #include "modules/audio_processing/include/aec_dump.h"
 #include "rtc_base/system/file_wrapper.h"
 #include "rtc_base/system/rtc_export.h"
-
-namespace rtc {
-class TaskQueue;
-}  // namespace rtc
+#include "rtc_base/task_queue.h"
 
 namespace webrtc {
 
 class RTC_EXPORT AecDumpFactory {
  public:
-  // The `worker_queue` may not be null and must outlive the created
-  // AecDump instance. `max_log_size_bytes == -1` means the log size
-  // will be unlimited. `handle` may not be null. The AecDump takes
-  // responsibility for `handle` and closes it in the destructor. A
-  // non-null return value indicates that the file has been
+  // The `worker_queue` must outlive the created AecDump instance.
+  // `max_log_size_bytes == -1` means the log size will be unlimited.
+  // The AecDump takes responsibility for `handle` and closes it in the
+  // destructor. A non-null return value indicates that the file has been
   // sucessfully opened.
-  static std::unique_ptr<AecDump> Create(webrtc::FileWrapper file,
-                                         int64_t max_log_size_bytes,
-                                         rtc::TaskQueue* worker_queue);
-  static std::unique_ptr<AecDump> Create(absl::string_view file_name,
-                                         int64_t max_log_size_bytes,
-                                         rtc::TaskQueue* worker_queue);
-  static std::unique_ptr<AecDump> Create(FILE* handle,
-                                         int64_t max_log_size_bytes,
-                                         rtc::TaskQueue* worker_queue);
+  static absl::Nullable<std::unique_ptr<AecDump>> Create(
+      FileWrapper file,
+      int64_t max_log_size_bytes,
+      absl::Nonnull<TaskQueueBase*> worker_queue);
+  static absl::Nullable<std::unique_ptr<AecDump>> Create(
+      absl::string_view file_name,
+      int64_t max_log_size_bytes,
+      absl::Nonnull<TaskQueueBase*> worker_queue);
+  static absl::Nullable<std::unique_ptr<AecDump>> Create(
+      absl::Nonnull<FILE*> handle,
+      int64_t max_log_size_bytes,
+      absl::Nonnull<TaskQueueBase*> worker_queue);
+
+  // TODO: bugs.webrtc.org/14169 - Delete this variant when no longer used by
+  // chromium.
+  static absl::Nullable<std::unique_ptr<AecDump>> Create(
+      absl::Nonnull<FILE*> handle,
+      int64_t max_log_size_bytes,
+      absl::Nonnull<rtc::TaskQueue*> worker_queue) {
+    return Create(handle, max_log_size_bytes, worker_queue->Get());
+  }
 };
 
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec_dump/aec_dump_impl.cc b/modules/audio_processing/aec_dump/aec_dump_impl.cc
index 94c2404..8484fcc 100644
--- a/modules/audio_processing/aec_dump/aec_dump_impl.cc
+++ b/modules/audio_processing/aec_dump/aec_dump_impl.cc
@@ -13,11 +13,12 @@
 #include <memory>
 #include <utility>
 
+#include "absl/base/nullability.h"
 #include "absl/strings/string_view.h"
+#include "api/task_queue/task_queue_base.h"
 #include "modules/audio_processing/aec_dump/aec_dump_factory.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/event.h"
-#include "rtc_base/task_queue.h"
 
 namespace webrtc {
 
@@ -59,7 +60,7 @@
 
 AecDumpImpl::AecDumpImpl(FileWrapper debug_file,
                          int64_t max_log_size_bytes,
-                         rtc::TaskQueue* worker_queue)
+                         absl::Nonnull<TaskQueueBase*> worker_queue)
     : debug_file_(std::move(debug_file)),
       num_bytes_left_for_log_(max_log_size_bytes),
       worker_queue_(worker_queue) {}
@@ -254,9 +255,10 @@
   });
 }
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(webrtc::FileWrapper file,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    FileWrapper file,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   RTC_DCHECK(worker_queue);
   if (!file.is_open())
     return nullptr;
@@ -265,16 +267,18 @@
                                        worker_queue);
 }
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(absl::string_view file_name,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    absl::string_view file_name,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   return Create(FileWrapper::OpenWriteOnly(file_name), max_log_size_bytes,
                 worker_queue);
 }
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(FILE* handle,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    absl::Nonnull<FILE*> handle,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   return Create(FileWrapper(handle), max_log_size_bytes, worker_queue);
 }
 
diff --git a/modules/audio_processing/aec_dump/aec_dump_impl.h b/modules/audio_processing/aec_dump/aec_dump_impl.h
index 429808f..d5af31b 100644
--- a/modules/audio_processing/aec_dump/aec_dump_impl.h
+++ b/modules/audio_processing/aec_dump/aec_dump_impl.h
@@ -15,11 +15,11 @@
 #include <string>
 #include <vector>
 
+#include "api/task_queue/task_queue_base.h"
 #include "modules/audio_processing/aec_dump/capture_stream_info.h"
 #include "modules/audio_processing/include/aec_dump.h"
 #include "rtc_base/race_checker.h"
 #include "rtc_base/system/file_wrapper.h"
-#include "rtc_base/task_queue.h"
 #include "rtc_base/thread_annotations.h"
 
 // Files generated at build-time by the protobuf compiler.
@@ -39,7 +39,7 @@
   // `max_log_size_bytes == -1` means the log size will be unlimited.
   AecDumpImpl(FileWrapper debug_file,
               int64_t max_log_size_bytes,
-              rtc::TaskQueue* worker_queue);
+              absl::Nonnull<TaskQueueBase*> worker_queue);
   AecDumpImpl(const AecDumpImpl&) = delete;
   AecDumpImpl& operator=(const AecDumpImpl&) = delete;
   ~AecDumpImpl() override;
@@ -74,7 +74,7 @@
   FileWrapper debug_file_;
   int64_t num_bytes_left_for_log_ = 0;
   rtc::RaceChecker race_checker_;
-  rtc::TaskQueue* worker_queue_;
+  absl::Nonnull<TaskQueueBase*> worker_queue_;
   CaptureStreamInfo capture_stream_info_;
 };
 }  // namespace webrtc
diff --git a/modules/audio_processing/aec_dump/aec_dump_unittest.cc b/modules/audio_processing/aec_dump/aec_dump_unittest.cc
index 62f896f..2a8110c 100644
--- a/modules/audio_processing/aec_dump/aec_dump_unittest.cc
+++ b/modules/audio_processing/aec_dump/aec_dump_unittest.cc
@@ -28,7 +28,7 @@
 
   {
     std::unique_ptr<webrtc::AecDump> aec_dump =
-        webrtc::AecDumpFactory::Create(filename, -1, &file_writer_queue);
+        webrtc::AecDumpFactory::Create(filename, -1, file_writer_queue.Get());
 
     constexpr int kNumChannels = 1;
     constexpr int kNumSamplesPerChannel = 160;
@@ -63,7 +63,7 @@
 
   {
     std::unique_ptr<webrtc::AecDump> aec_dump =
-        webrtc::AecDumpFactory::Create(filename, -1, &file_writer_queue);
+        webrtc::AecDumpFactory::Create(filename, -1, file_writer_queue.Get());
 
     constexpr int kNumChannels = 1;
     constexpr int kNumSamplesPerChannel = 160;
diff --git a/modules/audio_processing/aec_dump/null_aec_dump_factory.cc b/modules/audio_processing/aec_dump/null_aec_dump_factory.cc
index 9bd9745..63929af 100644
--- a/modules/audio_processing/aec_dump/null_aec_dump_factory.cc
+++ b/modules/audio_processing/aec_dump/null_aec_dump_factory.cc
@@ -8,27 +8,32 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "absl/base/nullability.h"
 #include "absl/strings/string_view.h"
+#include "api/task_queue/task_queue_base.h"
 #include "modules/audio_processing/aec_dump/aec_dump_factory.h"
 #include "modules/audio_processing/include/aec_dump.h"
 
 namespace webrtc {
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(webrtc::FileWrapper file,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    FileWrapper file,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   return nullptr;
 }
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(absl::string_view file_name,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    absl::string_view file_name,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   return nullptr;
 }
 
-std::unique_ptr<AecDump> AecDumpFactory::Create(FILE* handle,
-                                                int64_t max_log_size_bytes,
-                                                rtc::TaskQueue* worker_queue) {
+absl::Nullable<std::unique_ptr<AecDump>> AecDumpFactory::Create(
+    absl::Nonnull<FILE*> handle,
+    int64_t max_log_size_bytes,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   return nullptr;
 }
 }  // namespace webrtc
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index c80cc76..2e18ef4 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -33,6 +33,7 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/experiments/field_trial_parser.h"
 #include "rtc_base/logging.h"
+#include "rtc_base/task_queue.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/trace_event.h"
 #include "system_wrappers/include/denormal_disabler.h"
@@ -2085,8 +2086,8 @@
 bool AudioProcessingImpl::CreateAndAttachAecDump(absl::string_view file_name,
                                                  int64_t max_log_size_bytes,
                                                  rtc::TaskQueue* worker_queue) {
-  std::unique_ptr<AecDump> aec_dump =
-      AecDumpFactory::Create(file_name, max_log_size_bytes, worker_queue);
+  std::unique_ptr<AecDump> aec_dump = AecDumpFactory::Create(
+      file_name, max_log_size_bytes, worker_queue->Get());
   if (!aec_dump) {
     return false;
   }
@@ -2099,7 +2100,7 @@
                                                  int64_t max_log_size_bytes,
                                                  rtc::TaskQueue* worker_queue) {
   std::unique_ptr<AecDump> aec_dump =
-      AecDumpFactory::Create(handle, max_log_size_bytes, worker_queue);
+      AecDumpFactory::Create(handle, max_log_size_bytes, worker_queue->Get());
   if (!aec_dump) {
     return false;
   }
diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc
index c2bedb2..2d3684e 100644
--- a/modules/audio_processing/audio_processing_unittest.cc
+++ b/modules/audio_processing/audio_processing_unittest.cc
@@ -1485,8 +1485,8 @@
       if (first_init) {
         // AttachAecDump() writes an additional init message. Don't start
         // recording until after the first init to avoid the extra message.
-        auto aec_dump =
-            AecDumpFactory::Create(out_filename, max_size_bytes, &worker_queue);
+        auto aec_dump = AecDumpFactory::Create(out_filename, max_size_bytes,
+                                               worker_queue.Get());
         EXPECT_TRUE(aec_dump);
         apm_->AttachAecDump(std::move(aec_dump));
         first_init = false;
@@ -1632,7 +1632,7 @@
   const std::string filename =
       test::TempFilename(test::OutputPath(), "debug_aec");
   {
-    auto aec_dump = AecDumpFactory::Create("", -1, &worker_queue);
+    auto aec_dump = AecDumpFactory::Create("", -1, worker_queue.Get());
     EXPECT_FALSE(aec_dump);
   }
 
@@ -1640,7 +1640,7 @@
   // Stopping without having started should be OK.
   apm_->DetachAecDump();
 
-  auto aec_dump = AecDumpFactory::Create(filename, -1, &worker_queue);
+  auto aec_dump = AecDumpFactory::Create(filename, -1, worker_queue.Get());
   EXPECT_TRUE(aec_dump);
   apm_->AttachAecDump(std::move(aec_dump));
   EXPECT_EQ(apm_->kNoError,
@@ -1683,7 +1683,7 @@
   // Stopping without having started should be OK.
   apm_->DetachAecDump();
 
-  auto aec_dump = AecDumpFactory::Create(std::move(f), -1, &worker_queue);
+  auto aec_dump = AecDumpFactory::Create(std::move(f), -1, worker_queue.Get());
   EXPECT_TRUE(aec_dump);
   apm_->AttachAecDump(std::move(aec_dump));
   EXPECT_EQ(apm_->kNoError,
diff --git a/modules/audio_processing/test/audio_processing_simulator.cc b/modules/audio_processing/test/audio_processing_simulator.cc
index 7bd6da0..500005f 100644
--- a/modules/audio_processing/test/audio_processing_simulator.cc
+++ b/modules/audio_processing/test/audio_processing_simulator.cc
@@ -622,7 +622,7 @@
 
   if (settings_.aec_dump_output_filename) {
     ap_->AttachAecDump(AecDumpFactory::Create(
-        *settings_.aec_dump_output_filename, -1, &worker_queue_));
+        *settings_.aec_dump_output_filename, -1, worker_queue_.Get()));
   }
 }
 
diff --git a/modules/audio_processing/test/debug_dump_test.cc b/modules/audio_processing/test/debug_dump_test.cc
index cded5de..0d3eefa 100644
--- a/modules/audio_processing/test/debug_dump_test.cc
+++ b/modules/audio_processing/test/debug_dump_test.cc
@@ -197,7 +197,7 @@
 
 void DebugDumpGenerator::StartRecording() {
   apm_->AttachAecDump(
-      AecDumpFactory::Create(dump_file_name_.c_str(), -1, &worker_queue_));
+      AecDumpFactory::Create(dump_file_name_.c_str(), -1, worker_queue_.Get()));
 }
 
 void DebugDumpGenerator::Process(size_t num_blocks) {
diff --git a/test/fuzzers/BUILD.gn b/test/fuzzers/BUILD.gn
index 4384c31..4f3168f 100644
--- a/test/fuzzers/BUILD.gn
+++ b/test/fuzzers/BUILD.gn
@@ -470,6 +470,7 @@
     "../../api:scoped_refptr",
     "../../api/audio:aec3_factory",
     "../../api/audio:echo_detector_creator",
+    "../../api/task_queue",
     "../../api/task_queue:default_task_queue_factory",
     "../../modules/audio_processing",
     "../../modules/audio_processing:api",
@@ -479,11 +480,13 @@
     "../../modules/audio_processing/aec_dump",
     "../../modules/audio_processing/aec_dump:aec_dump_impl",
     "../../rtc_base:macromagic",
-    "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_minmax",
     "../../system_wrappers:field_trial",
   ]
-  absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
+  absl_deps = [
+    "//third_party/abseil-cpp/absl/base:nullability",
+    "//third_party/abseil-cpp/absl/memory",
+  ]
   seed_corpus = "corpora/audio_processing-corpus"
 }
 
diff --git a/test/fuzzers/audio_processing_configs_fuzzer.cc b/test/fuzzers/audio_processing_configs_fuzzer.cc
index 331a373..93bce2f 100644
--- a/test/fuzzers/audio_processing_configs_fuzzer.cc
+++ b/test/fuzzers/audio_processing_configs_fuzzer.cc
@@ -11,16 +11,17 @@
 #include <bitset>
 #include <string>
 
+#include "absl/base/nullability.h"
 #include "absl/memory/memory.h"
 #include "api/audio/echo_canceller3_factory.h"
 #include "api/audio/echo_detector_creator.h"
 #include "api/task_queue/default_task_queue_factory.h"
+#include "api/task_queue/task_queue_base.h"
 #include "modules/audio_processing/aec_dump/aec_dump_factory.h"
 #include "modules/audio_processing/include/audio_processing.h"
 #include "modules/audio_processing/test/audio_processing_builder_for_testing.h"
 #include "rtc_base/arraysize.h"
 #include "rtc_base/numerics/safe_minmax.h"
-#include "rtc_base/task_queue.h"
 #include "system_wrappers/include/field_trial.h"
 #include "test/fuzzers/audio_processing_fuzzer_helper.h"
 #include "test/fuzzers/fuzz_data_helper.h"
@@ -33,9 +34,10 @@
     "WebRTC-Aec3ShortHeadroomKillSwitch",
 };
 
-rtc::scoped_refptr<AudioProcessing> CreateApm(test::FuzzDataHelper* fuzz_data,
-                                              std::string* field_trial_string,
-                                              rtc::TaskQueue* worker_queue) {
+rtc::scoped_refptr<AudioProcessing> CreateApm(
+    test::FuzzDataHelper* fuzz_data,
+    std::string* field_trial_string,
+    absl::Nonnull<TaskQueueBase*> worker_queue) {
   // Parse boolean values for optionally enabling different
   // configurable public components of APM.
   bool use_ts = fuzz_data->ReadOrDefaultValue(true);
@@ -134,9 +136,10 @@
   // for field_trial.h. Hence it's created here and not in CreateApm.
   std::string field_trial_string = "";
 
-  rtc::TaskQueue worker_queue(GetTaskQueueFactory()->CreateTaskQueue(
-      "rtc-low-prio", rtc::TaskQueue::Priority::LOW));
-  auto apm = CreateApm(&fuzz_data, &field_trial_string, &worker_queue);
+  std::unique_ptr<TaskQueueBase, TaskQueueDeleter> worker_queue =
+      GetTaskQueueFactory()->CreateTaskQueue("rtc-low-prio",
+                                             TaskQueueFactory::Priority::LOW);
+  auto apm = CreateApm(&fuzz_data, &field_trial_string, worker_queue.get());
 
   if (apm) {
     FuzzAudioProcessing(&fuzz_data, std::move(apm));