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

Unified Diff: content/browser/download/download_item_impl_unittest.cc

Issue 2799333002: Clear the received slices in DownloadItemImpl when etag changed. (Closed)
Patch Set: Address the uma issue. Created 3 years, 8 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/download/download_item_impl.cc ('k') | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/download/download_item_impl_unittest.cc
diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
index 0ac8b83da3b1a33832824edd9013ee6cd53b1850..e16e03803567d3ddec44608d201afa7a68eb8145 100644
--- a/content/browser/download/download_item_impl_unittest.cc
+++ b/content/browser/download/download_item_impl_unittest.cc
@@ -301,7 +301,7 @@ class DownloadItemTest : public testing::Test {
if (create_info_->result == DOWNLOAD_INTERRUPT_REASON_NONE) {
mock_download_file = new StrictMock<MockDownloadFile>;
download_file.reset(mock_download_file);
- EXPECT_CALL(*mock_download_file, Initialize(_))
+ EXPECT_CALL(*mock_download_file, Initialize(_, _))
.WillOnce(ScheduleCallbackWithParam(DOWNLOAD_INTERRUPT_REASON_NONE));
EXPECT_CALL(*mock_download_file, FullPath())
.WillRepeatedly(ReturnRefOfCopy(base::FilePath()));
@@ -593,7 +593,7 @@ TEST_F(DownloadItemTest, NotificationAfterTogglePause) {
std::unique_ptr<DownloadRequestHandleInterface> request_handle(
new NiceMock<MockRequestHandle>);
- EXPECT_CALL(*mock_download_file, Initialize(_));
+ EXPECT_CALL(*mock_download_file, Initialize(_, _));
EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(_, _));
item->Start(std::move(download_file), std::move(request_handle),
*create_info());
@@ -891,7 +891,7 @@ TEST_F(DownloadItemTest, FailedResumptionDoesntUpdateOriginState) {
}
// If the download resumption request succeeds, the origin state should be
-// updated
+// updated.
TEST_F(DownloadItemTest, SucceededResumptionUpdatesOriginState) {
const char kContentDisposition[] = "attachment; filename=foo";
const char kFirstETag[] = "ABC";
@@ -941,6 +941,45 @@ TEST_F(DownloadItemTest, SucceededResumptionUpdatesOriginState) {
CleanupItem(item, download_file, DownloadItem::IN_PROGRESS);
}
+// Ensure when strong validators changed on resumption, the received
+// slices should be cleared.
+TEST_F(DownloadItemTest, ClearReceivedSliceIfEtagChanged) {
+ const char kFirstETag[] = "ABC";
+ const char kSecondETag[] = "123";
+ const DownloadItem::ReceivedSlices kReceivedSlice = {
+ DownloadItem::ReceivedSlice(0, 10)};
+ create_info()->etag = kFirstETag;
+
+ DownloadItemImpl* item = CreateDownloadItem();
+ MockDownloadFile* download_file =
+ DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
+
+ EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_, _));
+ EXPECT_CALL(*download_file, Detach());
+
+ item->DestinationObserverAsWeakPtr()->DestinationUpdate(10, 100,
+ kReceivedSlice);
+ EXPECT_EQ(kReceivedSlice, item->GetReceivedSlices());
+ EXPECT_EQ(10, item->GetReceivedBytes());
+
+ item->DestinationObserverAsWeakPtr()->DestinationError(
+ DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR, 0,
+ std::unique_ptr<crypto::SecureHash>());
+ EXPECT_EQ(kReceivedSlice, item->GetReceivedSlices());
+
+ RunAllPendingInMessageLoops();
+
+ // Change the strong validator and resume the download, the received slices
+ // should be cleared.
+ create_info()->etag = kSecondETag;
+ DownloadTargetCallback target_callback;
+ download_file = CallDownloadItemStart(item, &target_callback);
+ EXPECT_TRUE(item->GetReceivedSlices().empty());
+ EXPECT_EQ(0, item->GetReceivedBytes());
+
+ CleanupItem(item, download_file, DownloadItem::IN_PROGRESS);
+}
+
// Test that resumption uses the final URL in a URL chain when resuming.
TEST_F(DownloadItemTest, ResumeUsesFinalURL) {
create_info()->save_info->prompt_for_save_location = false;
@@ -1007,7 +1046,7 @@ TEST_F(DownloadItemTest, Start) {
MockDownloadFile* mock_download_file(new MockDownloadFile);
std::unique_ptr<DownloadFile> download_file(mock_download_file);
DownloadItemImpl* item = CreateDownloadItem();
- EXPECT_CALL(*mock_download_file, Initialize(_));
+ EXPECT_CALL(*mock_download_file, Initialize(_, _));
std::unique_ptr<DownloadRequestHandleInterface> request_handle(
new NiceMock<MockRequestHandle>);
EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _));
@@ -1028,7 +1067,7 @@ TEST_F(DownloadItemTest, InitDownloadFileFails) {
EXPECT_CALL(*file, Cancel());
EXPECT_CALL(*request_handle, CancelRequest());
- EXPECT_CALL(*file, Initialize(_))
+ EXPECT_CALL(*file, Initialize(_, _))
.WillOnce(ScheduleCallbackWithParam(
DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED));
@@ -2050,7 +2089,7 @@ TEST_P(DownloadItemDestinationUpdateRaceTest, DownloadCancelledByUser) {
base::RunLoop download_start_loop;
DownloadFile::InitializeCallback initialize_callback;
- EXPECT_CALL(*file_, Initialize(_))
+ EXPECT_CALL(*file_, Initialize(_, _))
.WillOnce(DoAll(SaveArg<0>(&initialize_callback),
ScheduleClosure(download_start_loop.QuitClosure())));
item_->Start(std::move(file_), std::move(request_handle_), *create_info());
@@ -2103,7 +2142,7 @@ TEST_P(DownloadItemDestinationUpdateRaceTest, IntermediateRenameFails) {
base::RunLoop download_start_loop;
DownloadFile::InitializeCallback initialize_callback;
- EXPECT_CALL(*file_, Initialize(_))
+ EXPECT_CALL(*file_, Initialize(_, _))
.WillOnce(DoAll(SaveArg<0>(&initialize_callback),
ScheduleClosure(download_start_loop.QuitClosure())));
@@ -2173,7 +2212,7 @@ TEST_P(DownloadItemDestinationUpdateRaceTest, IntermediateRenameSucceeds) {
base::RunLoop download_start_loop;
DownloadFile::InitializeCallback initialize_callback;
- EXPECT_CALL(*file_, Initialize(_))
+ EXPECT_CALL(*file_, Initialize(_, _))
.WillOnce(DoAll(SaveArg<0>(&initialize_callback),
ScheduleClosure(download_start_loop.QuitClosure())));
« no previous file with comments | « content/browser/download/download_item_impl.cc ('k') | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698