Chromium Code Reviews| Index: chrome/browser/chrome_benchmarking_message_filter.cc |
| diff --git a/chrome/browser/chrome_benchmarking_message_filter.cc b/chrome/browser/chrome_benchmarking_message_filter.cc |
| index 577679c811f9473578fb426dd42ed9c8932096b4..3421192daefe3e18283f1ea279421ae9a995fad4 100644 |
| --- a/chrome/browser/chrome_benchmarking_message_filter.cc |
| +++ b/chrome/browser/chrome_benchmarking_message_filter.cc |
| @@ -4,7 +4,10 @@ |
| #include "chrome/browser/chrome_benchmarking_message_filter.h" |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| #include "base/command_line.h" |
| +#include "base/memory/scoped_ptr.h" |
| #include "chrome/browser/net/chrome_url_request_context.h" |
| #include "chrome/browser/net/predictor.h" |
| #include "chrome/browser/profiles/profile.h" |
| @@ -19,18 +22,17 @@ |
| namespace { |
| -class ClearCacheCompletion : public net::OldCompletionCallback { |
| +class ClearCacheHelper { |
| public: |
| - ClearCacheCompletion(ChromeBenchmarkingMessageFilter* filter, |
| - IPC::Message* reply_msg) |
| + ClearCacheHelper(ChromeBenchmarkingMessageFilter* filter, |
|
awong
2011/12/12 18:52:58
Can this be reduced to just a single function that
James Hawkins
2011/12/12 20:40:22
No, the callback being used is a CompletionCallbac
|
| + IPC::Message* reply_msg) |
| : filter_(filter), |
| reply_msg_(reply_msg) { |
| } |
| - virtual void RunWithParams(const Tuple1<int>& params) { |
| - ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, params.a); |
| + void Run(int result) { |
| + ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, result); |
| filter_->Send(reply_msg_); |
| - delete this; |
| } |
| private: |
| @@ -46,21 +48,25 @@ class DoomEntriesHelper { |
| : backend_(backend), |
| entry_(NULL), |
| iter_(NULL), |
| - ALLOW_THIS_IN_INITIALIZER_LIST(callback_(this, |
| - &DoomEntriesHelper::CacheCallback)), |
| - user_callback_(NULL) { |
| + ALLOW_THIS_IN_INITIALIZER_LIST(callback_( |
| + base::Bind(&DoomEntriesHelper::CacheCallback, |
| + base::Unretained(this)))), |
| + clear_cache_helper_(NULL) { |
| } |
| - void ClearCache(ClearCacheCompletion* callback) { |
| - user_callback_ = callback; |
| + // Takes ownership of |callback|. |
| + void ClearCache(ClearCacheHelper* helper) { |
| + clear_cache_helper_.reset(helper); |
| return CacheCallback(net::OK); // Start clearing the cache. |
| } |
| + const net::CompletionCallback& callback() { return callback_; } |
| + |
| private: |
| void CacheCallback(int result) { |
| do { |
| if (result != net::OK) { |
| - user_callback_->RunWithParams(Tuple1<int>(result)); |
| + clear_cache_helper_->Run(result); |
| delete this; |
| return; |
| } |
| @@ -76,15 +82,15 @@ class DoomEntriesHelper { |
| entry_->Close(); |
| entry_ = NULL; |
| } |
| - result = backend_->OpenNextEntry(&iter_, &entry_, &callback_); |
| + result = backend_->OpenNextEntry(&iter_, &entry_, callback_); |
| } while (result != net::ERR_IO_PENDING); |
| } |
| disk_cache::Backend* backend_; |
| disk_cache::Entry* entry_; |
| void* iter_; |
| - net::OldCompletionCallbackImpl<DoomEntriesHelper> callback_; |
| - ClearCacheCompletion* user_callback_; |
| + net::CompletionCallback callback_; |
| + scoped_ptr<ClearCacheHelper> clear_cache_helper_; |
| }; |
| } // namespace |
| @@ -132,20 +138,20 @@ void ChromeBenchmarkingMessageFilter::OnClearCache(bool preserve_ssl_host_info, |
| disk_cache::Backend* backend = request_context_->GetURLRequestContext()-> |
| http_transaction_factory()->GetCache()->GetCurrentBackend(); |
| if (backend) { |
| - ClearCacheCompletion* callback = |
| - new ClearCacheCompletion(this, reply_msg); |
| + scoped_ptr<ClearCacheHelper> clear_cache_helper( |
| + new ClearCacheHelper(this, reply_msg)); |
| if (preserve_ssl_host_info) { |
| DoomEntriesHelper* helper = new DoomEntriesHelper(backend); |
| - helper->ClearCache(callback); // Will self clean. |
| + helper->ClearCache(clear_cache_helper.release()); // Will self clean. |
| return; |
| } else { |
| - rv = backend->DoomAllEntries(callback); |
| + rv = backend->DoomAllEntries( |
| + base::Bind(&ClearCacheHelper::Run, |
| + base::Owned(clear_cache_helper.release()))); |
| if (rv == net::ERR_IO_PENDING) { |
| // The callback will send the reply. |
| return; |
| } |
| - // Completed synchronously, no need for the callback. |
| - delete callback; |
| } |
| } |
| ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg, rv); |