Chromium Code Reviews| Index: webrtc/api/peerconnection.cc |
| diff --git a/webrtc/api/peerconnection.cc b/webrtc/api/peerconnection.cc |
| index 4ccd6e83adef931dac9d4cc9f1da853024670a6b..495948f0d7bfa876376cc680435aee2f2b1a7d9f 100644 |
| --- a/webrtc/api/peerconnection.cc |
| +++ b/webrtc/api/peerconnection.cc |
| @@ -907,6 +907,23 @@ PeerConnection::CreateDataChannel( |
| const std::string& label, |
| const DataChannelInit* config) { |
| TRACE_EVENT0("webrtc", "PeerConnection::CreateDataChannel"); |
| +#ifdef HAVE_QUIC |
| + if (session_->data_channel_type() == cricket::DCT_QUIC) { |
| + // TODO(zhihuang): Handle case when config is NULL. |
| + if (!config) { |
| + LOG(LS_ERROR) << "Missing config for QUIC data channel."; |
| + return nullptr; |
| + } |
| + // TODO(zhihuang): Allow unreliable or ordered QUIC data channels. |
| + if (!config->reliable || config->ordered) { |
| + LOG(LS_ERROR) << "QUIC data channel does not implement unreliable or " |
| + "ordered delivery."; |
| + return nullptr; |
| + } |
| + return session_->quic_data_transport()->CreateDataChannel(label, config); |
| + } |
| +#endif // HAVE_QUIC |
| + |
| bool first_datachannel = !HasDataChannels(); |
| std::unique_ptr<InternalDataChannelInit> internal_config; |
| @@ -1618,8 +1635,11 @@ bool PeerConnection::GetOptionsForOffer( |
| (session_options->has_audio() || session_options->has_video() || |
| session_options->has_data()); |
| - if (session_->data_channel_type() == cricket::DCT_SCTP && HasDataChannels()) { |
| - session_options->data_channel_type = cricket::DCT_SCTP; |
| + // Intentionally unset the data channel type for RTP data channel with second |
| + // condition. Otherwise the unit tests in WebRtcDataBrowserTest will fail when |
|
Taylor Brandstetter
2016/08/04 22:53:20
Maybe also add "and RTP data channels would be suc
|
| + // building with chromium. |
| + if (HasDataChannels() && session_->data_channel_type() != cricket::DCT_RTP) { |
| + session_options->data_channel_type = session_->data_channel_type(); |
| } |
| session_options->rtcp_cname = rtcp_cname_; |
| @@ -1648,8 +1668,11 @@ void PeerConnection::FinishOptionsForAnswer( |
| // RTP data channel is handled in MediaSessionOptions::AddStream. SCTP streams |
| // are not signaled in the SDP so does not go through that path and must be |
| // handled here. |
| - if (session_->data_channel_type() == cricket::DCT_SCTP) { |
| - session_options->data_channel_type = cricket::DCT_SCTP; |
| + // Intentionally unset the data channel type for RTP data channel.Otherwise |
| + // the unit tests in WebRtcDataBrowserTest will fail when building with |
| + // chromium. |
| + if (session_->data_channel_type() != cricket::DCT_RTP) { |
| + session_options->data_channel_type = session_->data_channel_type(); |
| } |
| session_options->crypto_options = factory_->options().crypto_options; |
| } |
| @@ -2054,7 +2077,13 @@ rtc::scoped_refptr<DataChannel> PeerConnection::InternalCreateDataChannel( |
| } |
| bool PeerConnection::HasDataChannels() const { |
| +#ifdef HAVE_QUIC |
| + return !rtp_data_channels_.empty() || !sctp_data_channels_.empty() || |
| + (session_->quic_data_transport() && |
| + session_->quic_data_transport()->HasDataChannels()); |
| +#else |
| return !rtp_data_channels_.empty() || !sctp_data_channels_.empty(); |
| +#endif // HAVE_QUIC |
| } |
| void PeerConnection::AllocateSctpSids(rtc::SSLRole role) { |