Move rtc::make_ref_counted to api/

Bug: webrtc:12701
Change-Id: If49095b101c1a1763c2a44a0284c0d670cce953f
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/265390
Reviewed-by: Mirko Bonadei <mbonadei@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Reviewed-by: Tomas Gunnarsson <tommi@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#37219}
diff --git a/api/make_ref_counted.h b/api/make_ref_counted.h
index e6bdf52..cc88717 100644
--- a/api/make_ref_counted.h
+++ b/api/make_ref_counted.h
@@ -10,9 +10,110 @@
 #ifndef API_MAKE_REF_COUNTED_H_
 #define API_MAKE_REF_COUNTED_H_
 
+#include <utility>
+
 #include "rtc_base/ref_counted_object.h"
 
-// TODO(bugs.webrtc.org/12701): Move implementation of make_ref_counted to this
-// file.
+namespace rtc {
+
+namespace webrtc_make_ref_counted_internal {
+// Determines if the given class has AddRef and Release methods.
+template <typename T>
+class HasAddRefAndRelease {
+ private:
+  template <typename C,
+            decltype(std::declval<C>().AddRef())* = nullptr,
+            decltype(std::declval<C>().Release())* = nullptr>
+  static int Test(int);
+  template <typename>
+  static char Test(...);
+
+ public:
+  static constexpr bool value = std::is_same_v<decltype(Test<T>(0)), int>;
+};
+}  // namespace webrtc_make_ref_counted_internal
+
+// General utilities for constructing a reference counted class and the
+// appropriate reference count implementation for that class.
+//
+// These utilities select either the `RefCountedObject` implementation or
+// `FinalRefCountedObject` depending on whether the to-be-shared class is
+// derived from the RefCountInterface interface or not (respectively).
+
+// `make_ref_counted`:
+//
+// Use this when you want to construct a reference counted object of type T and
+// get a `scoped_refptr<>` back. Example:
+//
+//   auto p = make_ref_counted<Foo>("bar", 123);
+//
+// For a class that inherits from RefCountInterface, this is equivalent to:
+//
+//   auto p = scoped_refptr<Foo>(new RefCountedObject<Foo>("bar", 123));
+//
+// If the class does not inherit from RefCountInterface, but does have
+// AddRef/Release methods (so a T* is convertible to rtc::scoped_refptr), this
+// is equivalent to just
+//
+//   auto p = scoped_refptr<Foo>(new Foo("bar", 123));
+//
+// Otherwise, the example is equivalent to:
+//
+//   auto p = scoped_refptr<FinalRefCountedObject<Foo>>(
+//       new FinalRefCountedObject<Foo>("bar", 123));
+//
+// In these cases, `make_ref_counted` reduces the amount of boilerplate code but
+// also helps with the most commonly intended usage of RefCountedObject whereby
+// methods for reference counting, are virtual and designed to satisfy the need
+// of an interface. When such a need does not exist, it is more efficient to use
+// the `FinalRefCountedObject` template, which does not add the vtable overhead.
+//
+// Note that in some cases, using RefCountedObject directly may still be what's
+// needed.
+
+// `make_ref_counted` for abstract classes that are convertible to
+// RefCountInterface. The is_abstract requirement rejects classes that inherit
+// both RefCountInterface and RefCounted object, which is a a discouraged
+// pattern, and would result in double inheritance of RefCountedObject if this
+// template was applied.
+template <
+    typename T,
+    typename... Args,
+    typename std::enable_if<std::is_convertible_v<T*, RefCountInterface*> &&
+                                std::is_abstract_v<T>,
+                            T>::type* = nullptr>
+scoped_refptr<T> make_ref_counted(Args&&... args) {
+  return scoped_refptr<T>(new RefCountedObject<T>(std::forward<Args>(args)...));
+}
+
+// `make_ref_counted` for complete classes that are not convertible to
+// RefCountInterface and already carry a ref count.
+template <
+    typename T,
+    typename... Args,
+    typename std::enable_if<
+        !std::is_convertible_v<T*, RefCountInterface*> &&
+            webrtc_make_ref_counted_internal::HasAddRefAndRelease<T>::value,
+        T>::type* = nullptr>
+scoped_refptr<T> make_ref_counted(Args&&... args) {
+  return scoped_refptr<T>(new T(std::forward<Args>(args)...));
+}
+
+// `make_ref_counted` for complete classes that are not convertible to
+// RefCountInterface and have no ref count of their own.
+template <
+    typename T,
+    typename... Args,
+    typename std::enable_if<
+        !std::is_convertible_v<T*, RefCountInterface*> &&
+            !webrtc_make_ref_counted_internal::HasAddRefAndRelease<T>::value,
+
+        T>::type* = nullptr>
+scoped_refptr<FinalRefCountedObject<T>> make_ref_counted(Args&&... args) {
+  return scoped_refptr<FinalRefCountedObject<T>>(
+      new FinalRefCountedObject<T>(std::forward<Args>(args)...));
+}
+
+}  // namespace rtc
 
 #endif  // API_MAKE_REF_COUNTED_H_
diff --git a/audio/audio_state.cc b/audio/audio_state.cc
index bd7cde7..6f248ac 100644
--- a/audio/audio_state.cc
+++ b/audio/audio_state.cc
@@ -20,7 +20,6 @@
 #include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 
 namespace webrtc {
diff --git a/audio/audio_state_unittest.cc b/audio/audio_state_unittest.cc
index 5f07a7b3..824a2ee 100644
--- a/audio/audio_state_unittest.cc
+++ b/audio/audio_state_unittest.cc
@@ -18,7 +18,6 @@
 #include "modules/audio_device/include/mock_audio_device.h"
 #include "modules/audio_mixer/audio_mixer_impl.h"
 #include "modules/audio_processing/include/mock_audio_processing.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gtest.h"
 
 namespace webrtc {
diff --git a/audio/channel_receive_frame_transformer_delegate_unittest.cc b/audio/channel_receive_frame_transformer_delegate_unittest.cc
index 075d8ae..e31dd9f 100644
--- a/audio/channel_receive_frame_transformer_delegate_unittest.cc
+++ b/audio/channel_receive_frame_transformer_delegate_unittest.cc
@@ -13,7 +13,6 @@
 #include <memory>
 #include <utility>
 
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/mock_frame_transformer.h"
diff --git a/audio/channel_send_frame_transformer_delegate_unittest.cc b/audio/channel_send_frame_transformer_delegate_unittest.cc
index 2ec78f8..9196bcb 100644
--- a/audio/channel_send_frame_transformer_delegate_unittest.cc
+++ b/audio/channel_send_frame_transformer_delegate_unittest.cc
@@ -13,7 +13,6 @@
 #include <memory>
 #include <utility>
 
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_queue_for_test.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
diff --git a/call/adaptation/BUILD.gn b/call/adaptation/BUILD.gn
index 336dd23..3c87920 100644
--- a/call/adaptation/BUILD.gn
+++ b/call/adaptation/BUILD.gn
@@ -33,6 +33,7 @@
   ]
   deps = [
     "../../api:field_trials_view",
+    "../../api:make_ref_counted",
     "../../api:rtp_parameters",
     "../../api:scoped_refptr",
     "../../api:sequence_checker",
@@ -115,12 +116,12 @@
     ]
     deps = [
       ":resource_adaptation",
+      "../../api:make_ref_counted",
       "../../api:scoped_refptr",
       "../../api:sequence_checker",
       "../../api/adaptation:resource_adaptation_api",
       "../../api/task_queue:task_queue",
       "../../api/video:video_stream_encoder",
-      "../../rtc_base:refcount",
       "../../rtc_base/task_utils:to_queued_task",
       "../../test:test_support",
     ]
diff --git a/call/adaptation/broadcast_resource_listener.cc b/call/adaptation/broadcast_resource_listener.cc
index 9d0a849..505036d 100644
--- a/call/adaptation/broadcast_resource_listener.cc
+++ b/call/adaptation/broadcast_resource_listener.cc
@@ -15,8 +15,8 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/synchronization/mutex.h"
 
 namespace webrtc {
diff --git a/call/adaptation/resource_adaptation_processor.cc b/call/adaptation/resource_adaptation_processor.cc
index 44fe472..2042424 100644
--- a/call/adaptation/resource_adaptation_processor.cc
+++ b/call/adaptation/resource_adaptation_processor.cc
@@ -20,7 +20,6 @@
 #include "api/video/video_adaptation_counters.h"
 #include "call/adaptation/video_stream_adapter.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 
diff --git a/call/adaptation/test/fake_resource.cc b/call/adaptation/test/fake_resource.cc
index 4515b0a..48b4768 100644
--- a/call/adaptation/test/fake_resource.cc
+++ b/call/adaptation/test/fake_resource.cc
@@ -14,7 +14,7 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
-#include "rtc_base/ref_counted_object.h"
+#include "api/make_ref_counted.h"
 
 namespace webrtc {
 
diff --git a/common_video/BUILD.gn b/common_video/BUILD.gn
index 3598afd..8aaea98 100644
--- a/common_video/BUILD.gn
+++ b/common_video/BUILD.gn
@@ -43,6 +43,7 @@
 
   deps = [
     "../api:array_view",
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../api:sequence_checker",
     "../api/task_queue",
diff --git a/common_video/include/video_frame_buffer.h b/common_video/include/video_frame_buffer.h
index 22b1148..066a75b 100644
--- a/common_video/include/video_frame_buffer.h
+++ b/common_video/include/video_frame_buffer.h
@@ -12,11 +12,11 @@
 #define COMMON_VIDEO_INCLUDE_VIDEO_FRAME_BUFFER_H_
 
 #include <stdint.h>
+
 #include <functional>
 
 #include "api/scoped_refptr.h"
 #include "api/video/video_frame_buffer.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/common_video/include/video_frame_buffer_pool.h b/common_video/include/video_frame_buffer_pool.h
index 80bf9e3..4155623 100644
--- a/common_video/include/video_frame_buffer_pool.h
+++ b/common_video/include/video_frame_buffer_pool.h
@@ -21,7 +21,6 @@
 #include "api/video/i444_buffer.h"
 #include "api/video/nv12_buffer.h"
 #include "rtc_base/race_checker.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/common_video/video_frame_buffer.cc b/common_video/video_frame_buffer.cc
index 34bb693..60433ae 100644
--- a/common_video/video_frame_buffer.cc
+++ b/common_video/video_frame_buffer.cc
@@ -9,9 +9,9 @@
  */
 #include "common_video/include/video_frame_buffer.h"
 
+#include "api/make_ref_counted.h"
 #include "api/video/i420_buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "third_party/libyuv/include/libyuv/convert.h"
 
 namespace webrtc {
diff --git a/common_video/video_frame_buffer_pool.cc b/common_video/video_frame_buffer_pool.cc
index c9d6ad2..5c2300e 100644
--- a/common_video/video_frame_buffer_pool.cc
+++ b/common_video/video_frame_buffer_pool.cc
@@ -12,6 +12,7 @@
 
 #include <limits>
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
 
 namespace webrtc {
diff --git a/examples/peerconnection/client/conductor.cc b/examples/peerconnection/client/conductor.cc
index de0face..965525a 100644
--- a/examples/peerconnection/client/conductor.cc
+++ b/examples/peerconnection/client/conductor.cc
@@ -40,7 +40,6 @@
 #include "pc/video_track_source.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/strings/json.h"
 #include "test/vcm_capturer.h"
diff --git a/examples/peerconnection/client/linux/main.cc b/examples/peerconnection/client/linux/main.cc
index fc76a85..051eda3 100644
--- a/examples/peerconnection/client/linux/main.cc
+++ b/examples/peerconnection/client/linux/main.cc
@@ -19,7 +19,6 @@
 #include "examples/peerconnection/client/linux/main_wnd.h"
 #include "examples/peerconnection/client/peer_connection_client.h"
 #include "rtc_base/physical_socket_server.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/ssl_adapter.h"
 #include "rtc_base/thread.h"
 #include "system_wrappers/include/field_trial.h"
diff --git a/modules/audio_coding/acm2/audio_coding_module_unittest.cc b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
index d548563..911bd50 100644
--- a/modules/audio_coding/acm2/audio_coding_module_unittest.cc
+++ b/modules/audio_coding/acm2/audio_coding_module_unittest.cc
@@ -43,7 +43,6 @@
 #include "rtc_base/message_digest.h"
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/platform_thread.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/system/arch.h"
 #include "rtc_base/thread_annotations.h"
diff --git a/modules/audio_coding/neteq/decoder_database_unittest.cc b/modules/audio_coding/neteq/decoder_database_unittest.cc
index ad86d91..445c219 100644
--- a/modules/audio_coding/neteq/decoder_database_unittest.cc
+++ b/modules/audio_coding/neteq/decoder_database_unittest.cc
@@ -15,7 +15,6 @@
 #include <string>
 
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/mock_audio_decoder.h"
diff --git a/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc b/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
index 2b4ae7e..cf310d1 100644
--- a/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc
@@ -23,7 +23,6 @@
 #include "modules/audio_coding/neteq/tools/input_audio_file.h"
 #include "modules/audio_coding/neteq/tools/neteq_test.h"
 #include "rtc_base/numerics/safe_conversions.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/audio_decoder_proxy_factory.h"
 #include "test/gtest.h"
 #include "test/testsupport/file_utils.h"
diff --git a/modules/audio_coding/neteq/neteq_network_stats_unittest.cc b/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
index 2c68501..a669ad7 100644
--- a/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
+++ b/modules/audio_coding/neteq/neteq_network_stats_unittest.cc
@@ -17,7 +17,6 @@
 #include "api/neteq/neteq.h"
 #include "modules/audio_coding/neteq/default_neteq_factory.h"
 #include "modules/audio_coding/neteq/tools/rtp_generator.h"
-#include "rtc_base/ref_counted_object.h"
 #include "system_wrappers/include/clock.h"
 #include "test/audio_decoder_proxy_factory.h"
 #include "test/gmock.h"
diff --git a/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
index 1a0ea15..9026162 100644
--- a/modules/audio_coding/neteq/tools/neteq_test_factory.cc
+++ b/modules/audio_coding/neteq/tools/neteq_test_factory.cc
@@ -39,7 +39,6 @@
 #include "modules/audio_coding/neteq/tools/output_wav_file.h"
 #include "modules/audio_coding/neteq/tools/rtp_file_source.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/function_audio_decoder_factory.h"
 #include "test/testsupport/file_utils.h"
 
diff --git a/modules/audio_device/BUILD.gn b/modules/audio_device/BUILD.gn
index 0a67a4b..b376955b 100644
--- a/modules/audio_device/BUILD.gn
+++ b/modules/audio_device/BUILD.gn
@@ -152,6 +152,7 @@
       ":audio_device_api",
       ":audio_device_buffer",
       ":windows_core_audio_utility",
+      "../../api:make_ref_counted",
       "../../api:scoped_refptr",
       "../../api:sequence_checker",
       "../../api/task_queue",
@@ -159,7 +160,6 @@
       "../../rtc_base:logging",
       "../../rtc_base:macromagic",
       "../../rtc_base:platform_thread",
-      "../../rtc_base:refcount",
       "../../rtc_base:safe_conversions",
       "../../rtc_base:stringutils",
       "../../rtc_base:timeutils",
@@ -180,6 +180,7 @@
     ":audio_device_default",
     ":audio_device_generic",
     "../../api:array_view",
+    "../../api:make_ref_counted",
     "../../api:refcountedbase",
     "../../api:scoped_refptr",
     "../../api:sequence_checker",
@@ -193,7 +194,6 @@
     "../../rtc_base:macromagic",
     "../../rtc_base:platform_thread",
     "../../rtc_base:random",
-    "../../rtc_base:refcount",
     "../../rtc_base:rtc_event",
     "../../rtc_base:rtc_task_queue",
     "../../rtc_base:safe_conversions",
@@ -396,7 +396,7 @@
     ":audio_device",
     ":audio_device_buffer",
     ":audio_device_impl",
-    "../../rtc_base:refcount",
+    "../../api:make_ref_counted",
     "../../test:test_support",
   ]
 }
diff --git a/modules/audio_device/audio_device_data_observer.cc b/modules/audio_device/audio_device_data_observer.cc
index e54494c..3775e7c 100644
--- a/modules/audio_device/audio_device_data_observer.cc
+++ b/modules/audio_device/audio_device_data_observer.cc
@@ -10,9 +10,9 @@
 
 #include "modules/audio_device/include/audio_device_data_observer.h"
 
+#include "api/make_ref_counted.h"
 #include "modules/audio_device/include/audio_device_defines.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_device/audio_device_impl.cc b/modules/audio_device/audio_device_impl.cc
index 01a8a25..092b98f 100644
--- a/modules/audio_device/audio_device_impl.cc
+++ b/modules/audio_device/audio_device_impl.cc
@@ -12,12 +12,12 @@
 
 #include <stddef.h>
 
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "modules/audio_device/audio_device_config.h"  // IWYU pragma: keep
 #include "modules/audio_device/audio_device_generic.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "system_wrappers/include/metrics.h"
 
 #if defined(_WIN32)
diff --git a/modules/audio_device/include/mock_audio_device.h b/modules/audio_device/include/mock_audio_device.h
index 8483aa3..73fbdd5 100644
--- a/modules/audio_device/include/mock_audio_device.h
+++ b/modules/audio_device/include/mock_audio_device.h
@@ -13,8 +13,8 @@
 
 #include <string>
 
+#include "api/make_ref_counted.h"
 #include "modules/audio_device/include/audio_device.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 
 namespace webrtc {
diff --git a/modules/audio_device/include/test_audio_device.cc b/modules/audio_device/include/test_audio_device.cc
index d8ab22f..d18ed99 100644
--- a/modules/audio_device/include/test_audio_device.cc
+++ b/modules/audio_device/include/test_audio_device.cc
@@ -19,6 +19,7 @@
 #include <vector>
 
 #include "api/array_view.h"
+#include "api/make_ref_counted.h"
 #include "common_audio/wav_file.h"
 #include "modules/audio_device/include/audio_device_default.h"
 #include "rtc_base/buffer.h"
@@ -28,7 +29,6 @@
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/platform_thread.h"
 #include "rtc_base/random.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/synchronization/mutex.h"
 #include "rtc_base/task_queue.h"
 #include "rtc_base/task_utils/repeating_task.h"
diff --git a/modules/audio_device/win/audio_device_core_win.cc b/modules/audio_device/win/audio_device_core_win.cc
index a5f1f14..1e3a94e 100644
--- a/modules/audio_device/win/audio_device_core_win.cc
+++ b/modules/audio_device/win/audio_device_core_win.cc
@@ -41,10 +41,10 @@
 
 #include <iomanip>
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/platform_thread.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/string_utils.h"
 #include "rtc_base/thread_annotations.h"
 #include "system_wrappers/include/sleep.h"
diff --git a/modules/audio_device/win/audio_device_module_win.cc b/modules/audio_device/win/audio_device_module_win.cc
index 6643d84..a36c407 100644
--- a/modules/audio_device/win/audio_device_module_win.cc
+++ b/modules/audio_device/win/audio_device_module_win.cc
@@ -13,12 +13,12 @@
 #include <memory>
 #include <utility>
 
+#include "api/make_ref_counted.h"
 #include "api/sequence_checker.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "modules/audio_device/include/audio_device.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/string_utils.h"
 
 namespace webrtc {
diff --git a/modules/audio_mixer/audio_mixer_impl.cc b/modules/audio_mixer/audio_mixer_impl.cc
index 8cebc38..73a6e3a 100644
--- a/modules/audio_mixer/audio_mixer_impl.cc
+++ b/modules/audio_mixer/audio_mixer_impl.cc
@@ -21,7 +21,6 @@
 #include "modules/audio_mixer/default_output_rate_calculator.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_processing/BUILD.gn b/modules/audio_processing/BUILD.gn
index a3ab4ec..649ed21 100644
--- a/modules/audio_processing/BUILD.gn
+++ b/modules/audio_processing/BUILD.gn
@@ -170,6 +170,7 @@
     ":rms_level",
     "../../api:array_view",
     "../../api:function_view",
+    "../../api:make_ref_counted",
     "../../api/audio:aec3_config",
     "../../api/audio:audio_frame_api",
     "../../api/audio:echo_control",
@@ -183,7 +184,6 @@
     "../../rtc_base:ignore_wundef",
     "../../rtc_base:logging",
     "../../rtc_base:macromagic",
-    "../../rtc_base:refcount",
     "../../rtc_base:safe_minmax",
     "../../rtc_base:sanitizer",
     "../../rtc_base:swap_queue",
@@ -373,6 +373,7 @@
         ":high_pass_filter",
         ":mocks",
         "../../api:array_view",
+        "../../api:make_ref_counted",
         "../../api:scoped_refptr",
         "../../api/audio:aec3_config",
         "../../api/audio:aec3_factory",
@@ -387,7 +388,6 @@
         "../../rtc_base:platform_thread",
         "../../rtc_base:protobuf_utils",
         "../../rtc_base:random",
-        "../../rtc_base:refcount",
         "../../rtc_base:rtc_base_tests_utils",
         "../../rtc_base:rtc_event",
         "../../rtc_base:safe_conversions",
@@ -640,7 +640,6 @@
     "../../common_audio",
     "../../rtc_base:checks",
     "../../rtc_base:random",
-    "../../rtc_base:refcount",
     "../../rtc_base/system:arch",
     "../../system_wrappers",
     "../../test:fileutils",
diff --git a/modules/audio_processing/audio_processing_builder_impl.cc b/modules/audio_processing/audio_processing_builder_impl.cc
index 79c6fbf..a246448 100644
--- a/modules/audio_processing/audio_processing_builder_impl.cc
+++ b/modules/audio_processing/audio_processing_builder_impl.cc
@@ -8,12 +8,11 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-#include "modules/audio_processing/include/audio_processing.h"
-
 #include <memory>
 
+#include "api/make_ref_counted.h"
 #include "modules/audio_processing/audio_processing_impl.h"
-#include "rtc_base/ref_counted_object.h"
+#include "modules/audio_processing/include/audio_processing.h"
 
 namespace webrtc {
 
diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc
index a36fc4a..fa5e929 100644
--- a/modules/audio_processing/audio_processing_impl.cc
+++ b/modules/audio_processing/audio_processing_impl.cc
@@ -31,7 +31,6 @@
 #include "rtc_base/atomic_ops.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/trace_event.h"
 #include "system_wrappers/include/denormal_disabler.h"
diff --git a/modules/audio_processing/audio_processing_impl_unittest.cc b/modules/audio_processing/audio_processing_impl_unittest.cc
index 33d46fb..7d617bf 100644
--- a/modules/audio_processing/audio_processing_impl_unittest.cc
+++ b/modules/audio_processing/audio_processing_impl_unittest.cc
@@ -13,6 +13,7 @@
 #include <array>
 #include <memory>
 
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "modules/audio_processing/include/audio_processing.h"
 #include "modules/audio_processing/optionally_built_submodule_creators.h"
@@ -22,7 +23,6 @@
 #include "modules/audio_processing/test/test_utils.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/random.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
diff --git a/modules/audio_processing/audio_processing_unittest.cc b/modules/audio_processing/audio_processing_unittest.cc
index e26548a..e0512c9 100644
--- a/modules/audio_processing/audio_processing_unittest.cc
+++ b/modules/audio_processing/audio_processing_unittest.cc
@@ -21,6 +21,7 @@
 
 #include "absl/flags/flag.h"
 #include "api/audio/echo_detector_creator.h"
+#include "api/make_ref_counted.h"
 #include "common_audio/include/audio_util.h"
 #include "common_audio/resampler/include/push_resampler.h"
 #include "common_audio/resampler/push_sinc_resampler.h"
@@ -39,7 +40,6 @@
 #include "rtc_base/numerics/safe_conversions.h"
 #include "rtc_base/numerics/safe_minmax.h"
 #include "rtc_base/protobuf_utils.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/swap_queue.h"
 #include "rtc_base/system/arch.h"
diff --git a/modules/audio_processing/residual_echo_detector_unittest.cc b/modules/audio_processing/residual_echo_detector_unittest.cc
index a5f1409..d8c227a 100644
--- a/modules/audio_processing/residual_echo_detector_unittest.cc
+++ b/modules/audio_processing/residual_echo_detector_unittest.cc
@@ -12,7 +12,7 @@
 
 #include <vector>
 
-#include "rtc_base/ref_counted_object.h"
+#include "api/make_ref_counted.h"
 #include "test/gtest.h"
 
 namespace webrtc {
diff --git a/modules/audio_processing/test/audio_processing_builder_for_testing.cc b/modules/audio_processing/test/audio_processing_builder_for_testing.cc
index 72f75ed..6bd266d 100644
--- a/modules/audio_processing/test/audio_processing_builder_for_testing.cc
+++ b/modules/audio_processing/test/audio_processing_builder_for_testing.cc
@@ -14,7 +14,6 @@
 #include <utility>
 
 #include "modules/audio_processing/audio_processing_impl.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/modules/desktop_capture/BUILD.gn b/modules/desktop_capture/BUILD.gn
index f83960f..64ce1a2 100644
--- a/modules/desktop_capture/BUILD.gn
+++ b/modules/desktop_capture/BUILD.gn
@@ -490,6 +490,7 @@
   deps = [
     ":primitives",
     "../../api:function_view",
+    "../../api:make_ref_counted",
     "../../api:refcountedbase",
     "../../api:scoped_refptr",
     "../../api:sequence_checker",
@@ -499,7 +500,6 @@
     "../../rtc_base:logging",
     "../../rtc_base:macromagic",
     "../../rtc_base:random",
-    "../../rtc_base:refcount",
     "../../rtc_base:stringutils",
     "../../rtc_base:timeutils",
     "../../rtc_base/synchronization:mutex",
diff --git a/modules/desktop_capture/desktop_capture_options.cc b/modules/desktop_capture/desktop_capture_options.cc
index ab79321..22c59ef 100644
--- a/modules/desktop_capture/desktop_capture_options.cc
+++ b/modules/desktop_capture/desktop_capture_options.cc
@@ -9,6 +9,9 @@
  */
 
 #include "modules/desktop_capture/desktop_capture_options.h"
+
+#include "api/make_ref_counted.h"
+
 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS)
 #include "modules/desktop_capture/mac/full_screen_mac_application_handler.h"
 #elif defined(WEBRTC_WIN)
@@ -18,8 +21,6 @@
 #include "modules/desktop_capture/linux/wayland/shared_screencast_stream.h"
 #endif
 
-#include "rtc_base/ref_counted_object.h"
-
 namespace webrtc {
 
 DesktopCaptureOptions::DesktopCaptureOptions() {}
diff --git a/modules/video_capture/linux/video_capture_linux.cc b/modules/video_capture/linux/video_capture_linux.cc
index 2bc889f..b6c4017 100644
--- a/modules/video_capture/linux/video_capture_linux.cc
+++ b/modules/video_capture/linux/video_capture_linux.cc
@@ -27,7 +27,6 @@
 #include "modules/video_capture/linux/video_capture_v4l2.h"
 #include "modules/video_capture/video_capture.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 namespace videocapturemodule {
diff --git a/modules/video_capture/linux/video_capture_v4l2.cc b/modules/video_capture/linux/video_capture_v4l2.cc
index 6bd3823..2655fbe 100644
--- a/modules/video_capture/linux/video_capture_v4l2.cc
+++ b/modules/video_capture/linux/video_capture_v4l2.cc
@@ -28,7 +28,6 @@
 #include "media/base/video_common.h"
 #include "modules/video_capture/video_capture.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 namespace videocapturemodule {
diff --git a/modules/video_capture/video_capture_impl.cc b/modules/video_capture/video_capture_impl.cc
index 6619d15..fcee2be 100644
--- a/modules/video_capture/video_capture_impl.cc
+++ b/modules/video_capture/video_capture_impl.cc
@@ -18,7 +18,6 @@
 #include "common_video/libyuv/include/webrtc_libyuv.h"
 #include "modules/video_capture/video_capture_config.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/trace_event.h"
 #include "third_party/libyuv/include/libyuv.h"
diff --git a/modules/video_capture/windows/video_capture_factory_windows.cc b/modules/video_capture/windows/video_capture_factory_windows.cc
index 34cc982..481326c 100644
--- a/modules/video_capture/windows/video_capture_factory_windows.cc
+++ b/modules/video_capture/windows/video_capture_factory_windows.cc
@@ -10,7 +10,6 @@
 
 #include "api/scoped_refptr.h"
 #include "modules/video_capture/windows/video_capture_ds.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 namespace videocapturemodule {
diff --git a/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc b/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
index b64b3a0..be0f5de 100644
--- a/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
+++ b/modules/video_coding/codecs/multiplex/test/multiplex_adapter_unittest.cc
@@ -38,7 +38,6 @@
 #include "modules/video_coding/codecs/vp9/include/vp9.h"
 #include "modules/video_coding/include/video_codec_interface.h"
 #include "modules/video_coding/include/video_error_codes.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 #include "test/video_codec_settings.h"
diff --git a/modules/video_coding/utility/bandwidth_quality_scaler.h b/modules/video_coding/utility/bandwidth_quality_scaler.h
index 2816e58..f35d607 100644
--- a/modules/video_coding/utility/bandwidth_quality_scaler.h
+++ b/modules/video_coding/utility/bandwidth_quality_scaler.h
@@ -26,7 +26,6 @@
 #include "rtc_base/numerics/exp_filter.h"
 #include "rtc_base/rate_statistics.h"
 #include "rtc_base/ref_count.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/task_queue.h"
 #include "rtc_base/weak_ptr.h"
diff --git a/modules/video_coding/utility/quality_scaler.h b/modules/video_coding/utility/quality_scaler.h
index aae5ce5..898bb72 100644
--- a/modules/video_coding/utility/quality_scaler.h
+++ b/modules/video_coding/utility/quality_scaler.h
@@ -23,7 +23,6 @@
 #include "rtc_base/experiments/quality_scaling_experiment.h"
 #include "rtc_base/numerics/moving_average.h"
 #include "rtc_base/ref_count.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/task_queue.h"
 
diff --git a/modules/video_coding/video_codec_initializer_unittest.cc b/modules/video_coding/video_codec_initializer_unittest.cc
index 85efa46..0e6f2df 100644
--- a/modules/video_coding/video_codec_initializer_unittest.cc
+++ b/modules/video_coding/video_codec_initializer_unittest.cc
@@ -27,7 +27,6 @@
 #include "api/video_codecs/vp8_temporal_layers_factory.h"
 #include "modules/video_coding/codecs/vp9/include/vp9_globals.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
diff --git a/net/dcsctp/socket/BUILD.gn b/net/dcsctp/socket/BUILD.gn
index 7d5c5f2..4b6ab02 100644
--- a/net/dcsctp/socket/BUILD.gn
+++ b/net/dcsctp/socket/BUILD.gn
@@ -133,13 +133,13 @@
     ":stream_reset_handler",
     ":transmission_control_block",
     "../../../api:array_view",
+    "../../../api:make_ref_counted",
     "../../../api:refcountedbase",
     "../../../api:scoped_refptr",
     "../../../api:sequence_checker",
     "../../../api/task_queue:task_queue",
     "../../../rtc_base:checks",
     "../../../rtc_base:logging",
-    "../../../rtc_base:refcount",
     "../../../rtc_base:stringutils",
     "../common:internal_types",
     "../packet:bounded_io",
diff --git a/net/dcsctp/socket/callback_deferrer.cc b/net/dcsctp/socket/callback_deferrer.cc
index 34d809c..f673f31 100644
--- a/net/dcsctp/socket/callback_deferrer.cc
+++ b/net/dcsctp/socket/callback_deferrer.cc
@@ -9,6 +9,8 @@
  */
 #include "net/dcsctp/socket/callback_deferrer.h"
 
+#include "api/make_ref_counted.h"
+
 namespace dcsctp {
 namespace {
 // A wrapper around the move-only DcSctpMessage, to let it be captured in a
diff --git a/net/dcsctp/socket/callback_deferrer.h b/net/dcsctp/socket/callback_deferrer.h
index 863093c..a7490d3 100644
--- a/net/dcsctp/socket/callback_deferrer.h
+++ b/net/dcsctp/socket/callback_deferrer.h
@@ -24,7 +24,6 @@
 #include "api/task_queue/task_queue_base.h"
 #include "net/dcsctp/public/dcsctp_message.h"
 #include "net/dcsctp/public/dcsctp_socket.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace dcsctp {
 // Defers callbacks until they can be safely triggered.
diff --git a/p2p/BUILD.gn b/p2p/BUILD.gn
index 4874350..8cd16eb 100644
--- a/p2p/BUILD.gn
+++ b/p2p/BUILD.gn
@@ -90,6 +90,7 @@
     "../api:async_dns_resolver",
     "../api:field_trials_view",
     "../api:libjingle_peerconnection_api",
+    "../api:make_ref_counted",
     "../api:packet_socket_factory",
     "../api:rtc_error",
     "../api:scoped_refptr",
@@ -273,7 +274,6 @@
       "../rtc_base:macromagic",
       "../rtc_base:net_helpers",
       "../rtc_base:network_constants",
-      "../rtc_base:refcount",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:socket",
       "../rtc_base:socket_address",
diff --git a/p2p/base/default_ice_transport_factory.cc b/p2p/base/default_ice_transport_factory.cc
index 8d87d66..313d608 100644
--- a/p2p/base/default_ice_transport_factory.cc
+++ b/p2p/base/default_ice_transport_factory.cc
@@ -12,6 +12,7 @@
 
 #include <utility>
 
+#include "api/make_ref_counted.h"
 #include "p2p/base/basic_ice_controller.h"
 #include "p2p/base/ice_controller_factory_interface.h"
 
diff --git a/p2p/base/regathering_controller_unittest.cc b/p2p/base/regathering_controller_unittest.cc
index 1617b92..3a487b5 100644
--- a/p2p/base/regathering_controller_unittest.cc
+++ b/p2p/base/regathering_controller_unittest.cc
@@ -22,7 +22,6 @@
 #include "p2p/base/port.h"
 #include "p2p/base/stun_server.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/virtual_socket_server.h"
diff --git a/pc/BUILD.gn b/pc/BUILD.gn
index 435c8bd..148ade0 100644
--- a/pc/BUILD.gn
+++ b/pc/BUILD.gn
@@ -50,7 +50,6 @@
     "../api/task_queue",
     "../rtc_base:event_tracer",
     "../rtc_base:location",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_event",
     "../rtc_base:stringutils",
     "../rtc_base:threading",
@@ -147,6 +146,7 @@
   deps = [
     ":ice_transport",
     "../api:libjingle_peerconnection_api",
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../api:sequence_checker",
     "../p2p:rtc_p2p",
@@ -154,7 +154,6 @@
     "../rtc_base:checks",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/synchronization:mutex",
   ]
@@ -223,7 +222,6 @@
     "../rtc_base:event_tracer",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:stringutils",
     "../rtc_base:threading",
   ]
@@ -293,7 +291,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/third_party/sigslot",
   ]
@@ -870,7 +867,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
     "../rtc_base:threading",
     "../rtc_base:threading",
@@ -1119,7 +1115,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_operations_chain",
     "../rtc_base:stringutils",
     "../rtc_base:threading",
@@ -1150,7 +1145,6 @@
     "../api:audio_options_api",
     "../api:media_stream_interface",
     "../api:scoped_refptr",
-    "../rtc_base:refcount",
   ]
 }
 rtc_source_set("peer_connection") {
@@ -1220,7 +1214,6 @@
     "../rtc_base:logging",
     "../rtc_base:macromagic",
     "../rtc_base:network_constants",
-    "../rtc_base:refcount",
     "../rtc_base:socket_address",
     "../rtc_base:stringutils",
     "../rtc_base:threading",
@@ -1400,7 +1393,6 @@
     "../rtc_base:checks",
     "../rtc_base:location",
     "../rtc_base:logging",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
     "../rtc_base:stringutils",
     "../rtc_base:threading",
@@ -1494,7 +1486,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
     "../rtc_base:safe_conversions",
     "../rtc_base:threading",
@@ -1572,7 +1563,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/task_utils:pending_task_safety_flag",
     "../rtc_base/task_utils:to_queued_task",
@@ -1616,7 +1606,6 @@
     "../rtc_base:checks",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base:weak_ptr",
     "../rtc_base/third_party/sigslot",
@@ -1667,7 +1656,6 @@
     "../media:rtc_media_base",
     "../rtc_base:checks",
     "../rtc_base:logging",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
     "../rtc_base:threading",
   ]
@@ -1704,7 +1692,6 @@
     "../rtc_base:checks",
     "../rtc_base:location",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/system:no_unique_address",
     "../rtc_base/task_utils:pending_task_safety_flag",
@@ -1746,7 +1733,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/system:no_unique_address",
   ]
@@ -1788,7 +1774,6 @@
     "../api:scoped_refptr",
     "../api:sequence_checker",
     "../rtc_base:checks",
-    "../rtc_base:refcount",
     "../rtc_base/system:no_unique_address",
   ]
 }
@@ -1810,7 +1795,6 @@
     "../rtc_base:checks",
     "../rtc_base:location",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:threading",
     "../rtc_base/system:no_unique_address",
   ]
@@ -1894,7 +1878,6 @@
     "../rtc_base:location",
     "../rtc_base:logging",
     "../rtc_base:macromagic",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
     "../rtc_base:threading",
     "../rtc_base/synchronization:mutex",
@@ -1972,7 +1955,6 @@
     "../api:media_stream_interface",
     "../api:scoped_refptr",
     "../rtc_base:checks",
-    "../rtc_base:refcount",
     "../rtc_base:rtc_base",
   ]
   absl_deps = [
@@ -2081,6 +2063,8 @@
       "../api:audio_options_api",
       "../api:ice_transport_factory",
       "../api:libjingle_peerconnection_api",
+      "../api:make_ref_counted",
+      "../api:make_ref_counted",
       "../api:rtc_error",
       "../api:rtp_headers",
       "../api:rtp_parameters",
@@ -2111,7 +2095,6 @@
       "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
-      "../rtc_base:refcount",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:socket_address",
       "../rtc_base:stringutils",
@@ -2177,7 +2160,6 @@
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
       "../rtc_base:location",
-      "../rtc_base:refcount",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:socket_address",
       "../rtc_base:socket_factory",
@@ -2209,7 +2191,6 @@
       "../rtc_base:checks",
       "../rtc_base:gunit_helpers",
       "../rtc_base:logging",
-      "../rtc_base:refcount",
       "../test:test_support",
     ]
   }
@@ -2343,6 +2324,7 @@
       "../api:function_view",
       "../api:libjingle_logging_api",
       "../api:libjingle_peerconnection_api",
+      "../api:make_ref_counted",
       "../api:media_stream_interface",
       "../api:mock_encoder_selector",
       "../api:mock_video_track",
@@ -2583,7 +2565,6 @@
       "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
-      "../rtc_base:refcount",
       "../rtc_base:rtc_base_tests_utils",
       "../rtc_base:rtc_event",
       "../rtc_base:rtc_json",
@@ -2658,6 +2639,7 @@
       "../api:field_trials_view",
       "../api:field_trials_view",
       "../api:libjingle_peerconnection_api",
+      "../api:make_ref_counted",
       "../api:media_stream_interface",
       "../api:rtc_error",
       "../api:rtc_stats_api",
@@ -2689,7 +2671,6 @@
       "../rtc_base:location",
       "../rtc_base:logging",
       "../rtc_base:macromagic",
-      "../rtc_base:refcount",
       "../rtc_base:rtc_task_queue",
       "../rtc_base:stringutils",
       "../rtc_base:task_queue_for_test",
diff --git a/pc/audio_rtp_receiver.cc b/pc/audio_rtp_receiver.cc
index 4234a65..1dd6a41 100644
--- a/pc/audio_rtp_receiver.cc
+++ b/pc/audio_rtp_receiver.cc
@@ -21,7 +21,6 @@
 #include "pc/media_stream_track_proxy.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 
 namespace webrtc {
diff --git a/pc/audio_rtp_receiver.h b/pc/audio_rtp_receiver.h
index 281ba69..c643be6 100644
--- a/pc/audio_rtp_receiver.h
+++ b/pc/audio_rtp_receiver.h
@@ -33,7 +33,6 @@
 #include "pc/media_stream_track_proxy.h"
 #include "pc/remote_audio_source.h"
 #include "pc/rtp_receiver.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/task_utils/pending_task_safety_flag.h"
 #include "rtc_base/thread.h"
diff --git a/pc/audio_rtp_receiver_unittest.cc b/pc/audio_rtp_receiver_unittest.cc
index 91652f1..bab6b74 100644
--- a/pc/audio_rtp_receiver_unittest.cc
+++ b/pc/audio_rtp_receiver_unittest.cc
@@ -14,7 +14,6 @@
 
 #include "pc/test/mock_voice_media_channel.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
diff --git a/pc/audio_track.cc b/pc/audio_track.cc
index aa4d473..c012442 100644
--- a/pc/audio_track.cc
+++ b/pc/audio_track.cc
@@ -11,7 +11,6 @@
 #include "pc/audio_track.h"
 
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/pc/dtls_transport.cc b/pc/dtls_transport.cc
index c9f3279..15eed9e 100644
--- a/pc/dtls_transport.cc
+++ b/pc/dtls_transport.cc
@@ -14,11 +14,11 @@
 
 #include "absl/types/optional.h"
 #include "api/dtls_transport_interface.h"
+#include "api/make_ref_counted.h"
 #include "api/sequence_checker.h"
 #include "pc/ice_transport.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/ssl_stream_adapter.h"
 
 namespace webrtc {
diff --git a/pc/dtls_transport_unittest.cc b/pc/dtls_transport_unittest.cc
index 4d48920..c234176 100644
--- a/pc/dtls_transport_unittest.cc
+++ b/pc/dtls_transport_unittest.cc
@@ -14,12 +14,12 @@
 #include <vector>
 
 #include "absl/types/optional.h"
+#include "api/make_ref_counted.h"
 #include "api/rtc_error.h"
 #include "p2p/base/fake_dtls_transport.h"
 #include "p2p/base/p2p_constants.h"
 #include "rtc_base/fake_ssl_identity.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/ssl_identity.h"
 #include "test/gmock.h"
diff --git a/pc/dtmf_sender.cc b/pc/dtmf_sender.cc
index 8b82c31..b28c005 100644
--- a/pc/dtmf_sender.cc
+++ b/pc/dtmf_sender.cc
@@ -15,7 +15,6 @@
 
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread.h"
 
diff --git a/pc/ice_transport_unittest.cc b/pc/ice_transport_unittest.cc
index 2862599..51829dc 100644
--- a/pc/ice_transport_unittest.cc
+++ b/pc/ice_transport_unittest.cc
@@ -14,10 +14,10 @@
 #include <utility>
 
 #include "api/ice_transport_factory.h"
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "p2p/base/fake_ice_transport.h"
 #include "p2p/base/fake_port_allocator.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gtest.h"
 
 namespace webrtc {
diff --git a/pc/jsep_transport.cc b/pc/jsep_transport.cc
index 65dd703..a2ac757 100644
--- a/pc/jsep_transport.cc
+++ b/pc/jsep_transport.cc
@@ -26,7 +26,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/copy_on_write_buffer.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/trace_event.h"
 
diff --git a/pc/jsep_transport_controller.h b/pc/jsep_transport_controller.h
index ccb7426..4779bf9 100644
--- a/pc/jsep_transport_controller.h
+++ b/pc/jsep_transport_controller.h
@@ -60,7 +60,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/copy_on_write_buffer.h"
 #include "rtc_base/helpers.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_stream_adapter.h"
diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc
index 0fbdff5..ce8d161 100644
--- a/pc/jsep_transport_controller_unittest.cc
+++ b/pc/jsep_transport_controller_unittest.cc
@@ -27,7 +27,6 @@
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/net_helper.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_fingerprint.h"
 #include "rtc_base/ssl_identity.h"
diff --git a/pc/jsep_transport_unittest.cc b/pc/jsep_transport_unittest.cc
index 630a189..d0cdb75 100644
--- a/pc/jsep_transport_unittest.cc
+++ b/pc/jsep_transport_unittest.cc
@@ -31,7 +31,6 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/net_helper.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_identity.h"
diff --git a/pc/local_audio_source.cc b/pc/local_audio_source.cc
index 3fcad50..51949f7 100644
--- a/pc/local_audio_source.cc
+++ b/pc/local_audio_source.cc
@@ -10,8 +10,6 @@
 
 #include "pc/local_audio_source.h"
 
-#include "rtc_base/ref_counted_object.h"
-
 using webrtc::MediaSourceInterface;
 
 namespace webrtc {
diff --git a/pc/media_stream.cc b/pc/media_stream.cc
index df230e4..57be76c 100644
--- a/pc/media_stream.cc
+++ b/pc/media_stream.cc
@@ -15,7 +15,6 @@
 #include <utility>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index 2f5806e..a95e3aa 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -57,7 +57,6 @@
 #include "rtc_base/net_helper.h"
 #include "rtc_base/network.h"
 #include "rtc_base/network_constants.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/string_encode.h"
 #include "rtc_base/task_utils/to_queued_task.h"
diff --git a/pc/peer_connection_adaptation_integrationtest.cc b/pc/peer_connection_adaptation_integrationtest.cc
index 5dc26e0..5fbce9e 100644
--- a/pc/peer_connection_adaptation_integrationtest.cc
+++ b/pc/peer_connection_adaptation_integrationtest.cc
@@ -30,7 +30,6 @@
 #include "pc/test/peer_connection_test_wrapper.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/virtual_socket_server.h"
diff --git a/pc/peer_connection_crypto_unittest.cc b/pc/peer_connection_crypto_unittest.cc
index d87d0b0..5ed9343 100644
--- a/pc/peer_connection_crypto_unittest.cc
+++ b/pc/peer_connection_crypto_unittest.cc
@@ -43,7 +43,6 @@
 #include "pc/session_description.h"
 #include "pc/test/mock_peer_connection_observers.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/ssl_fingerprint.h"
diff --git a/pc/peer_connection_end_to_end_unittest.cc b/pc/peer_connection_end_to_end_unittest.cc
index 1d0f4ec..e6ded0c 100644
--- a/pc/peer_connection_end_to_end_unittest.cc
+++ b/pc/peer_connection_end_to_end_unittest.cc
@@ -43,7 +43,6 @@
 #include "rtc_base/copy_on_write_buffer.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/physical_socket_server.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 #include "rtc_base/thread.h"
 #include "test/gmock.h"
diff --git a/pc/peer_connection_factory.cc b/pc/peer_connection_factory.cc
index 9bc8b37..276d7ef 100644
--- a/pc/peer_connection_factory.cc
+++ b/pc/peer_connection_factory.cc
@@ -49,7 +49,6 @@
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/safe_conversions.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/system/file_wrapper.h"
 
diff --git a/pc/peer_connection_histogram_unittest.cc b/pc/peer_connection_histogram_unittest.cc
index da2ff40..656b022 100644
--- a/pc/peer_connection_histogram_unittest.cc
+++ b/pc/peer_connection_histogram_unittest.cc
@@ -43,7 +43,6 @@
 #include "rtc_base/fake_network.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/mdns_responder_interface.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/virtual_socket_server.h"
diff --git a/pc/peer_connection_ice_unittest.cc b/pc/peer_connection_ice_unittest.cc
index c7eecc9..e3d857d 100644
--- a/pc/peer_connection_ice_unittest.cc
+++ b/pc/peer_connection_ice_unittest.cc
@@ -50,7 +50,6 @@
 #include "rtc_base/ip_address.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/net_helper.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/thread.h"
diff --git a/pc/peer_connection_integrationtest.cc b/pc/peer_connection_integrationtest.cc
index 6358bce..9811392 100644
--- a/pc/peer_connection_integrationtest.cc
+++ b/pc/peer_connection_integrationtest.cc
@@ -83,7 +83,6 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_fingerprint.h"
diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc
index 20badb3..565d898 100644
--- a/pc/peer_connection_interface_unittest.cc
+++ b/pc/peer_connection_interface_unittest.cc
@@ -72,7 +72,6 @@
 #include "pc/video_track.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/thread.h"
diff --git a/pc/peer_connection_rampup_tests.cc b/pc/peer_connection_rampup_tests.cc
index ff28906..3fed5ee 100644
--- a/pc/peer_connection_rampup_tests.cc
+++ b/pc/peer_connection_rampup_tests.cc
@@ -46,7 +46,6 @@
 #include "rtc_base/gunit.h"
 #include "rtc_base/helpers.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/socket_factory.h"
 #include "rtc_base/ssl_certificate.h"
diff --git a/pc/peer_connection_rtp_unittest.cc b/pc/peer_connection_rtp_unittest.cc
index 6382a30..268101a 100644
--- a/pc/peer_connection_rtp_unittest.cc
+++ b/pc/peer_connection_rtp_unittest.cc
@@ -48,7 +48,6 @@
 #include "pc/test/mock_peer_connection_observers.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/thread.h"
 #include "system_wrappers/include/metrics.h"
diff --git a/pc/peer_connection_signaling_unittest.cc b/pc/peer_connection_signaling_unittest.cc
index 54c49af..32bf8b5 100644
--- a/pc/peer_connection_signaling_unittest.cc
+++ b/pc/peer_connection_signaling_unittest.cc
@@ -52,7 +52,6 @@
 #include "pc/session_description.h"
 #include "pc/test/mock_peer_connection_observers.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/string_encode.h"
diff --git a/pc/peer_connection_wrapper.cc b/pc/peer_connection_wrapper.cc
index e23b0f5f..8f763e3 100644
--- a/pc/peer_connection_wrapper.cc
+++ b/pc/peer_connection_wrapper.cc
@@ -22,7 +22,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gtest.h"
 
 namespace webrtc {
diff --git a/pc/proxy.h b/pc/proxy.h
index 5b16492..2f3865d 100644
--- a/pc/proxy.h
+++ b/pc/proxy.h
@@ -71,7 +71,6 @@
 #include "rtc_base/event.h"
 #include "rtc_base/location.h"
 #include "rtc_base/message_handler.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/string_utils.h"
 #include "rtc_base/system/rtc_export.h"
 #include "rtc_base/thread.h"
diff --git a/pc/proxy_unittest.cc b/pc/proxy_unittest.cc
index 48c087f..ebfde9f 100644
--- a/pc/proxy_unittest.cc
+++ b/pc/proxy_unittest.cc
@@ -13,6 +13,7 @@
 #include <memory>
 #include <string>
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/ref_count.h"
 #include "test/gmock.h"
diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc
index 2874fb4..0634bb8 100644
--- a/pc/rtc_stats_collector.cc
+++ b/pc/rtc_stats_collector.cc
@@ -53,7 +53,6 @@
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/network_constants.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_stream_adapter.h"
diff --git a/pc/rtc_stats_integrationtest.cc b/pc/rtc_stats_integrationtest.cc
index b5d86a9..448373c 100644
--- a/pc/rtc_stats_integrationtest.cc
+++ b/pc/rtc_stats_integrationtest.cc
@@ -35,7 +35,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/event_tracer.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/trace_event.h"
 #include "rtc_base/virtual_socket_server.h"
diff --git a/pc/rtp_receiver.h b/pc/rtp_receiver.h
index d591c46..8c49f56 100644
--- a/pc/rtp_receiver.h
+++ b/pc/rtp_receiver.h
@@ -34,7 +34,6 @@
 #include "media/base/media_channel.h"
 #include "media/base/video_broadcaster.h"
 #include "pc/video_track_source.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 
 namespace webrtc {
diff --git a/pc/rtp_sender.cc b/pc/rtp_sender.cc
index d8d4b52..349521c 100644
--- a/pc/rtp_sender.cc
+++ b/pc/rtp_sender.cc
@@ -26,7 +26,6 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/trace_event.h"
 
 namespace webrtc {
diff --git a/pc/rtp_sender_receiver_unittest.cc b/pc/rtp_sender_receiver_unittest.cc
index 654fffc..77258f9 100644
--- a/pc/rtp_sender_receiver_unittest.cc
+++ b/pc/rtp_sender_receiver_unittest.cc
@@ -63,7 +63,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 #include "rtc_base/thread.h"
 #include "test/gmock.h"
diff --git a/pc/rtp_transmission_manager.cc b/pc/rtp_transmission_manager.cc
index 4db6d48..9880b2d 100644
--- a/pc/rtp_transmission_manager.cc
+++ b/pc/rtp_transmission_manager.cc
@@ -23,7 +23,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/helpers.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/pc/sctp_data_channel.cc b/pc/sctp_data_channel.cc
index e995a0e..a05713a 100644
--- a/pc/sctp_data_channel.cc
+++ b/pc/sctp_data_channel.cc
@@ -21,7 +21,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/unused.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/thread.h"
diff --git a/pc/sctp_transport_unittest.cc b/pc/sctp_transport_unittest.cc
index 3f417dd..1e12a0a 100644
--- a/pc/sctp_transport_unittest.cc
+++ b/pc/sctp_transport_unittest.cc
@@ -24,7 +24,6 @@
 #include "pc/dtls_transport.h"
 #include "rtc_base/copy_on_write_buffer.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
diff --git a/pc/sdp_offer_answer.cc b/pc/sdp_offer_answer.cc
index f163851..db51759 100644
--- a/pc/sdp_offer_answer.cc
+++ b/pc/sdp_offer_answer.cc
@@ -57,7 +57,6 @@
 #include "rtc_base/helpers.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/ssl_stream_adapter.h"
 #include "rtc_base/string_encode.h"
diff --git a/pc/stats_collector_unittest.cc b/pc/stats_collector_unittest.cc
index e14de1a..03861c1 100644
--- a/pc/stats_collector_unittest.cc
+++ b/pc/stats_collector_unittest.cc
@@ -40,7 +40,6 @@
 #include "rtc_base/fake_ssl_identity.h"
 #include "rtc_base/message_digest.h"
 #include "rtc_base/net_helper.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_identity.h"
diff --git a/pc/test/fake_audio_capture_module.cc b/pc/test/fake_audio_capture_module.cc
index 41611d1..957ced4 100644
--- a/pc/test/fake_audio_capture_module.cc
+++ b/pc/test/fake_audio_capture_module.cc
@@ -12,9 +12,9 @@
 
 #include <string.h>
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/time_utils.h"
 
diff --git a/pc/test/integration_test_helpers.h b/pc/test/integration_test_helpers.h
index 79737c6..795966e 100644
--- a/pc/test/integration_test_helpers.h
+++ b/pc/test/integration_test_helpers.h
@@ -108,7 +108,6 @@
 #include "rtc_base/logging.h"
 #include "rtc_base/mdns_responder_interface.h"
 #include "rtc_base/numerics/safe_conversions.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/ssl_stream_adapter.h"
diff --git a/pc/test/peer_connection_test_wrapper.cc b/pc/test/peer_connection_test_wrapper.cc
index fb120cd..581d000 100644
--- a/pc/test/peer_connection_test_wrapper.cc
+++ b/pc/test/peer_connection_test_wrapper.cc
@@ -35,7 +35,6 @@
 #include "pc/test/mock_peer_connection_observers.h"
 #include "rtc_base/gunit.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/rtc_certificate_generator.h"
 #include "rtc_base/string_encode.h"
 #include "rtc_base/time_utils.h"
diff --git a/pc/track_media_info_map_unittest.cc b/pc/track_media_info_map_unittest.cc
index 370fd0b..0adfbf3 100644
--- a/pc/track_media_info_map_unittest.cc
+++ b/pc/track_media_info_map_unittest.cc
@@ -29,7 +29,6 @@
 #include "pc/test/mock_rtp_sender_internal.h"
 #include "pc/video_track.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
diff --git a/pc/video_rtp_receiver.cc b/pc/video_rtp_receiver.cc
index 3cc568f..c872fe4 100644
--- a/pc/video_rtp_receiver.cc
+++ b/pc/video_rtp_receiver.cc
@@ -21,7 +21,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/pc/video_rtp_receiver.h b/pc/video_rtp_receiver.h
index 05532a2..8b1f3c4 100644
--- a/pc/video_rtp_receiver.h
+++ b/pc/video_rtp_receiver.h
@@ -36,7 +36,6 @@
 #include "pc/rtp_receiver.h"
 #include "pc/video_rtp_track_source.h"
 #include "pc/video_track.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/thread_annotations.h"
diff --git a/pc/video_rtp_receiver_unittest.cc b/pc/video_rtp_receiver_unittest.cc
index 0d3fc57..3367c6e 100644
--- a/pc/video_rtp_receiver_unittest.cc
+++ b/pc/video_rtp_receiver_unittest.cc
@@ -18,7 +18,6 @@
 #include "api/video/test/mock_recordable_encoded_frame.h"
 #include "media/base/fake_media_engine.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
diff --git a/pc/video_rtp_track_source_unittest.cc b/pc/video_rtp_track_source_unittest.cc
index bb1dc19..feb0019 100644
--- a/pc/video_rtp_track_source_unittest.cc
+++ b/pc/video_rtp_track_source_unittest.cc
@@ -16,7 +16,6 @@
 #include "api/video/color_space.h"
 #include "api/video/encoded_image.h"
 #include "api/video/video_codec_type.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
 
diff --git a/pc/video_track.cc b/pc/video_track.cc
index 571e498..c979995 100644
--- a/pc/video_track.cc
+++ b/pc/video_track.cc
@@ -17,7 +17,6 @@
 #include "api/sequence_checker.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/pc/video_track_unittest.cc b/pc/video_track_unittest.cc
index 7d00522..e75fd03 100644
--- a/pc/video_track_unittest.cc
+++ b/pc/video_track_unittest.cc
@@ -16,7 +16,6 @@
 #include "pc/test/fake_video_track_renderer.h"
 #include "pc/test/fake_video_track_source.h"
 #include "pc/video_track_source.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 #include "test/gtest.h"
 
diff --git a/pc/webrtc_session_description_factory.cc b/pc/webrtc_session_description_factory.cc
index 0439f30..7966194 100644
--- a/pc/webrtc_session_description_factory.cc
+++ b/pc/webrtc_session_description_factory.cc
@@ -30,7 +30,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/ssl_identity.h"
 #include "rtc_base/ssl_stream_adapter.h"
 #include "rtc_base/string_encode.h"
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 33cd57f..fb8187d 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -624,6 +624,7 @@
     ":checks",
     ":macromagic",
     ":refcount",
+    "../api:make_ref_counted",
     "../api:refcountedbase",
     "../api:scoped_refptr",
     "../api:sequence_checker",
@@ -1082,6 +1083,7 @@
     "../api:array_view",
     "../api:field_trials_view",
     "../api:function_view",
+    "../api:make_ref_counted",
     "../api:refcountedbase",
     "../api:scoped_refptr",
     "../api:sequence_checker",
@@ -1589,6 +1591,7 @@
         ":timeutils",
         ":zero_memory",
         "../api:array_view",
+        "../api:make_ref_counted",
         "../api:scoped_refptr",
         "../api/numerics",
         "../api/units:time_delta",
@@ -1717,7 +1720,6 @@
         ":macromagic",
         ":net_helpers",
         ":null_socket_server",
-        ":refcount",
         ":rtc_base",
         ":rtc_base_tests_utils",
         ":rtc_event",
@@ -1731,6 +1733,7 @@
         ":threading",
         ":timeutils",
         "../api:array_view",
+        "../api:make_ref_counted",
         "../api/task_queue",
         "../api/task_queue:task_queue_test",
         "../test:field_trial",
diff --git a/rtc_base/async_invoker.h b/rtc_base/async_invoker.h
index f1b0311..621375c 100644
--- a/rtc_base/async_invoker.h
+++ b/rtc_base/async_invoker.h
@@ -19,7 +19,6 @@
 #include "api/scoped_refptr.h"
 #include "rtc_base/async_invoker_inl.h"
 #include "rtc_base/event.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 #include "rtc_base/thread.h"
 
diff --git a/rtc_base/async_invoker_inl.h b/rtc_base/async_invoker_inl.h
index 0ab0efb..79336eb 100644
--- a/rtc_base/async_invoker_inl.h
+++ b/rtc_base/async_invoker_inl.h
@@ -11,10 +11,10 @@
 #ifndef RTC_BASE_ASYNC_INVOKER_INL_H_
 #define RTC_BASE_ASYNC_INVOKER_INL_H_
 
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "rtc_base/event.h"
 #include "rtc_base/message_handler.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/third_party/sigslot/sigslot.h"
 #include "rtc_base/thread.h"
 #include "rtc_base/thread_annotations.h"
diff --git a/rtc_base/async_resolver.h b/rtc_base/async_resolver.h
index 0c053ee..8257f46 100644
--- a/rtc_base/async_resolver.h
+++ b/rtc_base/async_resolver.h
@@ -23,7 +23,6 @@
 #include "rtc_base/async_resolver_interface.h"
 #include "rtc_base/event.h"
 #include "rtc_base/ip_address.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/socket_address.h"
 #include "rtc_base/system/no_unique_address.h"
 #include "rtc_base/system/rtc_export.h"
diff --git a/rtc_base/operations_chain.cc b/rtc_base/operations_chain.cc
index f42482b..4398bb1 100644
--- a/rtc_base/operations_chain.cc
+++ b/rtc_base/operations_chain.cc
@@ -10,6 +10,7 @@
 
 #include "rtc_base/operations_chain.h"
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
 
 namespace rtc {
diff --git a/rtc_base/ref_counted_object.h b/rtc_base/ref_counted_object.h
index d94e670..418c3d8 100644
--- a/rtc_base/ref_counted_object.h
+++ b/rtc_base/ref_counted_object.h
@@ -10,32 +10,12 @@
 #ifndef RTC_BASE_REF_COUNTED_OBJECT_H_
 #define RTC_BASE_REF_COUNTED_OBJECT_H_
 
-#include <type_traits>
-#include <utility>
-
 #include "api/scoped_refptr.h"
 #include "rtc_base/ref_count.h"
 #include "rtc_base/ref_counter.h"
 
 namespace rtc {
 
-namespace webrtc_make_ref_counted_internal {
-// Determines if the given class has AddRef and Release methods.
-template <typename T>
-class HasAddRefAndRelease {
- private:
-  template <typename C,
-            decltype(std::declval<C>().AddRef())* = nullptr,
-            decltype(std::declval<C>().Release())* = nullptr>
-  static int Test(int);
-  template <typename>
-  static char Test(...);
-
- public:
-  static constexpr bool value = std::is_same_v<decltype(Test<T>(0)), int>;
-};
-}  // namespace webrtc_make_ref_counted_internal
-
 template <class T>
 class RefCountedObject : public T {
  public:
@@ -104,87 +84,6 @@
   mutable webrtc::webrtc_impl::RefCounter ref_count_{0};
 };
 
-// General utilities for constructing a reference counted class and the
-// appropriate reference count implementation for that class.
-//
-// These utilities select either the `RefCountedObject` implementation or
-// `FinalRefCountedObject` depending on whether the to-be-shared class is
-// derived from the RefCountInterface interface or not (respectively).
-
-// `make_ref_counted`:
-//
-// Use this when you want to construct a reference counted object of type T and
-// get a `scoped_refptr<>` back. Example:
-//
-//   auto p = make_ref_counted<Foo>("bar", 123);
-//
-// For a class that inherits from RefCountInterface, this is equivalent to:
-//
-//   auto p = scoped_refptr<Foo>(new RefCountedObject<Foo>("bar", 123));
-//
-// If the class does not inherit from RefCountInterface, but does have
-// AddRef/Release methods (so a T* is convertible to rtc::scoped_refptr), this
-// is equivalent to just
-//
-//   auto p = scoped_refptr<Foo>(new Foo("bar", 123));
-//
-// Otherwise, the example is equivalent to:
-//
-//   auto p = scoped_refptr<FinalRefCountedObject<Foo>>(
-//       new FinalRefCountedObject<Foo>("bar", 123));
-//
-// In these cases, `make_ref_counted` reduces the amount of boilerplate code but
-// also helps with the most commonly intended usage of RefCountedObject whereby
-// methods for reference counting, are virtual and designed to satisfy the need
-// of an interface. When such a need does not exist, it is more efficient to use
-// the `FinalRefCountedObject` template, which does not add the vtable overhead.
-//
-// Note that in some cases, using RefCountedObject directly may still be what's
-// needed.
-
-// `make_ref_counted` for abstract classes that are convertible to
-// RefCountInterface. The is_abstract requirement rejects classes that inherit
-// both RefCountInterface and RefCounted object, which is a a discouraged
-// pattern, and would result in double inheritance of RefCountedObject if this
-// template was applied.
-template <
-    typename T,
-    typename... Args,
-    typename std::enable_if<std::is_convertible_v<T*, RefCountInterface*> &&
-                                std::is_abstract_v<T>,
-                            T>::type* = nullptr>
-scoped_refptr<T> make_ref_counted(Args&&... args) {
-  return scoped_refptr<T>(new RefCountedObject<T>(std::forward<Args>(args)...));
-}
-
-// `make_ref_counted` for complete classes that are not convertible to
-// RefCountInterface and already carry a ref count.
-template <
-    typename T,
-    typename... Args,
-    typename std::enable_if<
-        !std::is_convertible_v<T*, RefCountInterface*> &&
-            webrtc_make_ref_counted_internal::HasAddRefAndRelease<T>::value,
-        T>::type* = nullptr>
-scoped_refptr<T> make_ref_counted(Args&&... args) {
-  return scoped_refptr<T>(new T(std::forward<Args>(args)...));
-}
-
-// `make_ref_counted` for complete classes that are not convertible to
-// RefCountInterface and have no ref count of their own.
-template <
-    typename T,
-    typename... Args,
-    typename std::enable_if<
-        !std::is_convertible_v<T*, RefCountInterface*> &&
-            !webrtc_make_ref_counted_internal::HasAddRefAndRelease<T>::value,
-
-        T>::type* = nullptr>
-scoped_refptr<FinalRefCountedObject<T>> make_ref_counted(Args&&... args) {
-  return scoped_refptr<FinalRefCountedObject<T>>(
-      new FinalRefCountedObject<T>(std::forward<Args>(args)...));
-}
-
 }  // namespace rtc
 
 #endif  // RTC_BASE_REF_COUNTED_OBJECT_H_
diff --git a/rtc_base/ref_counted_object_unittest.cc b/rtc_base/ref_counted_object_unittest.cc
index c06a61e..abeb1e9 100644
--- a/rtc_base/ref_counted_object_unittest.cc
+++ b/rtc_base/ref_counted_object_unittest.cc
@@ -16,6 +16,7 @@
 #include <utility>
 
 #include "absl/strings/string_view.h"
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
 #include "rtc_base/ref_count.h"
 #include "test/gtest.h"
diff --git a/rtc_base/rtc_certificate.cc b/rtc_base/rtc_certificate.cc
index e9137f4..e0b6b32 100644
--- a/rtc_base/rtc_certificate.cc
+++ b/rtc_base/rtc_certificate.cc
@@ -13,7 +13,6 @@
 #include <memory>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/ssl_certificate.h"
 #include "rtc_base/ssl_identity.h"
 #include "rtc_base/time_utils.h"
diff --git a/rtc_base/rtc_certificate_generator.cc b/rtc_base/rtc_certificate_generator.cc
index 09cd279..d2856f7 100644
--- a/rtc_base/rtc_certificate_generator.cc
+++ b/rtc_base/rtc_certificate_generator.cc
@@ -19,7 +19,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/location.h"
 #include "rtc_base/message_handler.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/ssl_identity.h"
 
 namespace rtc {
diff --git a/rtc_base/rtc_certificate_generator_unittest.cc b/rtc_base/rtc_certificate_generator_unittest.cc
index 53ae973..3d9df58 100644
--- a/rtc_base/rtc_certificate_generator_unittest.cc
+++ b/rtc_base/rtc_certificate_generator_unittest.cc
@@ -13,9 +13,9 @@
 #include <memory>
 
 #include "absl/types/optional.h"
+#include "api/make_ref_counted.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/gunit.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "test/gtest.h"
 
diff --git a/rtc_tools/BUILD.gn b/rtc_tools/BUILD.gn
index edaaa8b..6a4c61b 100644
--- a/rtc_tools/BUILD.gn
+++ b/rtc_tools/BUILD.gn
@@ -58,6 +58,7 @@
     "video_file_reader.h",
   ]
   deps = [
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../api/video:video_frame",
     "../api/video:video_rtp_headers",
@@ -107,13 +108,13 @@
   deps = [
     ":video_file_reader",
     "../api:array_view",
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../api/video:video_frame",
     "../api/video:video_rtp_headers",
     "../common_video",
     "../rtc_base:checks",
     "../rtc_base:logging",
-    "../rtc_base:refcount",
     "../test:perf_test",
     "//third_party/libyuv",
   ]
@@ -135,6 +136,7 @@
     ":video_file_reader",
     ":video_file_writer",
     ":video_quality_analysis",
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../rtc_base:stringutils",
     "../test:perf_test",
diff --git a/rtc_tools/data_channel_benchmark/peer_connection_client.h b/rtc_tools/data_channel_benchmark/peer_connection_client.h
index a9787fe..62b205c 100644
--- a/rtc_tools/data_channel_benchmark/peer_connection_client.h
+++ b/rtc_tools/data_channel_benchmark/peer_connection_client.h
@@ -22,7 +22,6 @@
 #include "api/scoped_refptr.h"
 #include "api/set_local_description_observer_interface.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/thread.h"
 #include "rtc_tools/data_channel_benchmark/signaling_interface.h"
 
diff --git a/rtc_tools/frame_analyzer/video_color_aligner.cc b/rtc_tools/frame_analyzer/video_color_aligner.cc
index 6e9f81d..5983e47 100644
--- a/rtc_tools/frame_analyzer/video_color_aligner.cc
+++ b/rtc_tools/frame_analyzer/video_color_aligner.cc
@@ -18,9 +18,9 @@
 #include <vector>
 
 #include "api/array_view.h"
+#include "api/make_ref_counted.h"
 #include "api/video/i420_buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_tools/frame_analyzer/linear_least_squares.h"
 #include "third_party/libyuv/include/libyuv/planar_functions.h"
 #include "third_party/libyuv/include/libyuv/scale.h"
diff --git a/rtc_tools/frame_analyzer/video_geometry_aligner.cc b/rtc_tools/frame_analyzer/video_geometry_aligner.cc
index b06792e..efb0333 100644
--- a/rtc_tools/frame_analyzer/video_geometry_aligner.cc
+++ b/rtc_tools/frame_analyzer/video_geometry_aligner.cc
@@ -12,9 +12,9 @@
 
 #include <map>
 
+#include "api/make_ref_counted.h"
 #include "api/video/i420_buffer.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_tools/frame_analyzer/video_quality_analysis.h"
 #include "third_party/libyuv/include/libyuv/scale.h"
 
diff --git a/rtc_tools/frame_analyzer/video_temporal_aligner.cc b/rtc_tools/frame_analyzer/video_temporal_aligner.cc
index 20c8b95..4b940d0 100644
--- a/rtc_tools/frame_analyzer/video_temporal_aligner.cc
+++ b/rtc_tools/frame_analyzer/video_temporal_aligner.cc
@@ -18,9 +18,9 @@
 #include <limits>
 #include <vector>
 
+#include "api/make_ref_counted.h"
 #include "api/video/i420_buffer.h"
 #include "api/video/video_frame_buffer.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_tools/frame_analyzer/video_quality_analysis.h"
 
 namespace webrtc {
diff --git a/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc b/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
index 854c6d0..1ebb603 100644
--- a/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
+++ b/rtc_tools/rtc_event_log_visualizer/analyze_audio.cc
@@ -21,7 +21,6 @@
 #include "modules/audio_coding/neteq/tools/neteq_replacement_input.h"
 #include "modules/audio_coding/neteq/tools/neteq_test.h"
 #include "modules/audio_coding/neteq/tools/resample_input_audio_file.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/rtc_tools/video_file_reader.cc b/rtc_tools/video_file_reader.cc
index 6e722b1..66fed42 100644
--- a/rtc_tools/video_file_reader.cc
+++ b/rtc_tools/video_file_reader.cc
@@ -16,10 +16,10 @@
 
 #include "absl/strings/match.h"
 #include "absl/types/optional.h"
+#include "api/make_ref_counted.h"
 #include "api/video/i420_buffer.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/string_encode.h"
 #include "rtc_base/string_to_number.h"
 
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index a18d3dc..1530cfb 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -231,11 +231,11 @@
 
         deps = [
           ":audio_device",
+          "../api:make_ref_counted",
           "../modules/audio_device:audio_device_api",
           "../modules/audio_device:audio_device_generic",
           "../rtc_base:checks",
           "../rtc_base:logging",
-          "../rtc_base:refcount",
           "../system_wrappers",
         ]
       }
@@ -1541,6 +1541,7 @@
         ":native_video",
         ":videoframebuffer_objc",
         "../api:libjingle_peerconnection_api",
+        "../api:make_ref_counted",
         "../api:media_stream_interface",
         "../api:scoped_refptr",
         "../api/video:video_frame",
@@ -1550,7 +1551,6 @@
         "../rtc_base",
         "../rtc_base:buffer",
         "../rtc_base:logging",
-        "../rtc_base:refcount",
         "../rtc_base:threading",
       ]
       if (is_ios) {
@@ -1614,6 +1614,7 @@
         ":videoframebuffer_objc",
         ":vpx_codec_constants",
         ":wrapped_native_codec_objc",
+        "../api:make_ref_counted",
         "../api/video:video_frame",
         "../api/video:video_rtp_headers",
         "../api/video_codecs:video_codecs_api",
diff --git a/sdk/android/BUILD.gn b/sdk/android/BUILD.gn
index 2df33ab..c1ceea4 100644
--- a/sdk/android/BUILD.gn
+++ b/sdk/android/BUILD.gn
@@ -1170,6 +1170,7 @@
       ":base_jni",
       ":generated_audio_device_module_base_jni",
       ":native_api_jni",
+      "../../api:make_ref_counted",
       "../../api:sequence_checker",
       "../../api/task_queue",
       "../../api/task_queue:default_task_queue_factory",
@@ -1177,7 +1178,6 @@
       "../../modules/audio_device:audio_device_buffer",
       "../../rtc_base:checks",
       "../../rtc_base:logging",
-      "../../rtc_base:refcount",
       "../../system_wrappers:metrics",
     ]
     absl_deps = [ "//third_party/abseil-cpp/absl/types:optional" ]
diff --git a/sdk/android/native_api/audio_device_module/audio_device_android.cc b/sdk/android/native_api/audio_device_module/audio_device_android.cc
index 9a42361..2be7f7d 100644
--- a/sdk/android/native_api/audio_device_module/audio_device_android.cc
+++ b/sdk/android/native_api/audio_device_module/audio_device_android.cc
@@ -18,7 +18,6 @@
 #include "api/scoped_refptr.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/ref_count.h"
-#include "rtc_base/ref_counted_object.h"
 
 #if defined(WEBRTC_AUDIO_DEVICE_INCLUDE_ANDROID_AAUDIO)
 #include "sdk/android/src/jni/audio_device/aaudio_player.h"
diff --git a/sdk/android/native_api/video/video_source.cc b/sdk/android/native_api/video/video_source.cc
index 4f1409e..e967c2a 100644
--- a/sdk/android/native_api/video/video_source.cc
+++ b/sdk/android/native_api/video/video_source.cc
@@ -10,7 +10,6 @@
 
 #include "sdk/android/native_api/video/video_source.h"
 
-#include "rtc_base/ref_counted_object.h"
 #include "sdk/android/src/jni/android_video_track_source.h"
 #include "sdk/android/src/jni/native_capturer_observer.h"
 
diff --git a/sdk/android/src/jni/audio_device/audio_device_module.cc b/sdk/android/src/jni/audio_device/audio_device_module.cc
index 2e75db9..7c59d3e 100644
--- a/sdk/android/src/jni/audio_device/audio_device_module.cc
+++ b/sdk/android/src/jni/audio_device/audio_device_module.cc
@@ -13,13 +13,13 @@
 #include <memory>
 #include <utility>
 
+#include "api/make_ref_counted.h"
 #include "api/sequence_checker.h"
 #include "api/task_queue/default_task_queue_factory.h"
 #include "api/task_queue/task_queue_factory.h"
 #include "modules/audio_device/audio_device_buffer.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "sdk/android/generated_audio_device_module_base_jni/WebRtcAudioManager_jni.h"
 #include "system_wrappers/include/metrics.h"
 
diff --git a/sdk/android/src/jni/encoded_image.cc b/sdk/android/src/jni/encoded_image.cc
index 189d7e9..9bd73a4 100644
--- a/sdk/android/src/jni/encoded_image.cc
+++ b/sdk/android/src/jni/encoded_image.cc
@@ -11,7 +11,6 @@
 #include "sdk/android/src/jni/encoded_image.h"
 
 #include "api/video/encoded_image.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 #include "sdk/android/generated_video_jni/EncodedImage_jni.h"
 #include "sdk/android/native_api/jni/java_types.h"
diff --git a/sdk/android/src/jni/pc/video.cc b/sdk/android/src/jni/pc/video.cc
index ee5ecbe..b955dbb 100644
--- a/sdk/android/src/jni/pc/video.cc
+++ b/sdk/android/src/jni/pc/video.cc
@@ -11,12 +11,12 @@
 #include "sdk/android/src/jni/pc/video.h"
 
 #include <jni.h>
+
 #include <memory>
 
 #include "api/video_codecs/video_decoder_factory.h"
 #include "api/video_codecs/video_encoder_factory.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "sdk/android/native_api/jni/java_types.h"
 #include "sdk/android/src/jni/android_video_track_source.h"
 #include "sdk/android/src/jni/video_decoder_factory_wrapper.h"
diff --git a/sdk/android/src/jni/video_frame.cc b/sdk/android/src/jni/video_frame.cc
index dd02731..121b34f 100644
--- a/sdk/android/src/jni/video_frame.cc
+++ b/sdk/android/src/jni/video_frame.cc
@@ -12,7 +12,6 @@
 
 #include "api/scoped_refptr.h"
 #include "common_video/include/video_frame_buffer.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 #include "sdk/android/generated_video_jni/VideoFrame_jni.h"
 #include "sdk/android/src/jni/jni_helpers.h"
diff --git a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
index 56177b4..7f8ae73 100644
--- a/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
+++ b/sdk/objc/api/peerconnection/RTCEncodedImage+Private.mm
@@ -13,7 +13,6 @@
 #import <objc/runtime.h>
 
 #include "rtc_base/numerics/safe_conversions.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace {
 // An implementation of EncodedImageBufferInterface that doesn't perform any copies.
diff --git a/sdk/objc/native/api/audio_device_module.mm b/sdk/objc/native/api/audio_device_module.mm
index 55ea7e3..4e7b681 100644
--- a/sdk/objc/native/api/audio_device_module.mm
+++ b/sdk/objc/native/api/audio_device_module.mm
@@ -10,8 +10,8 @@
 
 #include "audio_device_module.h"
 
+#include "api/make_ref_counted.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 
 #include "sdk/objc/native/src/audio/audio_device_module_ios.h"
 
diff --git a/sdk/objc/native/api/video_capturer.mm b/sdk/objc/native/api/video_capturer.mm
index 4b065b5..a7260ab 100644
--- a/sdk/objc/native/api/video_capturer.mm
+++ b/sdk/objc/native/api/video_capturer.mm
@@ -12,7 +12,6 @@
 
 #include "absl/memory/memory.h"
 #include "api/video_track_source_proxy_factory.h"
-#include "rtc_base/ref_counted_object.h"
 #include "sdk/objc/native/src/objc_video_track_source.h"
 
 namespace webrtc {
diff --git a/sdk/objc/native/api/video_frame_buffer.mm b/sdk/objc/native/api/video_frame_buffer.mm
index e1d8aad..4fe9037 100644
--- a/sdk/objc/native/api/video_frame_buffer.mm
+++ b/sdk/objc/native/api/video_frame_buffer.mm
@@ -10,6 +10,7 @@
 
 #include "sdk/objc/native/api/video_frame_buffer.h"
 
+#include "api/make_ref_counted.h"
 #include "sdk/objc/native/src/objc_frame_buffer.h"
 
 namespace webrtc {
diff --git a/sdk/objc/native/src/audio/audio_device_module_ios.mm b/sdk/objc/native/src/audio/audio_device_module_ios.mm
index 33ba926..5effef3 100644
--- a/sdk/objc/native/src/audio/audio_device_module_ios.mm
+++ b/sdk/objc/native/src/audio/audio_device_module_ios.mm
@@ -16,7 +16,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/ref_count.h"
-#include "rtc_base/ref_counted_object.h"
 #include "system_wrappers/include/metrics.h"
 
 #if defined(WEBRTC_IOS)
diff --git a/sdk/objc/native/src/objc_frame_buffer.mm b/sdk/objc/native/src/objc_frame_buffer.mm
index e156c34..566733d 100644
--- a/sdk/objc/native/src/objc_frame_buffer.mm
+++ b/sdk/objc/native/src/objc_frame_buffer.mm
@@ -10,6 +10,7 @@
 
 #include "sdk/objc/native/src/objc_frame_buffer.h"
 
+#include "api/make_ref_counted.h"
 #import "base/RTCVideoFrameBuffer.h"
 #import "sdk/objc/api/video_frame_buffer/RTCNativeI420Buffer+Private.h"
 
diff --git a/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm b/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
index ffa8a6c..4c8bf34 100644
--- a/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
+++ b/sdk/objc/unittests/ObjCVideoTrackSource_xctest.mm
@@ -22,7 +22,6 @@
 #include "api/scoped_refptr.h"
 #include "common_video/libyuv/include/webrtc_libyuv.h"
 #include "media/base/fake_video_renderer.h"
-#include "rtc_base/ref_counted_object.h"
 #include "sdk/objc/native/api/video_frame.h"
 
 typedef void (^VideoSinkCallback)(RTC_OBJC_TYPE(RTCVideoFrame) *);
diff --git a/test/BUILD.gn b/test/BUILD.gn
index caa998a..da4a31a 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -1080,11 +1080,11 @@
   deps = [
     ":test_support",
     "../api:array_view",
+    "../api:make_ref_counted",
     "../api:scoped_refptr",
     "../api/audio_codecs:audio_codecs_api",
     "../api/audio_codecs:builtin_audio_decoder_factory",
     "../rtc_base:checks",
-    "../rtc_base:refcount",
   ]
   absl_deps = [ "//third_party/abseil-cpp/absl/memory" ]
 }
diff --git a/test/encoder_settings.cc b/test/encoder_settings.cc
index 6bb1631..7398272 100644
--- a/test/encoder_settings.cc
+++ b/test/encoder_settings.cc
@@ -15,7 +15,6 @@
 #include "api/video_codecs/sdp_video_format.h"
 #include "call/rtp_config.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 namespace test {
diff --git a/test/fake_texture_frame.cc b/test/fake_texture_frame.cc
index b1269b4..9c17e4c 100644
--- a/test/fake_texture_frame.cc
+++ b/test/fake_texture_frame.cc
@@ -11,7 +11,6 @@
 #include "test/fake_texture_frame.h"
 
 #include "api/video/i420_buffer.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 namespace test {
diff --git a/test/fuzzers/residual_echo_detector_fuzzer.cc b/test/fuzzers/residual_echo_detector_fuzzer.cc
index da4b6ed..0efe81f 100644
--- a/test/fuzzers/residual_echo_detector_fuzzer.cc
+++ b/test/fuzzers/residual_echo_detector_fuzzer.cc
@@ -17,7 +17,6 @@
 
 #include "api/audio/echo_detector_creator.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/test/mock_audio_decoder_factory.h b/test/mock_audio_decoder_factory.h
index 4d3eed2..425ea38 100644
--- a/test/mock_audio_decoder_factory.h
+++ b/test/mock_audio_decoder_factory.h
@@ -16,8 +16,8 @@
 
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/builtin_audio_decoder_factory.h"
+#include "api/make_ref_counted.h"
 #include "api/scoped_refptr.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 
 namespace webrtc {
diff --git a/test/mock_audio_encoder_factory.h b/test/mock_audio_encoder_factory.h
index fc150d6..9a0279e 100644
--- a/test/mock_audio_encoder_factory.h
+++ b/test/mock_audio_encoder_factory.h
@@ -16,7 +16,6 @@
 
 #include "api/audio_codecs/audio_encoder_factory.h"
 #include "api/scoped_refptr.h"
-#include "rtc_base/ref_counted_object.h"
 #include "test/gmock.h"
 
 namespace webrtc {
diff --git a/test/pc/e2e/test_peer.h b/test/pc/e2e/test_peer.h
index 216b9d9..72399f5 100644
--- a/test/pc/e2e/test_peer.h
+++ b/test/pc/e2e/test_peer.h
@@ -24,7 +24,6 @@
 #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 "rtc_base/synchronization/mutex.h"
 #include "test/pc/e2e/peer_configurer.h"
 #include "test/pc/e2e/peer_connection_quality_test_params.h"
diff --git a/video/adaptation/bandwidth_quality_scaler_resource.cc b/video/adaptation/bandwidth_quality_scaler_resource.cc
index 283f3f0..6f75e59 100644
--- a/video/adaptation/bandwidth_quality_scaler_resource.cc
+++ b/video/adaptation/bandwidth_quality_scaler_resource.cc
@@ -15,7 +15,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/experiments/balanced_degradation_settings.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/time_utils.h"
 
diff --git a/video/adaptation/bandwidth_quality_scaler_resource.h b/video/adaptation/bandwidth_quality_scaler_resource.h
index 9dfa97d..bec864b 100644
--- a/video/adaptation/bandwidth_quality_scaler_resource.h
+++ b/video/adaptation/bandwidth_quality_scaler_resource.h
@@ -23,7 +23,6 @@
 #include "call/adaptation/degradation_preference_provider.h"
 #include "call/adaptation/resource_adaptation_processor_interface.h"
 #include "modules/video_coding/utility/bandwidth_quality_scaler.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_queue.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
 
diff --git a/video/adaptation/encode_usage_resource.cc b/video/adaptation/encode_usage_resource.cc
index c42c63f..4a97881 100644
--- a/video/adaptation/encode_usage_resource.cc
+++ b/video/adaptation/encode_usage_resource.cc
@@ -14,7 +14,6 @@
 #include <utility>
 
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/video/adaptation/encode_usage_resource.h b/video/adaptation/encode_usage_resource.h
index 257988f..689ae70 100644
--- a/video/adaptation/encode_usage_resource.h
+++ b/video/adaptation/encode_usage_resource.h
@@ -17,7 +17,6 @@
 #include "absl/types/optional.h"
 #include "api/scoped_refptr.h"
 #include "api/video/video_adaptation_reason.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_queue.h"
 #include "video/adaptation/overuse_frame_detector.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
diff --git a/video/adaptation/pixel_limit_resource.cc b/video/adaptation/pixel_limit_resource.cc
index 70820e5..872e169 100644
--- a/video/adaptation/pixel_limit_resource.cc
+++ b/video/adaptation/pixel_limit_resource.cc
@@ -14,7 +14,6 @@
 #include "api/units/time_delta.h"
 #include "call/adaptation/video_stream_adapter.h"
 #include "rtc_base/checks.h"
-#include "rtc_base/ref_counted_object.h"
 
 namespace webrtc {
 
diff --git a/video/adaptation/quality_scaler_resource.cc b/video/adaptation/quality_scaler_resource.cc
index c455252..6f6b252 100644
--- a/video/adaptation/quality_scaler_resource.cc
+++ b/video/adaptation/quality_scaler_resource.cc
@@ -14,7 +14,6 @@
 
 #include "rtc_base/checks.h"
 #include "rtc_base/experiments/balanced_degradation_settings.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/time_utils.h"
 
diff --git a/video/adaptation/quality_scaler_resource.h b/video/adaptation/quality_scaler_resource.h
index 06c22ca..6e4b83f 100644
--- a/video/adaptation/quality_scaler_resource.h
+++ b/video/adaptation/quality_scaler_resource.h
@@ -22,7 +22,6 @@
 #include "call/adaptation/degradation_preference_provider.h"
 #include "call/adaptation/resource_adaptation_processor_interface.h"
 #include "modules/video_coding/utility/quality_scaler.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_queue.h"
 #include "video/adaptation/video_stream_encoder_resource.h"
 
diff --git a/video/adaptation/video_stream_encoder_resource_manager.cc b/video/adaptation/video_stream_encoder_resource_manager.cc
index 36ce839..bd04e5b 100644
--- a/video/adaptation/video_stream_encoder_resource_manager.cc
+++ b/video/adaptation/video_stream_encoder_resource_manager.cc
@@ -30,7 +30,6 @@
 #include "rtc_base/checks.h"
 #include "rtc_base/logging.h"
 #include "rtc_base/numerics/safe_conversions.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/strings/string_builder.h"
 #include "rtc_base/time_utils.h"
 #include "rtc_base/trace_event.h"
diff --git a/video/buffered_frame_decryptor_unittest.cc b/video/buffered_frame_decryptor_unittest.cc
index 41ae1ec..074777b 100644
--- a/video/buffered_frame_decryptor_unittest.cc
+++ b/video/buffered_frame_decryptor_unittest.cc
@@ -16,7 +16,6 @@
 
 #include "api/test/mock_frame_decryptor.h"
 #include "modules/video_coding/packet_buffer.h"
-#include "rtc_base/ref_counted_object.h"
 #include "system_wrappers/include/clock.h"
 #include "test/gmock.h"
 #include "test/gtest.h"
diff --git a/video/frame_cadence_adapter_unittest.cc b/video/frame_cadence_adapter_unittest.cc
index cfd471d..9bd312a 100644
--- a/video/frame_cadence_adapter_unittest.cc
+++ b/video/frame_cadence_adapter_unittest.cc
@@ -21,7 +21,6 @@
 #include "api/video/video_frame.h"
 #include "rtc_base/event.h"
 #include "rtc_base/rate_statistics.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "rtc_base/time_utils.h"
 #include "system_wrappers/include/metrics.h"
diff --git a/video/frame_encode_metadata_writer.cc b/video/frame_encode_metadata_writer.cc
index a7ae2e0..d6095a0 100644
--- a/video/frame_encode_metadata_writer.cc
+++ b/video/frame_encode_metadata_writer.cc
@@ -19,7 +19,6 @@
 #include "modules/video_coding/include/video_coding_defines.h"
 #include "modules/video_coding/svc/create_scalability_structure.h"
 #include "rtc_base/logging.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/time_utils.h"
 
 namespace webrtc {
diff --git a/video/rtp_video_stream_receiver_frame_transformer_delegate_unittest.cc b/video/rtp_video_stream_receiver_frame_transformer_delegate_unittest.cc
index 5211a1d..8e80683 100644
--- a/video/rtp_video_stream_receiver_frame_transformer_delegate_unittest.cc
+++ b/video/rtp_video_stream_receiver_frame_transformer_delegate_unittest.cc
@@ -20,7 +20,6 @@
 #include "call/video_receive_stream.h"
 #include "modules/rtp_rtcp/source/rtp_descriptor_authentication.h"
 #include "rtc_base/event.h"
-#include "rtc_base/ref_counted_object.h"
 #include "rtc_base/task_utils/to_queued_task.h"
 #include "test/gmock.h"
 #include "test/gtest.h"