SynchronousNetworkLoaderClient.cpp [plain text]
#include "config.h"
#include "SynchronousNetworkLoaderClient.h"
#if ENABLE(NETWORK_PROCESS)
#include "DataReference.h"
#include "NetworkResourceLoader.h"
#include "WebErrors.h"
#include <WebCore/ResourceRequest.h>
#include <WebCore/SharedBuffer.h>
#include <WebCore/SynchronousLoaderClient.h>
using namespace WebCore;
namespace WebKit {
SynchronousNetworkLoaderClient::SynchronousNetworkLoaderClient(const ResourceRequest& request, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> reply)
: m_originalRequest(request)
, m_delayedReply(reply)
{
ASSERT(m_delayedReply);
}
SynchronousNetworkLoaderClient::~SynchronousNetworkLoaderClient()
{
ASSERT(!m_delayedReply);
}
void SynchronousNetworkLoaderClient::willSendRequest(NetworkResourceLoader* loader, ResourceRequest& proposedRequest, const ResourceResponse& redirectResponse)
{
if (!protocolHostAndPortAreEqual(m_originalRequest.url(), proposedRequest.url())) {
ASSERT(m_error.isNull());
m_error = SynchronousLoaderClient::platformBadResponseError();
proposedRequest = 0;
}
m_currentRequest = proposedRequest;
loader->continueWillSendRequest(m_currentRequest);
}
void SynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace(NetworkResourceLoader* loader, const ProtectionSpace&)
{
loader->continueCanAuthenticateAgainstProtectionSpace(true);
}
void SynchronousNetworkLoaderClient::didReceiveResponse(NetworkResourceLoader*, const ResourceResponse& response)
{
m_response = response;
}
void SynchronousNetworkLoaderClient::didReceiveBuffer(NetworkResourceLoader*, SharedBuffer* buffer, int encodedDataLength)
{
if (!m_responseData)
m_responseData = adoptPtr(new Vector<uint8_t>);
m_responseData->append(buffer->data(), buffer->size());
}
void SynchronousNetworkLoaderClient::didFinishLoading(NetworkResourceLoader*, double )
{
sendDelayedReply();
}
void SynchronousNetworkLoaderClient::didFail(NetworkResourceLoader*, const ResourceError& error)
{
m_error = error;
sendDelayedReply();
}
void SynchronousNetworkLoaderClient::sendDelayedReply()
{
ASSERT(m_delayedReply);
uint8_t* bytes = m_responseData ? m_responseData->data() : 0;
size_t size = m_responseData ? m_responseData->size() : 0;
if (m_response.isNull()) {
ASSERT(!m_error.isNull());
}
m_delayedReply->send(m_error, m_response, CoreIPC::DataReference(bytes, size));
m_delayedReply = nullptr;
}
}
#endif // ENABLE(NETWORK_PROCESS)