Index: chrome/browser/safe_browsing/browser_feature_extractor.cc |
diff --git a/chrome/browser/safe_browsing/browser_feature_extractor.cc b/chrome/browser/safe_browsing/browser_feature_extractor.cc |
index ca00d9e4d10cca63c9d28bba842f818222f29675..715cfdcc95f53455a0486f6e41d87d467a9147b6 100644 |
--- a/chrome/browser/safe_browsing/browser_feature_extractor.cc |
+++ b/chrome/browser/safe_browsing/browser_feature_extractor.cc |
@@ -118,8 +118,9 @@ BrowserFeatureExtractor::BrowserFeatureExtractor( |
BrowserFeatureExtractor::~BrowserFeatureExtractor() { |
weak_factory_.InvalidateWeakPtrs(); |
// Delete all the pending extractions (delete callback and request objects). |
- STLDeleteContainerPairPointers(pending_extractions_.begin(), |
- pending_extractions_.end()); |
+ STLDeleteContainerPairFirstPointers(pending_extractions_.begin(), |
+ pending_extractions_.end()); |
+ |
// Also cancel all the pending history service queries. |
HistoryService* history; |
bool success = GetHistoryService(&history); |
@@ -132,20 +133,19 @@ BrowserFeatureExtractor::~BrowserFeatureExtractor() { |
} |
ExtractionData& extraction = it->second; |
delete extraction.first; // delete request |
- delete extraction.second; // delete callback |
} |
pending_queries_.clear(); |
} |
void BrowserFeatureExtractor::ExtractFeatures(const BrowseInfo* info, |
ClientPhishingRequest* request, |
- DoneCallback* callback) { |
+ const DoneCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
DCHECK(request); |
DCHECK(info); |
DCHECK_EQ(0U, request->url().find("http:")); |
- DCHECK(callback); |
- if (!callback) { |
+ DCHECK(!callback.is_null()); |
+ if (callback.is_null()) { |
DLOG(ERROR) << "ExtractFeatures called without a callback object"; |
return; |
} |
@@ -198,7 +198,7 @@ void BrowserFeatureExtractor::ExtractFeatures(const BrowseInfo* info, |
} |
ExtractBrowseInfoFeatures(*info, request); |
- pending_extractions_.insert(std::make_pair(request, callback)); |
+ pending_extractions_[request] = callback; |
MessageLoop::current()->PostTask( |
FROM_HERE, |
base::Bind(&BrowserFeatureExtractor::StartExtractFeatures, |
@@ -240,15 +240,13 @@ void BrowserFeatureExtractor::ExtractBrowseInfoFeatures( |
void BrowserFeatureExtractor::StartExtractFeatures( |
ClientPhishingRequest* request, |
- DoneCallback* callback) { |
+ const DoneCallback& callback) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
- ExtractionData extraction = std::make_pair(request, callback); |
- size_t removed = pending_extractions_.erase(extraction); |
+ size_t removed = pending_extractions_.erase(request); |
DCHECK_EQ(1U, removed); |
HistoryService* history; |
if (!request || !request->IsInitialized() || !GetHistoryService(&history)) { |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
CancelableRequestProvider::Handle handle = history->QueryURL( |
@@ -268,19 +266,18 @@ void BrowserFeatureExtractor::QueryUrlHistoryDone( |
history::VisitVector* visits) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
ClientPhishingRequest* request; |
- DoneCallback* callback; |
+ DoneCallback callback; |
if (!GetPendingQuery(handle, &request, &callback)) { |
DLOG(FATAL) << "No pending history query found"; |
return; |
} |
DCHECK(request); |
- DCHECK(callback); |
+ DCHECK(!callback.is_null()); |
if (!success) { |
// URL is not found in the history. In practice this should not |
// happen (unless there is a real error) because we just visited |
// that URL. |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
AddFeature(features::kUrlHistoryVisitCount, |
@@ -320,8 +317,7 @@ void BrowserFeatureExtractor::QueryUrlHistoryDone( |
// Issue next history lookup for host visits. |
HistoryService* history; |
if (!GetHistoryService(&history)) { |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
CancelableRequestProvider::Handle next_handle = |
@@ -340,16 +336,15 @@ void BrowserFeatureExtractor::QueryHttpHostVisitsDone( |
base::Time first_visit) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
ClientPhishingRequest* request; |
- DoneCallback* callback; |
+ DoneCallback callback; |
if (!GetPendingQuery(handle, &request, &callback)) { |
DLOG(FATAL) << "No pending history query found"; |
return; |
} |
DCHECK(request); |
- DCHECK(callback); |
+ DCHECK(!callback.is_null()); |
if (!success) { |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
SetHostVisitsFeatures(num_visits, first_visit, true, request); |
@@ -357,8 +352,7 @@ void BrowserFeatureExtractor::QueryHttpHostVisitsDone( |
// Same lookup but for the HTTPS URL. |
HistoryService* history; |
if (!GetHistoryService(&history)) { |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
std::string https_url = request->url(); |
@@ -378,21 +372,19 @@ void BrowserFeatureExtractor::QueryHttpsHostVisitsDone( |
base::Time first_visit) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
ClientPhishingRequest* request; |
- DoneCallback* callback; |
+ DoneCallback callback; |
if (!GetPendingQuery(handle, &request, &callback)) { |
DLOG(FATAL) << "No pending history query found"; |
return; |
} |
DCHECK(request); |
- DCHECK(callback); |
+ DCHECK(!callback.is_null()); |
if (!success) { |
- callback->Run(false, request); |
- delete callback; |
+ callback.Run(false, request); |
return; |
} |
SetHostVisitsFeatures(num_visits, first_visit, false, request); |
- callback->Run(true, request); // We're done with all the history lookups. |
- delete callback; |
+ callback.Run(true, request); // We're done with all the history lookups. |
} |
void BrowserFeatureExtractor::SetHostVisitsFeatures( |
@@ -419,7 +411,7 @@ void BrowserFeatureExtractor::SetHostVisitsFeatures( |
void BrowserFeatureExtractor::StorePendingQuery( |
CancelableRequestProvider::Handle handle, |
ClientPhishingRequest* request, |
- DoneCallback* callback) { |
+ const DoneCallback& callback) { |
DCHECK_EQ(0U, pending_queries_.count(handle)); |
pending_queries_[handle] = std::make_pair(request, callback); |
} |
@@ -427,7 +419,7 @@ void BrowserFeatureExtractor::StorePendingQuery( |
bool BrowserFeatureExtractor::GetPendingQuery( |
CancelableRequestProvider::Handle handle, |
ClientPhishingRequest** request, |
- DoneCallback** callback) { |
+ DoneCallback* callback) { |
PendingQueriesMap::iterator it = pending_queries_.find(handle); |
DCHECK(it != pending_queries_.end()); |
if (it != pending_queries_.end()) { |