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 |