#ifndef ThreadableLoaderClientWrapper_h
#define ThreadableLoaderClientWrapper_h
#include "core/loader/ThreadableLoaderClient.h"
#include "wtf/Noncopyable.h"
#include "wtf/PassRefPtr.h"
#include "wtf/ThreadSafeRefCounted.h"
#include "wtf/Threading.h"
namespace WebCore {
class ThreadableLoaderClientWrapper : public ThreadSafeRefCounted<ThreadableLoaderClientWrapper> {
public:
static PassRefPtr<ThreadableLoaderClientWrapper> create(ThreadableLoaderClient* client)
{
return adoptRef(new ThreadableLoaderClientWrapper(client));
}
void clearClient()
{
m_done = true;
m_client = 0;
}
bool done() const
{
return m_done;
}
void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent)
{
if (m_client)
m_client->didSendData(bytesSent, totalBytesToBeSent);
}
void didReceiveResponse(unsigned long identifier, const ResourceResponse& response)
{
if (m_client)
m_client->didReceiveResponse(identifier, response);
}
void didReceiveData(const char* data, int dataLength)
{
if (m_client)
m_client->didReceiveData(data, dataLength);
}
void didReceiveCachedMetadata(const char* data, int dataLength)
{
if (m_client)
m_client->didReceiveCachedMetadata(data, dataLength);
}
void didFinishLoading(unsigned long identifier, double finishTime)
{
m_done = true;
if (m_client)
m_client->didFinishLoading(identifier, finishTime);
}
void didFail(const ResourceError& error)
{
m_done = true;
if (m_client)
m_client->didFail(error);
}
void didFailAccessControlCheck(const ResourceError& error)
{
m_done = true;
if (m_client)
m_client->didFailAccessControlCheck(error);
}
void didFailRedirectCheck()
{
m_done = true;
if (m_client)
m_client->didFailRedirectCheck();
}
void didReceiveAuthenticationCancellation(unsigned long identifier, const ResourceResponse& response)
{
if (m_client)
m_client->didReceiveResponse(identifier, response);
}
void didDownloadData(int dataLength)
{
if (m_client)
m_client->didDownloadData(dataLength);
}
protected:
explicit ThreadableLoaderClientWrapper(ThreadableLoaderClient* client)
: m_client(client)
, m_done(false)
{
}
ThreadableLoaderClient* m_client;
bool m_done;
};
}
#endif