Chromium Code Reviews| Index: chrome/browser/safe_browsing/client_side_detection_host.cc |
| diff --git a/chrome/browser/safe_browsing/client_side_detection_host.cc b/chrome/browser/safe_browsing/client_side_detection_host.cc |
| index 0bf18a84479ac3b1e0b9ced410e7a1c18d4ebb1e..950a5ad4043648984dd964503f2232d5fe2547db 100644 |
| --- a/chrome/browser/safe_browsing/client_side_detection_host.cc |
| +++ b/chrome/browser/safe_browsing/client_side_detection_host.cc |
| @@ -115,9 +115,8 @@ class ClientSideDetectionHost::ShouldClassifyUrlRequest |
| BrowserThread::PostTask( |
| BrowserThread::IO, |
| FROM_HERE, |
| - NewRunnableMethod(this, |
| - &ShouldClassifyUrlRequest::CheckCsdWhitelist, |
| - params_.url)); |
| + base::Bind(&ShouldClassifyUrlRequest::CheckCsdWhitelist, |
| + this, params_.url)); |
| } |
| void Cancel() { |
| @@ -164,8 +163,7 @@ class ClientSideDetectionHost::ShouldClassifyUrlRequest |
| BrowserThread::PostTask( |
| BrowserThread::UI, |
| FROM_HERE, |
| - NewRunnableMethod(this, |
| - &ShouldClassifyUrlRequest::CheckCache)); |
| + base::Bind(&ShouldClassifyUrlRequest::CheckCache, this)); |
| } |
| void CheckCache() { |
| @@ -260,7 +258,7 @@ ClientSideDetectionHost* ClientSideDetectionHost::Create( |
| ClientSideDetectionHost::ClientSideDetectionHost(TabContents* tab) |
| : TabContentsObserver(tab), |
| csd_service_(NULL), |
| - cb_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| + weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), |
| unsafe_unique_page_id_(-1) { |
| DCHECK(tab); |
| csd_service_ = g_browser_process->safe_browsing_detection_service(); |
| @@ -307,7 +305,7 @@ void ClientSideDetectionHost::DidNavigateMainFrame( |
| // an interstitial for the wrong page. Note that this won't cancel |
| // the server ping back but only cancel the showing of the |
| // interstial. |
| - cb_factory_.RevokeAll(); |
| + weak_factory_.InvalidateWeakPtrs(); |
| if (!csd_service_) { |
| return; |
| @@ -378,14 +376,14 @@ void ClientSideDetectionHost::OnPhishingDetectionDone( |
| DCHECK(csd_service_); |
| // There shouldn't be any pending requests because we revoke them everytime |
| // we navigate away. |
| - DCHECK(!cb_factory_.HasPendingCallbacks()); |
| + DCHECK(!weak_factory_.HasWeakPtrs()); |
| DCHECK(browse_info_.get()); |
| // We parse the protocol buffer here. If we're unable to parse it we won't |
| // send the verdict further. |
| scoped_ptr<ClientPhishingRequest> verdict(new ClientPhishingRequest); |
| if (csd_service_ && |
| - !cb_factory_.HasPendingCallbacks() && |
| + !weak_factory_.HasWeakPtrs() && |
| browse_info_.get() && |
| verdict->ParseFromString(verdict_str) && |
| verdict->IsInitialized() && |
| @@ -402,7 +400,8 @@ void ClientSideDetectionHost::OnPhishingDetectionDone( |
| feature_extractor_->ExtractFeatures( |
| browse_info_.get(), |
| verdict.release(), |
| - NewCallback(this, &ClientSideDetectionHost::FeatureExtractionDone)); |
| + base::Bind(&ClientSideDetectionHost::FeatureExtractionDone, |
| + weak_factory_.GetWeakPtr())); |
|
awong
2011/11/21 21:59:00
To confirm, in this setup, if ClientSideDetectionH
noelutz
2011/11/21 22:13:51
It's OK of the callback is never called.
|
| } |
| browse_info_.reset(); |
| } |
| @@ -444,17 +443,17 @@ void ClientSideDetectionHost::FeatureExtractionDone( |
| } |
| VLOG(2) << "Feature extraction done (success:" << success << ") for URL: " |
| << request->url() << ". Start sending client phishing request."; |
| - ClientSideDetectionService::ClientReportPhishingRequestCallback* cb = NULL; |
| + ClientSideDetectionService::ClientReportPhishingRequestCallback callback; |
| // If the client-side verdict isn't phishing we don't care about the server |
| // response because we aren't going to display a warning. |
| if (request->is_phishing()) { |
| - cb = cb_factory_.NewCallback( |
| - &ClientSideDetectionHost::MaybeShowPhishingWarning); |
| + callback = base::Bind(&ClientSideDetectionHost::MaybeShowPhishingWarning, |
| + weak_factory_.GetWeakPtr()); |
| } |
| // Send ping even if the browser feature extraction failed. |
| csd_service_->SendClientReportPhishingRequest( |
| request, // The service takes ownership of the request object. |
| - cb); |
| + callback); |
| } |
| void ClientSideDetectionHost::Observe( |