From 4d7160e41dabb373d6da85b9b8df6d9c5e7b53eb Mon Sep 17 00:00:00 2001 From: Harald Alvestrand Date: Fri, 12 Apr 2019 07:01:29 +0200 Subject: [PATCH] Code cleanup: Make JsepSessionDescription::Initialize take std::unique_ptr Bug: none Change-Id: I5e03ff6a6f16bd2e67fa4830e218b510b702d1d4 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/132321 Commit-Queue: Harald Alvestrand Reviewed-by: Karl Wiberg Cr-Commit-Position: refs/heads/master@{#27577} --- api/jsep_session_description.h | 6 +- pc/jsep_session_description.cc | 13 +++- pc/jsep_session_description_unittest.cc | 13 ++-- pc/jsep_transport_controller_unittest.cc | 6 +- pc/media_session_unittest.cc | 2 +- pc/peer_connection_interface_unittest.cc | 3 +- pc/sdp_utils.cc | 2 +- pc/session_description.cc | 11 +++- pc/session_description.h | 3 + pc/webrtc_sdp.cc | 2 +- pc/webrtc_sdp_unittest.cc | 81 ++++++++++++------------ 11 files changed, 79 insertions(+), 63 deletions(-) diff --git a/api/jsep_session_description.h b/api/jsep_session_description.h index 75ae0cdae1..2797c881fe 100644 --- a/api/jsep_session_description.h +++ b/api/jsep_session_description.h @@ -44,8 +44,10 @@ class JsepSessionDescription : public SessionDescriptionInterface { virtual ~JsepSessionDescription(); // Takes ownership of |description|. - // TODO(deadbeef): Make this use an std::unique_ptr<>, so ownership logic is - // more clear. + bool Initialize(std::unique_ptr description, + const std::string& session_id, + const std::string& session_version); + // Backwards compatible version. To be deprecated. bool Initialize(cricket::SessionDescription* description, const std::string& session_id, const std::string& session_version); diff --git a/pc/jsep_session_description.cc b/pc/jsep_session_description.cc index 88db17414f..90b12a4125 100644 --- a/pc/jsep_session_description.cc +++ b/pc/jsep_session_description.cc @@ -150,7 +150,7 @@ std::unique_ptr CreateSessionDescription( std::unique_ptr description) { auto jsep_description = absl::make_unique(type); bool initialize_success = jsep_description->Initialize( - description.release(), session_id, session_version); + std::move(description), session_id, session_version); RTC_DCHECK(initialize_success); return std::move(jsep_description); } @@ -185,7 +185,7 @@ JsepSessionDescription::JsepSessionDescription( JsepSessionDescription::~JsepSessionDescription() {} bool JsepSessionDescription::Initialize( - cricket::SessionDescription* description, + std::unique_ptr description, const std::string& session_id, const std::string& session_version) { if (!description) @@ -193,11 +193,18 @@ bool JsepSessionDescription::Initialize( session_id_ = session_id; session_version_ = session_version; - description_.reset(description); + description_ = std::move(description); candidate_collection_.resize(number_of_mediasections()); return true; } +bool JsepSessionDescription::Initialize( + cricket::SessionDescription* description, + const std::string& session_id, + const std::string& session_version) { + return Initialize(absl::WrapUnique(description), session_id, session_version); +} + bool JsepSessionDescription::AddCandidate( const IceCandidateInterface* candidate) { if (!candidate || candidate->sdp_mline_index() < 0) diff --git a/pc/jsep_session_description_unittest.cc b/pc/jsep_session_description_unittest.cc index 674b6e72f3..aca9dd80c2 100644 --- a/pc/jsep_session_description_unittest.cc +++ b/pc/jsep_session_description_unittest.cc @@ -53,15 +53,14 @@ static const uint32_t kCandidateGeneration = 2; // This creates a session description with both audio and video media contents. // In SDP this is described by two m lines, one audio and one video. -static cricket::SessionDescription* CreateCricketSessionDescription() { - cricket::SessionDescription* desc(new cricket::SessionDescription()); - // AudioContentDescription - std::unique_ptr audio( - new cricket::AudioContentDescription()); +static std::unique_ptr +CreateCricketSessionDescription() { + auto desc = absl::make_unique(); + // AudioContentDescription + auto audio = absl::make_unique(); // VideoContentDescription - std::unique_ptr video( - new cricket::VideoContentDescription()); + auto video = absl::make_unique(); audio->AddCodec(cricket::AudioCodec(103, "ISAC", 16000, 0, 0)); desc->AddContent(cricket::CN_AUDIO, MediaProtocolType::kRtp, audio.release()); diff --git a/pc/jsep_transport_controller_unittest.cc b/pc/jsep_transport_controller_unittest.cc index b18f85a5ba..e81b667514 100644 --- a/pc/jsep_transport_controller_unittest.cc +++ b/pc/jsep_transport_controller_unittest.cc @@ -2089,13 +2089,13 @@ TEST_F(JsepTransportControllerTest, ChangeTaggedMediaSectionMaxBundle) { .ok()); std::unique_ptr remote_answer( - local_offer->Copy()); + local_offer->Clone()); EXPECT_TRUE(transport_controller_ ->SetRemoteDescription(SdpType::kAnswer, remote_answer.get()) .ok()); std::unique_ptr local_reoffer( - local_offer->Copy()); + local_offer->Clone()); local_reoffer->contents()[0].rejected = true; AddVideoSection(local_reoffer.get(), kVideoMid1, kIceUfrag1, kIcePwd1, cricket::ICEMODE_FULL, cricket::CONNECTIONROLE_ACTPASS, @@ -2110,7 +2110,7 @@ TEST_F(JsepTransportControllerTest, ChangeTaggedMediaSectionMaxBundle) { .ok()); std::unique_ptr remote_reanswer( - local_reoffer->Copy()); + local_reoffer->Clone()); EXPECT_TRUE( transport_controller_ ->SetRemoteDescription(SdpType::kAnswer, remote_reanswer.get()) diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc index efd231804d..11366071ce 100644 --- a/pc/media_session_unittest.cc +++ b/pc/media_session_unittest.cc @@ -3191,7 +3191,7 @@ TEST(MediaSessionDescription, CopySessionDescription) { vcd->AddLegacyStream(2); source.AddContent(cricket::CN_VIDEO, MediaProtocolType::kRtp, vcd); - std::unique_ptr copy(source.Copy()); + std::unique_ptr copy = source.Clone(); ASSERT_TRUE(copy.get() != NULL); EXPECT_TRUE(copy->HasGroup(cricket::CN_AUDIO)); const ContentInfo* ac = copy->GetContentByName("audio"); diff --git a/pc/peer_connection_interface_unittest.cc b/pc/peer_connection_interface_unittest.cc index 21f6a05e08..e69fc96fe5 100644 --- a/pc/peer_connection_interface_unittest.cc +++ b/pc/peer_connection_interface_unittest.cc @@ -3175,8 +3175,7 @@ TEST_P(PeerConnectionInterfaceTest, std::unique_ptr modified_offer = webrtc::CreateSessionDescription( webrtc::SdpType::kOffer, offer->session_id(), - offer->session_version(), - absl::WrapUnique(offer->description()->Copy())); + offer->session_version(), offer->description()->Clone()); EXPECT_TRUE(DoSetLocalDescription(std::move(offer))); auto senders = pc_->GetSenders(); diff --git a/pc/sdp_utils.cc b/pc/sdp_utils.cc index 6a899affe7..e6cd07f3d3 100644 --- a/pc/sdp_utils.cc +++ b/pc/sdp_utils.cc @@ -29,7 +29,7 @@ std::unique_ptr CloneSessionDescriptionAsType( SdpType type) { RTC_DCHECK(sdesc); auto clone = absl::make_unique(type); - clone->Initialize(sdesc->description()->Copy(), sdesc->session_id(), + clone->Initialize(sdesc->description()->Clone(), sdesc->session_id(), sdesc->session_version()); // As of writing, our version of GCC does not allow returning a unique_ptr of // a subclass as a unique_ptr of a base class. To get around this, we need to diff --git a/pc/session_description.cc b/pc/session_description.cc index a081f8a3ed..d4ccb5082e 100644 --- a/pc/session_description.cc +++ b/pc/session_description.cc @@ -10,9 +10,11 @@ #include "pc/session_description.h" +#include #include #include "absl/algorithm/container.h" +#include "absl/memory/memory.h" #include "rtc_base/checks.h" namespace cricket { @@ -94,8 +96,9 @@ SessionDescription::~SessionDescription() { } } -SessionDescription* SessionDescription::Copy() const { - SessionDescription* copy = new SessionDescription(*this); +std::unique_ptr SessionDescription::Clone() const { + // Copy the non-special portions using the private copy constructor. + auto copy = absl::WrapUnique(new SessionDescription(*this)); // Copy all ContentDescriptions. for (ContentInfos::iterator content = copy->contents_.begin(); content != copy->contents().end(); ++content) { @@ -104,6 +107,10 @@ SessionDescription* SessionDescription::Copy() const { return copy; } +SessionDescription* SessionDescription::Copy() const { + return Clone().release(); +} + const ContentInfo* SessionDescription::GetContentByName( const std::string& name) const { return FindContentInfoByName(contents_, name); diff --git a/pc/session_description.h b/pc/session_description.h index 4156683030..7b70ddf556 100644 --- a/pc/session_description.h +++ b/pc/session_description.h @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -421,6 +422,8 @@ class SessionDescription { SessionDescription(); ~SessionDescription(); + std::unique_ptr Clone() const; + // Older API - to be deprecated. Still expects caller to take ownership. SessionDescription* Copy() const; struct MediaTransportSetting; diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc index a119503b8b..b524a75654 100644 --- a/pc/webrtc_sdp.cc +++ b/pc/webrtc_sdp.cc @@ -998,7 +998,7 @@ bool SdpDeserialize(const std::string& message, return false; } - jdesc->Initialize(desc.release(), session_id, session_version); + jdesc->Initialize(std::move(desc), session_id, session_version); for (const auto& candidate : candidates) { jdesc->AddCandidate(candidate.get()); diff --git a/pc/webrtc_sdp_unittest.cc b/pc/webrtc_sdp_unittest.cc index 1fa7ba4b40..3de2b602dd 100644 --- a/pc/webrtc_sdp_unittest.cc +++ b/pc/webrtc_sdp_unittest.cc @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -1130,7 +1131,7 @@ class WebRtcSdpTest : public ::testing::Test { new JsepIceCandidate(std::string("audio_content_name"), 0, candidate1)); // Set up JsepSessionDescription. - jdesc_.Initialize(desc_.Copy(), kSessionId, kSessionVersion); + jdesc_.Initialize(desc_.Clone(), kSessionId, kSessionVersion); std::string mline_id; int mline_index = 0; for (size_t i = 0; i < candidates_.size(); ++i) { @@ -1178,7 +1179,7 @@ class WebRtcSdpTest : public ::testing::Test { group.AddContentName(kVideoContentName); desc_.AddGroup(group); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); } @@ -1214,7 +1215,7 @@ class WebRtcSdpTest : public ::testing::Test { desc_.AddContent(kAudioContentName, MediaProtocolType::kRtp, audio_desc_); desc_.AddContent(kVideoContentName, MediaProtocolType::kRtp, video_desc_); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); } @@ -1263,7 +1264,7 @@ class WebRtcSdpTest : public ::testing::Test { kVideoContentName3, TransportDescription(kUfragVideo3, kPwdVideo3))); desc_.set_msid_signaling(cricket::kMsidSignalingMediaSection); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); } @@ -1318,7 +1319,7 @@ class WebRtcSdpTest : public ::testing::Test { desc_.AddTransportInfo(TransportInfo( kAudioContentName3, TransportDescription(kUfragVoice3, kPwdVoice3))); desc_.set_msid_signaling(msid_signaling); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); } @@ -1340,7 +1341,7 @@ class WebRtcSdpTest : public ::testing::Test { // Enable signaling a=msid lines. desc_.set_msid_signaling(cricket::kMsidSignalingMediaSection); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); } @@ -1724,7 +1725,7 @@ class WebRtcSdpTest : public ::testing::Test { std::string new_sdp = kSdpFullString; ReplaceDirection(direction, &new_sdp); - if (!jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + if (!jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())) { return false; } @@ -1802,7 +1803,7 @@ class WebRtcSdpTest : public ::testing::Test { audio_desc_->set_direction(direction); video_desc_->set_direction(direction); - if (!jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + if (!jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())) { return false; } @@ -1829,7 +1830,7 @@ class WebRtcSdpTest : public ::testing::Test { SetIceUfragPwd(kVideoContentName, video_rejected ? "" : kUfragVideo, video_rejected ? "" : kPwdVideo); JsepSessionDescription jdesc_no_candidates(kDummyType); - if (!jdesc_no_candidates.Initialize(desc_.Copy(), jdesc_.session_id(), + if (!jdesc_no_candidates.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())) { return false; } @@ -1842,7 +1843,7 @@ class WebRtcSdpTest : public ::testing::Test { bool encrypted) { AddExtmap(encrypted); JsepSessionDescription new_jdesc(SdpType::kOffer); - ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(new_jdesc.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); JsepSessionDescription jdesc_with_extmap(SdpType::kOffer); std::string sdp_with_extmap = kSdpString; @@ -2035,7 +2036,7 @@ class WebRtcSdpTest : public ::testing::Test { rtc::SocketAddress video_addr("0.0.0.0", 9); audio_desc_->set_connection_address(audio_addr); video_desc_->set_connection_address(video_addr); - ASSERT_TRUE(jdesc->Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc->Initialize(desc_.Clone(), kSessionId, kSessionVersion)); } protected: @@ -2119,7 +2120,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithBundle) { group.AddContentName(kAudioContentName); group.AddContentName(kVideoContentName); desc_.AddGroup(group); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_bundle = kSdpFullString; @@ -2134,7 +2135,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithBandwidth) { vcd->set_bandwidth(100 * 1000); AudioContentDescription* acd = GetFirstAudioContentDescription(&desc_); acd->set_bandwidth(50 * 1000); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_bandwidth = kSdpFullString; @@ -2154,7 +2155,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithIceOptions) { transport_options.push_back(kIceOption2); transport_options.push_back(kIceOption3); AddIceOptions(kVideoContentName, transport_options); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_ice_options = kSdpFullString; @@ -2295,7 +2296,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithExtmapEncrypted) { AddExtmap(encrypted); JsepSessionDescription desc_with_extmap(kDummyType); ASSERT_TRUE( - desc_with_extmap.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + desc_with_extmap.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); TestSerialize(desc_with_extmap); } @@ -2356,7 +2357,7 @@ TEST_F(WebRtcSdpTest, SerializeSessionDescriptionWithH264) { h264_codec.SetParam("packetization-mode", "1"); video_desc_->AddCodec(h264_codec); - jdesc_.Initialize(desc_.Copy(), kSessionId, kSessionVersion); + jdesc_.Initialize(desc_.Clone(), kSessionId, kSessionVersion); std::string message = webrtc::SdpSerialize(jdesc_); size_t after_pt = message.find(" H264/90000"); @@ -2414,7 +2415,7 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutCarriageReturn) { TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithoutCandidates) { // SessionDescription with desc but without candidates. JsepSessionDescription jdesc_no_candidates(kDummyType); - ASSERT_TRUE(jdesc_no_candidates.Initialize(desc_.Copy(), kSessionId, + ASSERT_TRUE(jdesc_no_candidates.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); JsepSessionDescription new_jdesc(kDummyType); EXPECT_TRUE(SdpDeserialize(kSdpString, &new_jdesc)); @@ -2481,7 +2482,7 @@ TEST_F(WebRtcSdpTest, DeserializeJsepSessionDescriptionWithFingerprint) { // Add a DTLS a=fingerprint attribute to our session description. AddFingerprint(); JsepSessionDescription new_jdesc(kDummyType); - ASSERT_TRUE(new_jdesc.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(new_jdesc.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); JsepSessionDescription jdesc_with_fingerprint(kDummyType); @@ -2503,7 +2504,7 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithBundle) { group.AddContentName(kAudioContentName); group.AddContentName(kVideoContentName); desc_.AddGroup(group); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_bundle)); } @@ -2520,7 +2521,7 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithBandwidth) { vcd->set_bandwidth(100 * 1000); AudioContentDescription* acd = GetFirstAudioContentDescription(&desc_); acd->set_bandwidth(50 * 1000); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_bandwidth)); } @@ -2543,7 +2544,7 @@ TEST_F(WebRtcSdpTest, DeserializeSessionDescriptionWithIceOptions) { transport_options.push_back(kIceOption3); transport_options.push_back(kIceOption2); AddIceOptions(kVideoContentName, transport_options); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); EXPECT_TRUE(CompareSessionDescription(jdesc_, jdesc_with_ice_options)); } @@ -2771,7 +2772,7 @@ TEST_F(WebRtcSdpTest, DeserializeInvalidCandidiate) { TEST_F(WebRtcSdpTest, DeserializeSdpWithRtpDataChannels) { AddRtpDataChannel(); JsepSessionDescription jdesc(kDummyType); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_data = kSdpString; sdp_with_data.append(kSdpRtpDataChannelString); @@ -2787,7 +2788,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannels) { bool use_sctpmap = true; AddSctpDataChannel(use_sctpmap); JsepSessionDescription jdesc(kDummyType); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_data = kSdpString; sdp_with_data.append(kSdpSctpDataChannelString); @@ -2814,7 +2815,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpPort) { bool use_sctpmap = false; AddSctpDataChannel(use_sctpmap); JsepSessionDescription jdesc(kDummyType); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_data = kSdpString; sdp_with_data.append(kSdpSctpDataChannelStringWithSctpPort); @@ -2841,7 +2842,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsWithSctpColonPort) { bool use_sctpmap = false; AddSctpDataChannel(use_sctpmap); JsepSessionDescription jdesc(kDummyType); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_data = kSdpString; sdp_with_data.append(kSdpSctpDataChannelStringWithSctpColonPort); @@ -2912,7 +2913,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithMultiSctpPort) { bool use_sctpmap = true; AddSctpDataChannel(use_sctpmap); JsepSessionDescription jdesc(kDummyType); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_data = kSdpString; // Append m= attributes @@ -2939,7 +2940,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithCorruptedSctpDataChannels) { void MutateJsepSctpPort(JsepSessionDescription* jdesc, const SessionDescription& desc) { // take our pre-built session description and change the SCTP port. - cricket::SessionDescription* mutant = desc.Copy(); + std::unique_ptr mutant = desc.Clone(); DataContentDescription* dcdesc = mutant->GetContentDescriptionByName(kDataContentName)->as_data(); std::vector codecs(dcdesc->codecs()); @@ -2948,9 +2949,8 @@ void MutateJsepSctpPort(JsepSessionDescription* jdesc, codecs[0].SetParam(cricket::kCodecParamPort, kUnusualSctpPort); dcdesc->set_codecs(codecs); - // note: mutant's owned by jdesc now. - ASSERT_TRUE(jdesc->Initialize(mutant, kSessionId, kSessionVersion)); - mutant = NULL; + ASSERT_TRUE( + jdesc->Initialize(std::move(mutant), kSessionId, kSessionVersion)); } TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelAndUnusualPort) { @@ -3017,7 +3017,7 @@ TEST_F(WebRtcSdpTest, DeserializeSdpWithSctpDataChannelsAndBandwidth) { JsepSessionDescription jdesc(kDummyType); DataContentDescription* dcd = GetFirstDataContentDescription(&desc_); dcd->set_bandwidth(100 * 1000); - ASSERT_TRUE(jdesc.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + ASSERT_TRUE(jdesc.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); std::string sdp_with_bandwidth = kSdpString; sdp_with_bandwidth.append(kSdpSctpDataChannelString); @@ -3374,7 +3374,7 @@ TEST_F(WebRtcSdpTest, SerializeAudioFmtpWithUnknownParameter) { codecs[0].params["unknown-future-parameter"] = "SomeFutureValue"; acd->set_codecs(codecs); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_fmtp = kSdpFullString; @@ -3391,7 +3391,7 @@ TEST_F(WebRtcSdpTest, SerializeAudioFmtpWithKnownFmtpParameter) { codecs[0].params["stereo"] = "1"; acd->set_codecs(codecs); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_fmtp = kSdpFullString; @@ -3408,7 +3408,7 @@ TEST_F(WebRtcSdpTest, SerializeAudioFmtpWithPTimeAndMaxPTime) { codecs[0].params["maxptime"] = "120"; acd->set_codecs(codecs); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_fmtp = kSdpFullString; @@ -3426,7 +3426,7 @@ TEST_F(WebRtcSdpTest, SerializeVideoFmtp) { codecs[0].params["x-google-min-bitrate"] = "10"; vcd->set_codecs(codecs); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_fmtp = kSdpFullString; @@ -3497,7 +3497,7 @@ TEST_F(WebRtcSdpTest, SerializeDtlsSetupAttribute) { desc_.AddTransportInfo(audio_transport_info); desc_.AddTransportInfo(video_transport_info); - ASSERT_TRUE(jdesc_.Initialize(desc_.Copy(), jdesc_.session_id(), + ASSERT_TRUE(jdesc_.Initialize(desc_.Clone(), jdesc_.session_id(), jdesc_.session_version())); std::string message = webrtc::SdpSerialize(jdesc_); std::string sdp_with_dtlssetup = kSdpFullString; @@ -4098,7 +4098,7 @@ TEST_F(WebRtcSdpTest, SerializeAndDeserializeWithHostnameConnectionAddress) { audio_desc_->set_connection_address(hostname_addr); video_desc_->set_connection_address(hostname_addr); ASSERT_TRUE( - expected_jsep.Initialize(desc_.Copy(), kSessionId, kSessionVersion)); + expected_jsep.Initialize(desc_.Clone(), kSessionId, kSessionVersion)); // Serialization. std::string message = webrtc::SdpSerialize(expected_jsep); // Deserialization. @@ -4464,11 +4464,11 @@ TEST_F(WebRtcSdpTest, ParseMediaTransportIgnoreNonsenseAttributeLines) { } TEST_F(WebRtcSdpTest, SerializeMediaTransportSettings) { - cricket::SessionDescription* description = new cricket::SessionDescription(); + auto description = absl::make_unique(); JsepSessionDescription output(SdpType::kOffer); // JsepSessionDescription takes ownership of the description. - output.Initialize(description, "session_id", "session_version"); + output.Initialize(std::move(description), "session_id", "session_version"); output.description()->AddMediaTransportSetting("foo", "bar"); std::string serialized_out; output.ToString(&serialized_out); @@ -4478,8 +4478,7 @@ TEST_F(WebRtcSdpTest, SerializeMediaTransportSettings) { TEST_F(WebRtcSdpTest, SerializeMediaTransportSettingsTestCopy) { cricket::SessionDescription description; description.AddMediaTransportSetting("name", "setting"); - std::unique_ptr copy = - absl::WrapUnique(description.Copy()); + std::unique_ptr copy = description.Clone(); ASSERT_EQ(1u, copy->MediaTransportSettings().size()); EXPECT_EQ("name", copy->MediaTransportSettings()[0].transport_name); EXPECT_EQ("setting", copy->MediaTransportSettings()[0].transport_setting);