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

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

Issue 2832223004: interrupt and resume download with CONTENT_LENGTH_MISMATCH errors (Closed)
Patch Set: 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
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 6553d0d5bde5168c44cf4354a07e7af0e5a1cb66..1989d4d372df1e3d147342a9a3c0eec2464f9712 100644
--- a/content/browser/download/download_item_impl_unittest.cc
+++ b/content/browser/download/download_item_impl_unittest.cc
@@ -719,6 +719,44 @@ TEST_F(DownloadItemTest, AutomaticResumption_NeedsUserAction) {
CleanupItem(item, nullptr, DownloadItem::INTERRUPTED);
}
+// Test that a download is resumed automatcially after a content length mismatch
David Trainor- moved to gerrit 2017/04/25 03:50:41 automatically
qinmin 2017/04/25 19:27:47 Done.
+// error.
+TEST_F(DownloadItemTest, AutomaticResumption_ContentLengthMismatch) {
+ DownloadItemImpl* item = CreateDownloadItem();
+ TestDownloadItemObserver observer(item);
+ MockDownloadFile* download_file =
+ DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
+
+ // Interrupt the download with content length mismatch error. The intermediate
+ // file with data shouldn't be discarded.
+
+ // The DownloadFile should be detached without discarding.
+ EXPECT_CALL(*download_file, FullPath())
+ .WillOnce(ReturnRefOfCopy(base::FilePath()));
+ EXPECT_CALL(*download_file, Detach());
+
+ // Resumption attempt should pass the intermediate file along.
+ EXPECT_CALL(*mock_delegate(),
+ MockResumeInterruptedDownload(
+ AllOf(Property(&DownloadUrlParameters::file_path,
+ Property(&base::FilePath::value,
+ kDummyIntermediatePath)),
+ Property(&DownloadUrlParameters::offset, 1)),
+ _));
+
+ item->DestinationObserverAsWeakPtr()->DestinationError(
+ DOWNLOAD_INTERRUPT_REASON_SERVER_CONTENT_LENGTH_MISMATCH, 1,
+ std::unique_ptr<crypto::SecureHash>());
+ ASSERT_TRUE(observer.CheckAndResetDownloadUpdated());
+ // Since the download is resumed automatically, the observer shouldn't notice
+ // the interruption.
+ ASSERT_EQ(0, observer.interrupt_count());
+ ASSERT_EQ(0, observer.resume_count());
+
+ RunAllPendingInMessageLoops();
+ CleanupItem(item, nullptr, DownloadItem::IN_PROGRESS);
+}
+
// Check we do correct cleanup for RESUME_MODE_INVALID interrupts.
TEST_F(DownloadItemTest, UnresumableInterrupt) {
DownloadItemImpl* item = CreateDownloadItem();

Powered by Google App Engine
This is Rietveld 408576698