| Index: content/browser/download/download_item_impl_unittest.cc
|
| diff --git a/content/browser/download/download_item_impl_unittest.cc b/content/browser/download/download_item_impl_unittest.cc
|
| index fab8e996c746e83e8a59ec7ea4906b38a2f10253..baa292801ead18bc84ee7169e3a53ff7443f9c30 100644
|
| --- a/content/browser/download/download_item_impl_unittest.cc
|
| +++ b/content/browser/download/download_item_impl_unittest.cc
|
| @@ -2,6 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| +#include "base/callback.h"
|
| #include "base/command_line.h"
|
| #include "base/message_loop.h"
|
| #include "base/stl_util.h"
|
| @@ -13,8 +14,8 @@
|
| #include "content/browser/download/download_item_impl_delegate.h"
|
| #include "content/browser/download/download_request_handle.h"
|
| #include "content/browser/download/mock_download_file.h"
|
| -#include "content/public/browser/download_id.h"
|
| #include "content/public/browser/download_destination_observer.h"
|
| +#include "content/public/browser/download_id.h"
|
| #include "content/public/browser/download_interrupt_reasons.h"
|
| #include "content/public/browser/download_url_parameters.h"
|
| #include "content/public/common/content_switches.h"
|
| @@ -278,7 +279,8 @@ class DownloadItemTest : public testing::Test {
|
| // Perform the intermediate rename for |item|. The target path for the
|
| // download will be set to kDummyPath. Returns the MockDownloadFile* that was
|
| // added to the DownloadItem.
|
| - MockDownloadFile* DoIntermediateRename(DownloadItemImpl* item) {
|
| + MockDownloadFile* DoIntermediateRename(DownloadItemImpl* item,
|
| + DownloadDangerType danger_type) {
|
| EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
|
| EXPECT_TRUE(item->GetTargetFilePath().empty());
|
| DownloadItemImplDelegate::DownloadTargetCallback callback;
|
| @@ -291,7 +293,7 @@ class DownloadItemTest : public testing::Test {
|
| .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
|
| intermediate_path));
|
| callback.Run(target_path, DownloadItem::TARGET_DISPOSITION_OVERWRITE,
|
| - DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, intermediate_path);
|
| + danger_type, intermediate_path);
|
| RunAllPendingInMessageLoops();
|
| return download_file;
|
| }
|
| @@ -324,6 +326,11 @@ class DownloadItemTest : public testing::Test {
|
| return &delegate_;
|
| }
|
|
|
| + void OnDownloadFileAcquired(base::FilePath* return_path,
|
| + const base::FilePath& path) {
|
| + *return_path = path;
|
| + }
|
| +
|
| private:
|
| base::MessageLoopForUI loop_;
|
| TestBrowserThread ui_thread_; // UI thread
|
| @@ -389,7 +396,8 @@ TEST_F(DownloadItemTest, NotificationAfterDownloadedFileRemoved) {
|
|
|
| TEST_F(DownloadItemTest, NotificationAfterInterrupted) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
| EXPECT_CALL(*download_file, Cancel());
|
| MockObserver observer(item);
|
|
|
| @@ -401,17 +409,6 @@ TEST_F(DownloadItemTest, NotificationAfterInterrupted) {
|
| ASSERT_TRUE(observer.CheckUpdated());
|
| }
|
|
|
| -TEST_F(DownloadItemTest, NotificationAfterDelete) {
|
| - DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = AddDownloadFileToDownloadItem(item, NULL);
|
| - EXPECT_CALL(*download_file, Cancel());
|
| - EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
|
| - MockObserver observer(item);
|
| -
|
| - item->Delete(DownloadItem::DELETE_DUE_TO_BROWSER_SHUTDOWN);
|
| - ASSERT_TRUE(observer.CheckUpdated());
|
| -}
|
| -
|
| TEST_F(DownloadItemTest, NotificationAfterDestroyed) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| MockObserver observer(item);
|
| @@ -427,9 +424,12 @@ TEST_F(DownloadItemTest, ContinueAfterInterrupted) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| MockObserver observer(item);
|
| DownloadItemImplDelegate::DownloadTargetCallback callback;
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Interrupt the download, using a continuable interrupt.
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| item->DestinationObserverAsWeakPtr()->DestinationError(
|
| DOWNLOAD_INTERRUPT_REASON_FILE_TRANSIENT_ERROR);
|
| @@ -452,7 +452,8 @@ TEST_F(DownloadItemTest, RestartAfterInterrupted) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| MockObserver observer(item);
|
| DownloadItemImplDelegate::DownloadTargetCallback callback;
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Interrupt the download, using a restartable interrupt.
|
| EXPECT_CALL(*download_file, Cancel());
|
| @@ -491,6 +492,9 @@ TEST_F(DownloadItemTest, LimitRestartsAfterInterrupted) {
|
| mock_request_handle = new NiceMock<MockRequestHandle>;
|
| request_handle.reset(mock_request_handle);
|
|
|
| + ON_CALL(*mock_download_file, FullPath())
|
| + .WillByDefault(Return(base::FilePath()));
|
| +
|
| // It's too complicated to set up a WebContents instance that would cause
|
| // the MockDownloadItemDelegate's ResumeInterruptedDownload() function
|
| // to be callled, so we simply verify that GetWebContents() is called.
|
| @@ -560,7 +564,7 @@ TEST_F(DownloadItemTest, NotificationAfterOnContentCheckCompleted) {
|
| unsafeurl_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_URL);
|
| EXPECT_TRUE(unsafeurl_observer.CheckUpdated());
|
|
|
| - unsafeurl_item->DangerousDownloadValidated();
|
| + unsafeurl_item->ValidateDangerousDownload();
|
| EXPECT_TRUE(unsafeurl_observer.CheckUpdated());
|
|
|
| DownloadItemImpl* unsafefile_item =
|
| @@ -572,7 +576,7 @@ TEST_F(DownloadItemTest, NotificationAfterOnContentCheckCompleted) {
|
| unsafefile_item->OnContentCheckCompleted(DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
|
| EXPECT_TRUE(unsafefile_observer.CheckUpdated());
|
|
|
| - unsafefile_item->DangerousDownloadValidated();
|
| + unsafefile_item->ValidateDangerousDownload();
|
| EXPECT_TRUE(unsafefile_observer.CheckUpdated());
|
| }
|
|
|
| @@ -696,6 +700,8 @@ TEST_F(DownloadItemTest, CallbackAfterRename) {
|
| EXPECT_CALL(*download_file, RenameAndAnnotate(final_path, _))
|
| .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
|
| final_path));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
|
| RunAllPendingInMessageLoops();
|
| @@ -730,7 +736,8 @@ TEST_F(DownloadItemTest, CallbackAfterInterruptedRename) {
|
|
|
| TEST_F(DownloadItemTest, Interrupted) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| const DownloadInterruptReason reason(
|
| DOWNLOAD_INTERRUPT_REASON_FILE_ACCESS_DENIED);
|
| @@ -829,7 +836,8 @@ TEST_F(DownloadItemTest, DestinationUpdate) {
|
|
|
| TEST_F(DownloadItemTest, DestinationError) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
| base::WeakPtr<DownloadDestinationObserver> as_observer(
|
| item->DestinationObserverAsWeakPtr());
|
| MockObserver observer(item);
|
| @@ -879,7 +887,8 @@ TEST_F(DownloadItemTest, DestinationCompleted) {
|
|
|
| TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // InProgress
|
| ASSERT_TRUE(item->IsInProgress());
|
| @@ -893,6 +902,8 @@ TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) {
|
| base::FilePath(kDummyPath)));
|
| EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
|
| .WillOnce(Return(true));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
|
| RunAllPendingInMessageLoops();
|
| @@ -904,7 +915,8 @@ TEST_F(DownloadItemTest, EnabledActionsForNormalDownload) {
|
|
|
| TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
| item->SetIsTemporary(true);
|
|
|
| // InProgress Temporary
|
| @@ -920,6 +932,8 @@ TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) {
|
| EXPECT_CALL(*download_file, RenameAndAnnotate(_, _))
|
| .WillOnce(ScheduleRenameCallback(DOWNLOAD_INTERRUPT_REASON_NONE,
|
| base::FilePath(kDummyPath)));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| item->DestinationObserverAsWeakPtr()->DestinationCompleted(std::string());
|
| RunAllPendingInMessageLoops();
|
| @@ -931,7 +945,8 @@ TEST_F(DownloadItemTest, EnabledActionsForTemporaryDownload) {
|
|
|
| TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| EXPECT_CALL(*download_file, Cancel());
|
| item->DestinationObserverAsWeakPtr()->DestinationError(
|
| @@ -946,7 +961,8 @@ TEST_F(DownloadItemTest, EnabledActionsForInterruptedDownload) {
|
|
|
| TEST_F(DownloadItemTest, EnabledActionsForCancelledDownload) {
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| EXPECT_CALL(*download_file, Cancel());
|
| item->Cancel(true);
|
| @@ -964,7 +980,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) {
|
| // Test to confirm that if we have a callback that returns true,
|
| // we complete immediately.
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Drive the delegate interaction.
|
| EXPECT_CALL(*mock_delegate(), ShouldCompleteDownload(item, _))
|
| @@ -979,6 +996,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_ReturnTrue) {
|
| base::FilePath(kDummyPath)));
|
| EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
|
| .WillOnce(Return(true));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| RunAllPendingInMessageLoops();
|
| EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
|
| @@ -989,7 +1008,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) {
|
| // Test to confirm that if we have a callback that returns true,
|
| // we complete immediately.
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Drive the delegate interaction.
|
| base::Closure delegate_callback;
|
| @@ -1014,6 +1034,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_BlockOnce) {
|
| base::FilePath(kDummyPath)));
|
| EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
|
| .WillOnce(Return(true));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| RunAllPendingInMessageLoops();
|
| EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
|
| @@ -1024,7 +1046,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) {
|
| // Test to confirm that if we have a callback that returns true,
|
| // we complete immediately.
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Drive the delegate interaction.
|
| base::Closure delegate_callback;
|
| @@ -1052,12 +1075,14 @@ TEST_F(DownloadItemTest, CompleteDelegate_SetDanger) {
|
| base::FilePath(kDummyPath)));
|
| EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
|
| .WillOnce(Return(true));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| RunAllPendingInMessageLoops();
|
| EXPECT_EQ(DownloadItem::IN_PROGRESS, item->GetState());
|
| EXPECT_TRUE(item->IsDangerous());
|
|
|
| - item->DangerousDownloadValidated();
|
| + item->ValidateDangerousDownload();
|
| EXPECT_EQ(DOWNLOAD_DANGER_TYPE_USER_VALIDATED, item->GetDangerType());
|
| RunAllPendingInMessageLoops();
|
| EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
|
| @@ -1068,7 +1093,8 @@ TEST_F(DownloadItemTest, CompleteDelegate_BlockTwice) {
|
| // Test to confirm that if we have a callback that returns true,
|
| // we complete immediately.
|
| DownloadItemImpl* item = CreateDownloadItem();
|
| - MockDownloadFile* download_file = DoIntermediateRename(item);
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
|
|
|
| // Drive the delegate interaction.
|
| base::Closure delegate_callback;
|
| @@ -1100,11 +1126,82 @@ TEST_F(DownloadItemTest, CompleteDelegate_BlockTwice) {
|
| base::FilePath(kDummyPath)));
|
| EXPECT_CALL(*mock_delegate(), ShouldOpenDownload(item, _))
|
| .WillOnce(Return(true));
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(base::FilePath()));
|
| EXPECT_CALL(*download_file, Detach());
|
| RunAllPendingInMessageLoops();
|
| EXPECT_EQ(DownloadItem::COMPLETE, item->GetState());
|
| }
|
|
|
| +TEST_F(DownloadItemTest, StealDangerousDownload) {
|
| + DownloadItemImpl* item = CreateDownloadItem();
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
|
| + ASSERT_TRUE(item->IsDangerous());
|
| + base::FilePath full_path(FILE_PATH_LITERAL("foo.txt"));
|
| + base::FilePath returned_path;
|
| +
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(full_path));
|
| + EXPECT_CALL(*download_file, Detach());
|
| + EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
|
| + base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this);
|
| + item->StealDangerousDownload(
|
| + base::Bind(&DownloadItemTest::OnDownloadFileAcquired,
|
| + weak_ptr_factory.GetWeakPtr(),
|
| + base::Unretained(&returned_path)));
|
| + RunAllPendingInMessageLoops();
|
| + EXPECT_EQ(full_path, returned_path);
|
| +}
|
| +
|
| +TEST_F(DownloadItemTest, StealInterruptedDangerousDownload) {
|
| + CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnableDownloadResumption);
|
| + base::FilePath returned_path;
|
| + DownloadItemImpl* item = CreateDownloadItem();
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
|
| + base::FilePath full_path = item->GetFullPath();
|
| + EXPECT_FALSE(full_path.empty());
|
| + EXPECT_CALL(*download_file, FullPath())
|
| + .WillOnce(Return(full_path));
|
| + EXPECT_CALL(*download_file, Detach());
|
| + item->DestinationObserverAsWeakPtr()->DestinationError(
|
| + DOWNLOAD_INTERRUPT_REASON_NETWORK_FAILED);
|
| + ASSERT_TRUE(item->IsDangerous());
|
| +
|
| + EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
|
| + base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this);
|
| + item->StealDangerousDownload(
|
| + base::Bind(&DownloadItemTest::OnDownloadFileAcquired,
|
| + weak_ptr_factory.GetWeakPtr(),
|
| + base::Unretained(&returned_path)));
|
| + RunAllPendingInMessageLoops();
|
| + EXPECT_EQ(full_path, returned_path);
|
| +}
|
| +
|
| +TEST_F(DownloadItemTest, StealInterruptedNonResumableDangerousDownload) {
|
| + CommandLine::ForCurrentProcess()->AppendSwitch(
|
| + switches::kEnableDownloadResumption);
|
| + base::FilePath returned_path;
|
| + DownloadItemImpl* item = CreateDownloadItem();
|
| + MockDownloadFile* download_file =
|
| + DoIntermediateRename(item, DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE);
|
| + EXPECT_CALL(*download_file, Cancel());
|
| + item->DestinationObserverAsWeakPtr()->DestinationError(
|
| + DOWNLOAD_INTERRUPT_REASON_FILE_FAILED);
|
| + ASSERT_TRUE(item->IsDangerous());
|
| +
|
| + EXPECT_CALL(*mock_delegate(), DownloadRemoved(_));
|
| + base::WeakPtrFactory<DownloadItemTest> weak_ptr_factory(this);
|
| + item->StealDangerousDownload(
|
| + base::Bind(&DownloadItemTest::OnDownloadFileAcquired,
|
| + weak_ptr_factory.GetWeakPtr(),
|
| + base::Unretained(&returned_path)));
|
| + RunAllPendingInMessageLoops();
|
| + EXPECT_TRUE(returned_path.empty());
|
| +}
|
| +
|
| TEST(MockDownloadItem, Compiles) {
|
| MockDownloadItem mock_item;
|
| }
|
|
|