| 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())));
|
|
|
|
|