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

Side by Side Diff: content/browser/download/download_item_impl_unittest.cc

Issue 2453633006: [downloads] Move platform specific code out of DownloadTargetDeterminer. (Closed)
Patch Set: . Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
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 "content/browser/download/download_item_impl.h" 5 #include "content/browser/download/download_item_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <iterator> 9 #include <iterator>
10 #include <map> 10 #include <map>
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
330 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 330 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
331 EXPECT_TRUE(item->GetTargetFilePath().empty()); 331 EXPECT_TRUE(item->GetTargetFilePath().empty());
332 DownloadItemImplDelegate::DownloadTargetCallback callback; 332 DownloadItemImplDelegate::DownloadTargetCallback callback;
333 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback); 333 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
334 base::FilePath target_path(kDummyTargetPath); 334 base::FilePath target_path(kDummyTargetPath);
335 base::FilePath intermediate_path(kDummyIntermediatePath); 335 base::FilePath intermediate_path(kDummyIntermediatePath);
336 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 336 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
337 .WillOnce(ScheduleRenameAndUniquifyCallback( 337 .WillOnce(ScheduleRenameAndUniquifyCallback(
338 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path)); 338 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path));
339 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 339 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
340 danger_type, intermediate_path); 340 danger_type, intermediate_path,
341 DOWNLOAD_INTERRUPT_REASON_NONE);
341 RunAllPendingInMessageLoops(); 342 RunAllPendingInMessageLoops();
342 return download_file; 343 return download_file;
343 } 344 }
344 345
345 void DoDestinationComplete(DownloadItemImpl* item, 346 void DoDestinationComplete(DownloadItemImpl* item,
346 MockDownloadFile* download_file) { 347 MockDownloadFile* download_file) {
347 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(_, _)) 348 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(_, _))
348 .WillOnce(Return(true)); 349 .WillOnce(Return(true));
349 base::FilePath final_path(kDummyTargetPath); 350 base::FilePath final_path(kDummyTargetPath);
350 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _)) 351 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _, _, _, _))
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after
607 608
608 base::FilePath target_path(kDummyTargetPath); 609 base::FilePath target_path(kDummyTargetPath);
609 base::FilePath intermediate_path(kDummyIntermediatePath); 610 base::FilePath intermediate_path(kDummyIntermediatePath);
610 if (i == 0) { 611 if (i == 0) {
611 // RenameAndUniquify is only called the first time. In all the subsequent 612 // RenameAndUniquify is only called the first time. In all the subsequent
612 // iterations, the intermediate file already has the correct name, hence 613 // iterations, the intermediate file already has the correct name, hence
613 // no rename is necessary. 614 // no rename is necessary.
614 EXPECT_CALL(*mock_download_file, RenameAndUniquify(intermediate_path, _)) 615 EXPECT_CALL(*mock_download_file, RenameAndUniquify(intermediate_path, _))
615 .WillOnce(ScheduleRenameAndUniquifyCallback( 616 .WillOnce(ScheduleRenameAndUniquifyCallback(
616 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path)); 617 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path));
618 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
svaldez 2016/10/28 17:29:36 With this I think you should be changing the for s
asanka 2016/11/07 19:50:15 It needed more massaging. PTAL? :-)
619 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
620 DOWNLOAD_INTERRUPT_REASON_NONE);
621 RunAllPendingInMessageLoops();
617 } 622 }
618 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 623 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
619 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 624 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
625 DOWNLOAD_INTERRUPT_REASON_NONE);
620 RunAllPendingInMessageLoops(); 626 RunAllPendingInMessageLoops();
621 627
622 // Use a continuable interrupt. 628 // Use a continuable interrupt.
623 item->DestinationObserverAsWeakPtr()->DestinationError( 629 item->DestinationObserverAsWeakPtr()->DestinationError(
624 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR, 0, 630 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR, 0,
625 std::unique_ptr<crypto::SecureHash>()); 631 std::unique_ptr<crypto::SecureHash>());
626 632
627 RunAllPendingInMessageLoops(); 633 RunAllPendingInMessageLoops();
628 ::testing::Mock::VerifyAndClearExpectations(mock_download_file); 634 ::testing::Mock::VerifyAndClearExpectations(mock_download_file);
629 } 635 }
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x")); 813 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x"));
808 base::FilePath new_intermediate_path( 814 base::FilePath new_intermediate_path(
809 target_path.InsertBeforeExtensionASCII("y")); 815 target_path.InsertBeforeExtensionASCII("y"));
810 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 816 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
811 .WillOnce(ScheduleRenameAndUniquifyCallback( 817 .WillOnce(ScheduleRenameAndUniquifyCallback(
812 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path)); 818 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path));
813 819
814 // Currently, a notification would be generated if the danger type is anything 820 // Currently, a notification would be generated if the danger type is anything
815 // other than NOT_DANGEROUS. 821 // other than NOT_DANGEROUS.
816 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 822 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
817 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 823 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
824 DOWNLOAD_INTERRUPT_REASON_NONE);
818 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated()); 825 EXPECT_FALSE(observer.CheckAndResetDownloadUpdated());
819 RunAllPendingInMessageLoops(); 826 RunAllPendingInMessageLoops();
820 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated()); 827 EXPECT_TRUE(observer.CheckAndResetDownloadUpdated());
821 EXPECT_EQ(new_intermediate_path, item->GetFullPath()); 828 EXPECT_EQ(new_intermediate_path, item->GetFullPath());
822 829
823 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS); 830 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS);
824 } 831 }
825 832
826 TEST_F(DownloadItemTest, NotificationAfterTogglePause) { 833 TEST_F(DownloadItemTest, NotificationAfterTogglePause) {
827 DownloadItemImpl* item = CreateDownloadItem(); 834 DownloadItemImpl* item = CreateDownloadItem();
(...skipping 27 matching lines...) Expand all
855 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback); 862 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
856 base::FilePath target_path( 863 base::FilePath target_path(
857 base::FilePath(kDummyTargetPath).AppendASCII("foo.bar")); 864 base::FilePath(kDummyTargetPath).AppendASCII("foo.bar"));
858 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x")); 865 base::FilePath intermediate_path(target_path.InsertBeforeExtensionASCII("x"));
859 EXPECT_EQ(FILE_PATH_LITERAL(""), 866 EXPECT_EQ(FILE_PATH_LITERAL(""),
860 item->GetFileNameToReportUser().value()); 867 item->GetFileNameToReportUser().value());
861 EXPECT_CALL(*download_file, RenameAndUniquify(_, _)) 868 EXPECT_CALL(*download_file, RenameAndUniquify(_, _))
862 .WillOnce(ScheduleRenameAndUniquifyCallback( 869 .WillOnce(ScheduleRenameAndUniquifyCallback(
863 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path)); 870 DOWNLOAD_INTERRUPT_REASON_NONE, intermediate_path));
864 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 871 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
865 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 872 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
873 DOWNLOAD_INTERRUPT_REASON_NONE);
866 RunAllPendingInMessageLoops(); 874 RunAllPendingInMessageLoops();
867 EXPECT_EQ(FILE_PATH_LITERAL("foo.bar"), 875 EXPECT_EQ(FILE_PATH_LITERAL("foo.bar"),
868 item->GetFileNameToReportUser().value()); 876 item->GetFileNameToReportUser().value());
869 item->SetDisplayName(base::FilePath(FILE_PATH_LITERAL("new.name"))); 877 item->SetDisplayName(base::FilePath(FILE_PATH_LITERAL("new.name")));
870 EXPECT_EQ(FILE_PATH_LITERAL("new.name"), 878 EXPECT_EQ(FILE_PATH_LITERAL("new.name"),
871 item->GetFileNameToReportUser().value()); 879 item->GetFileNameToReportUser().value());
872 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS); 880 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS);
873 } 881 }
874 882
875 // Test to make sure that Start method calls DF initialize properly. 883 // Test to make sure that Start method calls DF initialize properly.
(...skipping 29 matching lines...) Expand all
905 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _)) 913 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _))
906 .WillOnce(DoAll(SaveArg<1>(&download_target_callback), 914 .WillOnce(DoAll(SaveArg<1>(&download_target_callback),
907 ScheduleClosure(start_download_loop.QuitClosure()))); 915 ScheduleClosure(start_download_loop.QuitClosure())));
908 916
909 item->Start(std::move(file), std::move(request_handle), *create_info()); 917 item->Start(std::move(file), std::move(request_handle), *create_info());
910 start_download_loop.Run(); 918 start_download_loop.Run();
911 919
912 download_target_callback.Run(base::FilePath(kDummyTargetPath), 920 download_target_callback.Run(base::FilePath(kDummyTargetPath),
913 DownloadItem::TARGET_DISPOSITION_OVERWRITE, 921 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
914 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, 922 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
915 base::FilePath(kDummyIntermediatePath)); 923 base::FilePath(kDummyIntermediatePath),
924 DOWNLOAD_INTERRUPT_REASON_NONE);
916 RunAllPendingInMessageLoops(); 925 RunAllPendingInMessageLoops();
917 926
918 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); 927 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
919 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED, 928 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED,
920 item->GetLastReason()); 929 item->GetLastReason());
921 } 930 }
922 931
923 // Handling of downloads initiated via a failed request. In this case, Start() 932 // Handling of downloads initiated via a failed request. In this case, Start()
924 // will get called with a DownloadCreateInfo with a non-zero interrupt_reason. 933 // will get called with a DownloadCreateInfo with a non-zero interrupt_reason.
925 TEST_F(DownloadItemTest, StartFailedDownload) { 934 TEST_F(DownloadItemTest, StartFailedDownload) {
(...skipping 12 matching lines...) Expand all
938 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 947 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
939 RunAllPendingInMessageLoops(); 948 RunAllPendingInMessageLoops();
940 949
941 // The DownloadItemImpl should attempt to determine a target path even if the 950 // The DownloadItemImpl should attempt to determine a target path even if the
942 // download was interrupted. 951 // download was interrupted.
943 ASSERT_FALSE(download_target_callback.is_null()); 952 ASSERT_FALSE(download_target_callback.is_null());
944 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 953 ASSERT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
945 base::FilePath target_path(FILE_PATH_LITERAL("foo")); 954 base::FilePath target_path(FILE_PATH_LITERAL("foo"));
946 download_target_callback.Run(target_path, 955 download_target_callback.Run(target_path,
947 DownloadItem::TARGET_DISPOSITION_OVERWRITE, 956 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
948 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, target_path); 957 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, target_path,
958 DOWNLOAD_INTERRUPT_REASON_NONE);
949 RunAllPendingInMessageLoops(); 959 RunAllPendingInMessageLoops();
950 960
951 EXPECT_EQ(target_path, item->GetTargetFilePath()); 961 EXPECT_EQ(target_path, item->GetTargetFilePath());
952 CleanupItem(item, NULL, DownloadItem::INTERRUPTED); 962 CleanupItem(item, NULL, DownloadItem::INTERRUPTED);
953 } 963 }
954 964
955 // Test that the delegate is invoked after the download file is renamed. 965 // Test that the delegate is invoked after the download file is renamed.
956 TEST_F(DownloadItemTest, CallbackAfterRename) { 966 TEST_F(DownloadItemTest, CallbackAfterRename) {
957 DownloadItemImpl* item = CreateDownloadItem(); 967 DownloadItemImpl* item = CreateDownloadItem();
958 DownloadItemImplDelegate::DownloadTargetCallback callback; 968 DownloadItemImplDelegate::DownloadTargetCallback callback;
959 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback); 969 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
960 base::FilePath final_path( 970 base::FilePath final_path(
961 base::FilePath(kDummyTargetPath).AppendASCII("foo.bar")); 971 base::FilePath(kDummyTargetPath).AppendASCII("foo.bar"));
962 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); 972 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x"));
963 base::FilePath new_intermediate_path( 973 base::FilePath new_intermediate_path(
964 final_path.InsertBeforeExtensionASCII("y")); 974 final_path.InsertBeforeExtensionASCII("y"));
965 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 975 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
966 .WillOnce(ScheduleRenameAndUniquifyCallback( 976 .WillOnce(ScheduleRenameAndUniquifyCallback(
967 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path)); 977 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path));
968 978
969 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 979 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
970 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 980 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
981 DOWNLOAD_INTERRUPT_REASON_NONE);
971 RunAllPendingInMessageLoops(); 982 RunAllPendingInMessageLoops();
972 // All the callbacks should have happened by now. 983 // All the callbacks should have happened by now.
973 ::testing::Mock::VerifyAndClearExpectations(download_file); 984 ::testing::Mock::VerifyAndClearExpectations(download_file);
974 mock_delegate()->VerifyAndClearExpectations(); 985 mock_delegate()->VerifyAndClearExpectations();
975 986
976 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 987 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
977 .WillOnce(Return(true)); 988 .WillOnce(Return(true));
978 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _, _, _, _)) 989 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _, _, _, _))
979 .WillOnce(ScheduleRenameAndAnnotateCallback( 990 .WillOnce(ScheduleRenameAndAnnotateCallback(
980 DOWNLOAD_INTERRUPT_REASON_NONE, final_path)); 991 DOWNLOAD_INTERRUPT_REASON_NONE, final_path));
(...skipping 18 matching lines...) Expand all
999 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); 1010 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x"));
1000 base::FilePath new_intermediate_path( 1011 base::FilePath new_intermediate_path(
1001 final_path.InsertBeforeExtensionASCII("y")); 1012 final_path.InsertBeforeExtensionASCII("y"));
1002 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 1013 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
1003 .WillOnce(ScheduleRenameAndUniquifyCallback( 1014 .WillOnce(ScheduleRenameAndUniquifyCallback(
1004 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, new_intermediate_path)); 1015 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, new_intermediate_path));
1005 EXPECT_CALL(*download_file, Cancel()) 1016 EXPECT_CALL(*download_file, Cancel())
1006 .Times(1); 1017 .Times(1);
1007 1018
1008 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1019 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1009 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 1020 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
1021 DOWNLOAD_INTERRUPT_REASON_NONE);
1010 RunAllPendingInMessageLoops(); 1022 RunAllPendingInMessageLoops();
1011 // All the callbacks should have happened by now. 1023 // All the callbacks should have happened by now.
1012 ::testing::Mock::VerifyAndClearExpectations(download_file); 1024 ::testing::Mock::VerifyAndClearExpectations(download_file);
1013 mock_delegate()->VerifyAndClearExpectations(); 1025 mock_delegate()->VerifyAndClearExpectations();
1014 } 1026 }
1015 1027
1016 TEST_F(DownloadItemTest, Interrupted) { 1028 TEST_F(DownloadItemTest, Interrupted) {
1017 DownloadItemImpl* item = CreateDownloadItem(); 1029 DownloadItemImpl* item = CreateDownloadItem();
1018 MockDownloadFile* download_file = 1030 MockDownloadFile* download_file =
1019 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); 1031 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1051 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); 1063 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x"));
1052 base::FilePath new_intermediate_path( 1064 base::FilePath new_intermediate_path(
1053 final_path.InsertBeforeExtensionASCII("y")); 1065 final_path.InsertBeforeExtensionASCII("y"));
1054 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 1066 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
1055 .WillOnce(ScheduleRenameAndUniquifyCallback( 1067 .WillOnce(ScheduleRenameAndUniquifyCallback(
1056 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path)); 1068 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path));
1057 EXPECT_CALL(*download_file, Cancel()) 1069 EXPECT_CALL(*download_file, Cancel())
1058 .Times(1); 1070 .Times(1);
1059 1071
1060 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1072 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1061 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 1073 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
1074 DOWNLOAD_INTERRUPT_REASON_NONE);
1062 RunAllPendingInMessageLoops(); 1075 RunAllPendingInMessageLoops();
1063 // All the callbacks should have happened by now. 1076 // All the callbacks should have happened by now.
1064 ::testing::Mock::VerifyAndClearExpectations(download_file); 1077 ::testing::Mock::VerifyAndClearExpectations(download_file);
1065 mock_delegate()->VerifyAndClearExpectations(); 1078 mock_delegate()->VerifyAndClearExpectations();
1066 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); 1079 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
1067 EXPECT_TRUE(item->GetFullPath().empty()); 1080 EXPECT_TRUE(item->GetFullPath().empty());
1068 EXPECT_EQ(final_path, item->GetTargetFilePath()); 1081 EXPECT_EQ(final_path, item->GetTargetFilePath());
1069 } 1082 }
1070 1083
1071 // As above. But if the download can be resumed by continuing, then the 1084 // As above. But if the download can be resumed by continuing, then the
(...skipping 14 matching lines...) Expand all
1086 base::FilePath new_intermediate_path( 1099 base::FilePath new_intermediate_path(
1087 final_path.InsertBeforeExtensionASCII("y")); 1100 final_path.InsertBeforeExtensionASCII("y"));
1088 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 1101 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
1089 .WillOnce(ScheduleRenameAndUniquifyCallback( 1102 .WillOnce(ScheduleRenameAndUniquifyCallback(
1090 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path)); 1103 DOWNLOAD_INTERRUPT_REASON_NONE, new_intermediate_path));
1091 EXPECT_CALL(*download_file, FullPath()) 1104 EXPECT_CALL(*download_file, FullPath())
1092 .WillOnce(ReturnRefOfCopy(base::FilePath(new_intermediate_path))); 1105 .WillOnce(ReturnRefOfCopy(base::FilePath(new_intermediate_path)));
1093 EXPECT_CALL(*download_file, Detach()); 1106 EXPECT_CALL(*download_file, Detach());
1094 1107
1095 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1108 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1096 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 1109 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
1110 DOWNLOAD_INTERRUPT_REASON_NONE);
1097 RunAllPendingInMessageLoops(); 1111 RunAllPendingInMessageLoops();
1098 // All the callbacks should have happened by now. 1112 // All the callbacks should have happened by now.
1099 ::testing::Mock::VerifyAndClearExpectations(download_file); 1113 ::testing::Mock::VerifyAndClearExpectations(download_file);
1100 mock_delegate()->VerifyAndClearExpectations(); 1114 mock_delegate()->VerifyAndClearExpectations();
1101 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); 1115 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
1102 EXPECT_EQ(new_intermediate_path, item->GetFullPath()); 1116 EXPECT_EQ(new_intermediate_path, item->GetFullPath());
1103 EXPECT_EQ(final_path, item->GetTargetFilePath()); 1117 EXPECT_EQ(final_path, item->GetTargetFilePath());
1104 } 1118 }
1105 1119
1106 // As above. If the intermediate rename fails, then the interrupt reason should 1120 // As above. If the intermediate rename fails, then the interrupt reason should
(...skipping 12 matching lines...) Expand all
1119 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x")); 1133 base::FilePath intermediate_path(final_path.InsertBeforeExtensionASCII("x"));
1120 base::FilePath new_intermediate_path( 1134 base::FilePath new_intermediate_path(
1121 final_path.InsertBeforeExtensionASCII("y")); 1135 final_path.InsertBeforeExtensionASCII("y"));
1122 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 1136 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
1123 .WillOnce(ScheduleRenameAndUniquifyCallback( 1137 .WillOnce(ScheduleRenameAndUniquifyCallback(
1124 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, new_intermediate_path)); 1138 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, new_intermediate_path));
1125 EXPECT_CALL(*download_file, Cancel()) 1139 EXPECT_CALL(*download_file, Cancel())
1126 .Times(1); 1140 .Times(1);
1127 1141
1128 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1142 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1129 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 1143 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path,
1144 DOWNLOAD_INTERRUPT_REASON_NONE);
1130 RunAllPendingInMessageLoops(); 1145 RunAllPendingInMessageLoops();
1131 // All the callbacks should have happened by now. 1146 // All the callbacks should have happened by now.
1132 ::testing::Mock::VerifyAndClearExpectations(download_file); 1147 ::testing::Mock::VerifyAndClearExpectations(download_file);
1133 mock_delegate()->VerifyAndClearExpectations(); 1148 mock_delegate()->VerifyAndClearExpectations();
1134 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); 1149 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
1135 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, item->GetLastReason()); 1150 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, item->GetLastReason());
1136 EXPECT_TRUE(item->GetFullPath().empty()); 1151 EXPECT_TRUE(item->GetFullPath().empty());
1137 EXPECT_EQ(final_path, item->GetTargetFilePath()); 1152 EXPECT_EQ(final_path, item->GetTargetFilePath());
1138 } 1153 }
1139 1154
1140 TEST_F(DownloadItemTest, Canceled) { 1155 TEST_F(DownloadItemTest, Canceled) {
1141 DownloadItemImpl* item = CreateDownloadItem(); 1156 DownloadItemImpl* item = CreateDownloadItem();
1142 DownloadItemImplDelegate::DownloadTargetCallback target_callback; 1157 DownloadItemImplDelegate::DownloadTargetCallback target_callback;
1143 MockDownloadFile* download_file = 1158 MockDownloadFile* download_file =
1144 CallDownloadItemStart(item, &target_callback); 1159 CallDownloadItemStart(item, &target_callback);
1145 1160
1146 // Confirm cancel sets state properly. 1161 // Confirm cancel sets state properly.
1147 EXPECT_CALL(*download_file, Cancel()); 1162 EXPECT_CALL(*download_file, Cancel());
1148 item->Cancel(true); 1163 item->Cancel(true);
1149 EXPECT_EQ(DownloadItem::CANCELLED, item->GetState()); 1164 EXPECT_EQ(DownloadItem::CANCELLED, item->GetState());
1150 } 1165 }
1151 1166
1167 TEST_F(DownloadItemTest, DownloadTargetDetermined_Cancel) {
1168 DownloadItemImpl* item = CreateDownloadItem();
1169 DownloadItemImplDelegate::DownloadTargetCallback callback;
1170 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
1171
1172 EXPECT_CALL(*download_file, Cancel());
1173 callback.Run(base::FilePath(FILE_PATH_LITERAL("foo")),
1174 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1175 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
1176 base::FilePath(FILE_PATH_LITERAL("bar")),
1177 DOWNLOAD_INTERRUPT_REASON_USER_CANCELED);
1178 EXPECT_EQ(DownloadItem::CANCELLED, item->GetState());
1179 }
1180
1181 TEST_F(DownloadItemTest, DownloadTargetDetermined_CancelWithEmptyName) {
1182 DownloadItemImpl* item = CreateDownloadItem();
1183 DownloadItemImplDelegate::DownloadTargetCallback callback;
1184 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
1185
1186 EXPECT_CALL(*download_file, Cancel());
1187 callback.Run(base::FilePath(), DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1188 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, base::FilePath(),
1189 DOWNLOAD_INTERRUPT_REASON_NONE);
1190 EXPECT_EQ(DownloadItem::CANCELLED, item->GetState());
1191 }
1192
1193 TEST_F(DownloadItemTest, DownloadTargetDetermined_Conflict) {
1194 DownloadItemImpl* item = CreateDownloadItem();
1195 DownloadItemImplDelegate::DownloadTargetCallback callback;
1196 MockDownloadFile* download_file = CallDownloadItemStart(item, &callback);
1197 base::FilePath target_path(FILE_PATH_LITERAL("/foo/bar"));
1198
1199 EXPECT_CALL(*download_file, Cancel());
1200 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1201 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, target_path,
1202 DOWNLOAD_INTERRUPT_REASON_FILE_SAME_AS_SOURCE);
1203 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
1204 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_FILE_SAME_AS_SOURCE,
1205 item->GetLastReason());
1206 }
1207
1152 TEST_F(DownloadItemTest, FileRemoved) { 1208 TEST_F(DownloadItemTest, FileRemoved) {
1153 DownloadItemImpl* item = CreateDownloadItem(); 1209 DownloadItemImpl* item = CreateDownloadItem();
1154 1210
1155 EXPECT_FALSE(item->GetFileExternallyRemoved()); 1211 EXPECT_FALSE(item->GetFileExternallyRemoved());
1156 item->OnDownloadedFileRemoved(); 1212 item->OnDownloadedFileRemoved();
1157 EXPECT_TRUE(item->GetFileExternallyRemoved()); 1213 EXPECT_TRUE(item->GetFileExternallyRemoved());
1158 } 1214 }
1159 1215
1160 TEST_F(DownloadItemTest, DestinationUpdate) { 1216 TEST_F(DownloadItemTest, DestinationUpdate) {
1161 DownloadItemImpl* item = CreateDownloadItem(); 1217 DownloadItemImpl* item = CreateDownloadItem();
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1869 initialize_callback.Run(DOWNLOAD_INTERRUPT_REASON_NONE); 1925 initialize_callback.Run(DOWNLOAD_INTERRUPT_REASON_NONE);
1870 initialize_completion_loop.Run(); 1926 initialize_completion_loop.Run();
1871 1927
1872 RunAllPendingInMessageLoops(); 1928 RunAllPendingInMessageLoops();
1873 1929
1874 ASSERT_FALSE(target_callback.is_null()); 1930 ASSERT_FALSE(target_callback.is_null());
1875 ScheduleObservations(PostTargetDeterminationObservations(), 1931 ScheduleObservations(PostTargetDeterminationObservations(),
1876 destination_observer); 1932 destination_observer);
1877 target_callback.Run(base::FilePath(), 1933 target_callback.Run(base::FilePath(),
1878 DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1934 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1879 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, base::FilePath()); 1935 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, base::FilePath(),
1936 DOWNLOAD_INTERRUPT_REASON_NONE);
1880 EXPECT_EQ(DownloadItem::CANCELLED, item_->GetState()); 1937 EXPECT_EQ(DownloadItem::CANCELLED, item_->GetState());
1881 RunAllPendingInMessageLoops(); 1938 RunAllPendingInMessageLoops();
1882 } 1939 }
1883 1940
1884 // Run through the DII workflow, but the intermediate rename fails. 1941 // Run through the DII workflow, but the intermediate rename fails.
1885 TEST_P(DownloadItemDestinationUpdateRaceTest, IntermediateRenameFails) { 1942 TEST_P(DownloadItemDestinationUpdateRaceTest, IntermediateRenameFails) {
1886 // Expect that the download file and the request will be cancelled as a 1943 // Expect that the download file and the request will be cancelled as a
1887 // result. 1944 // result.
1888 EXPECT_CALL(*file_, Cancel()); 1945 EXPECT_CALL(*file_, Cancel());
1889 EXPECT_CALL(*request_handle_, CancelRequest()); 1946 EXPECT_CALL(*request_handle_, CancelRequest());
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1922 initialize_completion_loop.Run(); 1979 initialize_completion_loop.Run();
1923 1980
1924 RunAllPendingInMessageLoops(); 1981 RunAllPendingInMessageLoops();
1925 ASSERT_FALSE(target_callback.is_null()); 1982 ASSERT_FALSE(target_callback.is_null());
1926 1983
1927 ScheduleObservations(PostTargetDeterminationObservations(), 1984 ScheduleObservations(PostTargetDeterminationObservations(),
1928 destination_observer); 1985 destination_observer);
1929 target_callback.Run(base::FilePath(kDummyTargetPath), 1986 target_callback.Run(base::FilePath(kDummyTargetPath),
1930 DownloadItem::TARGET_DISPOSITION_OVERWRITE, 1987 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
1931 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, 1988 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
1932 base::FilePath(kDummyIntermediatePath)); 1989 base::FilePath(kDummyIntermediatePath),
1990 DOWNLOAD_INTERRUPT_REASON_NONE);
1933 1991
1934 intermediate_rename_loop.Run(); 1992 intermediate_rename_loop.Run();
1935 ASSERT_FALSE(intermediate_rename_callback.is_null()); 1993 ASSERT_FALSE(intermediate_rename_callback.is_null());
1936 1994
1937 ScheduleObservations(PostIntermediateRenameObservations(), 1995 ScheduleObservations(PostIntermediateRenameObservations(),
1938 destination_observer); 1996 destination_observer);
1939 intermediate_rename_callback.Run(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, 1997 intermediate_rename_callback.Run(DOWNLOAD_INTERRUPT_REASON_FILE_FAILED,
1940 base::FilePath()); 1998 base::FilePath());
1941 RunAllPendingInMessageLoops(); 1999 RunAllPendingInMessageLoops();
1942 2000
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1991 initialize_completion_loop.Run(); 2049 initialize_completion_loop.Run();
1992 2050
1993 RunAllPendingInMessageLoops(); 2051 RunAllPendingInMessageLoops();
1994 ASSERT_FALSE(target_callback.is_null()); 2052 ASSERT_FALSE(target_callback.is_null());
1995 2053
1996 ScheduleObservations(PostTargetDeterminationObservations(), 2054 ScheduleObservations(PostTargetDeterminationObservations(),
1997 destination_observer); 2055 destination_observer);
1998 target_callback.Run(base::FilePath(kDummyTargetPath), 2056 target_callback.Run(base::FilePath(kDummyTargetPath),
1999 DownloadItem::TARGET_DISPOSITION_OVERWRITE, 2057 DownloadItem::TARGET_DISPOSITION_OVERWRITE,
2000 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, 2058 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
2001 base::FilePath(kDummyIntermediatePath)); 2059 base::FilePath(kDummyIntermediatePath),
2060 DOWNLOAD_INTERRUPT_REASON_NONE);
2002 2061
2003 intermediate_rename_loop.Run(); 2062 intermediate_rename_loop.Run();
2004 ASSERT_FALSE(intermediate_rename_callback.is_null()); 2063 ASSERT_FALSE(intermediate_rename_callback.is_null());
2005 2064
2006 // This may or may not be called, depending on whether there are any errors in 2065 // This may or may not be called, depending on whether there are any errors in
2007 // our action list. 2066 // our action list.
2008 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(_, _)) 2067 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(_, _))
2009 .Times(::testing::AnyNumber()); 2068 .Times(::testing::AnyNumber());
2010 2069
2011 ScheduleObservations(PostIntermediateRenameObservations(), 2070 ScheduleObservations(PostIntermediateRenameObservations(),
(...skipping 14 matching lines...) Expand all
2026 2085
2027 item_->Cancel(true); 2086 item_->Cancel(true);
2028 RunAllPendingInMessageLoops(); 2087 RunAllPendingInMessageLoops();
2029 } 2088 }
2030 2089
2031 TEST(MockDownloadItem, Compiles) { 2090 TEST(MockDownloadItem, Compiles) {
2032 MockDownloadItem mock_item; 2091 MockDownloadItem mock_item;
2033 } 2092 }
2034 2093
2035 } // namespace content 2094 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698