Chromium Code Reviews| Index: net/disk_cache/blockfile/backend_impl.cc |
| diff --git a/net/disk_cache/blockfile/backend_impl.cc b/net/disk_cache/blockfile/backend_impl.cc |
| index c38b2bb9e33b49fa7e4945edc7380b235b5d3b8a..e3683286ed04efc638ebb74462222d2c0982014d 100644 |
| --- a/net/disk_cache/blockfile/backend_impl.cc |
| +++ b/net/disk_cache/blockfile/backend_impl.cc |
| @@ -1250,16 +1250,27 @@ int BackendImpl::DoomEntriesSince(const base::Time initial_time, |
| return net::ERR_IO_PENDING; |
| } |
| -int BackendImpl::OpenNextEntry(void** iter, Entry** next_entry, |
| - const CompletionCallback& callback) { |
| - DCHECK(!callback.is_null()); |
| - background_queue_.OpenNextEntry(iter, next_entry, callback); |
| - return net::ERR_IO_PENDING; |
| -} |
| +class BackendImpl::IteratorImpl : public Backend::Iterator { |
| + public: |
| + explicit IteratorImpl(base::WeakPtr<InFlightBackendIO> background_queue) |
| + : background_queue_(background_queue), data_(NULL) { |
| + } |
| -void BackendImpl::EndEnumeration(void** iter) { |
| - background_queue_.EndEnumeration(*iter); |
|
gavinp
2014/09/19 16:09:35
This turns out to be important.
|
| - *iter = NULL; |
| + virtual int OpenNextEntry(Entry** next_entry, |
| + const net::CompletionCallback& callback) OVERRIDE { |
| + if (!background_queue_) |
| + return net::ERR_FAILED; |
| + background_queue_->OpenNextEntry(&data_, next_entry, callback); |
| + return net::ERR_IO_PENDING; |
| + } |
| + |
| + private: |
| + const base::WeakPtr<InFlightBackendIO> background_queue_; |
| + void* data_; |
| +}; |
| + |
| +scoped_ptr<Backend::Iterator> BackendImpl::CreateIterator() { |
| + return scoped_ptr<Backend::Iterator>(new IteratorImpl(GetBackgroundQueue())); |
| } |
| void BackendImpl::GetStats(StatsItems* stats) { |