| Index: content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
|
| diff --git a/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h b/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
|
| index 22ca5d145cc8863ef1aa4faa9710ed05e278bddb..5ebfdd3166318be1530607c178f72f30606636a0 100644
|
| --- a/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
|
| +++ b/content/browser/indexed_db/leveldb/leveldb_iterator_impl.h
|
| @@ -6,13 +6,19 @@
|
| #define CONTENT_BROWSER_INDEXED_DB_LEVELDB_LEVELDB_ITERATOR_IMPL_H_
|
|
|
| #include <memory>
|
| +#include <string>
|
|
|
| #include "base/macros.h"
|
| #include "content/browser/indexed_db/leveldb/leveldb_iterator.h"
|
| #include "content/common/content_export.h"
|
| #include "third_party/leveldatabase/src/include/leveldb/iterator.h"
|
|
|
| +namespace leveldb {
|
| +class Snapshot;
|
| +}
|
| +
|
| namespace content {
|
| +class LevelDBDatabase;
|
|
|
| class CONTENT_EXPORT LevelDBIteratorImpl : public content::LevelDBIterator {
|
| public:
|
| @@ -24,18 +30,33 @@ class CONTENT_EXPORT LevelDBIteratorImpl : public content::LevelDBIterator {
|
| leveldb::Status Prev() override;
|
| base::StringPiece Key() const override;
|
| base::StringPiece Value() const override;
|
| + void Detach() override;
|
| + bool IsDetached() const override;
|
|
|
| protected:
|
| - explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator);
|
| + explicit LevelDBIteratorImpl(std::unique_ptr<leveldb::Iterator> iterator,
|
| + LevelDBDatabase* db,
|
| + const leveldb::Snapshot* snapshot);
|
|
|
| private:
|
| - void CheckStatus();
|
| + enum class IteratorState { ACTIVE, EVICTED_AND_VALID, EVICTED_AND_INVALID };
|
| +
|
| + leveldb::Status CheckStatus();
|
| +
|
| + // Notifies the database of iterator usage and recreates iterator if needed.
|
| + void WillUseDBIterator();
|
|
|
| friend class IndexedDBClassFactory;
|
| friend class MockBrowserTestIndexedDBClassFactory;
|
|
|
| std::unique_ptr<leveldb::Iterator> iterator_;
|
|
|
| + // State used to facilitate memory purging.
|
| + LevelDBDatabase* db_;
|
| + IteratorState iterator_state_ = IteratorState::ACTIVE;
|
| + std::string key_before_eviction_;
|
| + const leveldb::Snapshot* snapshot_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(LevelDBIteratorImpl);
|
| };
|
|
|
|
|