@@ -597,13 +597,16 @@ struct ServiceWorkerCache::KeysContext {
597
597
: original_callback(callback),
598
598
cache (cache),
599
599
out_keys(new ServiceWorkerCache::Requests()),
600
+ backend_iterator(NULL ),
600
601
enumerated_entry(NULL ) {}
601
602
602
603
~KeysContext () {
603
604
for (size_t i = 0 , max = entries.size (); i < max; ++i)
604
605
entries[i]->Close ();
605
606
if (enumerated_entry)
606
607
enumerated_entry->Close ();
608
+ if (cache && backend_iterator && cache->backend_ )
609
+ cache->backend_ ->EndEnumeration (&backend_iterator);
607
610
}
608
611
609
612
// The callback passed to the Keys() function.
@@ -619,7 +622,7 @@ struct ServiceWorkerCache::KeysContext {
619
622
scoped_ptr<ServiceWorkerCache::Requests> out_keys;
620
623
621
624
// Used for enumerating cache entries.
622
- scoped_ptr<disk_cache::Backend::Iterator> backend_iterator;
625
+ void * backend_iterator;
623
626
disk_cache::Entry* enumerated_entry;
624
627
};
625
628
@@ -771,14 +774,14 @@ void ServiceWorkerCache::Keys(const RequestsCallback& callback) {
771
774
scoped_ptr<KeysContext> keys_context (
772
775
new KeysContext (callback, weak_ptr_factory_.GetWeakPtr ()));
773
776
774
- keys_context->backend_iterator = backend_->CreateIterator ();
775
- disk_cache::Backend::Iterator& iterator = *keys_context->backend_iterator ;
777
+ void ** backend_iterator = &keys_context->backend_iterator ;
776
778
disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry ;
777
779
778
780
net::CompletionCallback open_entry_callback =
779
781
base::Bind (KeysDidOpenNextEntry, base::Passed (keys_context.Pass ()));
780
782
781
- int rv = iterator.OpenNextEntry (enumerated_entry, open_entry_callback);
783
+ int rv = backend_->OpenNextEntry (
784
+ backend_iterator, enumerated_entry, open_entry_callback);
782
785
783
786
if (rv != net::ERR_IO_PENDING)
784
787
open_entry_callback.Run (rv);
@@ -861,12 +864,14 @@ void ServiceWorkerCache::KeysDidOpenNextEntry(
861
864
keys_context->enumerated_entry = NULL ;
862
865
863
866
// Enumerate the next entry.
864
- disk_cache::Backend::Iterator& iterator = * keys_context->backend_iterator ;
867
+ void ** backend_iterator = & keys_context->backend_iterator ;
865
868
disk_cache::Entry** enumerated_entry = &keys_context->enumerated_entry ;
869
+
866
870
net::CompletionCallback open_entry_callback =
867
871
base::Bind (KeysDidOpenNextEntry, base::Passed (keys_context.Pass ()));
868
872
869
- rv = iterator.OpenNextEntry (enumerated_entry, open_entry_callback);
873
+ rv = cache->backend_ ->OpenNextEntry (
874
+ backend_iterator, enumerated_entry, open_entry_callback);
870
875
871
876
if (rv != net::ERR_IO_PENDING)
872
877
open_entry_callback.Run (rv);
0 commit comments