| Index: content/browser/blob_storage/blob_reader_unittest.cc
 | 
| diff --git a/content/browser/blob_storage/blob_reader_unittest.cc b/content/browser/blob_storage/blob_reader_unittest.cc
 | 
| index dd519a0946548c2582c569245de7dd040529764b..399af8f4731de47bac1954b246d91678250d5e4d 100644
 | 
| --- a/content/browser/blob_storage/blob_reader_unittest.cc
 | 
| +++ b/content/browser/blob_storage/blob_reader_unittest.cc
 | 
| @@ -43,6 +43,7 @@ using base::FilePath;
 | 
|  using content::AsyncFileTestHelper;
 | 
|  using net::DrainableIOBuffer;
 | 
|  using net::IOBuffer;
 | 
| +using FileCreationInfo = storage::BlobMemoryController::FileCreationInfo;
 | 
|  
 | 
|  namespace storage {
 | 
|  namespace {
 | 
| @@ -50,6 +51,16 @@ namespace {
 | 
|  const int kTestDiskCacheStreamIndex = 0;
 | 
|  const int kTestDiskCacheSideStreamIndex = 1;
 | 
|  
 | 
| +void SaveBlobStatusAndFiles(BlobStatus* status_ptr,
 | 
| +                            std::vector<FileCreationInfo>* files_ptr,
 | 
| +                            BlobStatus status,
 | 
| +                            std::vector<FileCreationInfo> files) {
 | 
| +  *status_ptr = status;
 | 
| +  for (FileCreationInfo& info : files) {
 | 
| +    files_ptr->push_back(std::move(info));
 | 
| +  }
 | 
| +}
 | 
| +
 | 
|  // Our disk cache tests don't need a real data handle since the tests themselves
 | 
|  // scope the disk cache and entries.
 | 
|  class EmptyDataHandle : public storage::BlobDataBuilder::DataHandle {
 | 
| @@ -909,8 +920,7 @@ TEST_F(BlobReaderTest, FileSomeAsyncSegmentedOffsetsUnknownSizes) {
 | 
|      FilePath path = kPathBase.Append(
 | 
|          FilePath::FromUTF8Unsafe(base::StringPrintf("%d", current_value)));
 | 
|      uint64_t offset = i % 3 == 0 ? 1 : 0;
 | 
| -    uint64_t size =
 | 
| -        i % 2 == 0 ? kItemSize : std::numeric_limits<uint64_t>::max();
 | 
| +    uint64_t size = kItemSize;
 | 
|      b.AppendFile(path, offset, size, kTime);
 | 
|    }
 | 
|    this->InitializeReader(&b);
 | 
| @@ -1174,9 +1184,17 @@ TEST_F(BlobReaderTest, RangeError) {
 | 
|  
 | 
|  TEST_F(BlobReaderTest, HandleBeforeAsyncCancel) {
 | 
|    const std::string kUuid("uuid1");
 | 
| +  const std::string kData("Hello!!!");
 | 
| +  const size_t kDataSize = 8ul;
 | 
| +  std::vector<FileCreationInfo> files;
 | 
|  
 | 
| -  context_.CreatePendingBlob(kUuid, "", "");
 | 
| -  blob_handle_ = context_.GetBlobDataFromUUID(kUuid);
 | 
| +  BlobDataBuilder b(kUuid);
 | 
| +  b.AppendFutureData(kDataSize);
 | 
| +  BlobStatus can_populate_status =
 | 
| +      BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS;
 | 
| +  blob_handle_ = context_.BuildBlob(
 | 
| +      b, base::Bind(&SaveBlobStatusAndFiles, &can_populate_status, &files));
 | 
| +  EXPECT_EQ(BlobStatus::PENDING_TRANSPORT, can_populate_status);
 | 
|    provider_ = new MockFileStreamReaderProvider();
 | 
|    reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_),
 | 
|                                 message_loop_.task_runner().get()));
 | 
| @@ -1184,7 +1202,8 @@ TEST_F(BlobReaderTest, HandleBeforeAsyncCancel) {
 | 
|    EXPECT_EQ(BlobReader::Status::IO_PENDING,
 | 
|              reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
 | 
|    EXPECT_FALSE(reader_->IsInMemory());
 | 
| -  context_.CancelPendingBlob(kUuid, IPCBlobCreationCancelCode::UNKNOWN);
 | 
| +  context_.CancelBuildingBlob(kUuid,
 | 
| +                              BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS);
 | 
|    base::RunLoop().RunUntilIdle();
 | 
|    EXPECT_EQ(net::ERR_FAILED, size_result);
 | 
|  }
 | 
| @@ -1193,11 +1212,15 @@ TEST_F(BlobReaderTest, ReadFromIncompleteBlob) {
 | 
|    const std::string kUuid("uuid1");
 | 
|    const std::string kData("Hello!!!");
 | 
|    const size_t kDataSize = 8ul;
 | 
| +  std::vector<FileCreationInfo> files;
 | 
|  
 | 
|    BlobDataBuilder b(kUuid);
 | 
| -  b.AppendData(kData);
 | 
| -  context_.CreatePendingBlob(kUuid, "", "");
 | 
| -  blob_handle_ = context_.GetBlobDataFromUUID(kUuid);
 | 
| +  b.AppendFutureData(kDataSize);
 | 
| +  BlobStatus can_populate_status =
 | 
| +      BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS;
 | 
| +  blob_handle_ = context_.BuildBlob(
 | 
| +      b, base::Bind(&SaveBlobStatusAndFiles, &can_populate_status, &files));
 | 
| +  EXPECT_EQ(BlobStatus::PENDING_TRANSPORT, can_populate_status);
 | 
|    provider_ = new MockFileStreamReaderProvider();
 | 
|    reader_.reset(new BlobReader(blob_handle_.get(), base::WrapUnique(provider_),
 | 
|                                 message_loop_.task_runner().get()));
 | 
| @@ -1205,7 +1228,8 @@ TEST_F(BlobReaderTest, ReadFromIncompleteBlob) {
 | 
|    EXPECT_EQ(BlobReader::Status::IO_PENDING,
 | 
|              reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
 | 
|    EXPECT_FALSE(reader_->IsInMemory());
 | 
| -  context_.CompletePendingBlob(b);
 | 
| +  b.PopulateFutureData(0, kData.data(), 0, kDataSize);
 | 
| +  context_.NotifyTransportComplete(kUuid);
 | 
|    base::RunLoop().RunUntilIdle();
 | 
|    CheckSizeCalculatedAsynchronously(kDataSize, size_result);
 | 
|    scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize));
 | 
| 
 |