1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_IN_MEMORY_DOWNLOAD_DRIVER_H_
#define COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_IN_MEMORY_DOWNLOAD_DRIVER_H_
#include <map>
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/task/single_thread_task_runner.h"
#include "components/download/internal/background_service/download_driver.h"
#include "components/download/internal/background_service/in_memory_download.h"
#include "components/download/public/background_service/url_loader_factory_getter.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
namespace download {
class InMemoryDownload;
// Factory to create in memory download object.
class InMemoryDownloadFactory : public InMemoryDownload::Factory {
public:
InMemoryDownloadFactory(
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner);
InMemoryDownloadFactory(const InMemoryDownloadFactory&) = delete;
InMemoryDownloadFactory& operator=(const InMemoryDownloadFactory&) = delete;
~InMemoryDownloadFactory() override;
private:
// InMemoryDownload::Factory implementation.
std::unique_ptr<InMemoryDownload> Create(
const std::string& guid,
const RequestParams& request_params,
scoped_refptr<network::ResourceRequestBody> request_body,
const net::NetworkTrafficAnnotationTag& traffic_annotation,
InMemoryDownload::Delegate* delegate) override;
scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_;
};
// Download backend that owns the list of in memory downloads and propagate
// notification to its client.
class InMemoryDownloadDriver : public DownloadDriver,
public InMemoryDownload::Delegate {
public:
InMemoryDownloadDriver(
std::unique_ptr<InMemoryDownload::Factory> download_factory,
BlobContextGetterFactoryPtr blob_context_getter_factory,
URLLoaderFactoryGetterPtr url_loader_factory_getter);
InMemoryDownloadDriver(const InMemoryDownloadDriver&) = delete;
InMemoryDownloadDriver& operator=(const InMemoryDownloadDriver&) = delete;
~InMemoryDownloadDriver() override;
private:
// DownloadDriver implementation.
void Initialize(DownloadDriver::Client* client) override;
void HardRecover() override;
bool IsReady() const override;
void Start(
const RequestParams& request_params,
const std::string& guid,
const base::FilePath& file_path,
scoped_refptr<network::ResourceRequestBody> post_body,
const net::NetworkTrafficAnnotationTag& traffic_annotation) override;
void Remove(const std::string& guid, bool remove_file) override;
void Pause(const std::string& guid) override;
void Resume(const std::string& guid) override;
std::optional<DriverEntry> Find(const std::string& guid) override;
std::set<std::string> GetActiveDownloads() override;
size_t EstimateMemoryUsage() const override;
// InMemoryDownload::Delegate implementation.
void OnDownloadStarted(InMemoryDownload* download) override;
void OnDownloadProgress(InMemoryDownload* download) override;
void OnDownloadComplete(InMemoryDownload* download) override;
void OnUploadProgress(InMemoryDownload* download) override;
void RetrieveBlobContextGetter(BlobContextGetterCallback callback) override;
void RetrievedURLLoaderFactory(
URLLoaderFactoryGetterCallback callback) override;
// The client that receives updates from low level download logic.
raw_ptr<DownloadDriver::Client> client_;
// The factory used to create in memory download objects.
std::unique_ptr<InMemoryDownload::Factory> download_factory_;
// Used to retrieve BlobStorageContextGetter.
BlobContextGetterFactoryPtr blob_context_getter_factory_;
// Used to retrieve browser context specific URLLoaderFactory
URLLoaderFactoryGetterPtr url_loader_factory_getter_;
// A map of GUID and in memory download, which holds download data.
std::map<std::string, std::unique_ptr<InMemoryDownload>> downloads_;
};
} // namespace download
#endif // COMPONENTS_DOWNLOAD_INTERNAL_BACKGROUND_SERVICE_IN_MEMORY_DOWNLOAD_DRIVER_H_
|