// Copyright 2021 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 WEBLAYER_BROWSER_PERSISTENT_DOWNLOAD_H_ #define WEBLAYER_BROWSER_PERSISTENT_DOWNLOAD_H_ #include "base/memory/raw_ptr.h" #include "weblayer/browser/download_impl.h" namespace download { class DownloadItem; } namespace weblayer { // A DownloadImpl that is persisted to disk. It will be backed by a // download::DownloadItem for which IsTransient returns false. This is used when // a user downloads a file from the web. class PersistentDownload : public DownloadImpl { public: PersistentDownload(const PersistentDownload& other) = delete; PersistentDownload& operator=(const PersistentDownload& other) = delete; ~PersistentDownload() override; static void Create(download::DownloadItem* item); static PersistentDownload* Get(download::DownloadItem* item); // Download: DownloadState GetState() override; int64_t GetTotalBytes() override; int64_t GetReceivedBytes() override; void Pause() override; void Resume() override; void Cancel() override; base::FilePath GetLocation() override; std::u16string GetFileNameToReportToUser() override; std::string GetMimeType() override; DownloadError GetError() override; // DownloadImpl: int GetNotificationId() override; bool IsTransient() override; GURL GetSourceUrl() override; const SkBitmap* GetLargeIcon() override; void OnFinished(bool activated) override; private: explicit PersistentDownload(download::DownloadItem* item); void PauseInternal(); void ResumeInternal(); void CancelInternal(); raw_ptr item_; bool pause_pending_ = false; bool resume_pending_ = false; bool cancel_pending_ = false; base::WeakPtrFactory weak_ptr_factory_{this}; }; } // namespace weblayer #endif // WEBLAYER_BROWSER_PERSISTENT_DOWNLOAD_H_