mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-24 14:26:09 +03:00
134 lines
4.0 KiB
C
134 lines
4.0 KiB
C
|
// Copyright (c) 2012 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 NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
|
||
|
#define NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
|
||
|
|
||
|
#include <string>
|
||
|
|
||
|
#include "base/callback.h"
|
||
|
#include "base/compiler_specific.h"
|
||
|
#include "base/macros.h"
|
||
|
#include "base/strings/string_split.h"
|
||
|
#include "base/time/time.h"
|
||
|
#include "net/http/http_status_code.h"
|
||
|
|
||
|
namespace net {
|
||
|
namespace test_server {
|
||
|
|
||
|
// Callback called when the response is done being sent.
|
||
|
using SendCompleteCallback = base::Callback<void(void)>;
|
||
|
|
||
|
// Callback called when the response is ready to be sent that takes the
|
||
|
// |response| that is being sent along with the callback |write_done| that is
|
||
|
// called when the response has been fully written.
|
||
|
using SendBytesCallback =
|
||
|
base::Callback<void(const std::string& response,
|
||
|
const SendCompleteCallback& write_done)>;
|
||
|
|
||
|
// Interface for HTTP response implementations.
|
||
|
class HttpResponse{
|
||
|
public:
|
||
|
virtual ~HttpResponse();
|
||
|
|
||
|
// |send| will send the specified data to the network socket, and invoke
|
||
|
// |write_done| when complete. When the entire response has been sent,
|
||
|
// |done| must be called.
|
||
|
virtual void SendResponse(const SendBytesCallback& send,
|
||
|
const SendCompleteCallback& done) = 0;
|
||
|
};
|
||
|
|
||
|
// This class is used to handle basic HTTP responses with commonly used
|
||
|
// response headers such as "Content-Type". Sends the response immediately.
|
||
|
class BasicHttpResponse : public HttpResponse {
|
||
|
public:
|
||
|
BasicHttpResponse();
|
||
|
~BasicHttpResponse() override;
|
||
|
|
||
|
// The response code.
|
||
|
HttpStatusCode code() const { return code_; }
|
||
|
void set_code(HttpStatusCode code) { code_ = code; }
|
||
|
|
||
|
// The content of the response.
|
||
|
const std::string& content() const { return content_; }
|
||
|
void set_content(const std::string& content) { content_ = content; }
|
||
|
|
||
|
// The content type.
|
||
|
const std::string& content_type() const { return content_type_; }
|
||
|
void set_content_type(const std::string& content_type) {
|
||
|
content_type_ = content_type;
|
||
|
}
|
||
|
|
||
|
// Adds a custom header.
|
||
|
void AddCustomHeader(const std::string& key, const std::string& value) {
|
||
|
custom_headers_.push_back(std::make_pair(key, value));
|
||
|
}
|
||
|
|
||
|
// Generates and returns a http response string.
|
||
|
std::string ToResponseString() const;
|
||
|
|
||
|
void SendResponse(const SendBytesCallback& send,
|
||
|
const SendCompleteCallback& done) override;
|
||
|
|
||
|
private:
|
||
|
HttpStatusCode code_;
|
||
|
std::string content_;
|
||
|
std::string content_type_;
|
||
|
base::StringPairs custom_headers_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(BasicHttpResponse);
|
||
|
};
|
||
|
|
||
|
class DelayedHttpResponse : public BasicHttpResponse {
|
||
|
public:
|
||
|
DelayedHttpResponse(const base::TimeDelta delay);
|
||
|
~DelayedHttpResponse() override;
|
||
|
|
||
|
// Issues a delayed send to the to the task runner.
|
||
|
void SendResponse(const SendBytesCallback& send,
|
||
|
const SendCompleteCallback& done) override;
|
||
|
|
||
|
private:
|
||
|
// The delay time for the response.
|
||
|
const base::TimeDelta delay_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(DelayedHttpResponse);
|
||
|
};
|
||
|
|
||
|
class RawHttpResponse : public HttpResponse {
|
||
|
public:
|
||
|
RawHttpResponse(const std::string& headers, const std::string& contents);
|
||
|
~RawHttpResponse() override;
|
||
|
|
||
|
void SendResponse(const SendBytesCallback& send,
|
||
|
const SendCompleteCallback& done) override;
|
||
|
|
||
|
void AddHeader(const std::string& key_value_pair);
|
||
|
|
||
|
private:
|
||
|
std::string headers_;
|
||
|
const std::string contents_;
|
||
|
|
||
|
DISALLOW_COPY_AND_ASSIGN(RawHttpResponse);
|
||
|
};
|
||
|
|
||
|
// "Response" where the server doesn't actually respond until the server is
|
||
|
// destroyed.
|
||
|
class HungResponse : public HttpResponse {
|
||
|
public:
|
||
|
HungResponse() {}
|
||
|
~HungResponse() override {}
|
||
|
|
||
|
void SendResponse(const SendBytesCallback& send,
|
||
|
const SendCompleteCallback& done) override;
|
||
|
|
||
|
private:
|
||
|
DISALLOW_COPY_AND_ASSIGN(HungResponse);
|
||
|
};
|
||
|
|
||
|
} // namespace test_server
|
||
|
} // namespace net
|
||
|
|
||
|
#endif // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
|