Index: content/browser/loader/upload_data_stream_builder_unittest.cc |
diff --git a/content/browser/loader/upload_data_stream_builder_unittest.cc b/content/browser/loader/upload_data_stream_builder_unittest.cc |
index a946e651e1f9700d673107635f070c2c6bf959be..72035ab5c3c976185177ba0eb690028e86b0e2b4 100644 |
--- a/content/browser/loader/upload_data_stream_builder_unittest.cc |
+++ b/content/browser/loader/upload_data_stream_builder_unittest.cc |
@@ -310,4 +310,65 @@ TEST(UploadDataStreamBuilderTest, ResolveBlobAndCreateUploadDataStream) { |
base::RunLoop().RunUntilIdle(); |
} |
+TEST(UploadDataStreamBuilderTest, CreateUploadDataStreamWithEmptyBlob) { |
+ base::MessageLoop message_loop; |
+ { |
+ // Setup blob data for testing. |
+ base::Time time1, time2; |
+ base::Time::FromString("Tue, 15 Nov 1994, 12:45:26 GMT", &time1); |
+ base::Time::FromString("Mon, 14 Nov 1994, 11:30:49 GMT", &time2); |
+ |
+ BlobStorageContext blob_storage_context; |
+ |
+ const std::string blob_id0("id-0"); |
+ scoped_ptr<BlobDataBuilder> blob_data_builder( |
+ new BlobDataBuilder(blob_id0)); |
+ scoped_ptr<BlobDataHandle> handle1 = |
+ blob_storage_context.AddFinishedBlob(blob_data_builder.get()); |
+ |
+ const std::string blob_id1("id-1"); |
+ const std::string kBlobData = ""; |
+ blob_data_builder.reset(new BlobDataBuilder(blob_id1)); |
+ blob_data_builder->AppendData(kBlobData); |
+ blob_data_builder->AppendFile( |
+ base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); |
+ scoped_ptr<BlobDataHandle> handle2 = |
+ blob_storage_context.AddFinishedBlob(blob_data_builder.get()); |
+ |
+ ResourceRequestBody::Element blob_element1, blob_element2; |
+ blob_element1.SetToBytes(kBlobData.c_str(), kBlobData.size()); |
+ blob_element2.SetToFilePathRange( |
+ base::FilePath(FILE_PATH_LITERAL("BlobFile.txt")), 0, 20, time1); |
+ |
+ scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); |
+ scoped_ptr<net::UploadDataStream> upload(UploadDataStreamBuilder::Build( |
+ request_body.get(), &blob_storage_context, NULL, |
+ base::MessageLoopProxy::current().get())); |
+ |
+ request_body = new ResourceRequestBody(); |
+ request_body->AppendBlob(blob_id1); |
+ request_body->AppendBlob(blob_id1); |
+ request_body->AppendBlob(blob_id1); |
+ |
+ upload = UploadDataStreamBuilder::Build( |
+ request_body.get(), &blob_storage_context, NULL, |
+ base::MessageLoopProxy::current().get()); |
+ ASSERT_TRUE(upload->GetElementReaders()); |
+ ASSERT_EQ(6U, upload->GetElementReaders()->size()); |
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[0], blob_element1)); |
jsbell
2015/03/06 18:28:50
Make a local reference to this to avoid the repeat
|
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[1], blob_element2)); |
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[2], blob_element1)); |
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[3], blob_element2)); |
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[4], blob_element1)); |
+ EXPECT_TRUE( |
+ AreElementsEqual(*(*upload->GetElementReaders())[5], blob_element2)); |
+ } |
+ // Clean up for ASAN. |
+ base::RunLoop().RunUntilIdle(); |
+} |
} // namespace content |