blob: e757460d5c09aa9b665fd357cd16bc111e37c036 [file] [log] [blame]
// 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.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_REQUEST_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_TESTING_SIM_SIM_REQUEST_H_
#include "base/optional.h"
#include "third_party/blink/public/platform/web_url_error.h"
#include "third_party/blink/public/platform/web_url_response.h"
#include "third_party/blink/renderer/platform/weborigin/kurl.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h"
namespace blink {
class SimNetwork;
class WebURLLoaderClient;
// Simulates a single request for a resource from the server. Requires a
// SimNetwork to have been created first. Use the Write(), Finish() and
// Complete() methods to simulate the response from the server.
// Note that all requests must be finished.
class SimRequestBase {
public:
// Write a chunk of the response body.
void Write(const String& data);
void Write(const Vector<char>& data);
// Finish the response, this is as if the server closed the connection.
void Finish();
// Shorthand to complete a request (start/write/finish) sequence in order.
void Complete(const String& data = String());
void Complete(const Vector<char>& data);
protected:
SimRequestBase(String url, String mime_type, bool start_immediately);
~SimRequestBase();
void StartInternal();
void ServePending();
private:
friend class SimNetwork;
void Reset();
// Used by SimNetwork.
void DidReceiveResponse(WebURLLoaderClient*, const WebURLResponse&);
void DidFail(const WebURLError&);
KURL url_;
String mime_type_;
bool start_immediately_;
bool started_;
WebURLResponse response_;
base::Optional<WebURLError> error_;
WebURLLoaderClient* client_;
unsigned total_encoded_data_length_;
};
// This request can be used as a main resource request for navigation.
// It does not allow starting asynchronously, because that's not how
// navigations work in reality.
// TODO(dgozman): rename this to SimNavigationRequest or something.
class SimRequest final : public SimRequestBase {
public:
SimRequest(String url, String mime_type);
~SimRequest();
};
// This request can be started asynchronously, suited for simulating
// delayed load of subresources.
class SimSubresourceRequest final : public SimRequestBase {
public:
SimSubresourceRequest(String url, String mime_type);
~SimSubresourceRequest();
// Starts the response from the server, this is as if the headers and 200 OK
// reply had been received but no response body yet.
void Start();
};
} // namespace blink
#endif