#include "content/browser/download/download_manager_impl.h"
#include <stddef.h>
#include <stdint.h>
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <tuple>
#include <utility>
#include "base/containers/contains.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/bind.h"
#include "base/functional/callback_helpers.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/run_loop.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/gmock_callback_support.h"
#include "base/test/scoped_feature_list.h"
#include "base/uuid.h"
#include "build/build_config.h"
#include "components/download/public/common/download_create_info.h"
#include "components/download/public/common/download_features.h"
#include "components/download/public/common/download_file_factory.h"
#include "components/download/public/common/download_interrupt_reasons.h"
#include "components/download/public/common/download_item.h"
#include "components/download/public/common/download_item_factory.h"
#include "components/download/public/common/download_item_impl.h"
#include "components/download/public/common/download_item_impl_delegate.h"
#include "components/download/public/common/mock_download_file.h"
#include "components/download/public/common/mock_download_item_impl.h"
#include "components/download/public/common/mock_input_stream.h"
#include "content/browser/download/embedder_download_data.pb.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/download_manager_delegate.h"
#include "content/public/browser/storage_partition.h"
#include "content/public/test/browser_task_environment.h"
#include "content/public/test/test_browser_context.h"
#include "content/test/storage_partition_test_helpers.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "url/origin.h"
RunOnceCallback;
_;
AllOf;
DoAll;
Eq;
Ref;
Return;
ReturnRef;
ReturnRefOfCopy;
SetArgPointee;
StrictMock;
namespace content {
namespace {
const char kGuid[] = …;
bool URLAlwaysSafe(int render_process_id, const GURL& url) { … }
class MockDownloadManagerDelegate : public DownloadManagerDelegate { … };
MockDownloadManagerDelegate::MockDownloadManagerDelegate() { … }
MockDownloadManagerDelegate::~MockDownloadManagerDelegate() { … }
class MockDownloadItemFactory final : public download::DownloadItemFactory { … };
MockDownloadItemFactory::MockDownloadItemFactory()
: … { … }
MockDownloadItemFactory::~MockDownloadItemFactory() { … }
download::MockDownloadItemImpl* MockDownloadItemFactory::GetItem(int id) { … }
download::MockDownloadItemImpl* MockDownloadItemFactory::PopItem() { … }
void MockDownloadItemFactory::RemoveItem(int id) { … }
download::DownloadItemImpl* MockDownloadItemFactory::CreatePersistedItem(
download::DownloadItemImplDelegate* delegate,
const std::string& guid,
uint32_t download_id,
const base::FilePath& current_path,
const base::FilePath& target_path,
const std::vector<GURL>& url_chain,
const GURL& referrer_url,
const std::string& serialized_embedder_download_data,
const GURL& tab_url,
const GURL& tab_referrer_url,
const std::optional<url::Origin>& request_initiator,
const std::string& mime_type,
const std::string& original_mime_type,
base::Time start_time,
base::Time end_time,
const std::string& etag,
const std::string& last_modified,
int64_t received_bytes,
int64_t total_bytes,
const std::string& hash,
download::DownloadItem::DownloadState state,
download::DownloadDangerType danger_type,
download::DownloadInterruptReason interrupt_reason,
bool opened,
base::Time last_access_time,
bool transient,
const std::vector<download::DownloadItem::ReceivedSlice>& received_slices) { … }
download::DownloadItemImpl* MockDownloadItemFactory::CreateActiveItem(
download::DownloadItemImplDelegate* delegate,
uint32_t download_id,
const download::DownloadCreateInfo& info) { … }
download::DownloadItemImpl* MockDownloadItemFactory::CreateSavePageItem(
download::DownloadItemImplDelegate* delegate,
uint32_t download_id,
const base::FilePath& path,
const GURL& url,
const std::string& mime_type,
download::DownloadJob::CancelRequestCallback cancel_request_callback) { … }
class MockDownloadFileFactory final : public download::DownloadFileFactory { … };
class MockDownloadManagerObserver : public DownloadManager::Observer { … };
class TestInProgressManager : public download::InProgressDownloadManager { … };
TestInProgressManager::TestInProgressManager()
: … { … }
void TestInProgressManager::AddDownloadItem(
std::unique_ptr<download::DownloadItemImpl> item) { … }
std::vector<std::unique_ptr<download::DownloadItemImpl>>
TestInProgressManager::TakeInProgressDownloads() { … }
}
class DownloadManagerTest : public testing::Test { … };
TEST_F(DownloadManagerTest, StartDownload) { … }
TEST_F(DownloadManagerTest, StartDownloadWithoutHistoryDB) { … }
TEST_F(DownloadManagerTest, DetermineDownloadTarget_True) { … }
TEST_F(DownloadManagerTest, DetermineDownloadTarget_False) { … }
TEST_F(DownloadManagerTest, GetDownloadByGuid) { … }
namespace {
base::RepeatingCallback<bool(const GURL&)> GetSingleURLFilter(const GURL& url) { … }
}
TEST_F(DownloadManagerTest, RemoveDownloadsByURL) { … }
TEST_F(DownloadManagerTest, OnInProgressDownloadsLoaded) { … }
TEST_F(DownloadManagerTest,
StoragePartitionConfigAndEmbedderDownloadDataConversions) { … }
TEST_F(DownloadManagerTest, BlockingShutdownCount) { … }
class DownloadManagerWithExpirationTest : public DownloadManagerTest { … };
TEST_F(DownloadManagerWithExpirationTest, DeleteExpiredDownload) { … }
class DownloadManagerShutdownTest : public DownloadManagerTest { … };
TEST_F(DownloadManagerShutdownTest,
OnDownloadCanceledAtShutdownCalledForInProgressDownload) { … }
TEST_F(DownloadManagerShutdownTest,
OnDownloadCanceledAtShutdownNotCalledForCompleteDownload) { … }
}