diff --git a/p2p/base/stun_port.h b/p2p/base/stun_port.h
index af9d04d..394c133 100644
--- a/p2p/base/stun_port.h
+++ b/p2p/base/stun_port.h
@@ -32,22 +32,6 @@
 // Communicates using the address on the outside of a NAT.
 class UDPPort : public Port {
  public:
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  static std::unique_ptr<UDPPort> Create(
-      rtc::Thread* thread,
-      rtc::PacketSocketFactory* factory,
-      rtc::Network* network,
-      rtc::AsyncPacketSocket* socket,
-      const std::string& username,
-      const std::string& password,
-      const std::string& /*unused, was origin*/,
-      bool emit_local_for_anyaddress,
-      absl::optional<int> stun_keepalive_interval) {
-    return Create(thread, factory, network, socket, username, password,
-                  emit_local_for_anyaddress, stun_keepalive_interval);
-  }
-
   static std::unique_ptr<UDPPort> Create(
       rtc::Thread* thread,
       rtc::PacketSocketFactory* factory,
@@ -68,23 +52,6 @@
     return port;
   }
 
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  static std::unique_ptr<UDPPort> Create(
-      rtc::Thread* thread,
-      rtc::PacketSocketFactory* factory,
-      rtc::Network* network,
-      uint16_t min_port,
-      uint16_t max_port,
-      const std::string& username,
-      const std::string& password,
-      const std::string& /*unused, was origin*/,
-      bool emit_local_for_anyaddress,
-      absl::optional<int> stun_keepalive_interval) {
-    return Create(thread, factory, network, min_port, max_port, username,
-                  password, emit_local_for_anyaddress, stun_keepalive_interval);
-  }
-
   static std::unique_ptr<UDPPort> Create(
       rtc::Thread* thread,
       rtc::PacketSocketFactory* factory,
diff --git a/p2p/base/turn_port.h b/p2p/base/turn_port.h
index 501779c..7b8e3b9 100644
--- a/p2p/base/turn_port.h
+++ b/p2p/base/turn_port.h
@@ -52,24 +52,6 @@
                          // packets.
   };
 
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  static std::unique_ptr<TurnPort> Create(
-      rtc::Thread* thread,
-      rtc::PacketSocketFactory* factory,
-      rtc::Network* network,
-      rtc::AsyncPacketSocket* socket,
-      const std::string& username,  // ice username.
-      const std::string& password,  // ice password.
-      const ProtocolAddress& server_address,
-      const RelayCredentials& credentials,
-      int server_priority,
-      const std::string& /*unused, was origin*/,
-      webrtc::TurnCustomizer* customizer) {
-    return Create(thread, factory, network, socket, username, password,
-                  server_address, credentials, server_priority, customizer);
-  }
-
   // Create a TURN port using the shared UDP socket, `socket`.
   static std::unique_ptr<TurnPort> Create(
       rtc::Thread* thread,
@@ -116,30 +98,6 @@
                   server_address, credentials, server_priority, customizer);
   }
 
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  static std::unique_ptr<TurnPort> Create(
-      rtc::Thread* thread,
-      rtc::PacketSocketFactory* factory,
-      rtc::Network* network,
-      uint16_t min_port,
-      uint16_t max_port,
-      const std::string& username,  // ice username.
-      const std::string& password,  // ice password.
-      const ProtocolAddress& server_address,
-      const RelayCredentials& credentials,
-      int server_priority,
-      const std::string& /*unused, was origin*/,
-      const std::vector<std::string>& tls_alpn_protocols,
-      const std::vector<std::string>& tls_elliptic_curves,
-      webrtc::TurnCustomizer* customizer,
-      rtc::SSLCertificateVerifier* tls_cert_verifier = nullptr) {
-    return Create(thread, factory, network, min_port, max_port, username,
-                  password, server_address, credentials, server_priority,
-                  tls_alpn_protocols, tls_elliptic_curves, customizer,
-                  tls_cert_verifier);
-  }
-
   // Create a TURN port that will use a new socket, bound to `network` and
   // using a port in the range between `min_port` and `max_port`.
   static std::unique_ptr<TurnPort> Create(
@@ -297,30 +255,6 @@
   void HandleConnectionDestroyed(Connection* conn) override;
 
  protected:
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  TurnPort(rtc::Thread* thread,
-           rtc::PacketSocketFactory* factory,
-           rtc::Network* network,
-           rtc::AsyncPacketSocket* socket,
-           const std::string& username,
-           const std::string& password,
-           const ProtocolAddress& server_address,
-           const RelayCredentials& credentials,
-           int server_priority,
-           const std::string& /*unused, was origin*/,
-           webrtc::TurnCustomizer* customizer)
-      : TurnPort(thread,
-                 factory,
-                 network,
-                 socket,
-                 username,
-                 password,
-                 server_address,
-                 credentials,
-                 server_priority,
-                 customizer) {}
-
   TurnPort(rtc::Thread* thread,
            rtc::PacketSocketFactory* factory,
            rtc::Network* network,
@@ -332,38 +266,6 @@
            int server_priority,
            webrtc::TurnCustomizer* customizer);
 
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("Use variant without origin attribute below")
-  TurnPort(rtc::Thread* thread,
-           rtc::PacketSocketFactory* factory,
-           rtc::Network* network,
-           uint16_t min_port,
-           uint16_t max_port,
-           const std::string& username,
-           const std::string& password,
-           const ProtocolAddress& server_address,
-           const RelayCredentials& credentials,
-           int server_priority,
-           const std::string& /*unused, was origin*/,
-           const std::vector<std::string>& tls_alpn_protocols,
-           const std::vector<std::string>& tls_elliptic_curves,
-           webrtc::TurnCustomizer* customizer,
-           rtc::SSLCertificateVerifier* tls_cert_verifier = nullptr)
-      : TurnPort(thread,
-                 factory,
-                 network,
-                 min_port,
-                 max_port,
-                 username,
-                 password,
-                 server_address,
-                 credentials,
-                 server_priority,
-                 tls_alpn_protocols,
-                 tls_elliptic_curves,
-                 customizer,
-                 tls_cert_verifier) {}
-
   TurnPort(rtc::Thread* thread,
            rtc::PacketSocketFactory* factory,
            rtc::Network* network,
diff --git a/p2p/client/relay_port_factory_interface.h b/p2p/client/relay_port_factory_interface.h
index e4fac81..d388412 100644
--- a/p2p/client/relay_port_factory_interface.h
+++ b/p2p/client/relay_port_factory_interface.h
@@ -43,9 +43,6 @@
   const RelayServerConfig* config;
   std::string username;
   std::string password;
-  // TODO(bugs.webrtc.org/12132) remove once downstream tests are fixed.
-  ABSL_DEPRECATED("stun origin support is going away")
-  std::string origin;
   webrtc::TurnCustomizer* turn_customizer;
 };
 
