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

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

Issue 14947007: [Downloads] Allow acquiring dangerous download file. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with r201622 Created 7 years, 7 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 unified diff | Download patch | Annotate | Revision Log
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 "base/callback.h"
5 #include "base/command_line.h" 6 #include "base/command_line.h"
6 #include "base/message_loop.h" 7 #include "base/message_loop.h"
7 #include "base/stl_util.h" 8 #include "base/stl_util.h"
8 #include "base/threading/thread.h" 9 #include "base/threading/thread.h"
9 #include "content/browser/byte_stream.h" 10 #include "content/browser/byte_stream.h"
10 #include "content/browser/download/download_create_info.h" 11 #include "content/browser/download/download_create_info.h"
11 #include "content/browser/download/download_file_factory.h" 12 #include "content/browser/download/download_file_factory.h"
12 #include "content/browser/download/download_item_impl.h" 13 #include "content/browser/download/download_item_impl.h"
13 #include "content/browser/download/download_item_impl_delegate.h" 14 #include "content/browser/download/download_item_impl_delegate.h"
14 #include "content/browser/download/download_request_handle.h" 15 #include "content/browser/download/download_request_handle.h"
15 #include "content/browser/download/mock_download_file.h" 16 #include "content/browser/download/mock_download_file.h"
17 #include "content/public/browser/download_destination_observer.h"
16 #include "content/public/browser/download_id.h" 18 #include "content/public/browser/download_id.h"
17 #include "content/public/browser/download_destination_observer.h"
18 #include "content/public/browser/download_interrupt_reasons.h" 19 #include "content/public/browser/download_interrupt_reasons.h"
19 #include "content/public/browser/download_url_parameters.h" 20 #include "content/public/browser/download_url_parameters.h"
20 #include "content/public/common/content_switches.h" 21 #include "content/public/common/content_switches.h"
21 #include "content/public/test/mock_download_item.h" 22 #include "content/public/test/mock_download_item.h"
22 #include "content/public/test/test_browser_thread.h" 23 #include "content/public/test/test_browser_thread.h"
23 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 26
26 using ::testing::_; 27 using ::testing::_;
27 using ::testing::NiceMock; 28 using ::testing::NiceMock;
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 } 318 }
318 319
319 void RunAllPendingInMessageLoops() { 320 void RunAllPendingInMessageLoops() {
320 loop_.RunUntilIdle(); 321 loop_.RunUntilIdle();
321 } 322 }
322 323
323 MockDelegate* mock_delegate() { 324 MockDelegate* mock_delegate() {
324 return &delegate_; 325 return &delegate_;
325 } 326 }
326 327
328 void OnDownloadFileAcquired(base::FilePath* return_path,
329 const base::FilePath& path) {
330 *return_path = path;
331 }
332
327 private: 333 private:
328 base::MessageLoopForUI loop_; 334 base::MessageLoopForUI loop_;
329 TestBrowserThread ui_thread_; // UI thread 335 TestBrowserThread ui_thread_; // UI thread
330 TestBrowserThread file_thread_; // FILE thread 336 TestBrowserThread file_thread_; // FILE thread
331 StrictMock<MockDelegate> delegate_; 337 StrictMock<MockDelegate> delegate_;
332 std::set<DownloadItem*> allocated_downloads_; 338 std::set<DownloadItem*> allocated_downloads_;
333 }; 339 };
334 340
335 // Tests to ensure calls that change a DownloadItem generate an update to 341 // Tests to ensure calls that change a DownloadItem generate an update to
336 // observers. 342 // observers.
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 TEST_F(DownloadItemTest, ContinueAfterInterrupted) { 429 TEST_F(DownloadItemTest, ContinueAfterInterrupted) {
424 CommandLine::ForCurrentProcess()->AppendSwitch( 430 CommandLine::ForCurrentProcess()->AppendSwitch(
425 switches::kEnableDownloadResumption); 431 switches::kEnableDownloadResumption);
426 432
427 DownloadItemImpl* item = CreateDownloadItem(); 433 DownloadItemImpl* item = CreateDownloadItem();
428 MockObserver observer(item); 434 MockObserver observer(item);
429 DownloadItemImplDelegate::DownloadTargetCallback callback; 435 DownloadItemImplDelegate::DownloadTargetCallback callback;
430 MockDownloadFile* download_file = DoIntermediateRename(item); 436 MockDownloadFile* download_file = DoIntermediateRename(item);
431 437
432 // Interrupt the download, using a continuable interrupt. 438 // Interrupt the download, using a continuable interrupt.
439 EXPECT_CALL(*download_file, FullPath())
440 .WillOnce(Return(base::FilePath()));
433 EXPECT_CALL(*download_file, Detach()); 441 EXPECT_CALL(*download_file, Detach());
434 item->DestinationObserverAsWeakPtr()->DestinationError( 442 item->DestinationObserverAsWeakPtr()->DestinationError(
435 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); 443 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR);
436 ASSERT_TRUE(observer.CheckUpdated()); 444 ASSERT_TRUE(observer.CheckUpdated());
437 // Should attempt to auto-resume. Because we don't have a mock WebContents, 445 // Should attempt to auto-resume. Because we don't have a mock WebContents,
438 // ResumeInterruptedDownload() will abort early, with another interrupt, 446 // ResumeInterruptedDownload() will abort early, with another interrupt,
439 // which will be ignored. 447 // which will be ignored.
440 ASSERT_EQ(1, observer.GetInterruptCount()); 448 ASSERT_EQ(1, observer.GetInterruptCount());
441 ASSERT_EQ(0, observer.GetResumeCount()); 449 ASSERT_EQ(0, observer.GetResumeCount());
442 RunAllPendingInMessageLoops(); 450 RunAllPendingInMessageLoops();
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _)) 492 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _))
485 .WillRepeatedly(SaveArg<1>(&callback)); 493 .WillRepeatedly(SaveArg<1>(&callback));
486 for (int i = 0; i < (DownloadItemImpl::kMaxAutoResumeAttempts + 1); ++i) { 494 for (int i = 0; i < (DownloadItemImpl::kMaxAutoResumeAttempts + 1); ++i) {
487 DVLOG(20) << "Loop iteration " << i; 495 DVLOG(20) << "Loop iteration " << i;
488 496
489 mock_download_file = new NiceMock<MockDownloadFile>; 497 mock_download_file = new NiceMock<MockDownloadFile>;
490 download_file.reset(mock_download_file); 498 download_file.reset(mock_download_file);
491 mock_request_handle = new NiceMock<MockRequestHandle>; 499 mock_request_handle = new NiceMock<MockRequestHandle>;
492 request_handle.reset(mock_request_handle); 500 request_handle.reset(mock_request_handle);
493 501
502 ON_CALL(*mock_download_file, FullPath())
503 .WillByDefault(Return(base::FilePath()));
504
494 // It's too complicated to set up a WebContents instance that would cause 505 // It's too complicated to set up a WebContents instance that would cause
495 // the MockDownloadItemDelegate's ResumeInterruptedDownload() function 506 // the MockDownloadItemDelegate's ResumeInterruptedDownload() function
496 // to be callled, so we simply verify that GetWebContents() is called. 507 // to be callled, so we simply verify that GetWebContents() is called.
497 if (i < (DownloadItemImpl::kMaxAutoResumeAttempts - 1)) { 508 if (i < (DownloadItemImpl::kMaxAutoResumeAttempts - 1)) {
498 EXPECT_CALL(*mock_request_handle, GetWebContents()) 509 EXPECT_CALL(*mock_request_handle, GetWebContents())
499 .WillOnce(Return(static_cast<WebContents*>(NULL))); 510 .WillOnce(Return(static_cast<WebContents*>(NULL)));
500 } 511 }
501 512
502 // Copied key parts of DoIntermediateRename & AddDownloadFileToDownloadItem 513 // Copied key parts of DoIntermediateRename & AddDownloadFileToDownloadItem
503 // to allow for holding onto the request handle. 514 // to allow for holding onto the request handle.
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 RunAllPendingInMessageLoops(); 700 RunAllPendingInMessageLoops();
690 // All the callbacks should have happened by now. 701 // All the callbacks should have happened by now.
691 ::testing::Mock::VerifyAndClearExpectations(download_file); 702 ::testing::Mock::VerifyAndClearExpectations(download_file);
692 mock_delegate()->VerifyAndClearExpectations(); 703 mock_delegate()->VerifyAndClearExpectations();
693 704
694 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 705 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
695 .WillOnce(Return(true)); 706 .WillOnce(Return(true));
696 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _)) 707 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _))
697 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 708 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
698 final_path)); 709 final_path));
710 EXPECT_CALL(*download_file, FullPath())
711 .WillOnce(Return(base::FilePath()));
699 EXPECT_CALL(*download_file, Detach()); 712 EXPECT_CALL(*download_file, Detach());
700 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 713 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
701 RunAllPendingInMessageLoops(); 714 RunAllPendingInMessageLoops();
702 ::testing::Mock::VerifyAndClearExpectations(download_file); 715 ::testing::Mock::VerifyAndClearExpectations(download_file);
703 mock_delegate()->VerifyAndClearExpectations(); 716 mock_delegate()->VerifyAndClearExpectations();
704 } 717 }
705 718
706 // Test that the delegate is invoked after the download file is renamed and the 719 // Test that the delegate is invoked after the download file is renamed and the
707 // download item is in an interrupted state. 720 // download item is in an interrupted state.
708 TEST_F(DownloadItemTest, CallbackAfterInterruptedRename) { 721 TEST_F(DownloadItemTest, CallbackAfterInterruptedRename) {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
886 ASSERT_FALSE(item->GetTargetFilePath().empty()); 899 ASSERT_FALSE(item->GetTargetFilePath().empty());
887 EXPECT_TRUE(item->CanShowInFolder()); 900 EXPECT_TRUE(item->CanShowInFolder());
888 EXPECT_TRUE(item->CanOpenDownload()); 901 EXPECT_TRUE(item->CanOpenDownload());
889 902
890 // Complete 903 // Complete
891 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) 904 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _))
892 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 905 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
893 base::FilePath(kDummyPath))); 906 base::FilePath(kDummyPath)));
894 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 907 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
895 .WillOnce(Return(true)); 908 .WillOnce(Return(true));
909 EXPECT_CALL(*download_file, FullPath())
910 .WillOnce(Return(base::FilePath()));
896 EXPECT_CALL(*download_file, Detach()); 911 EXPECT_CALL(*download_file, Detach());
897 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 912 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
898 RunAllPendingInMessageLoops(); 913 RunAllPendingInMessageLoops();
899 914
900 ASSERT_TRUE(item->IsComplete()); 915 ASSERT_TRUE(item->IsComplete());
901 EXPECT_TRUE(item->CanShowInFolder()); 916 EXPECT_TRUE(item->CanShowInFolder());
902 EXPECT_TRUE(item->CanOpenDownload()); 917 EXPECT_TRUE(item->CanOpenDownload());
903 } 918 }
904 919
905 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) { 920 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) {
906 DownloadItemImpl* item = CreateDownloadItem(); 921 DownloadItemImpl* item = CreateDownloadItem();
907 MockDownloadFile* download_file = DoIntermediateRename(item); 922 MockDownloadFile* download_file = DoIntermediateRename(item);
908 item->SetIsTemporary(true); 923 item->SetIsTemporary(true);
909 924
910 // InProgress Temporary 925 // InProgress Temporary
911 ASSERT_TRUE(item->IsInProgress()); 926 ASSERT_TRUE(item->IsInProgress());
912 ASSERT_FALSE(item->GetTargetFilePath().empty()); 927 ASSERT_FALSE(item->GetTargetFilePath().empty());
913 ASSERT_TRUE(item->IsTemporary()); 928 ASSERT_TRUE(item->IsTemporary());
914 EXPECT_FALSE(item->CanShowInFolder()); 929 EXPECT_FALSE(item->CanShowInFolder());
915 EXPECT_FALSE(item->CanOpenDownload()); 930 EXPECT_FALSE(item->CanOpenDownload());
916 931
917 // Complete Temporary 932 // Complete Temporary
918 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 933 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
919 .WillOnce(Return(true)); 934 .WillOnce(Return(true));
920 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) 935 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _))
921 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 936 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
922 base::FilePath(kDummyPath))); 937 base::FilePath(kDummyPath)));
938 EXPECT_CALL(*download_file, FullPath())
939 .WillOnce(Return(base::FilePath()));
923 EXPECT_CALL(*download_file, Detach()); 940 EXPECT_CALL(*download_file, Detach());
924 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 941 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
925 RunAllPendingInMessageLoops(); 942 RunAllPendingInMessageLoops();
926 943
927 ASSERT_TRUE(item->IsComplete()); 944 ASSERT_TRUE(item->IsComplete());
928 EXPECT_FALSE(item->CanShowInFolder()); 945 EXPECT_FALSE(item->CanShowInFolder());
929 EXPECT_FALSE(item->CanOpenDownload()); 946 EXPECT_FALSE(item->CanOpenDownload());
930 } 947 }
931 948
932 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) { 949 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 989 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
973 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 990 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
974 EXPECT_FALSE(item->IsDangerous()); 991 EXPECT_FALSE(item->IsDangerous());
975 992
976 // Make sure the download can complete. 993 // Make sure the download can complete.
977 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 994 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
978 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 995 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
979 base::FilePath(kDummyPath))); 996 base::FilePath(kDummyPath)));
980 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 997 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
981 .WillOnce(Return(true)); 998 .WillOnce(Return(true));
999 EXPECT_CALL(*download_file, FullPath())
1000 .WillOnce(Return(base::FilePath()));
982 EXPECT_CALL(*download_file, Detach()); 1001 EXPECT_CALL(*download_file, Detach());
983 RunAllPendingInMessageLoops(); 1002 RunAllPendingInMessageLoops();
984 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1003 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
985 } 1004 }
986 1005
987 // Just delaying completion. 1006 // Just delaying completion.
988 TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) { 1007 TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) {
989 // Test to confirm that if we have a callback that returns true, 1008 // Test to confirm that if we have a callback that returns true,
990 // we complete immediately. 1009 // we complete immediately.
991 DownloadItemImpl* item = CreateDownloadItem(); 1010 DownloadItemImpl* item = CreateDownloadItem();
(...skipping 15 matching lines...) Expand all
1007 ASSERT_TRUE(delegate_callback.is_null()); 1026 ASSERT_TRUE(delegate_callback.is_null());
1008 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1027 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1009 EXPECT_FALSE(item->IsDangerous()); 1028 EXPECT_FALSE(item->IsDangerous());
1010 1029
1011 // Make sure the download can complete. 1030 // Make sure the download can complete.
1012 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1031 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1013 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1032 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1014 base::FilePath(kDummyPath))); 1033 base::FilePath(kDummyPath)));
1015 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1034 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1016 .WillOnce(Return(true)); 1035 .WillOnce(Return(true));
1036 EXPECT_CALL(*download_file, FullPath())
1037 .WillOnce(Return(base::FilePath()));
1017 EXPECT_CALL(*download_file, Detach()); 1038 EXPECT_CALL(*download_file, Detach());
1018 RunAllPendingInMessageLoops(); 1039 RunAllPendingInMessageLoops();
1019 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1040 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1020 } 1041 }
1021 1042
1022 // Delay and set danger. 1043 // Delay and set danger.
1023 TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) { 1044 TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) {
1024 // Test to confirm that if we have a callback that returns true, 1045 // Test to confirm that if we have a callback that returns true,
1025 // we complete immediately. 1046 // we complete immediately.
1026 DownloadItemImpl* item = CreateDownloadItem(); 1047 DownloadItemImpl* item = CreateDownloadItem();
(...skipping 18 matching lines...) Expand all
1045 ASSERT_TRUE(delegate_callback.is_null()); 1066 ASSERT_TRUE(delegate_callback.is_null());
1046 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1067 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1047 EXPECT_TRUE(item->IsDangerous()); 1068 EXPECT_TRUE(item->IsDangerous());
1048 1069
1049 // Make sure the download doesn't complete until we've validated it. 1070 // Make sure the download doesn't complete until we've validated it.
1050 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1071 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1051 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1072 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1052 base::FilePath(kDummyPath))); 1073 base::FilePath(kDummyPath)));
1053 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1074 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1054 .WillOnce(Return(true)); 1075 .WillOnce(Return(true));
1076 EXPECT_CALL(*download_file, FullPath())
1077 .WillOnce(Return(base::FilePath()));
1055 EXPECT_CALL(*download_file, Detach()); 1078 EXPECT_CALL(*download_file, Detach());
1056 RunAllPendingInMessageLoops(); 1079 RunAllPendingInMessageLoops();
1057 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1080 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1058 EXPECT_TRUE(item->IsDangerous()); 1081 EXPECT_TRUE(item->IsDangerous());
1059 1082
1060 item->DangerousDownloadValidated(); 1083 item->DangerousDownloadValidated();
1061 EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType()); 1084 EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType());
1062 RunAllPendingInMessageLoops(); 1085 RunAllPendingInMessageLoops();
1063 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1086 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1064 } 1087 }
(...skipping 28 matching lines...) Expand all
1093 ASSERT_TRUE(delegate_callback.is_null()); 1116 ASSERT_TRUE(delegate_callback.is_null());
1094 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1117 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1095 EXPECT_FALSE(item->IsDangerous()); 1118 EXPECT_FALSE(item->IsDangerous());
1096 1119
1097 // Make sure the download can complete. 1120 // Make sure the download can complete.
1098 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1121 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1099 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1122 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1100 base::FilePath(kDummyPath))); 1123 base::FilePath(kDummyPath)));
1101 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1124 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1102 .WillOnce(Return(true)); 1125 .WillOnce(Return(true));
1126 EXPECT_CALL(*download_file, FullPath())
1127 .WillOnce(Return(base::FilePath()));
1103 EXPECT_CALL(*download_file, Detach()); 1128 EXPECT_CALL(*download_file, Detach());
1104 RunAllPendingInMessageLoops(); 1129 RunAllPendingInMessageLoops();
1105 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1130 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1106 } 1131 }
1107 1132
1133 TEST_F(DownloadItemTest, AcquireFileAndDeleteDownload) {
1134 DownloadItemImpl* item = CreateDownloadItem();
1135 MockDownloadFile* download_file = DoIntermediateRename(item);
1136 base::FilePath full_path(FILE_PATH_LITERAL("foo.txt"));
1137
1138 EXPECT_CALL(*download_file, FullPath())
1139 .WillOnce(Return(full_path));
1140 EXPECT_CALL(*download_file, Detach());
1141 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
1142
1143 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this);
1144 base::FilePath returned_path;
1145 item->AcquireFileAndDeleteDownload(
1146 base::Bind(&DownloadItemTest::OnDownloadFileAcquired,
1147 weak_ptr_factory.GetWeakPtr(),
1148 base::Unretained(&returned_path)));
1149 RunAllPendingInMessageLoops();
1150 EXPECT_EQ(full_path, returned_path);
1151 }
1152
1108 TEST(MockDownloadItem, Compiles) { 1153 TEST(MockDownloadItem, Compiles) {
1109 MockDownloadItem mock_item; 1154 MockDownloadItem mock_item;
1110 } 1155 }
1111 1156
1112 } // namespace content 1157 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698