Introduce CreateDataChannelOrError
Deprecate CreateDataChannel, and make it a simple wrapper function.
Bug: webrtc:12796
Change-Id: I053d75a264596ba87ca734a29df9241de93a80c3
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/219784
Reviewed-by: Xavier Lepaul <xalep@webrtc.org>
Reviewed-by: Henrik Boström <hbos@webrtc.org>
Commit-Queue: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#34130}
diff --git a/pc/peer_connection.cc b/pc/peer_connection.cc
index e2b3b61..0939f59 100644
--- a/pc/peer_connection.cc
+++ b/pc/peer_connection.cc
@@ -1279,9 +1279,9 @@
"trickle");
}
-rtc::scoped_refptr<DataChannelInterface> PeerConnection::CreateDataChannel(
- const std::string& label,
- const DataChannelInit* config) {
+RTCErrorOr<rtc::scoped_refptr<DataChannelInterface>>
+PeerConnection::CreateDataChannelOrError(const std::string& label,
+ const DataChannelInit* config) {
RTC_DCHECK_RUN_ON(signaling_thread());
TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel");
@@ -1291,11 +1291,13 @@
if (config) {
internal_config.reset(new InternalDataChannelInit(*config));
}
+ // TODO(bugs.webrtc.org/12796): Return a more specific error.
rtc::scoped_refptr<DataChannelInterface> channel(
data_channel_controller_.InternalCreateDataChannelWithProxy(
label, internal_config.get()));
if (!channel.get()) {
- return nullptr;
+ return RTCError(RTCErrorType::INTERNAL_ERROR,
+ "Data channel creation failed");
}
// Trigger the onRenegotiationNeeded event for
diff --git a/pc/peer_connection.h b/pc/peer_connection.h
index 7be137a..4476c5d 100644
--- a/pc/peer_connection.h
+++ b/pc/peer_connection.h
@@ -167,7 +167,7 @@
std::vector<rtc::scoped_refptr<RtpTransceiverInterface>> GetTransceivers()
const override;
- rtc::scoped_refptr<DataChannelInterface> CreateDataChannel(
+ RTCErrorOr<rtc::scoped_refptr<DataChannelInterface>> CreateDataChannelOrError(
const std::string& label,
const DataChannelInit* config) override;
// WARNING: LEGACY. See peerconnectioninterface.h
diff --git a/pc/peer_connection_wrapper.cc b/pc/peer_connection_wrapper.cc
index 6aed8f1..3b4d28f 100644
--- a/pc/peer_connection_wrapper.cc
+++ b/pc/peer_connection_wrapper.cc
@@ -306,7 +306,14 @@
rtc::scoped_refptr<DataChannelInterface>
PeerConnectionWrapper::CreateDataChannel(const std::string& label) {
- return pc()->CreateDataChannel(label, nullptr);
+ auto result = pc()->CreateDataChannelOrError(label, nullptr);
+ if (!result.ok()) {
+ RTC_LOG(LS_ERROR) << "CreateDataChannel failed: "
+ << ToString(result.error().type()) << " "
+ << result.error().message();
+ return nullptr;
+ }
+ return result.MoveValue();
}
PeerConnectionInterface::SignalingState
diff --git a/pc/test/fake_peer_connection_base.h b/pc/test/fake_peer_connection_base.h
index 1acf86f..7970dd0 100644
--- a/pc/test/fake_peer_connection_base.h
+++ b/pc/test/fake_peer_connection_base.h
@@ -120,10 +120,11 @@
return nullptr;
}
- rtc::scoped_refptr<DataChannelInterface> CreateDataChannel(
+ RTCErrorOr<rtc::scoped_refptr<DataChannelInterface>> CreateDataChannelOrError(
const std::string& label,
const DataChannelInit* config) override {
- return nullptr;
+ return RTCError(RTCErrorType::UNSUPPORTED_OPERATION,
+ "Fake function called");
}
const SessionDescriptionInterface* local_description() const override {
diff --git a/pc/test/peer_connection_test_wrapper.cc b/pc/test/peer_connection_test_wrapper.cc
index 56e81ec..8fdfb1b 100644
--- a/pc/test/peer_connection_test_wrapper.cc
+++ b/pc/test/peer_connection_test_wrapper.cc
@@ -140,7 +140,14 @@
PeerConnectionTestWrapper::CreateDataChannel(
const std::string& label,
const webrtc::DataChannelInit& init) {
- return peer_connection_->CreateDataChannel(label, &init);
+ auto result = peer_connection_->CreateDataChannelOrError(label, &init);
+ if (!result.ok()) {
+ RTC_LOG(LS_ERROR) << "CreateDataChannel failed: "
+ << ToString(result.error().type()) << " "
+ << result.error().message();
+ return nullptr;
+ }
+ return result.MoveValue();
}
void PeerConnectionTestWrapper::WaitForNegotiation() {