// Copyright (c) 2011 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 CHROME_TEST_WEBDRIVER_HTTP_RESPONSE_H_ #define CHROME_TEST_WEBDRIVER_HTTP_RESPONSE_H_ #include <map> #include <string> #include "base/basictypes.h" namespace webdriver { class HttpResponse { public: typedef std::map<std::string, std::string> HeaderMap; // The supported HTTP response codes. static const int kOk; static const int kNoContent; static const int kSeeOther; static const int kNotModified; static const int kBadRequest; static const int kForbidden; static const int kNotFound; static const int kMethodNotAllowed; static const int kInternalServerError; static const int kNotImplemented; // Creates an HTTP response with a 200 OK status. HttpResponse(); explicit HttpResponse(int status); ~HttpResponse(); // Sets a header in this response. If a header with the same |name| already // exists, the |value| will be appended to the existing values. Since header // names are case insensitive, the header will be stored in lowercase format. void AddHeader(const std::string& name, const std::string& value); // Retrieves the value of the specified header. If there is no such header, // the output |value| will not be modified and false will be returned. bool GetHeader(const std::string& name, std::string* value) const; // Removes the header with the given |name|. Returns whether there was a // matching header to remove. bool RemoveHeader(const std::string& name); // Removes all headers. void ClearHeaders(); // Convenience function for setting the Content-Type header for this response. void SetMimeType(const std::string& mime_type); // Returns the status phrase recommended by RFC 2616 section 6.1.1 for this // response's status code. If the status code is not recognized, the default // "Unknown" status phrase will be used. std::string GetReasonPhrase() const; // Appends this response to |data|, abiding by HTTP 1.1. // This will add an appropriate "Content-Length" header if not already set. void GetData(std::string* data) const; int status() const; void set_status(int status); const std::string& body() const; void set_body(const std::string& body); private: void UpdateHeader(const std::string& name, const std::string& new_value); int status_; HeaderMap headers_; std::string body_; }; } // webdriver #endif // CHROME_TEST_WEBDRIVER_HTTP_RESPONSE_H_