summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
authorgavinp <gavinp@chromium.org>2014-09-24 07:54:35 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-24 14:54:53 +0000
commitb1aaa058d259c916a01b675ca297cc01c7a07b17 (patch)
tree37e47df10fefb0311cd5bd611eb69cd0ce0c5911 /content/browser
parent0ae73de143b645c376ac0e503e9627d33bb3c4f1 (diff)
downloadchromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.zip
chromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.tar.gz
chromium_src-b1aaa058d259c916a01b675ca297cc01c7a07b17.tar.bz2
Reland of "Remove void** from disk_cache interface" w/ blockfile iter fix.
Enumeration and iteration were passing around void**. With this CL, we instead use an Iterator object. TBR=jkarlin@chromium.org,rvargas@chromium.org,clamy@chromium.org,piman@chromium.org BUG=413644,416059 TEST=None Review URL: https://codereview.chromium.org/588243002 Cr-Commit-Position: refs/heads/master@{#296415}
Diffstat (limited to 'content/browser')
-rw-r--r--content/browser/gpu/shader_disk_cache.cc26
-rw-r--r--content/browser/service_worker/service_worker_cache.cc17
2 files changed, 23 insertions, 20 deletions
diff --git a/content/browser/gpu/shader_disk_cache.cc b/content/browser/gpu/shader_disk_cache.cc
index a7f240c..c97fd9e 100644
--- a/content/browser/gpu/shader_disk_cache.cc
+++ b/content/browser/gpu/shader_disk_cache.cc
@@ -23,6 +23,9 @@ void EntryCloser(disk_cache::Entry* entry) {
entry->Close();
}
+void FreeDiskCacheIterator(scoped_ptr<disk_cache::Backend::Iterator> iterator) {
+}
+
} // namespace
// ShaderDiskCacheEntry handles the work of caching/updating the cached
@@ -95,7 +98,7 @@ class ShaderDiskReadHelper
base::WeakPtr<ShaderDiskCache> cache_;
OpType op_type_;
- void* iter_;
+ scoped_ptr<disk_cache::Backend::Iterator> iter_;
scoped_refptr<net::IOBufferWithSize> buf_;
int host_id_;
disk_cache::Entry* entry_;
@@ -243,7 +246,6 @@ ShaderDiskReadHelper::ShaderDiskReadHelper(
int host_id)
: cache_(cache),
op_type_(OPEN_NEXT),
- iter_(NULL),
buf_(NULL),
host_id_(host_id),
entry_(NULL) {
@@ -291,16 +293,17 @@ int ShaderDiskReadHelper::OpenNextEntry() {
DCHECK(CalledOnValidThread());
// Called through OnOpComplete, so we know |cache_| is valid.
op_type_ = OPEN_NEXT_COMPLETE;
- return cache_->backend()->OpenNextEntry(
- &iter_,
- &entry_,
- base::Bind(&ShaderDiskReadHelper::OnOpComplete, this));
+ if (!iter_)
+ iter_ = cache_->backend()->CreateIterator();
+ return iter_->OpenNextEntry(
+ &entry_, base::Bind(&ShaderDiskReadHelper::OnOpComplete, this));
}
int ShaderDiskReadHelper::OpenNextEntryComplete(int rv) {
DCHECK(CalledOnValidThread());
// Called through OnOpComplete, so we know |cache_| is valid.
if (rv == net::ERR_FAILED) {
+ iter_.reset();
op_type_ = ITERATION_FINISHED;
return net::OK;
}
@@ -339,16 +342,21 @@ int ShaderDiskReadHelper::ReadComplete(int rv) {
int ShaderDiskReadHelper::IterationComplete(int rv) {
DCHECK(CalledOnValidThread());
// Called through OnOpComplete, so we know |cache_| is valid.
- cache_->backend()->EndEnumeration(&iter_);
- iter_ = NULL;
+ iter_.reset();
op_type_ = TERMINATE;
return net::OK;
}
ShaderDiskReadHelper::~ShaderDiskReadHelper() {
- if (entry_)
+ if (entry_) {
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&EntryCloser, entry_));
+ }
+ if (iter_) {
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
+ base::Bind(&FreeDiskCacheIterator,
+ base::Passed(&iter_)));
+ }
}
ShaderClearHelper::ShaderClearHelper(scoped_refptr<ShaderDiskCache> cache,
diff --git a/content/browser/service_worker/service_worker_cache.cc b/content/browser/service_worker/service_worker_cache.cc
index 9c16df0..6bf5acb 100644
--- a/content/browser/service_worker/service_worker_cache.cc
+++ b/content/browser/service_worker/service_worker_cache.cc
@@ -645,7 +645,6 @@ struct ServiceWorkerCache::KeysContext {
: original_callback(callback),
cache(cache),
out_keys(new ServiceWorkerCache::Requests()),
- backend_iterator(NULL),
enumerated_entry(NULL) {}
~KeysContext() {
@@ -653,8 +652,6 @@ struct ServiceWorkerCache::KeysContext {
entries[i]->Close();
if (enumerated_entry)
enumerated_entry->Close();
- if (cache && backend_iterator && cache->backend_)
- cache->backend_->EndEnumeration(&backend_iterator);
}
// The callback passed to the Keys() function.
@@ -670,7 +667,7 @@ struct ServiceWorkerCache::KeysContext {
scoped_ptr<ServiceWorkerCache::Requests> out_keys;
// Used for enumerating cache entries.
- void* backend_iterator;
+ scoped_ptr<disk_cache::Backend::Iterator> backend_iterator;
disk_cache::Entry* enumerated_entry;
};
@@ -822,14 +819,14 @@ void ServiceWorkerCache::Keys(const RequestsCallback& callback) {
scoped_ptr<KeysContext> keys_context(
new KeysContext(callback, weak_ptr_factory_.GetWeakPtr()));
- void** backend_iterator = &keys_context->backend_iterator;
+ keys_context->backend_iterator = backend_->CreateIterator();
+ disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator;
disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry;
net::CompletionCallback open_entry_callback =
base::Bind(KeysDidOpenNextEntry, base::Passed(keys_context.Pass()));
- int rv = backend_->OpenNextEntry(
- backend_iterator, enumerated_entry, open_entry_callback);
+ int rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback);
if (rv != net::ERR_IO_PENDING)
open_entry_callback.Run(rv);
@@ -912,14 +909,12 @@ void ServiceWorkerCache::KeysDidOpenNextEntry(
keys_context->enumerated_entry = NULL;
// Enumerate the next entry.
- void** backend_iterator = &keys_context->backend_iterator;
+ disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator;
disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry;
-
net::CompletionCallback open_entry_callback =
base::Bind(KeysDidOpenNextEntry, base::Passed(keys_context.Pass()));
- rv = cache->backend_->OpenNextEntry(
- backend_iterator, enumerated_entry, open_entry_callback);
+ rv = iterator.OpenNextEntry(enumerated_entry, open_entry_callback);
if (rv != net::ERR_IO_PENDING)
open_entry_callback.Run(rv);