ApplicationCacheResourceLoader.h [plain text]
#pragma once
#include "ApplicationCacheResource.h"
#include "CachedRawResource.h"
#include "CachedRawResourceClient.h"
#include "CachedResourceHandle.h"
#include <wtf/CompletionHandler.h>
#include <wtf/RefCounted.h>
namespace WebCore {
class CachedResourceLoader;
class ResourceRequest;
class ApplicationCacheResourceLoader final : public RefCounted<ApplicationCacheResourceLoader>, private CachedRawResourceClient {
public:
enum class Error { Abort, NetworkError, CannotCreateResource, NotFound, NotOK, RedirectForbidden };
using ResourceOrError = Expected<RefPtr<ApplicationCacheResource>, Error>;
static RefPtr<ApplicationCacheResourceLoader> create(unsigned, CachedResourceLoader&, ResourceRequest&&, CompletionHandler<void(ResourceOrError&&)>&&);
~ApplicationCacheResourceLoader();
void cancel(Error = Error::Abort);
const CachedResource* resource() const { return m_resource.get(); }
bool hasRedirection() const { return m_hasRedirection; }
unsigned type() const { return m_type; }
private:
explicit ApplicationCacheResourceLoader(unsigned, CachedResourceHandle<CachedRawResource>&&, CompletionHandler<void(ResourceOrError&&)>&&);
void responseReceived(CachedResource&, const ResourceResponse&, CompletionHandler<void()>&&) final;
void dataReceived(CachedResource&, const char* data, int dataLength) final;
void redirectReceived(CachedResource&, ResourceRequest&&, const ResourceResponse&, CompletionHandler<void(ResourceRequest&&)>&&) final;
void notifyFinished(CachedResource&, const NetworkLoadMetrics&) final;
unsigned m_type;
CachedResourceHandle<CachedRawResource> m_resource;
RefPtr<ApplicationCacheResource> m_applicationCacheResource;
CompletionHandler<void(ResourceOrError&&)> m_callback;
bool m_hasRedirection { false };
};
}