Commit 275dbf43 authored by jhawkins@chromium.org's avatar jhawkins@chromium.org

Reland r113263 rebased after revert of r113249.

base::Bind: Convert chrome_benchmarking_message_filter.cc.

BUG=none
TEST=none
R=csilv,ajwong

Review URL: http://codereview.chromium.org/8897026

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@114072 0039d316-1c4b-4281-b951-d872f2087c98
parent c3b46a5e
...@@ -4,7 +4,10 @@ ...@@ -4,7 +4,10 @@
#include "chrome/browser/chrome_benchmarking_message_filter.h" #include "chrome/browser/chrome_benchmarking_message_filter.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.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/chrome_url_request_context.h"
#include "chrome/browser/net/predictor.h" #include "chrome/browser/net/predictor.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -19,18 +22,17 @@ ...@@ -19,18 +22,17 @@
namespace { namespace {
class ClearCacheCompletion : public net::OldCompletionCallback { class ClearCacheHelper {
public: public:
ClearCacheCompletion(ChromeBenchmarkingMessageFilter* filter, ClearCacheHelper(ChromeBenchmarkingMessageFilter* filter,
IPC::Message* reply_msg) IPC::Message* reply_msg)
: filter_(filter), : filter_(filter),
reply_msg_(reply_msg) { reply_msg_(reply_msg) {
} }
virtual void RunWithParams(const Tuple1<int>& params) { void Run(int result) {
ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, params.a); ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg_, result);
filter_->Send(reply_msg_); filter_->Send(reply_msg_);
delete this;
} }
private: private:
...@@ -46,21 +48,25 @@ class DoomEntriesHelper { ...@@ -46,21 +48,25 @@ class DoomEntriesHelper {
: backend_(backend), : backend_(backend),
entry_(NULL), entry_(NULL),
iter_(NULL), iter_(NULL),
ALLOW_THIS_IN_INITIALIZER_LIST(callback_(this, ALLOW_THIS_IN_INITIALIZER_LIST(callback_(
&DoomEntriesHelper::CacheCallback)), base::Bind(&DoomEntriesHelper::CacheCallback,
user_callback_(NULL) { base::Unretained(this)))),
clear_cache_helper_(NULL) {
} }
void ClearCache(ClearCacheCompletion* callback) { // Takes ownership of |callback|.
user_callback_ = callback; void ClearCache(ClearCacheHelper* helper) {
clear_cache_helper_.reset(helper);
return CacheCallback(net::OK); // Start clearing the cache. return CacheCallback(net::OK); // Start clearing the cache.
} }
const net::CompletionCallback& callback() { return callback_; }
private: private:
void CacheCallback(int result) { void CacheCallback(int result) {
do { do {
if (result != net::OK) { if (result != net::OK) {
user_callback_->RunWithParams(Tuple1<int>(result)); clear_cache_helper_->Run(result);
delete this; delete this;
return; return;
} }
...@@ -76,15 +82,15 @@ class DoomEntriesHelper { ...@@ -76,15 +82,15 @@ class DoomEntriesHelper {
entry_->Close(); entry_->Close();
entry_ = NULL; entry_ = NULL;
} }
result = backend_->OpenNextEntry(&iter_, &entry_, &callback_); result = backend_->OpenNextEntry(&iter_, &entry_, callback_);
} while (result != net::ERR_IO_PENDING); } while (result != net::ERR_IO_PENDING);
} }
disk_cache::Backend* backend_; disk_cache::Backend* backend_;
disk_cache::Entry* entry_; disk_cache::Entry* entry_;
void* iter_; void* iter_;
net::OldCompletionCallbackImpl<DoomEntriesHelper> callback_; net::CompletionCallback callback_;
ClearCacheCompletion* user_callback_; scoped_ptr<ClearCacheHelper> clear_cache_helper_;
}; };
} // namespace } // namespace
...@@ -132,20 +138,20 @@ void ChromeBenchmarkingMessageFilter::OnClearCache(bool preserve_ssl_host_info, ...@@ -132,20 +138,20 @@ void ChromeBenchmarkingMessageFilter::OnClearCache(bool preserve_ssl_host_info,
disk_cache::Backend* backend = request_context_->GetURLRequestContext()-> disk_cache::Backend* backend = request_context_->GetURLRequestContext()->
http_transaction_factory()->GetCache()->GetCurrentBackend(); http_transaction_factory()->GetCache()->GetCurrentBackend();
if (backend) { if (backend) {
ClearCacheCompletion* callback = scoped_ptr<ClearCacheHelper> clear_cache_helper(
new ClearCacheCompletion(this, reply_msg); new ClearCacheHelper(this, reply_msg));
if (preserve_ssl_host_info) { if (preserve_ssl_host_info) {
DoomEntriesHelper* helper = new DoomEntriesHelper(backend); DoomEntriesHelper* helper = new DoomEntriesHelper(backend);
helper->ClearCache(callback); // Will self clean. helper->ClearCache(clear_cache_helper.release()); // Will self clean.
return; return;
} else { } else {
rv = backend->DoomAllEntries(callback); rv = backend->DoomAllEntries(
base::Bind(&ClearCacheHelper::Run,
base::Owned(clear_cache_helper.release())));
if (rv == net::ERR_IO_PENDING) { if (rv == net::ERR_IO_PENDING) {
// The callback will send the reply. // The callback will send the reply.
return; return;
} }
// Completed synchronously, no need for the callback.
delete callback;
} }
} }
ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg, rv); ChromeViewHostMsg_ClearCache::WriteReplyParams(reply_msg, rv);
......
...@@ -1437,6 +1437,13 @@ int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry, ...@@ -1437,6 +1437,13 @@ int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
return net::ERR_IO_PENDING; return net::ERR_IO_PENDING;
} }
int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) {
DCHECK(!callback.is_null());
background_queue_.OpenNextEntry(iter, next_entry, callback);
return net::ERR_IO_PENDING;
}
void BackendImpl::EndEnumeration(void** iter) { void BackendImpl::EndEnumeration(void** iter) {
background_queue_.EndEnumeration(*iter); background_queue_.EndEnumeration(*iter);
*iter = NULL; *iter = NULL;
......
...@@ -277,6 +277,8 @@ class NET_EXPORT_PRIVATE BackendImpl : public Backend { ...@@ -277,6 +277,8 @@ class NET_EXPORT_PRIVATE BackendImpl : public Backend {
OldCompletionCallback* callback) OVERRIDE; OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, Entry** next_entry, virtual int OpenNextEntry(void** iter, Entry** next_entry,
OldCompletionCallback* callback) OVERRIDE; OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) OVERRIDE;
virtual void EndEnumeration(void** iter) OVERRIDE; virtual void EndEnumeration(void** iter) OVERRIDE;
virtual void GetStats(StatsItems* stats) OVERRIDE; virtual void GetStats(StatsItems* stats) OVERRIDE;
virtual void OnExternalCacheHit(const std::string& key) OVERRIDE; virtual void OnExternalCacheHit(const std::string& key) OVERRIDE;
......
...@@ -131,6 +131,8 @@ class NET_EXPORT Backend { ...@@ -131,6 +131,8 @@ class NET_EXPORT Backend {
// therefore it does not impact the eviction ranking of the entry. // therefore it does not impact the eviction ranking of the entry.
virtual int OpenNextEntry(void** iter, Entry** next_entry, virtual int OpenNextEntry(void** iter, Entry** next_entry,
OldCompletionCallback* callback) = 0; OldCompletionCallback* callback) = 0;
virtual int OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) = 0;
// Releases iter without returning the next entry. Whenever OpenNextEntry() // Releases iter without returning the next entry. Whenever OpenNextEntry()
// returns true, but the caller is not interested in continuing the // returns true, but the caller is not interested in continuing the
......
...@@ -384,6 +384,13 @@ void InFlightBackendIO::OpenNextEntry(void** iter, Entry** next_entry, ...@@ -384,6 +384,13 @@ void InFlightBackendIO::OpenNextEntry(void** iter, Entry** next_entry,
PostOperation(operation); PostOperation(operation);
} }
void InFlightBackendIO::OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) {
scoped_refptr<BackendIO> operation(new BackendIO(this, backend_, callback));
operation->OpenNextEntry(iter, next_entry);
PostOperation(operation);
}
void InFlightBackendIO::OpenPrevEntry(void** iter, Entry** prev_entry, void InFlightBackendIO::OpenPrevEntry(void** iter, Entry** prev_entry,
OldCompletionCallback* callback) { OldCompletionCallback* callback) {
scoped_refptr<BackendIO> operation(new BackendIO(this, backend_, callback)); scoped_refptr<BackendIO> operation(new BackendIO(this, backend_, callback));
......
...@@ -168,6 +168,8 @@ class InFlightBackendIO : public InFlightIO { ...@@ -168,6 +168,8 @@ class InFlightBackendIO : public InFlightIO {
net::OldCompletionCallback* callback); net::OldCompletionCallback* callback);
void OpenNextEntry(void** iter, Entry** next_entry, void OpenNextEntry(void** iter, Entry** next_entry,
net::OldCompletionCallback* callback); net::OldCompletionCallback* callback);
void OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback);
void OpenPrevEntry(void** iter, Entry** prev_entry, void OpenPrevEntry(void** iter, Entry** prev_entry,
net::OldCompletionCallback* callback); net::OldCompletionCallback* callback);
void EndEnumeration(void* iterator); void EndEnumeration(void* iterator);
......
...@@ -200,6 +200,14 @@ int MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry, ...@@ -200,6 +200,14 @@ int MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
return net::ERR_FAILED; return net::ERR_FAILED;
} }
int MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) {
if (OpenNextEntry(iter, next_entry))
return net::OK;
return net::ERR_FAILED;
}
void MemBackendImpl::EndEnumeration(void** iter) { void MemBackendImpl::EndEnumeration(void** iter) {
*iter = NULL; *iter = NULL;
} }
......
...@@ -83,6 +83,8 @@ class NET_EXPORT_PRIVATE MemBackendImpl : public Backend { ...@@ -83,6 +83,8 @@ class NET_EXPORT_PRIVATE MemBackendImpl : public Backend {
OldCompletionCallback* callback) OVERRIDE; OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, Entry** next_entry, virtual int OpenNextEntry(void** iter, Entry** next_entry,
OldCompletionCallback* callback) OVERRIDE; OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, Entry** next_entry,
const net::CompletionCallback& callback) OVERRIDE;
virtual void EndEnumeration(void** iter) OVERRIDE; virtual void EndEnumeration(void** iter) OVERRIDE;
virtual void GetStats( virtual void GetStats(
std::vector<std::pair<std::string, std::string> >* stats) OVERRIDE {} std::vector<std::pair<std::string, std::string> >* stats) OVERRIDE {}
......
...@@ -468,6 +468,11 @@ int MockDiskCache::OpenNextEntry(void** iter, disk_cache::Entry** next_entry, ...@@ -468,6 +468,11 @@ int MockDiskCache::OpenNextEntry(void** iter, disk_cache::Entry** next_entry,
return net::ERR_NOT_IMPLEMENTED; return net::ERR_NOT_IMPLEMENTED;
} }
int MockDiskCache::OpenNextEntry(void** iter, disk_cache::Entry** next_entry,
const net::CompletionCallback& callback) {
return net::ERR_NOT_IMPLEMENTED;
}
void MockDiskCache::EndEnumeration(void** iter) { void MockDiskCache::EndEnumeration(void** iter) {
} }
......
...@@ -115,6 +115,8 @@ class MockDiskCache : public disk_cache::Backend { ...@@ -115,6 +115,8 @@ class MockDiskCache : public disk_cache::Backend {
net::OldCompletionCallback* callback) OVERRIDE; net::OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, disk_cache::Entry** next_entry, virtual int OpenNextEntry(void** iter, disk_cache::Entry** next_entry,
net::OldCompletionCallback* callback) OVERRIDE; net::OldCompletionCallback* callback) OVERRIDE;
virtual int OpenNextEntry(void** iter, disk_cache::Entry** next_entry,
const net::CompletionCallback& callback) OVERRIDE;
virtual void EndEnumeration(void** iter) OVERRIDE; virtual void EndEnumeration(void** iter) OVERRIDE;
virtual void GetStats( virtual void GetStats(
std::vector<std::pair<std::string, std::string> >* stats) OVERRIDE; std::vector<std::pair<std::string, std::string> >* stats) OVERRIDE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment