#ifndef COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_JOB_H_
#define COMPONENTS_DOWNLOAD_PUBLIC_COMMON_DOWNLOAD_JOB_H_
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "components/download/public/common/download_export.h"
#include "components/download/public/common/download_file.h"
#include "components/download/public/common/download_interrupt_reasons.h"
namespace download {
class DownloadItem;
class COMPONENTS_DOWNLOAD_EXPORT DownloadJob {
public:
using CancelRequestCallback =
#if BUILDFLAG(ARKWEB_NETWORK_BASE)
base::OnceCallback<void(bool ,
std::optional<std::string> guid)>;
#else
base::OnceCallback<void(bool )>;
#endif
CancelRequestCallback cancel_request_callback;
DownloadJob(DownloadItem* download_item,
CancelRequestCallback cancel_request_callback);
DownloadJob(const DownloadJob&) = delete;
DownloadJob& operator=(const DownloadJob&) = delete;
virtual ~DownloadJob();
void Start(DownloadFile* download_file_,
DownloadFile::InitializeCallback callback,
const DownloadItem::ReceivedSlices& received_slices);
virtual void Cancel(bool user_cancel);
virtual void Pause();
virtual void Resume(bool resume_request);
bool is_paused() const { return is_paused_; }
virtual bool IsParallelizable() const;
virtual void CancelRequestWithOffset(int64_t offset);
virtual bool IsSavePackageDownload() const;
protected:
virtual void OnDownloadFileInitialized(
DownloadFile::InitializeCallback callback,
DownloadInterruptReason result,
int64_t bytes_wasted);
bool AddInputStream(std::unique_ptr<InputStream> stream, int64_t offset);
raw_ptr<DownloadItem> download_item_;
CancelRequestCallback cancel_request_callback_;
private:
bool is_paused_;
base::WeakPtrFactory<DownloadJob> weak_ptr_factory_{this};
};
}
#endif