diff options
author | dmurph <dmurph@chromium.org> | 2015-12-15 13:21:49 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-12-15 21:23:24 +0000 |
commit | f01c1228c9cca9b4078443438dfa868f7b972ac2 (patch) | |
tree | 727a6488a5c4333fb84e93d5214ddfcbf34fc478 /content/browser | |
parent | 7064ae3762738bbc29e3f56ffe5c1938009a6b20 (diff) | |
download | chromium_src-f01c1228c9cca9b4078443438dfa868f7b972ac2.zip chromium_src-f01c1228c9cca9b4078443438dfa868f7b972ac2.tar.gz chromium_src-f01c1228c9cca9b4078443438dfa868f7b972ac2.tar.bz2 |
[Blob] Fix for resetting reader.
R=michaeln
BUG=567692
Committed-First-Time: https://crrev.com/ebf7a6b19a7a468195a5606fbd2bbd6d07a26ea2
Cr-Commit-Position-First-Time: refs/heads/master@{#365177}
Review URL: https://codereview.chromium.org/1513783005
Cr-Commit-Position: refs/heads/master@{#365316}
Diffstat (limited to 'content/browser')
-rw-r--r-- | content/browser/loader/upload_data_stream_builder.cc | 4 | ||||
-rw-r--r-- | content/browser/loader/upload_data_stream_builder_unittest.cc | 51 |
2 files changed, 52 insertions, 3 deletions
diff --git a/content/browser/loader/upload_data_stream_builder.cc b/content/browser/loader/upload_data_stream_builder.cc index 7f6b517..981d973 100644 --- a/content/browser/loader/upload_data_stream_builder.cc +++ b/content/browser/loader/upload_data_stream_builder.cc @@ -102,11 +102,9 @@ scoped_ptr<net::UploadDataStream> UploadDataStreamBuilder::Build( DCHECK_EQ(0ul, element.offset()); scoped_ptr<storage::BlobDataHandle> handle = blob_context->GetBlobDataFromUUID(element.blob_uuid()); - storage::BlobDataHandle* handle_ptr = handle.get(); element_readers.push_back( make_scoped_ptr(new storage::UploadBlobElementReader( - handle_ptr->CreateReader(file_system_context, file_task_runner), - std::move(handle)))); + std::move(handle), file_system_context, file_task_runner))); break; } case ResourceRequestBody::Element::TYPE_DISK_CACHE_ENTRY: diff --git a/content/browser/loader/upload_data_stream_builder_unittest.cc b/content/browser/loader/upload_data_stream_builder_unittest.cc index c8f6b77..f31e284 100644 --- a/content/browser/loader/upload_data_stream_builder_unittest.cc +++ b/content/browser/loader/upload_data_stream_builder_unittest.cc @@ -149,4 +149,55 @@ TEST(UploadDataStreamBuilderTest, // Clean up for ASAN. base::RunLoop().RunUntilIdle(); } + +TEST(UploadDataStreamBuilderTest, ResetUploadStreamWithBlob) { + base::MessageLoopForIO message_loop; + { + scoped_refptr<ResourceRequestBody> request_body = new ResourceRequestBody; + + const std::string kBlob = "blobuuid"; + const std::string kBlobData = "blobdata"; + const int kBlobDataLength = 8; + const int64 kIdentifier = 12345; + + BlobStorageContext blob_storage_context; + BlobDataBuilder builder(kBlob); + builder.AppendData(kBlobData); + scoped_ptr<BlobDataHandle> handle = + blob_storage_context.AddFinishedBlob(&builder); + request_body->AppendBlob(kBlob); + request_body->set_identifier(kIdentifier); + + scoped_ptr<net::UploadDataStream> upload(UploadDataStreamBuilder::Build( + request_body.get(), &blob_storage_context, nullptr, + base::ThreadTaskRunnerHandle::Get().get())); + + net::TestCompletionCallback init_callback; + ASSERT_EQ(net::OK, upload->Init(init_callback.callback())); + + // Read part of the data. + const int kBufferLength = 4; + scoped_refptr<net::IOBufferWithSize> buffer( + new net::IOBufferWithSize(kBufferLength)); + net::TestCompletionCallback read_callback; + int result = + upload->Read(buffer.get(), buffer->size(), read_callback.callback()); + EXPECT_EQ(kBufferLength, read_callback.GetResult(result)); + EXPECT_EQ(0, + std::memcmp(kBlobData.c_str(), buffer->data(), buffer->size())); + + // Reset. + ASSERT_EQ(net::OK, upload->Init(init_callback.callback())); + + // Read all the data. + buffer = new net::IOBufferWithSize(kBlobDataLength); + result = + upload->Read(buffer.get(), buffer->size(), read_callback.callback()); + EXPECT_EQ(kBlobDataLength, read_callback.GetResult(result)); + EXPECT_EQ(0, + std::memcmp(kBlobData.c_str(), buffer->data(), buffer->size())); + } + // Clean up for ASAN. + base::RunLoop().RunUntilIdle(); +} } // namespace content |