Index: content/browser/media/webrtc_identity_store.cc |
diff --git a/content/browser/media/webrtc_identity_store.cc b/content/browser/media/webrtc_identity_store.cc |
index 1c778624ccf2732ce039f33889ecacc905f590a2..32498a270971991e9ab79f00ba672bea38d64286 100644 |
--- a/content/browser/media/webrtc_identity_store.cc |
+++ b/content/browser/media/webrtc_identity_store.cc |
@@ -187,30 +187,30 @@ base::Closure WebRTCIdentityStore::RequestIdentity( |
const std::string& common_name, |
const CompletionCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
- |
- WebRTCIdentityRequestHandle* handle = |
- new WebRTCIdentityRequestHandle(this, callback); |
- |
WebRTCIdentityRequest* request = |
FindRequest(origin, identity_name, common_name); |
- |
// If there is no identical request in flight, create a new one, queue it, |
// and make the backend request. |
if (!request) { |
- request = new WebRTCIdentityRequest(origin, identity_name, common_name); |
+ scoped_ptr<WebRTCIdentityRequest> new_request( |
+ new WebRTCIdentityRequest(origin, identity_name, common_name)); |
if (!backend_->FindIdentity( |
origin, |
identity_name, |
common_name, |
base::Bind( |
- &WebRTCIdentityStore::BackendFindCallback, this, request))) { |
- delete request; |
+ &WebRTCIdentityStore::BackendFindCallback, |
+ this, new_request.get()))) { |
return base::Closure(); |
} |
+ // |request| will delete itself after the result is posted. |
+ request = new_request.release(); |
Ami GONE FROM CHROMIUM
2013/08/12 17:56:34
TBH I think the old code made it easier to see how
|
in_flight_requests_.push_back(request); |
} |
+ WebRTCIdentityRequestHandle* handle = |
+ new WebRTCIdentityRequestHandle(this, callback); |
request->AddCallback( |
handle, |
base::Bind(&WebRTCIdentityRequestHandle::OnRequestComplete, |