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

Unified Diff: content/browser/fileapi/blob_storage_context_unittest.cc

Issue 895933007: [Storage] Blob items are now shared between blobs. Ready for disk swap. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
Index: content/browser/fileapi/blob_storage_context_unittest.cc
diff --git a/content/browser/fileapi/blob_storage_context_unittest.cc b/content/browser/fileapi/blob_storage_context_unittest.cc
index dccc86966c2702c2ca418daa222153744019b7d6..d5e5ab73ba24451cc106a7bbdc7257a00c4af65f 100644
--- a/content/browser/fileapi/blob_storage_context_unittest.cc
+++ b/content/browser/fileapi/blob_storage_context_unittest.cc
@@ -121,6 +121,114 @@ TEST(BlobStorageContextTest, BlobDataHandle) {
EXPECT_FALSE(blob_data_handle);
}
+TEST(BlobStorageContextTest, MemoryUsage) {
+ const std::string kId1("id1");
+ const std::string kId2("id2");
+
+ base::MessageLoop fake_io_message_loop;
+
+ BlobDataBuilder builder1(kId1);
+ BlobDataBuilder builder2(kId2);
+ builder1.AppendData("Data1Data2");
+ builder2.AppendBlob(kId1)
+ ->AppendBlob(kId1)
+ ->AppendBlob(kId1)
+ ->AppendBlob(kId1)
+ ->AppendBlob(kId1)
+ ->AppendBlob(kId1)
+ ->AppendBlob(kId1);
+
+ BlobStorageContext context;
+ EXPECT_EQ(0lu, context.memory_usage());
+
+ scoped_ptr<BlobDataHandle> blob_data_handle =
+ context.AddFinishedBlob(&builder1);
+ EXPECT_EQ(10lu, context.memory_usage());
+ scoped_ptr<BlobDataHandle> blob_data_handle2 =
+ context.AddFinishedBlob(&builder2);
+ EXPECT_EQ(10lu, context.memory_usage());
+
+ blob_data_handle.reset();
+ {
+ base::RunLoop run_loop;
+ run_loop.RunUntilIdle();
+ }
+ EXPECT_EQ(10lu, context.memory_usage());
+ blob_data_handle2.reset();
+ {
+ base::RunLoop run_loop;
+ run_loop.RunUntilIdle();
+ }
+ EXPECT_EQ(0lu, context.memory_usage());
+}
+
+TEST(BlobStorageContextTest, AddFinishedBlob) {
+ const std::string kId1("id1");
+ const std::string kId2("id12");
+ const std::string kId2Prime("id2.prime");
+ const std::string kId3("id3");
+ const std::string kId3Prime("id3.prime");
+
+ base::MessageLoop fake_io_message_loop;
+
+ BlobDataBuilder builder1(kId1);
+ BlobDataBuilder builder2(kId2);
+ BlobDataBuilder canonicalized_blob_data2(kId2Prime);
+ builder1.AppendData("Data1Data2");
+ builder2.AppendBlob(kId1, 5, 5)->AppendData(" is the best");
+ canonicalized_blob_data2.AppendData("Data2")->AppendData(" is the best");
+
+ BlobStorageContext context;
+
+ scoped_ptr<BlobDataHandle> blob_data_handle =
+ context.AddFinishedBlob(&builder1);
+ scoped_ptr<BlobDataHandle> blob_data_handle2 =
+ context.AddFinishedBlob(&builder2);
+
+ ASSERT_TRUE(blob_data_handle);
+ ASSERT_TRUE(blob_data_handle2);
+ scoped_ptr<BlobDataSnapshot> data1 = blob_data_handle->CreateSnapshot();
+ scoped_ptr<BlobDataSnapshot> data2 = blob_data_handle2->CreateSnapshot();
+ EXPECT_EQ(*data1, builder1);
+ EXPECT_EQ(*data2, canonicalized_blob_data2);
+ blob_data_handle.reset();
+ data2.reset();
+
+ {
+ base::RunLoop run_loop;
+ run_loop.RunUntilIdle();
+ }
+
+ blob_data_handle = context.GetBlobDataFromUUID(kId1);
+ EXPECT_FALSE(blob_data_handle);
+ EXPECT_TRUE(blob_data_handle2);
+ data2 = blob_data_handle2->CreateSnapshot();
+ EXPECT_EQ(*data2, canonicalized_blob_data2);
+
+ // Test shared elements stick around.
+ BlobDataBuilder builder3(kId3);
+ builder3.AppendBlob(kId2)->AppendBlob(kId2);
+ scoped_ptr<BlobDataHandle> blob_data_handle3 =
+ context.AddFinishedBlob(&builder3);
+ blob_data_handle2.reset();
+ {
+ base::RunLoop run_loop;
+ run_loop.RunUntilIdle();
+ }
+ blob_data_handle2 = context.GetBlobDataFromUUID(kId2);
+ EXPECT_FALSE(blob_data_handle2);
+ EXPECT_TRUE(blob_data_handle3);
+ scoped_ptr<BlobDataSnapshot> data3 = blob_data_handle3->CreateSnapshot();
+
+ scoped_ptr<BlobDataBuilder> canonicalized_blob_data3(
+ BlobDataBuilder::Create(kId3Prime)
+ ->AppendData("Data2")
+ ->AppendData(" is the best")
+ ->AppendData("Data2")
+ ->AppendData(" is the best"));
+ EXPECT_EQ(*data3, *canonicalized_blob_data3);
+}
+
TEST(BlobStorageContextTest, CompoundBlobs) {
const std::string kId1("id1");
const std::string kId2("id2");
@@ -133,40 +241,42 @@ TEST(BlobStorageContextTest, CompoundBlobs) {
base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1);
base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2);
- scoped_ptr<BlobDataBuilder> blob_data1(new BlobDataBuilder(kId1));
- blob_data1->AppendData("Data1");
- blob_data1->AppendData("Data2");
- blob_data1->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")),
- 10, 1024, time1);
+ scoped_ptr<BlobDataBuilder> blob_data1(
+ BlobDataBuilder::Create(kId1)
+ ->AppendData("Data1")
+ ->AppendData("Data2")
+ ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, 1024,
+ time1));
- scoped_ptr<BlobDataBuilder> blob_data2(new BlobDataBuilder(kId2));
- blob_data2->AppendData("Data3");
- blob_data2->AppendBlob(kId1, 8, 100);
- blob_data2->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")),
- 0, 20, time2);
+ scoped_ptr<BlobDataBuilder> blob_data2(
+ BlobDataBuilder::Create(kId2)
+ ->AppendData("Data3")
+ ->AppendBlob(kId1, 8, 100)
+ ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20,
+ time2));
scoped_ptr<BlobDataBuilder> canonicalized_blob_data2(
new BlobDataBuilder(kId2Prime));
- canonicalized_blob_data2->AppendData("Data3");
- canonicalized_blob_data2->AppendData("a2___", 2);
- canonicalized_blob_data2->AppendFile(
- base::FilePath(FILE_PATH_LITERAL("File1.txt")),
- 10, 98, time1);
- canonicalized_blob_data2->AppendFile(
- base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20, time2);
+ canonicalized_blob_data2->AppendData("Data3")
+ ->AppendData("a2___", 2)
+ ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File1.txt")), 10, 98,
+ time1)
+ ->AppendFile(base::FilePath(FILE_PATH_LITERAL("File2.txt")), 0, 20,
+ time2);
BlobStorageContext context;
scoped_ptr<BlobDataHandle> blob_data_handle;
// Test a blob referring to only data and a file.
- blob_data_handle = context.AddFinishedBlob(*blob_data1.get());
+ blob_data_handle = context.AddFinishedBlob(blob_data1.get());
+
ASSERT_TRUE(blob_data_handle);
scoped_ptr<BlobDataSnapshot> data = blob_data_handle->CreateSnapshot();
ASSERT_TRUE(blob_data_handle);
EXPECT_EQ(*data, *blob_data1);
// Test a blob composed in part with another blob.
- blob_data_handle = context.AddFinishedBlob(*blob_data2.get());
+ blob_data_handle = context.AddFinishedBlob(blob_data2.get());
data = blob_data_handle->CreateSnapshot();
ASSERT_TRUE(blob_data_handle);
ASSERT_TRUE(data);
« no previous file with comments | « no previous file | content/browser/fileapi/chrome_blob_storage_context.cc » ('j') | storage/browser/blob/blob_data_builder.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698