1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
6#define NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
7
8#include <map>
9#include <string>
10#include <vector>
11
12#include "base/basictypes.h"
13#include "base/compiler_specific.h"
14#include "net/http/http_status_code.h"
15
16namespace net {
17namespace test_server {
18
19// Interface for HTTP response implementations.
20class HttpResponse{
21 public:
22  virtual ~HttpResponse();
23
24  // Returns raw contents to be written to the network socket
25  // in response. If you intend to make this a valid HTTP response,
26  // it should start with "HTTP/x.x" line, followed by response headers.
27  virtual std::string ToResponseString() const = 0;
28};
29
30// This class is used to handle basic HTTP responses with commonly used
31// response headers such as "Content-Type".
32class BasicHttpResponse : public HttpResponse {
33 public:
34  BasicHttpResponse();
35  virtual ~BasicHttpResponse();
36
37  // The response code.
38  HttpStatusCode code() const { return code_; }
39  void set_code(HttpStatusCode code) { code_ = code; }
40
41  // The content of the response.
42  const std::string& content() const { return content_; }
43  void set_content(const std::string& content) { content_ = content; }
44
45  // The content type.
46  const std::string& content_type() const { return content_type_; }
47  void set_content_type(const std::string& content_type) {
48    content_type_ = content_type;
49  }
50
51  // Adds a custom header.
52  void AddCustomHeader(const std::string& key, const std::string& value) {
53    custom_headers_.push_back(std::make_pair(key, value));
54  }
55
56  // Generates and returns a http response string.
57  virtual std::string ToResponseString() const OVERRIDE;
58
59 private:
60  HttpStatusCode code_;
61  std::string content_;
62  std::string content_type_;
63  std::vector<std::pair<std::string, std::string> > custom_headers_;
64
65  DISALLOW_COPY_AND_ASSIGN(BasicHttpResponse);
66};
67
68}  // namespace test_server
69}  // namespace net
70
71#endif  // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_
72