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

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: Rename methods for consistency 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 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 .WillRepeatedly(Return(false)); 272 .WillRepeatedly(Return(false));
272 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(_, _)) 273 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(_, _))
273 .WillRepeatedly(Return(true)); 274 .WillRepeatedly(Return(true));
274 275
275 return mock_download_file; 276 return mock_download_file;
276 } 277 }
277 278
278 // Perform the intermediate rename for |item|. The target path for the 279 // Perform the intermediate rename for |item|. The target path for the
279 // download will be set to kDummyPath. Returns the MockDownloadFile* that was 280 // download will be set to kDummyPath. Returns the MockDownloadFile* that was
280 // added to the DownloadItem. 281 // added to the DownloadItem.
281 MockDownloadFile* DoIntermediateRename(DownloadItemImpl* item) { 282 MockDownloadFile* DoIntermediateRename(DownloadItemImpl* item,
283 DownloadDangerType danger_type) {
282 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 284 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
283 EXPECT_TRUE(item->GetTargetFilePath().empty()); 285 EXPECT_TRUE(item->GetTargetFilePath().empty());
284 DownloadItemImplDelegate::DownloadTargetCallback callback; 286 DownloadItemImplDelegate::DownloadTargetCallback callback;
285 MockDownloadFile* download_file = 287 MockDownloadFile* download_file =
286 AddDownloadFileToDownloadItem(item, &callback); 288 AddDownloadFileToDownloadItem(item, &callback);
287 base::FilePath target_path(kDummyPath); 289 base::FilePath target_path(kDummyPath);
288 base::FilePath intermediate_path( 290 base::FilePath intermediate_path(
289 target_path.InsertBeforeExtensionASCII("x")); 291 target_path.InsertBeforeExtensionASCII("x"));
290 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _)) 292 EXPECT_CALL(*download_file, RenameAndUniquify(intermediate_path, _))
291 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 293 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
292 intermediate_path)); 294 intermediate_path));
293 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 295 callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
294 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 296 danger_type, intermediate_path);
295 RunAllPendingInMessageLoops(); 297 RunAllPendingInMessageLoops();
296 return download_file; 298 return download_file;
297 } 299 }
298 300
299 // Cleanup a download item (specifically get rid of the DownloadFile on it). 301 // Cleanup a download item (specifically get rid of the DownloadFile on it).
300 // The item must be in the expected state. 302 // The item must be in the expected state.
301 void CleanupItem(DownloadItemImpl* item, 303 void CleanupItem(DownloadItemImpl* item,
302 MockDownloadFile* download_file, 304 MockDownloadFile* download_file,
303 DownloadItem::DownloadState expected_state) { 305 DownloadItem::DownloadState expected_state) {
304 EXPECT_EQ(expected_state, item->GetState()); 306 EXPECT_EQ(expected_state, item->GetState());
(...skipping 12 matching lines...) Expand all
317 } 319 }
318 320
319 void RunAllPendingInMessageLoops() { 321 void RunAllPendingInMessageLoops() {
320 loop_.RunUntilIdle(); 322 loop_.RunUntilIdle();
321 } 323 }
322 324
323 MockDelegate* mock_delegate() { 325 MockDelegate* mock_delegate() {
324 return &delegate_; 326 return &delegate_;
325 } 327 }
326 328
329 void OnDownloadFileAcquired(base::FilePath* return_path,
330 const base::FilePath& path) {
331 *return_path = path;
332 }
333
327 private: 334 private:
328 base::MessageLoopForUI loop_; 335 base::MessageLoopForUI loop_;
329 TestBrowserThread ui_thread_; // UI thread 336 TestBrowserThread ui_thread_; // UI thread
330 TestBrowserThread file_thread_; // FILE thread 337 TestBrowserThread file_thread_; // FILE thread
331 StrictMock<MockDelegate> delegate_; 338 StrictMock<MockDelegate> delegate_;
332 std::set<DownloadItem*> allocated_downloads_; 339 std::set<DownloadItem*> allocated_downloads_;
333 }; 340 };
334 341
335 // Tests to ensure calls that change a DownloadItem generate an update to 342 // Tests to ensure calls that change a DownloadItem generate an update to
336 // observers. 343 // observers.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 TEST_F(DownloadItemTest, NotificationAfterDownloadedFileRemoved) { 389 TEST_F(DownloadItemTest, NotificationAfterDownloadedFileRemoved) {
383 DownloadItemImpl* item = CreateDownloadItem(); 390 DownloadItemImpl* item = CreateDownloadItem();
384 MockObserver observer(item); 391 MockObserver observer(item);
385 392
386 item->OnDownloadedFileRemoved(); 393 item->OnDownloadedFileRemoved();
387 ASSERT_TRUE(observer.CheckUpdated()); 394 ASSERT_TRUE(observer.CheckUpdated());
388 } 395 }
389 396
390 TEST_F(DownloadItemTest, NotificationAfterInterrupted) { 397 TEST_F(DownloadItemTest, NotificationAfterInterrupted) {
391 DownloadItemImpl* item = CreateDownloadItem(); 398 DownloadItemImpl* item = CreateDownloadItem();
392 MockDownloadFile* download_file = DoIntermediateRename(item); 399 MockDownloadFile* download_file =
400 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
393 EXPECT_CALL(*download_file, Cancel()); 401 EXPECT_CALL(*download_file, Cancel());
394 MockObserver observer(item); 402 MockObserver observer(item);
395 403
396 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_,_)) 404 EXPECT_CALL(*mock_delegate(), MockResumeInterruptedDownload(_,_))
397 .Times(0); 405 .Times(0);
398 406
399 item->DestinationObserverAsWeakPtr()->DestinationError( 407 item->DestinationObserverAsWeakPtr()->DestinationError(
400 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); 408 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED);
401 ASSERT_TRUE(observer.CheckUpdated()); 409 ASSERT_TRUE(observer.CheckUpdated());
402 } 410 }
403 411
404 TEST_F(DownloadItemTest, NotificationAfterDelete) { 412 TEST_F(DownloadItemTest, NotificationAfterDiscardDangerousDownload) {
405 DownloadItemImpl* item = CreateDownloadItem(); 413 DownloadItemImpl* item = CreateDownloadItem();
406 MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL); 414 MockDownloadFile* download_file =
415 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
416 ASSERT_TRUE(item->IsDangerous());
417
418 MockObserver observer(item);
407 EXPECT_CALL(*download_file, Cancel()); 419 EXPECT_CALL(*download_file, Cancel());
408 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); 420 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
409 MockObserver observer(item); 421 item->DiscardDangerousDownload(DownloadItem::DELETE_DUE_TO_BROWSER_SHUTDOWN,
410 422 DownloadItem::AcquireFileCallback());
411 item->Delete(DownloadItem::DELETE_DUE_TO_BROWSER_SHUTDOWN);
412 ASSERT_TRUE(observer.CheckUpdated()); 423 ASSERT_TRUE(observer.CheckUpdated());
413 } 424 }
414 425
415 TEST_F(DownloadItemTest, NotificationAfterDestroyed) { 426 TEST_F(DownloadItemTest, NotificationAfterDestroyed) {
416 DownloadItemImpl* item = CreateDownloadItem(); 427 DownloadItemImpl* item = CreateDownloadItem();
417 MockObserver observer(item); 428 MockObserver observer(item);
418 429
419 DestroyDownloadItem(item); 430 DestroyDownloadItem(item);
420 ASSERT_TRUE(observer.CheckDestroyed()); 431 ASSERT_TRUE(observer.CheckDestroyed());
421 } 432 }
422 433
423 TEST_F(DownloadItemTest, ContinueAfterInterrupted) { 434 TEST_F(DownloadItemTest, ContinueAfterInterrupted) {
424 CommandLine::ForCurrentProcess()->AppendSwitch( 435 CommandLine::ForCurrentProcess()->AppendSwitch(
425 switches::kEnableDownloadResumption); 436 switches::kEnableDownloadResumption);
426 437
427 DownloadItemImpl* item = CreateDownloadItem(); 438 DownloadItemImpl* item = CreateDownloadItem();
428 MockObserver observer(item); 439 MockObserver observer(item);
429 DownloadItemImplDelegate::DownloadTargetCallback callback; 440 DownloadItemImplDelegate::DownloadTargetCallback callback;
430 MockDownloadFile* download_file = DoIntermediateRename(item); 441 MockDownloadFile* download_file =
442 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
431 443
432 // Interrupt the download, using a continuable interrupt. 444 // Interrupt the download, using a continuable interrupt.
445 EXPECT_CALL(*download_file, FullPath())
446 .WillOnce(Return(base::FilePath()));
433 EXPECT_CALL(*download_file, Detach()); 447 EXPECT_CALL(*download_file, Detach());
434 item->DestinationObserverAsWeakPtr()->DestinationError( 448 item->DestinationObserverAsWeakPtr()->DestinationError(
435 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR); 449 DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR);
436 ASSERT_TRUE(observer.CheckUpdated()); 450 ASSERT_TRUE(observer.CheckUpdated());
437 // Should attempt to auto-resume. Because we don't have a mock WebContents, 451 // Should attempt to auto-resume. Because we don't have a mock WebContents,
438 // ResumeInterruptedDownload() will abort early, with another interrupt, 452 // ResumeInterruptedDownload() will abort early, with another interrupt,
439 // which will be ignored. 453 // which will be ignored.
440 ASSERT_EQ(1, observer.GetInterruptCount()); 454 ASSERT_EQ(1, observer.GetInterruptCount());
441 ASSERT_EQ(0, observer.GetResumeCount()); 455 ASSERT_EQ(0, observer.GetResumeCount());
442 RunAllPendingInMessageLoops(); 456 RunAllPendingInMessageLoops();
443 457
444 CleanupItem(item, download_file, DownloadItem::INTERRUPTED); 458 CleanupItem(item, download_file, DownloadItem::INTERRUPTED);
445 } 459 }
446 460
447 // Same as above, but with a non-continuable interrupt. 461 // Same as above, but with a non-continuable interrupt.
448 TEST_F(DownloadItemTest, RestartAfterInterrupted) { 462 TEST_F(DownloadItemTest, RestartAfterInterrupted) {
449 CommandLine::ForCurrentProcess()->AppendSwitch( 463 CommandLine::ForCurrentProcess()->AppendSwitch(
450 switches::kEnableDownloadResumption); 464 switches::kEnableDownloadResumption);
451 465
452 DownloadItemImpl* item = CreateDownloadItem(); 466 DownloadItemImpl* item = CreateDownloadItem();
453 MockObserver observer(item); 467 MockObserver observer(item);
454 DownloadItemImplDelegate::DownloadTargetCallback callback; 468 DownloadItemImplDelegate::DownloadTargetCallback callback;
455 MockDownloadFile* download_file = DoIntermediateRename(item); 469 MockDownloadFile* download_file =
470 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
456 471
457 // Interrupt the download, using a restartable interrupt. 472 // Interrupt the download, using a restartable interrupt.
458 EXPECT_CALL(*download_file, Cancel()); 473 EXPECT_CALL(*download_file, Cancel());
459 item->DestinationObserverAsWeakPtr()->DestinationError( 474 item->DestinationObserverAsWeakPtr()->DestinationError(
460 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); 475 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED);
461 ASSERT_TRUE(observer.CheckUpdated()); 476 ASSERT_TRUE(observer.CheckUpdated());
462 // Should not try to auto-resume. 477 // Should not try to auto-resume.
463 ASSERT_EQ(1, observer.GetInterruptCount()); 478 ASSERT_EQ(1, observer.GetInterruptCount());
464 ASSERT_EQ(0, observer.GetResumeCount()); 479 ASSERT_EQ(0, observer.GetResumeCount());
465 RunAllPendingInMessageLoops(); 480 RunAllPendingInMessageLoops();
(...skipping 18 matching lines...) Expand all
484 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _)) 499 EXPECT_CALL(*mock_delegate(), DetermineDownloadTarget(item, _))
485 .WillRepeatedly(SaveArg<1>(&callback)); 500 .WillRepeatedly(SaveArg<1>(&callback));
486 for (int i = 0; i < (DownloadItemImpl::kMaxAutoResumeAttempts + 1); ++i) { 501 for (int i = 0; i < (DownloadItemImpl::kMaxAutoResumeAttempts + 1); ++i) {
487 DVLOG(20) << "Loop iteration " << i; 502 DVLOG(20) << "Loop iteration " << i;
488 503
489 mock_download_file = new NiceMock<MockDownloadFile>; 504 mock_download_file = new NiceMock<MockDownloadFile>;
490 download_file.reset(mock_download_file); 505 download_file.reset(mock_download_file);
491 mock_request_handle = new NiceMock<MockRequestHandle>; 506 mock_request_handle = new NiceMock<MockRequestHandle>;
492 request_handle.reset(mock_request_handle); 507 request_handle.reset(mock_request_handle);
493 508
509 ON_CALL(*mock_download_file, FullPath())
510 .WillByDefault(Return(base::FilePath()));
511
494 // It's too complicated to set up a WebContents instance that would cause 512 // It's too complicated to set up a WebContents instance that would cause
495 // the MockDownloadItemDelegate's ResumeInterruptedDownload() function 513 // the MockDownloadItemDelegate's ResumeInterruptedDownload() function
496 // to be callled, so we simply verify that GetWebContents() is called. 514 // to be callled, so we simply verify that GetWebContents() is called.
497 if (i < (DownloadItemImpl::kMaxAutoResumeAttempts - 1)) { 515 if (i < (DownloadItemImpl::kMaxAutoResumeAttempts - 1)) {
498 EXPECT_CALL(*mock_request_handle, GetWebContents()) 516 EXPECT_CALL(*mock_request_handle, GetWebContents())
499 .WillOnce(Return(static_cast<WebContents*>(NULL))); 517 .WillOnce(Return(static_cast<WebContents*>(NULL)));
500 } 518 }
501 519
502 // Copied key parts of DoIntermediateRename & AddDownloadFileToDownloadItem 520 // Copied key parts of DoIntermediateRename & AddDownloadFileToDownloadItem
503 // to allow for holding onto the request handle. 521 // to allow for holding onto the request handle.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 // Setting to unsafe url or unsafe file should trigger a notification. 571 // Setting to unsafe url or unsafe file should trigger a notification.
554 DownloadItemImpl* unsafeurl_item = 572 DownloadItemImpl* unsafeurl_item =
555 CreateDownloadItem(); 573 CreateDownloadItem();
556 MockObserver unsafeurl_observer(unsafeurl_item); 574 MockObserver unsafeurl_observer(unsafeurl_item);
557 575
558 unsafeurl_item->OnAllDataSaved(std::string()); 576 unsafeurl_item->OnAllDataSaved(std::string());
559 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); 577 EXPECT_TRUE(unsafeurl_observer.CheckUpdated());
560 unsafeurl_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_URL); 578 unsafeurl_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_URL);
561 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); 579 EXPECT_TRUE(unsafeurl_observer.CheckUpdated());
562 580
563 unsafeurl_item->DangerousDownloadValidated(); 581 unsafeurl_item->ValidateDangerousDownload();
564 EXPECT_TRUE(unsafeurl_observer.CheckUpdated()); 582 EXPECT_TRUE(unsafeurl_observer.CheckUpdated());
565 583
566 DownloadItemImpl* unsafefile_item = 584 DownloadItemImpl* unsafefile_item =
567 CreateDownloadItem(); 585 CreateDownloadItem();
568 MockObserver unsafefile_observer(unsafefile_item); 586 MockObserver unsafefile_observer(unsafefile_item);
569 587
570 unsafefile_item->OnAllDataSaved(std::string()); 588 unsafefile_item->OnAllDataSaved(std::string());
571 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); 589 EXPECT_TRUE(unsafefile_observer.CheckUpdated());
572 unsafefile_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); 590 unsafefile_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
573 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); 591 EXPECT_TRUE(unsafefile_observer.CheckUpdated());
574 592
575 unsafefile_item->DangerousDownloadValidated(); 593 unsafefile_item->ValidateDangerousDownload();
576 EXPECT_TRUE(unsafefile_observer.CheckUpdated()); 594 EXPECT_TRUE(unsafefile_observer.CheckUpdated());
577 } 595 }
578 596
579 // DownloadItemImpl::OnDownloadTargetDetermined will schedule a task to run 597 // DownloadItemImpl::OnDownloadTargetDetermined will schedule a task to run
580 // DownloadFile::Rename(). Once the rename 598 // DownloadFile::Rename(). Once the rename
581 // completes, DownloadItemImpl receives a notification with the new file 599 // completes, DownloadItemImpl receives a notification with the new file
582 // name. Check that observers are updated when the new filename is available and 600 // name. Check that observers are updated when the new filename is available and
583 // not before. 601 // not before.
584 TEST_F(DownloadItemTest, NotificationAfterOnDownloadTargetDetermined) { 602 TEST_F(DownloadItemTest, NotificationAfterOnDownloadTargetDetermined) {
585 DownloadItemImpl* item = CreateDownloadItem(); 603 DownloadItemImpl* item = CreateDownloadItem();
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 RunAllPendingInMessageLoops(); 707 RunAllPendingInMessageLoops();
690 // All the callbacks should have happened by now. 708 // All the callbacks should have happened by now.
691 ::testing::Mock::VerifyAndClearExpectations(download_file); 709 ::testing::Mock::VerifyAndClearExpectations(download_file);
692 mock_delegate()->VerifyAndClearExpectations(); 710 mock_delegate()->VerifyAndClearExpectations();
693 711
694 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 712 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
695 .WillOnce(Return(true)); 713 .WillOnce(Return(true));
696 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _)) 714 EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _))
697 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 715 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
698 final_path)); 716 final_path));
717 EXPECT_CALL(*download_file, FullPath())
718 .WillOnce(Return(base::FilePath()));
699 EXPECT_CALL(*download_file, Detach()); 719 EXPECT_CALL(*download_file, Detach());
700 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 720 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
701 RunAllPendingInMessageLoops(); 721 RunAllPendingInMessageLoops();
702 ::testing::Mock::VerifyAndClearExpectations(download_file); 722 ::testing::Mock::VerifyAndClearExpectations(download_file);
703 mock_delegate()->VerifyAndClearExpectations(); 723 mock_delegate()->VerifyAndClearExpectations();
704 } 724 }
705 725
706 // Test that the delegate is invoked after the download file is renamed and the 726 // Test that the delegate is invoked after the download file is renamed and the
707 // download item is in an interrupted state. 727 // download item is in an interrupted state.
708 TEST_F(DownloadItemTest, CallbackAfterInterruptedRename) { 728 TEST_F(DownloadItemTest, CallbackAfterInterruptedRename) {
(...skipping 14 matching lines...) Expand all
723 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE, 743 callback.Run(final_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
724 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path); 744 DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path);
725 RunAllPendingInMessageLoops(); 745 RunAllPendingInMessageLoops();
726 // All the callbacks should have happened by now. 746 // All the callbacks should have happened by now.
727 ::testing::Mock::VerifyAndClearExpectations(download_file); 747 ::testing::Mock::VerifyAndClearExpectations(download_file);
728 mock_delegate()->VerifyAndClearExpectations(); 748 mock_delegate()->VerifyAndClearExpectations();
729 } 749 }
730 750
731 TEST_F(DownloadItemTest, Interrupted) { 751 TEST_F(DownloadItemTest, Interrupted) {
732 DownloadItemImpl* item = CreateDownloadItem(); 752 DownloadItemImpl* item = CreateDownloadItem();
733 MockDownloadFile* download_file = DoIntermediateRename(item); 753 MockDownloadFile* download_file =
754 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
734 755
735 const DownloadInterruptReason reason( 756 const DownloadInterruptReason reason(
736 DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED); 757 DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED);
737 758
738 // Confirm interrupt sets state properly. 759 // Confirm interrupt sets state properly.
739 EXPECT_CALL(*download_file, Cancel()); 760 EXPECT_CALL(*download_file, Cancel());
740 item->DestinationObserverAsWeakPtr()->DestinationError(reason); 761 item->DestinationObserverAsWeakPtr()->DestinationError(reason);
741 RunAllPendingInMessageLoops(); 762 RunAllPendingInMessageLoops();
742 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState()); 763 EXPECT_EQ(DownloadItem::INTERRUPTED, item->GetState());
743 EXPECT_EQ(reason, item->GetLastReason()); 764 EXPECT_EQ(reason, item->GetLastReason());
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
822 as_observer->DestinationUpdate(200, 20, "livebeef"); 843 as_observer->DestinationUpdate(200, 20, "livebeef");
823 EXPECT_EQ(20l, item->CurrentSpeed()); 844 EXPECT_EQ(20l, item->CurrentSpeed());
824 EXPECT_EQ("livebeef", item->GetHashState()); 845 EXPECT_EQ("livebeef", item->GetHashState());
825 EXPECT_EQ(200l, item->GetReceivedBytes()); 846 EXPECT_EQ(200l, item->GetReceivedBytes());
826 EXPECT_EQ(0l, item->GetTotalBytes()); 847 EXPECT_EQ(0l, item->GetTotalBytes());
827 EXPECT_TRUE(observer.CheckUpdated()); 848 EXPECT_TRUE(observer.CheckUpdated());
828 } 849 }
829 850
830 TEST_F(DownloadItemTest, DestinationError) { 851 TEST_F(DownloadItemTest, DestinationError) {
831 DownloadItemImpl* item = CreateDownloadItem(); 852 DownloadItemImpl* item = CreateDownloadItem();
832 MockDownloadFile* download_file = DoIntermediateRename(item); 853 MockDownloadFile* download_file =
854 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
833 base::WeakPtr<DownloadDestinationObserver> as_observer( 855 base::WeakPtr<DownloadDestinationObserver> as_observer(
834 item->DestinationObserverAsWeakPtr()); 856 item->DestinationObserverAsWeakPtr());
835 MockObserver observer(item); 857 MockObserver observer(item);
836 858
837 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 859 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
838 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, item->GetLastReason()); 860 EXPECT_EQ(DOWNLOAD_INTERRUPT_REASON_NONE, item->GetLastReason());
839 EXPECT_FALSE(observer.CheckUpdated()); 861 EXPECT_FALSE(observer.CheckUpdated());
840 862
841 EXPECT_CALL(*download_file, Cancel()); 863 EXPECT_CALL(*download_file, Cancel());
842 as_observer->DestinationError( 864 as_observer->DestinationError(
(...skipping 29 matching lines...) Expand all
872 mock_delegate()->VerifyAndClearExpectations(); 894 mock_delegate()->VerifyAndClearExpectations();
873 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 895 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
874 EXPECT_TRUE(observer.CheckUpdated()); 896 EXPECT_TRUE(observer.CheckUpdated());
875 EXPECT_EQ("livebeef", item->GetHash()); 897 EXPECT_EQ("livebeef", item->GetHash());
876 EXPECT_EQ("", item->GetHashState()); 898 EXPECT_EQ("", item->GetHashState());
877 EXPECT_TRUE(item->AllDataSaved()); 899 EXPECT_TRUE(item->AllDataSaved());
878 } 900 }
879 901
880 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) { 902 TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) {
881 DownloadItemImpl* item = CreateDownloadItem(); 903 DownloadItemImpl* item = CreateDownloadItem();
882 MockDownloadFile* download_file = DoIntermediateRename(item); 904 MockDownloadFile* download_file =
905 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
883 906
884 // InProgress 907 // InProgress
885 ASSERT_TRUE(item->IsInProgress()); 908 ASSERT_TRUE(item->IsInProgress());
886 ASSERT_FALSE(item->GetTargetFilePath().empty()); 909 ASSERT_FALSE(item->GetTargetFilePath().empty());
887 EXPECT_TRUE(item->CanShowInFolder()); 910 EXPECT_TRUE(item->CanShowInFolder());
888 EXPECT_TRUE(item->CanOpenDownload()); 911 EXPECT_TRUE(item->CanOpenDownload());
889 912
890 // Complete 913 // Complete
891 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) 914 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _))
892 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 915 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
893 base::FilePath(kDummyPath))); 916 base::FilePath(kDummyPath)));
894 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 917 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
895 .WillOnce(Return(true)); 918 .WillOnce(Return(true));
919 EXPECT_CALL(*download_file, FullPath())
920 .WillOnce(Return(base::FilePath()));
896 EXPECT_CALL(*download_file, Detach()); 921 EXPECT_CALL(*download_file, Detach());
897 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 922 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
898 RunAllPendingInMessageLoops(); 923 RunAllPendingInMessageLoops();
899 924
900 ASSERT_TRUE(item->IsComplete()); 925 ASSERT_TRUE(item->IsComplete());
901 EXPECT_TRUE(item->CanShowInFolder()); 926 EXPECT_TRUE(item->CanShowInFolder());
902 EXPECT_TRUE(item->CanOpenDownload()); 927 EXPECT_TRUE(item->CanOpenDownload());
903 } 928 }
904 929
905 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) { 930 TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) {
906 DownloadItemImpl* item = CreateDownloadItem(); 931 DownloadItemImpl* item = CreateDownloadItem();
907 MockDownloadFile* download_file = DoIntermediateRename(item); 932 MockDownloadFile* download_file =
933 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
908 item->SetIsTemporary(true); 934 item->SetIsTemporary(true);
909 935
910 // InProgress Temporary 936 // InProgress Temporary
911 ASSERT_TRUE(item->IsInProgress()); 937 ASSERT_TRUE(item->IsInProgress());
912 ASSERT_FALSE(item->GetTargetFilePath().empty()); 938 ASSERT_FALSE(item->GetTargetFilePath().empty());
913 ASSERT_TRUE(item->IsTemporary()); 939 ASSERT_TRUE(item->IsTemporary());
914 EXPECT_FALSE(item->CanShowInFolder()); 940 EXPECT_FALSE(item->CanShowInFolder());
915 EXPECT_FALSE(item->CanOpenDownload()); 941 EXPECT_FALSE(item->CanOpenDownload());
916 942
917 // Complete Temporary 943 // Complete Temporary
918 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 944 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
919 .WillOnce(Return(true)); 945 .WillOnce(Return(true));
920 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _)) 946 EXPECT_CALL(*download_file, RenameAndAnnotate(_, _))
921 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 947 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
922 base::FilePath(kDummyPath))); 948 base::FilePath(kDummyPath)));
949 EXPECT_CALL(*download_file, FullPath())
950 .WillOnce(Return(base::FilePath()));
923 EXPECT_CALL(*download_file, Detach()); 951 EXPECT_CALL(*download_file, Detach());
924 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 952 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
925 RunAllPendingInMessageLoops(); 953 RunAllPendingInMessageLoops();
926 954
927 ASSERT_TRUE(item->IsComplete()); 955 ASSERT_TRUE(item->IsComplete());
928 EXPECT_FALSE(item->CanShowInFolder()); 956 EXPECT_FALSE(item->CanShowInFolder());
929 EXPECT_FALSE(item->CanOpenDownload()); 957 EXPECT_FALSE(item->CanOpenDownload());
930 } 958 }
931 959
932 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) { 960 TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) {
933 DownloadItemImpl* item = CreateDownloadItem(); 961 DownloadItemImpl* item = CreateDownloadItem();
934 MockDownloadFile* download_file = DoIntermediateRename(item); 962 MockDownloadFile* download_file =
963 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
935 964
936 EXPECT_CALL(*download_file, Cancel()); 965 EXPECT_CALL(*download_file, Cancel());
937 item->DestinationObserverAsWeakPtr()->DestinationError( 966 item->DestinationObserverAsWeakPtr()->DestinationError(
938 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED); 967 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED);
939 RunAllPendingInMessageLoops(); 968 RunAllPendingInMessageLoops();
940 969
941 ASSERT_TRUE(item->IsInterrupted()); 970 ASSERT_TRUE(item->IsInterrupted());
942 ASSERT_FALSE(item->GetTargetFilePath().empty()); 971 ASSERT_FALSE(item->GetTargetFilePath().empty());
943 EXPECT_FALSE(item->CanShowInFolder()); 972 EXPECT_FALSE(item->CanShowInFolder());
944 EXPECT_FALSE(item->CanOpenDownload()); 973 EXPECT_FALSE(item->CanOpenDownload());
945 } 974 }
946 975
947 TEST_F(DownloadItemTest, EnabledActionsForCancelledDownload) { 976 TEST_F(DownloadItemTest, EnabledActionsForCancelledDownload) {
948 DownloadItemImpl* item = CreateDownloadItem(); 977 DownloadItemImpl* item = CreateDownloadItem();
949 MockDownloadFile* download_file = DoIntermediateRename(item); 978 MockDownloadFile* download_file =
979 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
950 980
951 EXPECT_CALL(*download_file, Cancel()); 981 EXPECT_CALL(*download_file, Cancel());
952 item->Cancel(true); 982 item->Cancel(true);
953 RunAllPendingInMessageLoops(); 983 RunAllPendingInMessageLoops();
954 984
955 ASSERT_TRUE(item->IsCancelled()); 985 ASSERT_TRUE(item->IsCancelled());
956 EXPECT_FALSE(item->CanShowInFolder()); 986 EXPECT_FALSE(item->CanShowInFolder());
957 EXPECT_FALSE(item->CanOpenDownload()); 987 EXPECT_FALSE(item->CanOpenDownload());
958 } 988 }
959 989
960 // Test various aspects of the delegate completion blocker. 990 // Test various aspects of the delegate completion blocker.
961 991
962 // Just allowing completion. 992 // Just allowing completion.
963 TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) { 993 TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) {
964 // Test to confirm that if we have a callback that returns true, 994 // Test to confirm that if we have a callback that returns true,
965 // we complete immediately. 995 // we complete immediately.
966 DownloadItemImpl* item = CreateDownloadItem(); 996 DownloadItemImpl* item = CreateDownloadItem();
967 MockDownloadFile* download_file = DoIntermediateRename(item); 997 MockDownloadFile* download_file =
998 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
968 999
969 // Drive the delegate interaction. 1000 // Drive the delegate interaction.
970 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 1001 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
971 .WillOnce(Return(true)); 1002 .WillOnce(Return(true));
972 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 1003 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
973 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1004 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
974 EXPECT_FALSE(item->IsDangerous()); 1005 EXPECT_FALSE(item->IsDangerous());
975 1006
976 // Make sure the download can complete. 1007 // Make sure the download can complete.
977 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1008 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
978 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1009 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
979 base::FilePath(kDummyPath))); 1010 base::FilePath(kDummyPath)));
980 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1011 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
981 .WillOnce(Return(true)); 1012 .WillOnce(Return(true));
1013 EXPECT_CALL(*download_file, FullPath())
1014 .WillOnce(Return(base::FilePath()));
982 EXPECT_CALL(*download_file, Detach()); 1015 EXPECT_CALL(*download_file, Detach());
983 RunAllPendingInMessageLoops(); 1016 RunAllPendingInMessageLoops();
984 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1017 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
985 } 1018 }
986 1019
987 // Just delaying completion. 1020 // Just delaying completion.
988 TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) { 1021 TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) {
989 // Test to confirm that if we have a callback that returns true, 1022 // Test to confirm that if we have a callback that returns true,
990 // we complete immediately. 1023 // we complete immediately.
991 DownloadItemImpl* item = CreateDownloadItem(); 1024 DownloadItemImpl* item = CreateDownloadItem();
992 MockDownloadFile* download_file = DoIntermediateRename(item); 1025 MockDownloadFile* download_file =
1026 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
993 1027
994 // Drive the delegate interaction. 1028 // Drive the delegate interaction.
995 base::Closure delegate_callback; 1029 base::Closure delegate_callback;
996 base::Closure copy_delegate_callback; 1030 base::Closure copy_delegate_callback;
997 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 1031 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
998 .WillOnce(DoAll(SaveArg<1>(&delegate_callback), 1032 .WillOnce(DoAll(SaveArg<1>(&delegate_callback),
999 Return(false))) 1033 Return(false)))
1000 .WillOnce(Return(true)); 1034 .WillOnce(Return(true));
1001 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 1035 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
1002 ASSERT_FALSE(delegate_callback.is_null()); 1036 ASSERT_FALSE(delegate_callback.is_null());
1003 copy_delegate_callback = delegate_callback; 1037 copy_delegate_callback = delegate_callback;
1004 delegate_callback.Reset(); 1038 delegate_callback.Reset();
1005 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1039 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1006 copy_delegate_callback.Run(); 1040 copy_delegate_callback.Run();
1007 ASSERT_TRUE(delegate_callback.is_null()); 1041 ASSERT_TRUE(delegate_callback.is_null());
1008 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1042 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1009 EXPECT_FALSE(item->IsDangerous()); 1043 EXPECT_FALSE(item->IsDangerous());
1010 1044
1011 // Make sure the download can complete. 1045 // Make sure the download can complete.
1012 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1046 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1013 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1047 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1014 base::FilePath(kDummyPath))); 1048 base::FilePath(kDummyPath)));
1015 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1049 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1016 .WillOnce(Return(true)); 1050 .WillOnce(Return(true));
1051 EXPECT_CALL(*download_file, FullPath())
1052 .WillOnce(Return(base::FilePath()));
1017 EXPECT_CALL(*download_file, Detach()); 1053 EXPECT_CALL(*download_file, Detach());
1018 RunAllPendingInMessageLoops(); 1054 RunAllPendingInMessageLoops();
1019 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1055 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1020 } 1056 }
1021 1057
1022 // Delay and set danger. 1058 // Delay and set danger.
1023 TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) { 1059 TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) {
1024 // Test to confirm that if we have a callback that returns true, 1060 // Test to confirm that if we have a callback that returns true,
1025 // we complete immediately. 1061 // we complete immediately.
1026 DownloadItemImpl* item = CreateDownloadItem(); 1062 DownloadItemImpl* item = CreateDownloadItem();
1027 MockDownloadFile* download_file = DoIntermediateRename(item); 1063 MockDownloadFile* download_file =
1064 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
1028 1065
1029 // Drive the delegate interaction. 1066 // Drive the delegate interaction.
1030 base::Closure delegate_callback; 1067 base::Closure delegate_callback;
1031 base::Closure copy_delegate_callback; 1068 base::Closure copy_delegate_callback;
1032 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 1069 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
1033 .WillOnce(DoAll(SaveArg<1>(&delegate_callback), 1070 .WillOnce(DoAll(SaveArg<1>(&delegate_callback),
1034 Return(false))) 1071 Return(false)))
1035 .WillOnce(Return(true)); 1072 .WillOnce(Return(true));
1036 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string()); 1073 item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
1037 ASSERT_FALSE(delegate_callback.is_null()); 1074 ASSERT_FALSE(delegate_callback.is_null());
1038 copy_delegate_callback = delegate_callback; 1075 copy_delegate_callback = delegate_callback;
1039 delegate_callback.Reset(); 1076 delegate_callback.Reset();
1040 EXPECT_FALSE(item->IsDangerous()); 1077 EXPECT_FALSE(item->IsDangerous());
1041 item->OnContentCheckCompleted( 1078 item->OnContentCheckCompleted(
1042 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); 1079 content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
1043 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1080 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1044 copy_delegate_callback.Run(); 1081 copy_delegate_callback.Run();
1045 ASSERT_TRUE(delegate_callback.is_null()); 1082 ASSERT_TRUE(delegate_callback.is_null());
1046 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1083 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1047 EXPECT_TRUE(item->IsDangerous()); 1084 EXPECT_TRUE(item->IsDangerous());
1048 1085
1049 // Make sure the download doesn't complete until we've validated it. 1086 // Make sure the download doesn't complete until we've validated it.
1050 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1087 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1051 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1088 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1052 base::FilePath(kDummyPath))); 1089 base::FilePath(kDummyPath)));
1053 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1090 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1054 .WillOnce(Return(true)); 1091 .WillOnce(Return(true));
1092 EXPECT_CALL(*download_file, FullPath())
1093 .WillOnce(Return(base::FilePath()));
1055 EXPECT_CALL(*download_file, Detach()); 1094 EXPECT_CALL(*download_file, Detach());
1056 RunAllPendingInMessageLoops(); 1095 RunAllPendingInMessageLoops();
1057 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1096 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1058 EXPECT_TRUE(item->IsDangerous()); 1097 EXPECT_TRUE(item->IsDangerous());
1059 1098
1060 item->DangerousDownloadValidated(); 1099 item->ValidateDangerousDownload();
1061 EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType()); 1100 EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType());
1062 RunAllPendingInMessageLoops(); 1101 RunAllPendingInMessageLoops();
1063 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1102 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1064 } 1103 }
1065 1104
1066 // Just delaying completion twice. 1105 // Just delaying completion twice.
1067 TEST_F(DownloadItemTest, CompleteDelegate_BlockTwice) { 1106 TEST_F(DownloadItemTest, CompleteDelegate_BlockTwice) {
1068 // Test to confirm that if we have a callback that returns true, 1107 // Test to confirm that if we have a callback that returns true,
1069 // we complete immediately. 1108 // we complete immediately.
1070 DownloadItemImpl* item = CreateDownloadItem(); 1109 DownloadItemImpl* item = CreateDownloadItem();
1071 MockDownloadFile* download_file = DoIntermediateRename(item); 1110 MockDownloadFile* download_file =
1111 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
1072 1112
1073 // Drive the delegate interaction. 1113 // Drive the delegate interaction.
1074 base::Closure delegate_callback; 1114 base::Closure delegate_callback;
1075 base::Closure copy_delegate_callback; 1115 base::Closure copy_delegate_callback;
1076 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _)) 1116 EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
1077 .WillOnce(DoAll(SaveArg<1>(&delegate_callback), 1117 .WillOnce(DoAll(SaveArg<1>(&delegate_callback),
1078 Return(false))) 1118 Return(false)))
1079 .WillOnce(DoAll(SaveArg<1>(&delegate_callback), 1119 .WillOnce(DoAll(SaveArg<1>(&delegate_callback),
1080 Return(false))) 1120 Return(false)))
1081 .WillOnce(Return(true)); 1121 .WillOnce(Return(true));
(...skipping 11 matching lines...) Expand all
1093 ASSERT_TRUE(delegate_callback.is_null()); 1133 ASSERT_TRUE(delegate_callback.is_null());
1094 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState()); 1134 EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
1095 EXPECT_FALSE(item->IsDangerous()); 1135 EXPECT_FALSE(item->IsDangerous());
1096 1136
1097 // Make sure the download can complete. 1137 // Make sure the download can complete.
1098 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _)) 1138 EXPECT_CALL(*download_file, RenameAndAnnotate(base::FilePath(kDummyPath), _))
1099 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE, 1139 .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
1100 base::FilePath(kDummyPath))); 1140 base::FilePath(kDummyPath)));
1101 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) 1141 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
1102 .WillOnce(Return(true)); 1142 .WillOnce(Return(true));
1143 EXPECT_CALL(*download_file, FullPath())
1144 .WillOnce(Return(base::FilePath()));
1103 EXPECT_CALL(*download_file, Detach()); 1145 EXPECT_CALL(*download_file, Detach());
1104 RunAllPendingInMessageLoops(); 1146 RunAllPendingInMessageLoops();
1105 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); 1147 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
1106 } 1148 }
1107 1149
1150 TEST_F(DownloadItemTest, AcquireFileAndDiscardDownload) {
1151 DownloadItemImpl* item = CreateDownloadItem();
1152 MockDownloadFile* download_file =
1153 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
1154 ASSERT_TRUE(item->IsDangerous());
1155 base::FilePath full_path(FILE_PATH_LITERAL("foo.txt"));
1156 base::FilePath returned_path;
1157
1158 // DiscardDangerousDownload with a non-null AcquireFileCallback should cause
1159 // the DownloadFile to be detached and its filename to be passed to the
1160 // callback.
1161 EXPECT_CALL(*download_file, FullPath())
1162 .WillOnce(Return(full_path));
1163 EXPECT_CALL(*download_file, Detach());
1164 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
1165 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this);
1166 item->DiscardDangerousDownload(
1167 DownloadItem::DELETE_DUE_TO_USER_DISCARD,
1168 base::Bind(&DownloadItemTest::OnDownloadFileAcquired,
1169 weak_ptr_factory.GetWeakPtr(),
1170 base::Unretained(&returned_path)));
1171 RunAllPendingInMessageLoops();
1172 EXPECT_EQ(full_path, returned_path);
1173 }
1174
1108 TEST(MockDownloadItem, Compiles) { 1175 TEST(MockDownloadItem, Compiles) {
1109 MockDownloadItem mock_item; 1176 MockDownloadItem mock_item;
1110 } 1177 }
1111 1178
1112 } // namespace content 1179 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698