| Index: webrtc/p2p/base/turnserver.cc | 
| diff --git a/webrtc/p2p/base/turnserver.cc b/webrtc/p2p/base/turnserver.cc | 
| index 26d306d519f052b7901713a018ddf73e13e5380e..368bea19fd97a8bc6eb12b21f22d21977ff602f5 100644 | 
| --- a/webrtc/p2p/base/turnserver.cc | 
| +++ b/webrtc/p2p/base/turnserver.cc | 
| @@ -12,19 +12,20 @@ | 
|  | 
| #include <tuple>  // for std::tie | 
|  | 
| -#include "webrtc/p2p/base/asyncstuntcpsocket.h" | 
| -#include "webrtc/p2p/base/common.h" | 
| -#include "webrtc/p2p/base/packetsocketfactory.h" | 
| -#include "webrtc/p2p/base/stun.h" | 
| #include "webrtc/base/bind.h" | 
| #include "webrtc/base/bytebuffer.h" | 
| #include "webrtc/base/checks.h" | 
| #include "webrtc/base/helpers.h" | 
| #include "webrtc/base/logging.h" | 
| #include "webrtc/base/messagedigest.h" | 
| +#include "webrtc/base/ptr_util.h" | 
| #include "webrtc/base/socketadapters.h" | 
| #include "webrtc/base/stringencode.h" | 
| #include "webrtc/base/thread.h" | 
| +#include "webrtc/p2p/base/asyncstuntcpsocket.h" | 
| +#include "webrtc/p2p/base/common.h" | 
| +#include "webrtc/p2p/base/packetsocketfactory.h" | 
| +#include "webrtc/p2p/base/stun.h" | 
|  | 
| namespace cricket { | 
|  | 
| @@ -113,7 +114,7 @@ static bool InitErrorResponse(const StunMessage* req, int code, | 
| return false; | 
| resp->SetType(resp_type); | 
| resp->SetTransactionID(req->transaction_id()); | 
| -  resp->AddAttribute(new cricket::StunErrorCodeAttribute( | 
| +  resp->AddAttribute(rtc::MakeUnique<cricket::StunErrorCodeAttribute>( | 
| STUN_ATTR_ERROR_CODE, code, reason)); | 
| return true; | 
| } | 
| @@ -353,10 +354,9 @@ void TurnServer::HandleBindingRequest(TurnServerConnection* conn, | 
| InitResponse(req, &response); | 
|  | 
| // Tell the user the address that we received their request from. | 
| -  StunAddressAttribute* mapped_addr_attr; | 
| -  mapped_addr_attr = new StunXorAddressAttribute( | 
| +  auto mapped_addr_attr = rtc::MakeUnique<StunXorAddressAttribute>( | 
| STUN_ATTR_XOR_MAPPED_ADDRESS, conn->src()); | 
| -  response.AddAttribute(mapped_addr_attr); | 
| +  response.AddAttribute(std::move(mapped_addr_attr)); | 
|  | 
| SendStun(conn, &response); | 
| } | 
| @@ -470,10 +470,10 @@ void TurnServer::SendErrorResponseWithRealmAndNonce( | 
| timestamp = ts_for_next_nonce_; | 
| ts_for_next_nonce_ = 0; | 
| } | 
| +  resp.AddAttribute(rtc::MakeUnique<StunByteStringAttribute>( | 
| +      STUN_ATTR_NONCE, GenerateNonce(timestamp))); | 
| resp.AddAttribute( | 
| -      new StunByteStringAttribute(STUN_ATTR_NONCE, GenerateNonce(timestamp))); | 
| -  resp.AddAttribute(new StunByteStringAttribute( | 
| -      STUN_ATTR_REALM, realm_)); | 
| +      rtc::MakeUnique<StunByteStringAttribute>(STUN_ATTR_REALM, realm_)); | 
| SendStun(conn, &resp); | 
| } | 
|  | 
| @@ -483,8 +483,8 @@ void TurnServer::SendErrorResponseWithAlternateServer( | 
| TurnMessage resp; | 
| InitErrorResponse(msg, STUN_ERROR_TRY_ALTERNATE, | 
| STUN_ERROR_REASON_TRY_ALTERNATE_SERVER, &resp); | 
| -  resp.AddAttribute(new StunAddressAttribute( | 
| -      STUN_ATTR_ALTERNATE_SERVER, addr)); | 
| +  resp.AddAttribute( | 
| +      rtc::MakeUnique<StunAddressAttribute>(STUN_ATTR_ALTERNATE_SERVER, addr)); | 
| SendStun(conn, &resp); | 
| } | 
|  | 
| @@ -492,8 +492,8 @@ void TurnServer::SendStun(TurnServerConnection* conn, StunMessage* msg) { | 
| rtc::ByteBufferWriter buf; | 
| // Add a SOFTWARE attribute if one is set. | 
| if (!software_.empty()) { | 
| -    msg->AddAttribute( | 
| -        new StunByteStringAttribute(STUN_ATTR_SOFTWARE, software_)); | 
| +    msg->AddAttribute(rtc::MakeUnique<StunByteStringAttribute>( | 
| +        STUN_ATTR_SOFTWARE, software_)); | 
| } | 
| msg->Write(&buf); | 
| Send(conn, buf); | 
| @@ -651,16 +651,15 @@ void TurnServerAllocation::HandleAllocateRequest(const TurnMessage* msg) { | 
| TurnMessage response; | 
| InitResponse(msg, &response); | 
|  | 
| -  StunAddressAttribute* mapped_addr_attr = | 
| -      new StunXorAddressAttribute(STUN_ATTR_XOR_MAPPED_ADDRESS, conn_.src()); | 
| -  StunAddressAttribute* relayed_addr_attr = | 
| -      new StunXorAddressAttribute(STUN_ATTR_XOR_RELAYED_ADDRESS, | 
| -          external_socket_->GetLocalAddress()); | 
| -  StunUInt32Attribute* lifetime_attr = | 
| -      new StunUInt32Attribute(STUN_ATTR_LIFETIME, lifetime_secs); | 
| -  response.AddAttribute(mapped_addr_attr); | 
| -  response.AddAttribute(relayed_addr_attr); | 
| -  response.AddAttribute(lifetime_attr); | 
| +  auto mapped_addr_attr = rtc::MakeUnique<StunXorAddressAttribute>( | 
| +      STUN_ATTR_XOR_MAPPED_ADDRESS, conn_.src()); | 
| +  auto relayed_addr_attr = rtc::MakeUnique<StunXorAddressAttribute>( | 
| +      STUN_ATTR_XOR_RELAYED_ADDRESS, external_socket_->GetLocalAddress()); | 
| +  auto lifetime_attr = | 
| +      rtc::MakeUnique<StunUInt32Attribute>(STUN_ATTR_LIFETIME, lifetime_secs); | 
| +  response.AddAttribute(std::move(mapped_addr_attr)); | 
| +  response.AddAttribute(std::move(relayed_addr_attr)); | 
| +  response.AddAttribute(std::move(lifetime_attr)); | 
|  | 
| SendResponse(&response); | 
| } | 
| @@ -680,9 +679,9 @@ void TurnServerAllocation::HandleRefreshRequest(const TurnMessage* msg) { | 
| TurnMessage response; | 
| InitResponse(msg, &response); | 
|  | 
| -  StunUInt32Attribute* lifetime_attr = | 
| -      new StunUInt32Attribute(STUN_ATTR_LIFETIME, lifetime_secs); | 
| -  response.AddAttribute(lifetime_attr); | 
| +  auto lifetime_attr = | 
| +      rtc::MakeUnique<StunUInt32Attribute>(STUN_ATTR_LIFETIME, lifetime_secs); | 
| +  response.AddAttribute(std::move(lifetime_attr)); | 
|  | 
| SendResponse(&response); | 
| } | 
| @@ -819,10 +818,10 @@ void TurnServerAllocation::OnExternalPacket( | 
| msg.SetType(TURN_DATA_INDICATION); | 
| msg.SetTransactionID( | 
| rtc::CreateRandomString(kStunTransactionIdLength)); | 
| -    msg.AddAttribute(new StunXorAddressAttribute( | 
| +    msg.AddAttribute(rtc::MakeUnique<StunXorAddressAttribute>( | 
| STUN_ATTR_XOR_PEER_ADDRESS, addr)); | 
| -    msg.AddAttribute(new StunByteStringAttribute( | 
| -        STUN_ATTR_DATA, data, size)); | 
| +    msg.AddAttribute( | 
| +        rtc::MakeUnique<StunByteStringAttribute>(STUN_ATTR_DATA, data, size)); | 
| server_->SendStun(&conn_, &msg); | 
| } else { | 
| LOG_J(LS_WARNING, this) << "Received external packet without permission, " | 
|  |