OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "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 1521 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1532 DOWNLOAD_INTERRUPT_REASON_NONE, base::FilePath(kDummyTargetPath))); | 1532 DOWNLOAD_INTERRUPT_REASON_NONE, base::FilePath(kDummyTargetPath))); |
1533 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) | 1533 EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _)) |
1534 .WillOnce(Return(true)); | 1534 .WillOnce(Return(true)); |
1535 EXPECT_CALL(*download_file, FullPath()) | 1535 EXPECT_CALL(*download_file, FullPath()) |
1536 .WillOnce(ReturnRefOfCopy(base::FilePath())); | 1536 .WillOnce(ReturnRefOfCopy(base::FilePath())); |
1537 EXPECT_CALL(*download_file, Detach()); | 1537 EXPECT_CALL(*download_file, Detach()); |
1538 RunAllPendingInMessageLoops(); | 1538 RunAllPendingInMessageLoops(); |
1539 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); | 1539 EXPECT_EQ(DownloadItem::COMPLETE, item->GetState()); |
1540 } | 1540 } |
1541 | 1541 |
1542 TEST_F(DownloadItemTest, StealDangerousDownload) { | 1542 TEST_F(DownloadItemTest, StealDangerousDownloadAndDiscard) { |
1543 DownloadItemImpl* item = CreateDownloadItem(); | 1543 DownloadItemImpl* item = CreateDownloadItem(); |
1544 MockDownloadFile* download_file = | 1544 MockDownloadFile* download_file = |
1545 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); | 1545 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); |
1546 ASSERT_TRUE(item->IsDangerous()); | 1546 ASSERT_TRUE(item->IsDangerous()); |
1547 base::FilePath full_path(FILE_PATH_LITERAL("foo.txt")); | 1547 base::FilePath full_path(FILE_PATH_LITERAL("foo.txt")); |
1548 base::FilePath returned_path; | 1548 base::FilePath returned_path; |
1549 | 1549 |
1550 EXPECT_CALL(*download_file, FullPath()).WillOnce(ReturnRefOfCopy(full_path)); | 1550 EXPECT_CALL(*download_file, FullPath()).WillOnce(ReturnRefOfCopy(full_path)); |
1551 EXPECT_CALL(*download_file, Detach()); | 1551 EXPECT_CALL(*download_file, Detach()); |
1552 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); | 1552 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); |
1553 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); | 1553 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); |
| 1554 item->OnAllDataSaved(0, std::unique_ptr<crypto::SecureHash>()); |
1554 item->StealDangerousDownload( | 1555 item->StealDangerousDownload( |
| 1556 true, // delete_file_after_feedback |
1555 base::Bind(&DownloadItemTest::OnDownloadFileAcquired, | 1557 base::Bind(&DownloadItemTest::OnDownloadFileAcquired, |
1556 weak_ptr_factory.GetWeakPtr(), | 1558 weak_ptr_factory.GetWeakPtr(), |
1557 base::Unretained(&returned_path))); | 1559 base::Unretained(&returned_path))); |
1558 RunAllPendingInMessageLoops(); | 1560 RunAllPendingInMessageLoops(); |
1559 EXPECT_EQ(full_path, returned_path); | 1561 EXPECT_EQ(full_path, returned_path); |
1560 } | 1562 } |
1561 | 1563 |
| 1564 TEST_F(DownloadItemTest, StealDangerousDownloadAndKeep) { |
| 1565 DownloadItemImpl* item = CreateDownloadItem(); |
| 1566 MockDownloadFile* download_file = |
| 1567 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); |
| 1568 ASSERT_TRUE(item->IsDangerous()); |
| 1569 base::FilePath full_path(FILE_PATH_LITERAL("foo.txt")); |
| 1570 base::FilePath returned_path; |
| 1571 EXPECT_CALL(*download_file, FullPath()).WillOnce(ReturnRefOfCopy(full_path)); |
| 1572 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); |
| 1573 item->OnAllDataSaved(0, std::unique_ptr<crypto::SecureHash>()); |
| 1574 item->StealDangerousDownload( |
| 1575 false, // delete_file_after_feedback |
| 1576 base::Bind(&DownloadItemTest::OnDownloadFileAcquired, |
| 1577 weak_ptr_factory.GetWeakPtr(), |
| 1578 base::Unretained(&returned_path))); |
| 1579 RunAllPendingInMessageLoops(); |
| 1580 EXPECT_NE(full_path, returned_path); |
| 1581 CleanupItem(item, download_file, DownloadItem::IN_PROGRESS); |
| 1582 } |
| 1583 |
1562 TEST_F(DownloadItemTest, StealInterruptedDangerousDownload) { | 1584 TEST_F(DownloadItemTest, StealInterruptedDangerousDownload) { |
1563 base::FilePath returned_path; | 1585 base::FilePath returned_path; |
1564 DownloadItemImpl* item = CreateDownloadItem(); | 1586 DownloadItemImpl* item = CreateDownloadItem(); |
1565 MockDownloadFile* download_file = | 1587 MockDownloadFile* download_file = |
1566 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); | 1588 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); |
1567 base::FilePath full_path = item->GetFullPath(); | 1589 base::FilePath full_path = item->GetFullPath(); |
1568 EXPECT_FALSE(full_path.empty()); | 1590 EXPECT_FALSE(full_path.empty()); |
1569 EXPECT_CALL(*download_file, FullPath()).WillOnce(ReturnRefOfCopy(full_path)); | 1591 EXPECT_CALL(*download_file, FullPath()).WillOnce(ReturnRefOfCopy(full_path)); |
1570 EXPECT_CALL(*download_file, Detach()); | 1592 EXPECT_CALL(*download_file, Detach()); |
1571 item->DestinationObserverAsWeakPtr()->DestinationError( | 1593 item->DestinationObserverAsWeakPtr()->DestinationError( |
1572 DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, 0, | 1594 DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED, 0, |
1573 std::unique_ptr<crypto::SecureHash>()); | 1595 std::unique_ptr<crypto::SecureHash>()); |
1574 ASSERT_TRUE(item->IsDangerous()); | 1596 ASSERT_TRUE(item->IsDangerous()); |
1575 | 1597 |
1576 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); | 1598 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); |
1577 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); | 1599 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); |
| 1600 item->OnAllDataSaved(0, std::unique_ptr<crypto::SecureHash>()); |
1578 item->StealDangerousDownload( | 1601 item->StealDangerousDownload( |
1579 base::Bind(&DownloadItemTest::OnDownloadFileAcquired, | 1602 true, base::Bind(&DownloadItemTest::OnDownloadFileAcquired, |
1580 weak_ptr_factory.GetWeakPtr(), | 1603 weak_ptr_factory.GetWeakPtr(), |
1581 base::Unretained(&returned_path))); | 1604 base::Unretained(&returned_path))); |
1582 RunAllPendingInMessageLoops(); | 1605 RunAllPendingInMessageLoops(); |
1583 EXPECT_EQ(full_path, returned_path); | 1606 EXPECT_EQ(full_path, returned_path); |
1584 } | 1607 } |
1585 | 1608 |
1586 TEST_F(DownloadItemTest, StealInterruptedNonResumableDangerousDownload) { | 1609 TEST_F(DownloadItemTest, StealInterruptedNonResumableDangerousDownload) { |
1587 base::FilePath returned_path; | 1610 base::FilePath returned_path; |
1588 DownloadItemImpl* item = CreateDownloadItem(); | 1611 DownloadItemImpl* item = CreateDownloadItem(); |
1589 MockDownloadFile* download_file = | 1612 MockDownloadFile* download_file = |
1590 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); | 1613 DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE); |
1591 EXPECT_CALL(*download_file, Cancel()); | 1614 EXPECT_CALL(*download_file, Cancel()); |
1592 item->DestinationObserverAsWeakPtr()->DestinationError( | 1615 item->DestinationObserverAsWeakPtr()->DestinationError( |
1593 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, 0, | 1616 DOWNLOAD_INTERRUPT_REASON_FILE_FAILED, 0, |
1594 std::unique_ptr<crypto::SecureHash>()); | 1617 std::unique_ptr<crypto::SecureHash>()); |
1595 ASSERT_TRUE(item->IsDangerous()); | 1618 ASSERT_TRUE(item->IsDangerous()); |
1596 | 1619 |
1597 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); | 1620 EXPECT_CALL(*mock_delegate(), DownloadRemoved(_)); |
1598 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); | 1621 base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this); |
| 1622 item->OnAllDataSaved(0, std::unique_ptr<crypto::SecureHash>()); |
1599 item->StealDangerousDownload( | 1623 item->StealDangerousDownload( |
1600 base::Bind(&DownloadItemTest::OnDownloadFileAcquired, | 1624 true, base::Bind(&DownloadItemTest::OnDownloadFileAcquired, |
1601 weak_ptr_factory.GetWeakPtr(), | 1625 weak_ptr_factory.GetWeakPtr(), |
1602 base::Unretained(&returned_path))); | 1626 base::Unretained(&returned_path))); |
1603 RunAllPendingInMessageLoops(); | 1627 RunAllPendingInMessageLoops(); |
1604 EXPECT_TRUE(returned_path.empty()); | 1628 EXPECT_TRUE(returned_path.empty()); |
1605 } | 1629 } |
1606 | 1630 |
1607 namespace { | 1631 namespace { |
1608 | 1632 |
1609 // The DownloadItemDestinationUpdateRaceTest fixture (defined below) is used to | 1633 // The DownloadItemDestinationUpdateRaceTest fixture (defined below) is used to |
1610 // test for race conditions between download destination events received via the | 1634 // test for race conditions between download destination events received via the |
1611 // DownloadDestinationObserver interface, and the target determination logic. | 1635 // DownloadDestinationObserver interface, and the target determination logic. |
1612 // | 1636 // |
(...skipping 411 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2024 | 2048 |
2025 item_->Cancel(true); | 2049 item_->Cancel(true); |
2026 RunAllPendingInMessageLoops(); | 2050 RunAllPendingInMessageLoops(); |
2027 } | 2051 } |
2028 | 2052 |
2029 TEST(MockDownloadItem, Compiles) { | 2053 TEST(MockDownloadItem, Compiles) { |
2030 MockDownloadItem mock_item; | 2054 MockDownloadItem mock_item; |
2031 } | 2055 } |
2032 | 2056 |
2033 } // namespace content | 2057 } // namespace content |
OLD | NEW |