blob: 6bbe4a9fb93a5acd371eb68c40de62ee81c9d40e [file] [log] [blame]
// 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.
#include "chrome/test/webdriver/http_response.h"
#include "base/format_macros.h"
#include "base/string_util.h"
#include "base/stringprintf.h"
namespace webdriver {
const int HttpResponse::kOk = 200;
const int HttpResponse::kNoContent = 204;
const int HttpResponse::kSeeOther = 303;
const int HttpResponse::kNotModified = 304;
const int HttpResponse::kBadRequest = 400;
const int HttpResponse::kNotFound = 404;
const int HttpResponse::kMethodNotAllowed = 405;
const int HttpResponse::kInternalServerError = 500;
HttpResponse::HttpResponse()
: status_(kOk) {
}
HttpResponse::~HttpResponse() {
}
void HttpResponse::AddHeader(const std::string& name,
const std::string& value) {
std::string lower_case_name(StringToLowerASCII(name));
HeaderMap::iterator header = headers_.find(lower_case_name);
if (header == headers_.end()) {
headers_[lower_case_name] = value;
} else {
header->second.append("," + value);
}
}
bool HttpResponse::GetHeader(const std::string& name,
std::string* value) const {
std::string lower_case_name(StringToLowerASCII(name));
HeaderMap::const_iterator header = headers_.find(lower_case_name);
if (header == headers_.end()) {
return false;
}
if (value) {
*value = header->second;
}
return true;
}
bool HttpResponse::RemoveHeader(const std::string& name) {
std::string lower_case_name(StringToLowerASCII(name));
HeaderMap::iterator header = headers_.find(lower_case_name);
if (header == headers_.end()) {
return false;
}
headers_.erase(header);
return true;
}
void HttpResponse::ClearHeaders() {
headers_.clear();
}
void HttpResponse::UpdateHeader(const std::string& name,
const std::string& new_value) {
RemoveHeader(name);
AddHeader(name, new_value);
}
void HttpResponse::SetMimeType(const std::string& mime_type) {
UpdateHeader("Content-Type", mime_type);
}
void HttpResponse::SetBody(const std::string& data) {
SetBody(data.data(), data.length());
}
void HttpResponse::SetBody(const char* const data, size_t length) {
data_ = std::string(data, length);
UpdateHeader("Content-Length",
base::StringPrintf("%"PRIuS"", data_.length()));
}
std::string HttpResponse::GetReasonPhrase() const {
switch (status_) {
case kOk:
return "OK";
case kNoContent:
return "No Content";
case kSeeOther:
return "See Other";
case kNotModified:
return "Not Modified";
case kBadRequest:
return "Bad Request";
case kNotFound:
return "Not Found";
case kMethodNotAllowed:
return "Method Not Allowed";
case kInternalServerError:
return "Internal Server Error";
default:
return "Unknown";
}
}
int HttpResponse::status() const {
return status_;
}
void HttpResponse::set_status(int status) {
status_ = status;
}
const HttpResponse::HeaderMap* HttpResponse::headers() const {
return &headers_;
}
const char* HttpResponse::data() const {
return data_.data();
}
size_t HttpResponse::length() const {
return data_.length();
}
} // namespace webdriver