| 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 3dce43e94f6cc961613675783a4627f712c51323..3303320887dadc9fc990eb6aa46700036d4bf860 100644
 | 
| --- a/content/browser/download/download_item_impl_unittest.cc
 | 
| +++ b/content/browser/download/download_item_impl_unittest.cc
 | 
| @@ -620,7 +620,7 @@ TEST_F(DownloadItemTest, NotificationAfterTogglePause) {
 | 
|    CleanupItem(item, mock_download_file, DownloadItem::IN_PROGRESS);
 | 
|  }
 | 
|  
 | 
| -// Test that a download is resumed automatcially after a continuable interrupt.
 | 
| +// Test that a download is resumed automatically after a continuable interrupt.
 | 
|  TEST_F(DownloadItemTest, AutomaticResumption_Continue) {
 | 
|    DownloadItemImpl* item = CreateDownloadItem();
 | 
|    TestDownloadItemObserver observer(item);
 | 
| @@ -719,6 +719,44 @@ TEST_F(DownloadItemTest, AutomaticResumption_NeedsUserAction) {
 | 
|    CleanupItem(item, nullptr, DownloadItem::INTERRUPTED);
 | 
|  }
 | 
|  
 | 
| +// Test that a download is resumed automatically after a content length mismatch
 | 
| +// 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();
 | 
| 
 |