#ifndef CONTENT_PUBLIC_BROWSER_BACKGROUND_FETCH_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_BACKGROUND_FETCH_DELEGATE_H_
#include <memory>
#include <string>
#include <vector>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "content/common/content_export.h"
#include "content/public/browser/web_contents.h"
#include "services/network/public/mojom/fetch_api.mojom-shared.h"
#include "third_party/abseil-cpp/absl/types/optional.h"
#include "third_party/blink/public/mojom/background_fetch/background_fetch.mojom.h"
#include "third_party/skia/include/core/SkBitmap.h"
class GURL;
namespace gfx {
class Size;
}
namespace net {
class HttpRequestHeaders;
struct NetworkTrafficAnnotationTag;
}
namespace content {
struct BackgroundFetchResponse;
struct BackgroundFetchResult;
struct BackgroundFetchDescription;
enum class BackgroundFetchPermission {
ALLOWED,
ASK,
BLOCKED,
};
class CONTENT_EXPORT BackgroundFetchDelegate {
public:
using GetIconDisplaySizeCallback = base::OnceCallback<void(const gfx::Size&)>;
using GetUploadDataCallback =
base::OnceCallback<void(blink::mojom::SerializedBlobPtr)>;
class Client {
public:
virtual ~Client() {}
virtual void OnJobCancelled(
const std::string& job_unique_id,
const std::string& download_guid,
blink::mojom::BackgroundFetchFailureReason reason_to_abort) = 0;
virtual void OnDownloadStarted(
const std::string& job_unique_id,
const std::string& download_guid,
std::unique_ptr<content::BackgroundFetchResponse> response) = 0;
virtual void OnDownloadUpdated(const std::string& job_unique_id,
const std::string& download_guid,
uint64_t bytes_uploaded,
uint64_t bytes_downloaded) = 0;
virtual void OnDownloadComplete(
const std::string& job_unique_id,
const std::string& download_guid,
std::unique_ptr<BackgroundFetchResult> result) = 0;
virtual void OnUIActivated(const std::string& job_unique_id) = 0;
virtual void OnUIUpdated(const std::string& job_unique_id) = 0;
virtual void GetUploadData(const std::string& job_unique_id,
const std::string& download_guid,
GetUploadDataCallback callback) = 0;
};
BackgroundFetchDelegate();
virtual ~BackgroundFetchDelegate();
virtual void GetIconDisplaySize(GetIconDisplaySizeCallback callback) = 0;
virtual void CreateDownloadJob(
base::WeakPtr<Client> client,
std::unique_ptr<BackgroundFetchDescription> fetch_description) = 0;
virtual void DownloadUrl(
const std::string& job_unique_id,
const std::string& download_guid,
const std::string& method,
const GURL& url,
::network::mojom::CredentialsMode credentials_mode,
const net::NetworkTrafficAnnotationTag& traffic_annotation,
const net::HttpRequestHeaders& headers,
bool has_request_body) = 0;
virtual void Abort(const std::string& job_unique_id) = 0;
virtual void MarkJobComplete(const std::string& job_unique_id) = 0;
virtual void UpdateUI(const std::string& job_unique_id,
const absl::optional<std::string>& title,
const absl::optional<SkBitmap>& icon) = 0;
};
}
#endif