| Index: content/browser/leveldb_wrapper_impl_unittest.cc
|
| diff --git a/content/browser/leveldb_wrapper_impl_unittest.cc b/content/browser/leveldb_wrapper_impl_unittest.cc
|
| index c47fa313310016f85a6f512748c952f17e44f440..45b7a2aecc554971eeb1f651a31b760e2e2ca270 100644
|
| --- a/content/browser/leveldb_wrapper_impl_unittest.cc
|
| +++ b/content/browser/leveldb_wrapper_impl_unittest.cc
|
| @@ -56,6 +56,14 @@ class MockDelegate : public LevelDBWrapperImpl::Delegate {
|
| return std::vector<leveldb::mojom::BatchedOperationPtr>();
|
| }
|
| void DidCommit(leveldb::mojom::DatabaseError error) override {}
|
| + void OnMapLoaded(leveldb::mojom::DatabaseError error) override {
|
| + map_load_count_++;
|
| + }
|
| +
|
| + int map_load_count() const { return map_load_count_; }
|
| +
|
| + private:
|
| + int map_load_count_ = 0;
|
| };
|
|
|
| void GetCallback(const base::Closure& callback,
|
| @@ -132,6 +140,7 @@ class LevelDBWrapperImplTest : public testing::Test,
|
| void clear_mock_data() { mock_data_.clear(); }
|
|
|
| mojom::LevelDBWrapper* wrapper() { return level_db_wrapper_ptr_.get(); }
|
| + LevelDBWrapperImpl* wrapper_impl() { return &level_db_wrapper_; }
|
|
|
| bool GetSync(const std::vector<uint8_t>& key, std::vector<uint8_t>* result) {
|
| base::RunLoop run_loop;
|
| @@ -178,6 +187,8 @@ class LevelDBWrapperImplTest : public testing::Test,
|
|
|
| const std::vector<Observation>& observations() { return observations_; }
|
|
|
| + MockDelegate* delegate() { return &delegate_; }
|
| +
|
| private:
|
| // LevelDBObserver:
|
| void KeyAdded(const std::vector<uint8_t>& key,
|
| @@ -480,4 +491,39 @@ TEST_F(LevelDBWrapperImplTest, PutWhenAlreadyOverQuotaBecauseOfLargeKey) {
|
| EXPECT_FALSE(PutSync(key, value));
|
| }
|
|
|
| +TEST_F(LevelDBWrapperImplTest, GetAfterPurgeMemory) {
|
| + std::vector<uint8_t> result;
|
| + EXPECT_TRUE(GetSync(StdStringToUint8Vector("123"), &result));
|
| + EXPECT_EQ(StdStringToUint8Vector("123data"), result);
|
| + EXPECT_EQ(delegate()->map_load_count(), 1);
|
| +
|
| + // Reading again doesn't load map again.
|
| + EXPECT_TRUE(GetSync(StdStringToUint8Vector("123"), &result));
|
| + EXPECT_EQ(delegate()->map_load_count(), 1);
|
| +
|
| + wrapper_impl()->PurgeMemory();
|
| +
|
| + // Now reading should still work, and load map again.
|
| + result.clear();
|
| + EXPECT_TRUE(GetSync(StdStringToUint8Vector("123"), &result));
|
| + EXPECT_EQ(StdStringToUint8Vector("123data"), result);
|
| + EXPECT_EQ(delegate()->map_load_count(), 2);
|
| +}
|
| +
|
| +TEST_F(LevelDBWrapperImplTest, PurgeMemoryWithPendingChanges) {
|
| + std::vector<uint8_t> key = StdStringToUint8Vector("123");
|
| + std::vector<uint8_t> value = StdStringToUint8Vector("foo");
|
| + EXPECT_TRUE(PutSync(key, value));
|
| + EXPECT_EQ(delegate()->map_load_count(), 1);
|
| +
|
| + // Purge memory, and read. Should not actually have purged, so should not have
|
| + // triggered a load.
|
| + wrapper_impl()->PurgeMemory();
|
| +
|
| + std::vector<uint8_t> result;
|
| + EXPECT_TRUE(GetSync(key, &result));
|
| + EXPECT_EQ(value, result);
|
| + EXPECT_EQ(delegate()->map_load_count(), 1);
|
| +}
|
| +
|
| } // namespace content
|
|
|