| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "base/callback.h" | 5 #include "base/callback.h" |
| 6 #include "base/command_line.h" | 6 #include "base/command_line.h" |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/threading/thread.h" | 9 #include "base/threading/thread.h" |
| 10 #include "content/browser/byte_stream.h" | 10 #include "content/browser/byte_stream.h" |
| (...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 757 | 757 |
| 758 // Destination errors that occur before the intermediate rename shouldn't cause | 758 // Destination errors that occur before the intermediate rename shouldn't cause |
| 759 // the download to be marked as interrupted until after the intermediate rename. | 759 // the download to be marked as interrupted until after the intermediate rename. |
| 760 TEST_F(DownloadItemTest, InterruptedBeforeIntermediateRename) { | 760 TEST_F(DownloadItemTest, InterruptedBeforeIntermediateRename) { |
| 761 DownloadItemImpl* item = CreateDownloadItem(); | 761 DownloadItemImpl* item = CreateDownloadItem(); |
| 762 DownloadItemImplDelegate::DownloadTargetCallback callback; | 762 DownloadItemImplDelegate::DownloadTargetCallback callback; |
| 763 MockDownloadFile* download_file = | 763 MockDownloadFile* download_file = |
| 764 AddDownloadFileToDownloadItem(item, &callback); | 764 AddDownloadFileToDownloadItem(item, &callback); |
| 765 item->DestinationObserverAsWeakPtr()->DestinationError( | 765 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 766 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 766 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
| 767 ASSERT_TRUE(item->IsInProgress()); | 767 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 768 | 768 |
| 769 base::FilePath final_path(base::FilePath(kDummyPath).AppendASCII("foo.bar")); | 769 base::FilePath final_path(base::FilePath(kDummyPath).AppendASCII("foo.bar")); |
| 770 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); | 770 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); |
| 771 base::FilePath new_intermediate_path( | 771 base::FilePath new_intermediate_path( |
| 772 final_path.InsertBeforeExtensionASCII("y")); | 772 final_path.InsertBeforeExtensionASCII("y")); |
| 773 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) | 773 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) |
| 774 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | 774 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 775 new_intermediate_path)); | 775 new_intermediate_path)); |
| 776 EXPECT_CALL(*download_file, Cancel()) | 776 EXPECT_CALL(*download_file, Cancel()) |
| 777 .Times(1); | 777 .Times(1); |
| 778 | 778 |
| 779 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, | 779 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, |
| 780 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); | 780 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); |
| 781 RunAllPendingInMessageLoops(); | 781 RunAllPendingInMessageLoops(); |
| 782 // All the callbacks should have happened by now. | 782 // All the callbacks should have happened by now. |
| 783 ::testing::Mock::VerifyAndClearExpectations(download_file); | 783 ::testing::Mock::VerifyAndClearExpectations(download_file); |
| 784 mock_delegate()->VerifyAndClearExpectations(); | 784 mock_delegate()->VerifyAndClearExpectations(); |
| 785 EXPECT_TRUE(item->IsInterrupted()); | 785 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); |
| 786 EXPECT_TRUE(item->GetFullPath().empty()); | 786 EXPECT_TRUE(item->GetFullPath().empty()); |
| 787 EXPECT_EQ(final_path, item->GetTargetFilePath()); | 787 EXPECT_EQ(final_path, item->GetTargetFilePath()); |
| 788 } | 788 } |
| 789 | 789 |
| 790 TEST_F(DownloadItemTest, Canceled) { | 790 TEST_F(DownloadItemTest, Canceled) { |
| 791 DownloadItemImpl* item = CreateDownloadItem(); | 791 DownloadItemImpl* item = CreateDownloadItem(); |
| 792 MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL); | 792 MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL); |
| 793 | 793 |
| 794 // Confirm cancel sets state properly. | 794 // Confirm cancel sets state properly. |
| 795 EXPECT_CALL(*download_file, Cancel()); | 795 EXPECT_CALL(*download_file, Cancel()); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 EXPECT_EQ("", item->GetHashState()); | 884 EXPECT_EQ("", item->GetHashState()); |
| 885 EXPECT_TRUE(item->AllDataSaved()); | 885 EXPECT_TRUE(item->AllDataSaved()); |
| 886 } | 886 } |
| 887 | 887 |
| 888 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) { | 888 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) { |
| 889 DownloadItemImpl* item = CreateDownloadItem(); | 889 DownloadItemImpl* item = CreateDownloadItem(); |
| 890 MockDownloadFile* download_file = | 890 MockDownloadFile* download_file = |
| 891 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 891 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 892 | 892 |
| 893 // InProgress | 893 // InProgress |
| 894 ASSERT_TRUE(item->IsInProgress()); | 894 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 895 ASSERT_FALSE(item->GetTargetFilePath().empty()); | 895 ASSERT_FALSE(item->GetTargetFilePath().empty()); |
| 896 EXPECT_TRUE(item->CanShowInFolder()); | 896 EXPECT_TRUE(item->CanShowInFolder()); |
| 897 EXPECT_TRUE(item->CanOpenDownload()); | 897 EXPECT_TRUE(item->CanOpenDownload()); |
| 898 | 898 |
| 899 // Complete | 899 // Complete |
| 900 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) | 900 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) |
| 901 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | 901 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 902 base::FilePath(kDummyPath))); | 902 base::FilePath(kDummyPath))); |
| 903 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) | 903 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) |
| 904 .WillOnce(Return(true)); | 904 .WillOnce(Return(true)); |
| 905 EXPECT_CALL(*download_file, FullPath()) | 905 EXPECT_CALL(*download_file, FullPath()) |
| 906 .WillOnce(Return(base::FilePath())); | 906 .WillOnce(Return(base::FilePath())); |
| 907 EXPECT_CALL(*download_file, Detach()); | 907 EXPECT_CALL(*download_file, Detach()); |
| 908 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); | 908 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); |
| 909 RunAllPendingInMessageLoops(); | 909 RunAllPendingInMessageLoops(); |
| 910 | 910 |
| 911 ASSERT_TRUE(item->IsComplete()); | 911 ASSERT_EQ(DownloadItem::COMPLETE, item->GetState()); |
| 912 EXPECT_TRUE(item->CanShowInFolder()); | 912 EXPECT_TRUE(item->CanShowInFolder()); |
| 913 EXPECT_TRUE(item->CanOpenDownload()); | 913 EXPECT_TRUE(item->CanOpenDownload()); |
| 914 } | 914 } |
| 915 | 915 |
| 916 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) { | 916 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) { |
| 917 DownloadItemImpl* item = CreateDownloadItem(); | 917 DownloadItemImpl* item = CreateDownloadItem(); |
| 918 MockDownloadFile* download_file = | 918 MockDownloadFile* download_file = |
| 919 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 919 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 920 item->SetIsTemporary(true); | 920 item->SetIsTemporary(true); |
| 921 | 921 |
| 922 // InProgress Temporary | 922 // InProgress Temporary |
| 923 ASSERT_TRUE(item->IsInProgress()); | 923 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); |
| 924 ASSERT_FALSE(item->GetTargetFilePath().empty()); | 924 ASSERT_FALSE(item->GetTargetFilePath().empty()); |
| 925 ASSERT_TRUE(item->IsTemporary()); | 925 ASSERT_TRUE(item->IsTemporary()); |
| 926 EXPECT_FALSE(item->CanShowInFolder()); | 926 EXPECT_FALSE(item->CanShowInFolder()); |
| 927 EXPECT_FALSE(item->CanOpenDownload()); | 927 EXPECT_FALSE(item->CanOpenDownload()); |
| 928 | 928 |
| 929 // Complete Temporary | 929 // Complete Temporary |
| 930 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) | 930 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) |
| 931 .WillOnce(Return(true)); | 931 .WillOnce(Return(true)); |
| 932 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) | 932 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) |
| 933 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, | 933 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, |
| 934 base::FilePath(kDummyPath))); | 934 base::FilePath(kDummyPath))); |
| 935 EXPECT_CALL(*download_file, FullPath()) | 935 EXPECT_CALL(*download_file, FullPath()) |
| 936 .WillOnce(Return(base::FilePath())); | 936 .WillOnce(Return(base::FilePath())); |
| 937 EXPECT_CALL(*download_file, Detach()); | 937 EXPECT_CALL(*download_file, Detach()); |
| 938 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); | 938 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); |
| 939 RunAllPendingInMessageLoops(); | 939 RunAllPendingInMessageLoops(); |
| 940 | 940 |
| 941 ASSERT_TRUE(item->IsComplete()); | 941 ASSERT_EQ(DownloadItem::COMPLETE, item->GetState()); |
| 942 EXPECT_FALSE(item->CanShowInFolder()); | 942 EXPECT_FALSE(item->CanShowInFolder()); |
| 943 EXPECT_FALSE(item->CanOpenDownload()); | 943 EXPECT_FALSE(item->CanOpenDownload()); |
| 944 } | 944 } |
| 945 | 945 |
| 946 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) { | 946 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) { |
| 947 DownloadItemImpl* item = CreateDownloadItem(); | 947 DownloadItemImpl* item = CreateDownloadItem(); |
| 948 MockDownloadFile* download_file = | 948 MockDownloadFile* download_file = |
| 949 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 949 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 950 | 950 |
| 951 EXPECT_CALL(*download_file, Cancel()); | 951 EXPECT_CALL(*download_file, Cancel()); |
| 952 item->DestinationObserverAsWeakPtr()->DestinationError( | 952 item->DestinationObserverAsWeakPtr()->DestinationError( |
| 953 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); | 953 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); |
| 954 RunAllPendingInMessageLoops(); | 954 RunAllPendingInMessageLoops(); |
| 955 | 955 |
| 956 ASSERT_TRUE(item->IsInterrupted()); | 956 ASSERT_EQ(DownloadItem::INTERRUPTED, item->GetState()); |
| 957 ASSERT_FALSE(item->GetTargetFilePath().empty()); | 957 ASSERT_FALSE(item->GetTargetFilePath().empty()); |
| 958 EXPECT_FALSE(item->CanShowInFolder()); | 958 EXPECT_FALSE(item->CanShowInFolder()); |
| 959 EXPECT_FALSE(item->CanOpenDownload()); | 959 EXPECT_FALSE(item->CanOpenDownload()); |
| 960 } | 960 } |
| 961 | 961 |
| 962 TEST_F(DownloadItemTest, EnabledActionsForCancelledDownload) { | 962 TEST_F(DownloadItemTest, EnabledActionsForCancelledDownload) { |
| 963 DownloadItemImpl* item = CreateDownloadItem(); | 963 DownloadItemImpl* item = CreateDownloadItem(); |
| 964 MockDownloadFile* download_file = | 964 MockDownloadFile* download_file = |
| 965 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); | 965 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); |
| 966 | 966 |
| 967 EXPECT_CALL(*download_file, Cancel()); | 967 EXPECT_CALL(*download_file, Cancel()); |
| 968 item->Cancel(true); | 968 item->Cancel(true); |
| 969 RunAllPendingInMessageLoops(); | 969 RunAllPendingInMessageLoops(); |
| 970 | 970 |
| 971 ASSERT_TRUE(item->IsCancelled()); | 971 ASSERT_EQ(DownloadItem::CANCELLED, item->GetState()); |
| 972 EXPECT_FALSE(item->CanShowInFolder()); | 972 EXPECT_FALSE(item->CanShowInFolder()); |
| 973 EXPECT_FALSE(item->CanOpenDownload()); | 973 EXPECT_FALSE(item->CanOpenDownload()); |
| 974 } | 974 } |
| 975 | 975 |
| 976 // Test various aspects of the delegate completion blocker. | 976 // Test various aspects of the delegate completion blocker. |
| 977 | 977 |
| 978 // Just allowing completion. | 978 // Just allowing completion. |
| 979 TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) { | 979 TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) { |
| 980 // Test to confirm that if we have a callback that returns true, | 980 // Test to confirm that if we have a callback that returns true, |
| 981 // we complete immediately. | 981 // we complete immediately. |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1200 base::Unretained(&returned_path))); | 1200 base::Unretained(&returned_path))); |
| 1201 RunAllPendingInMessageLoops(); | 1201 RunAllPendingInMessageLoops(); |
| 1202 EXPECT_TRUE(returned_path.empty()); | 1202 EXPECT_TRUE(returned_path.empty()); |
| 1203 } | 1203 } |
| 1204 | 1204 |
| 1205 TEST(MockDownloadItem, Compiles) { | 1205 TEST(MockDownloadItem, Compiles) { |
| 1206 MockDownloadItem mock_item; | 1206 MockDownloadItem mock_item; |
| 1207 } | 1207 } |
| 1208 | 1208 |
| 1209 } // namespace content | 1209 } // namespace content |
| OLD | NEW |