Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(182)

Unified Diff: content/browser/leveldb_wrapper_impl_unittest.cc

Issue 2725723002: Purge new localstorage memory cache when under memory pressure. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/leveldb_wrapper_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/browser/leveldb_wrapper_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698