Index: content/browser/service_worker/service_worker_cache.cc |
diff --git a/content/browser/service_worker/service_worker_cache.cc b/content/browser/service_worker/service_worker_cache.cc |
index e9989fa60a929804fd881ef9260f36c33091f9f2..2fb5216d8f19a7c1ccd4ea561e894b3648adc446 100644 |
--- a/content/browser/service_worker/service_worker_cache.cc |
+++ b/content/browser/service_worker/service_worker_cache.cc |
@@ -597,6 +597,7 @@ |
: original_callback(callback), |
cache(cache), |
out_keys(new ServiceWorkerCache::Requests()), |
+ backend_iterator(NULL), |
enumerated_entry(NULL) {} |
~KeysContext() { |
@@ -604,6 +605,8 @@ |
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. |
@@ -619,7 +622,7 @@ |
scoped_ptr<ServiceWorkerCache::Requests> out_keys; |
// Used for enumerating cache entries. |
- scoped_ptr<disk_cache::Backend::Iterator> backend_iterator; |
+ void* backend_iterator; |
disk_cache::Entry* enumerated_entry; |
}; |
@@ -771,14 +774,14 @@ |
scoped_ptr<KeysContext> keys_context( |
new KeysContext(callback, weak_ptr_factory_.GetWeakPtr())); |
- keys_context->backend_iterator = backend_->CreateIterator(); |
- disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator; |
+ void** backend_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 = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); |
+ int rv = backend_->OpenNextEntry( |
+ backend_iterator, enumerated_entry, open_entry_callback); |
if (rv != net::ERR_IO_PENDING) |
open_entry_callback.Run(rv); |
@@ -861,12 +864,14 @@ |
keys_context->enumerated_entry = NULL; |
// Enumerate the next entry. |
- disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator; |
+ void** backend_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 = iterator.OpenNextEntry(enumerated_entry, open_entry_callback); |
+ rv = cache->backend_->OpenNextEntry( |
+ backend_iterator, enumerated_entry, open_entry_callback); |
if (rv != net::ERR_IO_PENDING) |
open_entry_callback.Run(rv); |