#ifndef SERVICES_NETWORK_HTTP_CACHE_DATA_COUNTER_H_
#define SERVICES_NETWORK_HTTP_CACHE_DATA_COUNTER_H_
#include <memory>
#include "base/component_export.h"
#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/time/time.h"
namespace disk_cache {
class Backend;
}
namespace net {
class URLRequestContext;
}
namespace network {
class COMPONENT_EXPORT(NETWORK_SERVICE) HttpCacheDataCounter {
public:
using HttpCacheDataCounterCallback = base::OnceCallback<
void(HttpCacheDataCounter*, bool upper_bound, int64_t size_or_error)>;
static std::unique_ptr<HttpCacheDataCounter> CreateAndStart(
net::URLRequestContext* url_request_context,
base::Time start_time,
base::Time end_time,
HttpCacheDataCounterCallback callback);
HttpCacheDataCounter(const HttpCacheDataCounter&) = delete;
HttpCacheDataCounter& operator=(const HttpCacheDataCounter&) = delete;
~HttpCacheDataCounter();
private:
HttpCacheDataCounter(base::Time start_time,
base::Time end_time,
HttpCacheDataCounterCallback callback);
void GotBackend(std::pair<int, raw_ptr<disk_cache::Backend>>);
void PostResult(bool is_upper_limit, int64_t result_or_error);
base::WeakPtr<HttpCacheDataCounter> GetWeakPtr() {
return weak_factory_.GetWeakPtr();
}
base::Time start_time_;
base::Time end_time_;
HttpCacheDataCounterCallback callback_;
base::WeakPtrFactory<HttpCacheDataCounter> weak_factory_{this};
};
}
#endif