ResourceHandleCurlDelegate.h [plain text]
#pragma once
#if USE(CURL)
#include "Credential.h"
#include "CurlRequestClient.h"
#include "ResourceRequest.h"
namespace WebCore {
class CurlRequest;
class MultipartHandle;
class ResourceHandle;
class ResourceResponse;
class ResourceHandleCurlDelegate final : public ThreadSafeRefCounted<ResourceHandleCurlDelegate>, public CurlRequestClient {
public:
ResourceHandleCurlDelegate(ResourceHandle*);
~ResourceHandleCurlDelegate();
bool hasHandle() const;
void releaseHandle();
void start();
void cancel();
void setDefersLoading(bool);
void setAuthentication(const String&, const String&);
void dispatchSynchronousJob();
void continueDidReceiveResponse();
void platformContinueSynchronousDidReceiveResponse();
void continueWillSendRequest(ResourceRequest&&);
private:
ResourceResponse& response();
std::pair<String, String> getCredential(ResourceRequest&, bool);
bool cancelledOrClientless();
Ref<CurlRequest> createCurlRequest(ResourceRequest&);
void curlDidReceiveResponse(const CurlResponse&) override;
void curlDidReceiveBuffer(Ref<SharedBuffer>&&) override;
void curlDidComplete() override;
void curlDidFailWithError(const ResourceError&) override;
void continueAfterDidReceiveResponse();
bool shouldRedirectAsGET(const ResourceRequest&, bool crossOrigin);
void willSendRequest();
void continueAfterWillSendRequest(ResourceRequest&&);
void handleDataURL();
ResourceHandle* m_handle;
std::unique_ptr<MultipartHandle> m_multipartHandle;
unsigned m_authFailureCount { 0 };
unsigned m_redirectCount { 0 };
ResourceRequest m_firstRequest;
ResourceRequest m_currentRequest;
bool m_shouldUseCredentialStorage;
String m_user;
String m_pass;
Credential m_initialCredential;
bool m_defersLoading;
bool m_addedCacheValidationHeaders { false };
RefPtr<CurlRequest> m_curlRequest;
};
}
#endif