| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_OFFLINE_PAGES_CORE_PREFETCH_PREFETCH_DOWNLOADER_IMPL_H_ |
| #define COMPONENTS_OFFLINE_PAGES_CORE_PREFETCH_PREFETCH_DOWNLOADER_IMPL_H_ |
| |
| #include <memory> |
| #include <string> |
| #include <utility> |
| #include <vector> |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/memory/weak_ptr.h" |
| #include "components/download/public/background_service/download_params.h" |
| #include "components/offline_pages/core/prefetch/prefetch_downloader.h" |
| #include "components/offline_pages/core/prefetch/prefetch_types.h" |
| #include "components/version_info/channel.h" |
| |
| namespace download { |
| class DownloadService; |
| } // namespace download |
| |
| namespace offline_pages { |
| |
| class PrefetchService; |
| |
| // Asynchronously downloads the archive. |
| class PrefetchDownloaderImpl : public PrefetchDownloader { |
| public: |
| PrefetchDownloaderImpl(download::DownloadService* download_service, |
| version_info::Channel channel); |
| ~PrefetchDownloaderImpl() override; |
| |
| // PrefetchDownloader implementation: |
| void SetPrefetchService(PrefetchService* service) override; |
| bool IsDownloadServiceUnavailable() const override; |
| void CleanupDownloadsWhenReady() override; |
| void StartDownload(const std::string& download_id, |
| const std::string& download_location, |
| const std::string& operation_name) override; |
| void OnDownloadServiceReady( |
| const std::set<std::string>& outstanding_download_ids, |
| const std::map<std::string, std::pair<base::FilePath, int64_t>>& |
| success_downloads) override; |
| void OnDownloadServiceUnavailable() override; |
| void OnDownloadSucceeded(const std::string& download_id, |
| const base::FilePath& file_path, |
| int64_t file_size) override; |
| void OnDownloadFailed(const std::string& download_id) override; |
| |
| private: |
| enum class DownloadServiceStatus { |
| // The download service is booting up. |
| INITIALIZING, |
| // The download service is up and can take downloads. |
| STARTED, |
| // The download service is unavailable to use for the whole lifetime of |
| // Chrome. |
| UNAVAILABLE, |
| }; |
| |
| // Callback for StartDownload. |
| void OnStartDownload(const std::string& download_id, |
| download::DownloadParams::StartResult result); |
| |
| void CleanupDownloads( |
| const std::set<std::string>& outstanding_download_ids, |
| const std::map<std::string, std::pair<base::FilePath, int64_t>>& |
| success_downloads); |
| |
| // Unowned. It is valid until |this| instance is disposed. |
| download::DownloadService* download_service_; |
| |
| // Unowned, owns |this|. |
| PrefetchService* prefetch_service_ = nullptr; |
| |
| version_info::Channel channel_; |
| |
| // Flag to indicate if the download service is ready to take downloads. |
| DownloadServiceStatus download_service_status_ = |
| DownloadServiceStatus::INITIALIZING; |
| |
| // Flag to indicate that the download cleanup can proceed. |
| bool cleanup_downloads_when_service_starts_ = false; |
| bool did_download_cleanup_ = false; |
| |
| std::set<std::string> outstanding_download_ids_; |
| std::map<std::string, std::pair<base::FilePath, int64_t>> success_downloads_; |
| |
| base::WeakPtrFactory<PrefetchDownloaderImpl> weak_ptr_factory_; |
| |
| DISALLOW_COPY_AND_ASSIGN(PrefetchDownloaderImpl); |
| }; |
| |
| } // namespace offline_pages |
| |
| #endif // COMPONENTS_OFFLINE_PAGES_CORE_PREFETCH_PREFETCH_DOWNLOADER_IMPL_H_ |