summaryrefslogtreecommitdiffstats
path: root/content/browser
diff options
context:
space:
mode:
authordmurph <dmurph@chromium.org>2015-12-15 13:21:49 -0800
committerCommit bot <commit-bot@chromium.org>2015-12-15 21:23:24 +0000
commitf01c1228c9cca9b4078443438dfa868f7b972ac2 (patch)
tree727a6488a5c4333fb84e93d5214ddfcbf34fc478 /content/browser
parent7064ae3762738bbc29e3f56ffe5c1938009a6b20 (diff)
downloadchromium_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.cc4
-rw-r--r--content/browser/loader/upload_data_stream_builder_unittest.cc51
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