| 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 3421192daefe3e18283f1ea279421ae9a995fad4..577679c811f9473578fb426dd42ed9c8932096b4 100644
|
| --- a/chrome/browser/chrome_benchmarking_message_filter.cc
|
| +++ b/chrome/browser/chrome_benchmarking_message_filter.cc
|
| @@ -4,10 +4,7 @@
|
|
|
| #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"
|
| @@ -22,17 +19,18 @@
|
|
|
| namespace {
|
|
|
| -class ClearCacheHelper {
|
| +class ClearCacheCompletion : public net::OldCompletionCallback {
|
| public:
|
| - ClearCacheHelper(ChromeBenchmarkingMessageFilter* filter,
|
| - IPC::Message* reply_msg)
|
| + ClearCacheCompletion(ChromeBenchmarkingMessageFilter* filter,
|
| + IPC::Message* reply_msg)
|
| : filter_(filter),
|
| reply_msg_(reply_msg) {
|
| }
|
|
|
| - void Run(int result) {
|
| - ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, result);
|
| + virtual void RunWithParams(const Tuple1<int>& params) {
|
| + ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, params.a);
|
| filter_->Send(reply_msg_);
|
| + delete this;
|
| }
|
|
|
| private:
|
| @@ -48,25 +46,21 @@ class DoomEntriesHelper {
|
| : backend_(backend),
|
| entry_(NULL),
|
| iter_(NULL),
|
| - ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
|
| - base::Bind(&DoomEntriesHelper::CacheCallback,
|
| - base::Unretained(this)))),
|
| - clear_cache_helper_(NULL) {
|
| + ALLOW_THIS_IN_INITIALIZER_LIST(callback_(this,
|
| + &DoomEntriesHelper::CacheCallback)),
|
| + user_callback_(NULL) {
|
| }
|
|
|
| - // Takes ownership of |callback|.
|
| - void ClearCache(ClearCacheHelper* helper) {
|
| - clear_cache_helper_.reset(helper);
|
| + void ClearCache(ClearCacheCompletion* callback) {
|
| + user_callback_ = callback;
|
| return CacheCallback(net::OK); // Start clearing the cache.
|
| }
|
|
|
| - const net::CompletionCallback& callback() { return callback_; }
|
| -
|
| private:
|
| void CacheCallback(int result) {
|
| do {
|
| if (result != net::OK) {
|
| - clear_cache_helper_->Run(result);
|
| + user_callback_->RunWithParams(Tuple1<int>(result));
|
| delete this;
|
| return;
|
| }
|
| @@ -82,15 +76,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::CompletionCallback callback_;
|
| - scoped_ptr<ClearCacheHelper> clear_cache_helper_;
|
| + net::OldCompletionCallbackImpl<DoomEntriesHelper> callback_;
|
| + ClearCacheCompletion* user_callback_;
|
| };
|
|
|
| } // namespace
|
| @@ -138,20 +132,20 @@ void ChromeBenchmarkingMessageFilter::OnClearCache(bool preserve_ssl_host_info,
|
| disk_cache::Backend* backend = request_context_->GetURLRequestContext()->
|
| http_transaction_factory()->GetCache()->GetCurrentBackend();
|
| if (backend) {
|
| - scoped_ptr<ClearCacheHelper> clear_cache_helper(
|
| - new ClearCacheHelper(this, reply_msg));
|
| + ClearCacheCompletion* callback =
|
| + new ClearCacheCompletion(this, reply_msg);
|
| if (preserve_ssl_host_info) {
|
| DoomEntriesHelper* helper = new DoomEntriesHelper(backend);
|
| - helper->ClearCache(clear_cache_helper.release()); // Will self clean.
|
| + helper->ClearCache(callback); // Will self clean.
|
| return;
|
| } else {
|
| - rv = backend->DoomAllEntries(
|
| - base::Bind(&ClearCacheHelper::Run,
|
| - base::Owned(clear_cache_helper.release())));
|
| + rv = backend->DoomAllEntries(callback);
|
| 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);
|
|
|