1a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch// found in the LICENSE file.
4a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
5a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#ifndef NET_SERVER_HTTP_SERVER_RESPONSE_INFO_H_
6a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#define NET_SERVER_HTTP_SERVER_RESPONSE_INFO_H_
7a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
8a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include <string>
9a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include <utility>
10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include <vector>
11a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
12a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "net/http/http_status_code.h"
13a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
14a3f7b4e666c476898878fa745f637129375cd889Ben Murdochnamespace net {
15a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
16a3f7b4e666c476898878fa745f637129375cd889Ben Murdochclass HttpServerResponseInfo {
17a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch public:
18a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // Creates a 200 OK HttpServerResponseInfo.
19a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  HttpServerResponseInfo();
20a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  explicit HttpServerResponseInfo(HttpStatusCode status_code);
21a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  ~HttpServerResponseInfo();
22a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  static HttpServerResponseInfo CreateFor404();
24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  static HttpServerResponseInfo CreateFor500(const std::string& body);
25a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
26a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  void AddHeader(const std::string& name, const std::string& value);
27a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
28a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  // This also adds an appropriate Content-Length header.
29a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  void SetBody(const std::string& body, const std::string& content_type);
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Sets content-length and content-type. Body should be sent separately.
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetContentHeaders(size_t content_length,
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                         const std::string& content_type);
33a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
34a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  std::string Serialize() const;
35a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
36a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  HttpStatusCode status_code() const;
37a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  const std::string& body() const;
38a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
39a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch private:
40a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  typedef std::vector<std::pair<std::string, std::string> > Headers;
41a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
42a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  HttpStatusCode status_code_;
43a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  Headers headers_;
44a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  std::string body_;
45a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch};
46a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
47a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch}  // namespace net
48a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch
49a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#endif  // NET_SERVER_HTTP_SERVER_RESPONSE_INFO_H_
50