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& )
{
if (!protocolHostAndPortAreEqual(m_originalRequest.url(), proposedRequest.url())) {
ASSERT(m_error.isNull());
m_error = SynchronousLoaderClient::platformBadResponseError();
proposedRequest = ResourceRequest();
}
m_currentRequest = proposedRequest;
loader->continueWillSendRequest(m_currentRequest);
}
#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
void SynchronousNetworkLoaderClient::canAuthenticateAgainstProtectionSpace(NetworkResourceLoader* loader, const ProtectionSpace&)
{
loader->continueCanAuthenticateAgainstProtectionSpace(true);
}
#endif
void SynchronousNetworkLoaderClient::didReceiveResponse(NetworkResourceLoader*, const ResourceResponse& response)
{
m_response = response;
}
void SynchronousNetworkLoaderClient::didReceiveBuffer(NetworkResourceLoader*, SharedBuffer*, int )
{
}
void SynchronousNetworkLoaderClient::didFinishLoading(NetworkResourceLoader* loader, double )
{
sendDelayedReply(*loader);
}
void SynchronousNetworkLoaderClient::didFail(NetworkResourceLoader* loader, const ResourceError& error)
{
m_error = error;
sendDelayedReply(*loader);
}
void SynchronousNetworkLoaderClient::sendDelayedReply(NetworkResourceLoader& loader)
{
ASSERT(m_delayedReply);
if (m_response.isNull()) {
ASSERT(!m_error.isNull());
}
Vector<char> responseData;
SharedBuffer* buffer = loader.bufferedData();
if (buffer && buffer->size())
responseData.append(buffer->data(), buffer->size());
m_delayedReply->send(m_error, m_response, responseData);
m_delayedReply = nullptr;
}
}
#endif // ENABLE(NETWORK_PROCESS)