#pragma once
#include "MessageSender.h"
#include "NetworkLoadClient.h"
namespace WebCore {
class ResourceResponse;
}
namespace WebKit {
class DownloadID;
class NetworkLoad;
class NetworkLoadParameters;
class NetworkSession;
class PendingDownload : public NetworkLoadClient, public IPC::MessageSender {
WTF_MAKE_FAST_ALLOCATED;
public:
PendingDownload(NetworkLoadParameters&&, DownloadID, NetworkSession&, const String& suggestedName);
PendingDownload(std::unique_ptr<NetworkLoad>&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
void continueWillSendRequest(WebCore::ResourceRequest&&);
void cancel();
private:
void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override { }
#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
void canAuthenticateAgainstProtectionSpaceAsync(const WebCore::ProtectionSpace&) override;
#endif
bool isSynchronous() const override { return false; }
bool isAllowedToAskUserForCredentials() const final { return m_isAllowedToAskUserForCredentials; }
void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
ShouldContinueDidReceiveResponse didReceiveResponse(WebCore::ResourceResponse&&) override { return ShouldContinueDidReceiveResponse::No; };
void didReceiveBuffer(Ref<WebCore::SharedBuffer>&&, int reportedEncodedDataLength) override { };
void didFinishLoading(const WebCore::NetworkLoadMetrics&) override { };
void didFailLoading(const WebCore::ResourceError&) override;
IPC::Connection* messageSenderConnection() override;
uint64_t messageSenderDestinationID() override;
private:
std::unique_ptr<NetworkLoad> m_networkLoad;
bool m_isAllowedToAskUserForCredentials;
};
}