#pragma once
#include "MessageSender.h"
#include "NetworkLoadClient.h"
namespace WebCore {
class ResourceResponse;
}
namespace WebKit {
class Download;
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>&&, ResponseCompletionHandler&&, DownloadID, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&);
void continueWillSendRequest(WebCore::ResourceRequest&&);
void cancel();
#if PLATFORM(COCOA)
void publishProgress(const URL&, SandboxExtension::Handle&&);
void didBecomeDownload(const std::unique_ptr<Download>&);
#endif
private:
void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent) override { }
bool isSynchronous() const override { return false; }
bool isAllowedToAskUserForCredentials() const final { return m_isAllowedToAskUserForCredentials; }
void willSendRedirectedRequest(WebCore::ResourceRequest&&, WebCore::ResourceRequest&& redirectRequest, WebCore::ResourceResponse&& redirectResponse) override;
void didReceiveResponse(WebCore::ResourceResponse&&, ResponseCompletionHandler&&) override;
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;
#if PLATFORM(COCOA)
URL m_progressURL;
SandboxExtension::Handle m_progressSandboxExtension;
#endif
};
}