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

Side by Side Diff: content/browser/fileapi/blob_reader_unittest.cc

Issue 1513783005: [Blob] Fix for resetting reader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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 unified diff | Download patch
« no previous file with comments | « no previous file | storage/browser/blob/blob_reader.h » ('j') | storage/browser/blob/blob_reader.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "storage/browser/blob/blob_reader.h" 5 #include "storage/browser/blob/blob_reader.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/callback.h" 9 #include "base/callback.h"
10 #include "base/files/file_path.h" 10 #include "base/files/file_path.h"
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 int async_bytes_read = 0; 410 int async_bytes_read = 0;
411 EXPECT_EQ(BlobReader::Status::DONE, 411 EXPECT_EQ(BlobReader::Status::DONE,
412 reader_->Read(buffer.get(), kDataSize, &bytes_read, 412 reader_->Read(buffer.get(), kDataSize, &bytes_read,
413 base::Bind(&SetValue<int>, &async_bytes_read))); 413 base::Bind(&SetValue<int>, &async_bytes_read)));
414 EXPECT_EQ(net::OK, reader_->net_error()); 414 EXPECT_EQ(net::OK, reader_->net_error());
415 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read)); 415 EXPECT_EQ(kDataSize, static_cast<size_t>(bytes_read));
416 EXPECT_EQ(0, async_bytes_read); 416 EXPECT_EQ(0, async_bytes_read);
417 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize)); 417 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize));
418 } 418 }
419 419
420 TEST_F(BlobReaderTest, BasicMemoryWithResets) {
421 BlobDataBuilder b("uuid");
422 const std::string kData("Hello!!!");
423 const size_t kDataSize = 8ul;
424 b.AppendData(kData);
425 this->InitializeReader(&b);
426 EXPECT_FALSE(reader_->reader_used());
427
428 int size_result = -1;
429 EXPECT_FALSE(IsReaderTotalSizeCalculated());
430 EXPECT_EQ(BlobReader::Status::DONE,
431 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
432 EXPECT_TRUE(reader_->reader_used());
433
434 // Case 1: Reset after calculate size.
435 reader_->Reset();
436 EXPECT_FALSE(reader_->reader_used());
437 EXPECT_FALSE(IsReaderTotalSizeCalculated());
438
439 EXPECT_EQ(BlobReader::Status::DONE,
440 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
441 CheckSizeCalculatedSynchronously(kDataSize, size_result);
442
443 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kDataSize));
444 int bytes_read = 0;
445 int async_bytes_read = 0;
446 EXPECT_EQ(BlobReader::Status::DONE,
447 reader_->Read(buffer.get(), kDataSize, &bytes_read,
448 base::Bind(&SetValue<int>, &async_bytes_read)));
449 EXPECT_EQ(net::OK, reader_->net_error());
450
451 // Case 2: Reset after Read call.
452 reader_->Reset();
453 EXPECT_FALSE(reader_->reader_used());
454 EXPECT_FALSE(IsReaderTotalSizeCalculated());
455
456 EXPECT_EQ(BlobReader::Status::DONE,
457 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
458 EXPECT_EQ(BlobReader::Status::DONE,
459 reader_->Read(buffer.get(), kDataSize, &bytes_read,
460 base::Bind(&SetValue<int>, &async_bytes_read)));
461 EXPECT_EQ(0, memcmp(buffer->data(), "Hello!!!", kDataSize));
462 }
463
420 TEST_F(BlobReaderTest, BasicFile) { 464 TEST_F(BlobReaderTest, BasicFile) {
421 BlobDataBuilder b("uuid"); 465 BlobDataBuilder b("uuid");
422 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt"); 466 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt");
423 const std::string kData = "FileData!!!"; 467 const std::string kData = "FileData!!!";
424 const base::Time kTime = base::Time::Now(); 468 const base::Time kTime = base::Time::Now();
425 b.AppendFile(kPath, 0, kData.size(), kTime); 469 b.AppendFile(kPath, 0, kData.size(), kTime);
426 this->InitializeReader(&b); 470 this->InitializeReader(&b);
427 471
428 // Non-async reader. 472 // Non-async reader.
429 ExpectLocalFileCall(kPath, kTime, 0, new FakeFileStreamReader(kData)); 473 ExpectLocalFileCall(kPath, kTime, 0, new FakeFileStreamReader(kData));
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 EXPECT_EQ(BlobReader::Status::IO_PENDING, 715 EXPECT_EQ(BlobReader::Status::IO_PENDING,
672 reader_->Read(buffer.get(), kData.size(), &bytes_read, 716 reader_->Read(buffer.get(), kData.size(), &bytes_read,
673 base::Bind(&SetValue<int>, &async_bytes_read))); 717 base::Bind(&SetValue<int>, &async_bytes_read)));
674 message_loop_.RunUntilIdle(); 718 message_loop_.RunUntilIdle();
675 EXPECT_EQ(net::OK, reader_->net_error()); 719 EXPECT_EQ(net::OK, reader_->net_error());
676 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read)); 720 EXPECT_EQ(kData.size(), static_cast<size_t>(async_bytes_read));
677 EXPECT_EQ(0, bytes_read); 721 EXPECT_EQ(0, bytes_read);
678 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size())); 722 EXPECT_EQ(0, memcmp(buffer->data(), "FileData!!!", kData.size()));
679 } 723 }
680 724
725 TEST_F(BlobReaderTest, FileAsyncWithResets) {
726 BlobDataBuilder b("uuid");
727 const FilePath kPath = FilePath::FromUTF8Unsafe("/fake/file.txt");
728 const std::string kData = "FileData!!!";
729 const base::Time kTime = base::Time::Now();
730 b.AppendFile(kPath, 0, kData.size(), kTime);
731 this->InitializeReader(&b);
732
733 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData));
734 reader->SetAsyncRunner(message_loop_.task_runner().get());
735
736 ExpectLocalFileCall(kPath, kTime, 0, reader.release());
737
738 int size_result = -1;
739 EXPECT_FALSE(IsReaderTotalSizeCalculated());
740 EXPECT_EQ(BlobReader::Status::IO_PENDING,
741 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
742 CheckSizeNotCalculatedYet(size_result);
743
744 // Case 1: Reset after calculate size, but before callbacks are run.
745 reader_->Reset();
746 message_loop_.RunUntilIdle();
747 EXPECT_FALSE(IsReaderTotalSizeCalculated());
748
749 EXPECT_EQ(BlobReader::Status::IO_PENDING,
750 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
751 message_loop_.RunUntilIdle();
752 CheckSizeCalculatedAsynchronously(kData.size(), size_result);
753
754 scoped_refptr<net::IOBuffer> buffer(new net::IOBuffer(kData.size()));
755 int bytes_read = 0;
756 int async_bytes_read = 0;
757 EXPECT_EQ(BlobReader::Status::IO_PENDING,
758 reader_->Read(buffer.get(), kData.size(), &bytes_read,
759 base::Bind(&SetValue<int>, &async_bytes_read)));
760
761 // Case 2: Reset after read, but before callbacks are run.
762 reader_->Reset();
763 message_loop_.RunUntilIdle();
764 EXPECT_FALSE(IsReaderTotalSizeCalculated());
765 EXPECT_EQ(0, async_bytes_read);
766 }
767
681 TEST_F(BlobReaderTest, FileSystemAsync) { 768 TEST_F(BlobReaderTest, FileSystemAsync) {
682 BlobDataBuilder b("uuid"); 769 BlobDataBuilder b("uuid");
683 const GURL kURL("file://test_file/here.txt"); 770 const GURL kURL("file://test_file/here.txt");
684 const std::string kData = "FileData!!!"; 771 const std::string kData = "FileData!!!";
685 const base::Time kTime = base::Time::Now(); 772 const base::Time kTime = base::Time::Now();
686 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime); 773 b.AppendFileSystemFile(kURL, 0, kData.size(), kTime);
687 this->InitializeReader(&b); 774 this->InitializeReader(&b);
688 775
689 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData)); 776 scoped_ptr<FakeFileStreamReader> reader(new FakeFileStreamReader(kData));
690 reader->SetAsyncRunner(message_loop_.task_runner().get()); 777 reader->SetAsyncRunner(message_loop_.task_runner().get());
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after
1102 EXPECT_EQ(BlobReader::Status::DONE, 1189 EXPECT_EQ(BlobReader::Status::DONE,
1103 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result))); 1190 reader_->CalculateSize(base::Bind(&SetValue<int>, &size_result)));
1104 buffer = CreateBuffer(kDataSize + 1); 1191 buffer = CreateBuffer(kDataSize + 1);
1105 EXPECT_EQ(BlobReader::Status::NET_ERROR, 1192 EXPECT_EQ(BlobReader::Status::NET_ERROR,
1106 reader_->SetReadRange(0, kDataSize + 1)); 1193 reader_->SetReadRange(0, kDataSize + 1));
1107 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error()); 1194 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, reader_->net_error());
1108 } 1195 }
1109 1196
1110 } // namespace 1197 } // namespace
1111 } // namespace storage 1198 } // namespace storage
OLDNEW
« no previous file with comments | « no previous file | storage/browser/blob/blob_reader.h » ('j') | storage/browser/blob/blob_reader.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698