#ifndef COMPONENTS_DOMAIN_RELIABILITY_UPLOADER_H_
#define COMPONENTS_DOMAIN_RELIABILITY_UPLOADER_H_
#include <map>
#include <memory>
#include "base/functional/callback_forward.h"
#include "base/time/time.h"
#include "components/domain_reliability/domain_reliability_export.h"
#include "url/gurl.h"
namespace net {
class IsolationInfo;
class URLRequest;
class URLRequestContext;
}
namespace domain_reliability {
class MockableTime;
class DOMAIN_RELIABILITY_EXPORT DomainReliabilityUploader {
public:
struct UploadResult {
enum UploadStatus {
FAILURE,
SUCCESS,
RETRY_AFTER,
};
bool is_success() const { return status == SUCCESS; }
bool is_failure() const { return status == FAILURE; }
bool is_retry_after() const { return status == RETRY_AFTER; }
UploadStatus status;
base::TimeDelta retry_after;
};
using UploadCallback = base::OnceCallback<void(const UploadResult& result)>;
DomainReliabilityUploader();
virtual ~DomainReliabilityUploader();
static std::unique_ptr<DomainReliabilityUploader> Create(
MockableTime* time,
net::URLRequestContext* url_request_context);
virtual void UploadReport(const std::string& report_json,
int max_beacon_depth,
const GURL& upload_url,
const net::IsolationInfo& isolation_info,
UploadCallback callback) = 0;
virtual void Shutdown() = 0;
virtual void SetDiscardUploads(bool discard_uploads) = 0;
virtual int GetDiscardedUploadCount() const = 0;
static int GetURLRequestUploadDepth(const net::URLRequest& request);
};
}
#endif