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