12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#ifndef NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_ 6b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#define NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector> 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/compiler_specific.h" 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/http/http_status_code.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)namespace net { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace test_server { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Interface for HTTP response implementations. 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class HttpResponse{ 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~HttpResponse(); 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns raw contents to be written to the network socket 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // in response. If you intend to make this a valid HTTP response, 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // it should start with "HTTP/x.x" line, followed by response headers. 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string ToResponseString() const = 0; 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// This class is used to handle basic HTTP responses with commonly used 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// response headers such as "Content-Type". 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class BasicHttpResponse : public HttpResponse { 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public: 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) BasicHttpResponse(); 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual ~BasicHttpResponse(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The response code. 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch HttpStatusCode code() const { return code_; } 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_code(HttpStatusCode code) { code_ = code; } 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The content of the response. 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& content() const { return content_; } 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_content(const std::string& content) { content_ = content; } 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The content type. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& content_type() const { return content_type_; } 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_content_type(const std::string& content_type) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type_ = content_type; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Adds a custom header. 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddCustomHeader(const std::string& key, const std::string& value) { 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch custom_headers_.push_back(std::make_pair(key, value)); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Generates and returns a http response string. 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual std::string ToResponseString() const OVERRIDE; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch HttpStatusCode code_; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string content_; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string content_type_; 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<std::pair<std::string, std::string> > custom_headers_; 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BasicHttpResponse); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 68b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace test_server 69b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)} // namespace net 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#endif // NET_TEST_EMBEDDED_TEST_SERVER_HTTP_RESPONSE_H_ 72