blob: 64d7f4b31ec59880a25d1a3c2b17e9f5f22cabe3 [file]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "web/tests/sim/SimNetwork.h"
#include "public/platform/Platform.h"
#include "public/platform/WebURLError.h"
#include "public/platform/WebURLLoader.h"
#include "public/platform/WebURLLoaderClient.h"
#include "public/platform/WebURLLoaderMockFactory.h"
#include "public/platform/WebURLResponse.h"
#include "web/tests/sim/SimRequest.h"
namespace blink {
static SimNetwork* s_network = nullptr;
SimNetwork::SimNetwork() : m_currentRequest(nullptr) {
Platform::current()->getURLLoaderMockFactory()->setLoaderDelegate(this);
ASSERT(!s_network);
s_network = this;
}
SimNetwork::~SimNetwork() {
Platform::current()->getURLLoaderMockFactory()->setLoaderDelegate(nullptr);
Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs();
s_network = nullptr;
}
SimNetwork& SimNetwork::current() {
DCHECK(s_network);
return *s_network;
}
void SimNetwork::servePendingRequests() {
Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests();
}
void SimNetwork::didReceiveResponse(WebURLLoaderClient* client,
const WebURLResponse& response) {
auto it = m_requests.find(response.url().string());
if (it == m_requests.end()) {
client->didReceiveResponse(response);
return;
}
DCHECK(it->value);
m_currentRequest = it->value;
m_currentRequest->didReceiveResponse(client, response);
}
void SimNetwork::didReceiveData(WebURLLoaderClient* client,
const char* data,
int dataLength) {
if (!m_currentRequest)
client->didReceiveData(data, dataLength);
}
void SimNetwork::didFail(WebURLLoaderClient* client,
const WebURLError& error,
int64_t totalEncodedDataLength,
int64_t totalEncodedBodyLength) {
if (!m_currentRequest) {
client->didFail(error, totalEncodedDataLength, totalEncodedBodyLength);
return;
}
m_currentRequest->didFail(error);
}
void SimNetwork::didFinishLoading(WebURLLoaderClient* client,
double finishTime,
int64_t totalEncodedDataLength,
int64_t totalEncodedBodyLength) {
if (!m_currentRequest) {
client->didFinishLoading(finishTime, totalEncodedDataLength,
totalEncodedBodyLength);
return;
}
m_currentRequest = nullptr;
}
void SimNetwork::addRequest(SimRequest& request) {
m_requests.add(request.url(), &request);
}
void SimNetwork::removeRequest(SimRequest& request) {
m_requests.remove(request.url());
}
} // namespace blink